[转]sklearn中MinMaxScaler/StandardScaler的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转]sklearn中MinMaxScaler/StandardScaler的区别相关的知识,希望对你有一定的参考价值。

参考技术A 原文链接:https://www.zhihu.com/question/20467170/answer/839255695,感谢作者

通常来说,它们都是指特征工程中的特征缩放过程,由于中文翻译的原因,网上对它们的解释也是五花八门,但其实我们不考虑它们的名字,直接看它们的作用和操作方法,可能会更容易理解。

使用特征缩放的作用是:

使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。

加快学习算法的收敛速度。

参考sklearn的官方文档的数据预处理章节,

5.3. Preprocessing data​scikit-learn.org

缩放过程可以分为以下几种:

缩放到均值为0,方差为1( Standardization—— StandardScaler())

缩放到0和1之间( Standardization—— MinMaxScaler())

缩放到-1和1之间( Standardization—— MaxAbsScaler())

缩放到0和1之间,保留原始数据的分布( Normalization—— Normalizer())

1就是常说的z-score归一化,2是min-max归一化。

举个例子来看看它们之间的区别,假设一个数据集包括「身高」和「体重」两个特征,它们都满足正态分布,画出原始数据图像为:

使用1.StandardScaler()缩放,结果为:

使用2.MinMaxScaler()缩放,结果为:

使用3.MaxAbsScaler()缩放,结果为:

使用4.Normalizer()缩放,结果为:

按需选择。

附:

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn import preprocessing

def plot(data, title):

    sns.set_style('dark')

    f, ax = plt.subplots()

    ax.set(ylabel='frequency')

    ax.set(xlabel='height(blue) / weight(green)')

    ax.set(title=title)

    sns.distplot(data[:, 0:1], color='blue')

    sns.distplot(data[:, 1:2], color='green')

    plt.savefig(title + '.png')

    plt.show()

np.random.seed(42)

height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)

weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)

plot(original_data, 'Original')

standard_scaler_data = preprocessing.StandardScaler().fit_transform(original_data)

plot(standard_scaler_data, 'StandardScaler')

min_max_scaler_data = preprocessing.MinMaxScaler().fit_transform(original_data)

plot(min_max_scaler_data, 'MinMaxScaler')

max_abs_scaler_data = preprocessing.MaxAbsScaler().fit_transform(original_data)

plot(max_abs_scaler_data, 'MaxAbsScaler')

normalizer_data = preprocessing.Normalizer().fit_transform(original_data)

plot(normalizer_data, 'Normalizer')

robust_scaler_data = preprocessing.RobustScaler().fit_transform(original_data)

plot(robust_scaler_data, 'RobustScaler')

以上是关于[转]sklearn中MinMaxScaler/StandardScaler的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何将 sklearn MinMaxScaler() 的值转换回实际值?

Python,sklearn:使用 MinMaxScaler 和 SVC 的管道操作顺序

为啥 sklearn MinMaxScaler() 返回超出范围的值而不是错误?

使用Sklearn的MinMaxScaler做最简单的归一化

如何在旧的 MinMaxScaler 上重新调整新数据库? [复制]

sklearn 中的 MinMax Scaler 不会标准化 0 到 1 之间的列值