美文网首页
[转]sklearn中MinMaxScaler/Standard

[转]sklearn中MinMaxScaler/Standard

作者: qtey | 来源:发表于2019-10-19 21:54 被阅读0次

    原文链接: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/Standard

          本文链接:https://www.haomeiwen.com/subject/vznnmctx.html