归一化和标准化

特征缩放是数据要做的最重要的转换之一。除了个别情况,当输入的数值属性量度不同,不同的特征指标有的不一样的量度和单位,这样就会影响到数据分析的结果,以至于机器学习算法的性能都不会好,此时就需要对数据进行归一化或标准化的处理。

概念

归一化:值被转变、重新缩放,把数据变为(0,1)之间的小数,把有量纲表达式变成无量纲表达式。

标准化:将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。例如:首先减去平均值(所以标准化值的平均值总是 0),然后除以方差,使得到的分布具有单位方差。就服从均值为0,方差为1的分布,也就是标准高斯分布

作用

在实际应用中,由于不同特征的数据往往具有不同的指标,例如身高与体重,它们就具有不同的量纲长度和单位,此时就会影响数据分析的结果和模型的性能。此时我们可以将其进行标准化处理,使得这些特征的指标能够服从一样的分布,此时即能够去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较。

经过标准化的数据是无量纲的纯数值,对其进行归一化把数据变为(0,1)之间的小数。

如右图对两个特征进行了归一化后,对应的等高线就会变圆

在梯度下降进行求解时能较快的收敛,而不像左图需要走许多的“弯路”

而且能够给模型有更高的精度

深度学习归一化标准化 数据归一化和标准化_深度学习归一化标准化

实现代码

归一化、标准化

[

  • 归一化:将数据缩放到区间[0,1]
    深度学习归一化标准化 数据归一化和标准化_深度学习归一化标准化_02
from sklearn import preprocessing
import numpy as np
x = np.array([[10,2,3],
              [4,5,6],
              [7,8,9]])
##对每一列进行归一化
min_max_scaler = preprocessing.MinMaxScaler()
x_minmax = min_max_scaler.fit_transform(x)
print(x_minmax)
#[[1.  0.  0. ]
# [0.  0.5 0.5]
#[0.5 1.  1. ]]
  • 标准化:去除数据的单位限制,将其转化为无量纲的纯数值,通过对原始数据进行变换把数据变换到均值为0,方差为1范围内。
    深度学习归一化标准化 数据归一化和标准化_算法_03
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
data = std.fit_transform([[1., -1., 3.],
                          [2., 4., 2.],
                          [4., 6., -1.]])
print(data)
#[[-1.06904497 -1.35873244  0.98058068]
# [-0.26726124  0.33968311  0.39223227]
# [ 1.33630621  1.01904933 -1.37281295]]