• 归一化与标准化的区别



    一、公式

    1. 归一化
      X ′ = x − m i n m a x − m i n X' = { x-min \above{1pt} max-min} X=maxminxmin
      X ′ ′ = X ′ ∗ ( m a − m i ) + m i X'' = X' * (ma-mi) + mi X′′=X(mami)+mi

    2. 标准化
      X ′ = x − m e a n s t d X' = { x-mean \above{1pt} std} X=stdxmean

    ps:

    • max:特征最大值
    • min:特征最小值
    • ma:特征归一化后的最大值
    • mi:特征归一化后的最小值
    • mean:特征均值
    • std:特征标准差

    二、代码

    1. 归一化
    from sklearn.preprocessing import MinMaxScaler
    import pandas as pd
    
    
    if __name__ == '__main__':
    
        # 初始化数据
        columns = ['点赞', '投币', '收藏']
        data = [
            [1, 5, 12],
            [13, 2, 5],
            [9, 9, 6],
            [2, 5, 0]
        ]
        data = pd.DataFrame(data=data, columns=columns)
        print(data)
        #    点赞  投币  收藏
        # 0   1   5  12
        # 1  13   2   5
        # 2   9   9   6
        # 3   2   5   0
    
        # 定义缩放范围
        min_scaler, max_scaler = 0, 1
        # 初始化缩放器
        scaler = MinMaxScaler(feature_range=(min_scaler, max_scaler))
        # 执行归一化
        data_minmax = scaler.fit_transform(data[columns])
        print(data_minmax)
        # [[0.         0.42857143 1.        ]
        #  [1.         0.         0.41666667]
        #  [0.66666667 1.         0.5       ]
        #  [0.08333333 0.42857143 0.        ]]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    1. 标准化
    from sklearn.preprocessing import StandardScaler
    import pandas as pd
    
    
    if __name__ == '__main__':
    
        # 初始化数据
        columns = ['点赞', '投币', '收藏']
        data = [
            [1, 5, 12],
            [13, 2, 5],
            [9, 9, 6],
            [2, 5, 0]
        ]
        data = pd.DataFrame(data=data, columns=columns)
        print(data)
        #    点赞  投币  收藏
        # 0   1   5  12
        # 1  13   2   5
        # 2   9   9   6
        # 3   2   5   0
    
        scaler = StandardScaler(with_mean=0, with_std=1)
        # 执行标准化【均值为0标准差为1】
        data_standard = scaler.fit_transform(data[columns])
        print(data_standard )
        # [[-1.05662467 -0.10050378  1.46552595]
        #  [ 1.35851743 -1.30654916 -0.17586311]
        #  [ 0.55347007  1.50755672  0.05862104]
        #  [-0.85536283 -0.10050378 -1.34828388]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    三、区别

    归一化与标准化都是对数据的特征进行缩放,二者的区别是:

    1. 标准化受异常样本的影响小
      样本中如果出现异常值的话,该值可能会非常大或非常小,归一化的分母是最大值与最小值的差,这很可能会导致正常样本的值都挤在一个跟小的范围内,从而影响预测结果,而标准化的分母是样本标准差,受异常点的影响较小。
    2. 符合统计学假设
      自然界中的数值特征多是符合正态分布的,标准化基于这个隐含假设,将这个正态分布调整为均值为0,方差为1的标准正态分布。

    四、结论

    在需要进行特征缩放的数据集上 尽量采用标准化 而不是归一化去解决问题(另外还有一点需要特别注意,要把训练集和测试集分开后再分别标准化,否则会将测试集的信息引入到训练集中从而影响训练结果)


  • 相关阅读:
    安装python中tensorflow和keras==2.2.0的路程
    LINQ 查询
    新房装修,自带的线路有必更要换吗
    【C/C++ API】C++内存分配和释放函数分析
    云计算模式的区域LIS系统源码,基于ASP.NET+JQuery、EasyUI+MVC技术架构开发
    tiup dm template
    牛客多校2 - Link with Game Glitch(spfa求正环,套汇,二分答案)
    探索Django路由规则(路由匹配、路由命名空间、HTML中的跳转与Django集成、路由传参以及后端重定向)
    说一说HTTP1.0、1.1、2.0版本区别和优化
    玩转nginx的配置文件2
  • 原文地址:https://blog.csdn.net/weixin_43721000/article/details/133774349