归一化与标准化的区别

文章目录

  • 一、公式
  • 二、代码
  • 三、区别
  • 四、结论


一、公式

  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. 标准化
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

    # 定义缩放范围
    min_scaler, max_scaler = 0, 1
    # 初始化缩放器
    scaler = StandardScaler()
    # 执行标准化【均值为0标准差为1】
    data_minmax = scaler.fit_transform(data[columns])
    print(data_minmax)
    # [[-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. 符合统计学假设
    自然界中的数值特征多是符合正态分布的,标准化基于这个隐含假设,将这个正态分布调整为均值为0,方差为1的标准正态分布。

四、结论

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


你可能感兴趣的:(机器学习,Python,机器学习,人工智能)