scikit_learn学习笔记八——scikit_learn标准化/归一化操作

数据标准化(Standardization)与 归一化(Normalization)

在机器学习领域中,不同评价指标(即特征向量中的不同特征就是所述的不同评价指标)往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

一般涉及到梯度下降和距离的计算需要进行标准化或正则化。

  • 数据的标准化(Standardization)是将数据按比例缩放,使之落入一个小的特定区间。因而标准化的数据可正可负。

  • 归一化(Normalization)其实就是标准化的一种方式,只不过归一化是将数据映射到了[0,1]这个区间中。

归一化的目的就是使得预处理的数据被限定在一定的范围内(比如[0,1]或者[-1,1]),从而消除奇异样本数据导致的不良影响。

线性归一化(min-max normalization)

从公式中可看出,这种归一化适合数值比较集中的情况,缺陷就是如果max和min不稳定,很容易使得归一化结果不稳定,使得后续的效果不稳定。

# 使用scikit-learn函数
min_max_scaler = preprocessing.MinMaxScaler()
feature_scaled = min_max_scaler.fit_transform(feature)
# 使用numpy自定义函数
def min_max_norm(x):
    x = np.array(x)
    x_norm = (x-np.min(x))/(np.max(x)-np.min(x))
    return x_norm

标准差标准化 Z-Score Standardization

, μ为总体平均值,X-μ为离均差,σ表示总体标准偏差

Z-Score即零-均值标准化, 即先求出全部数据的均值和方差,再进行计算。数据符合标准正态分布,均值为0,标准差为1。

sklearn.preprocessing.scale(X, axis=0, with_mean=True,with_std=True,copy=True)
"""
参数解释:
X:数组或者矩阵
axis:int类型,初始值为0,axis用来计算均值 means 和标准方差 standard deviations. 如果是0,则单独的标准化每个特征(列),如果是1,则标准化每个观测样本(行)。
with_mean: boolean类型,默认为True,表示将数据均值规范到0
with_std: boolean类型,默认为True,表示将数据方差规范到1
"""
scikit_learn学习笔记八——scikit_learn标准化/归一化操作_第1张图片
StandardScaler.png
# 使用scikit-learn函数
standar_scaler = preprocessing.StandardScaler()
feature_scaled = standar_scaler.fit_transform(feature)
# 使用numpy自定义函数
def min_max_norm(x):
    x = np.array(x)
    x_norm = (x-np.mean(x))/np.std(x)
    return x_norm

非线性归一化

在数据分化较大的场景,有些数值大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数、反正切等。需要根据数据分布的情况,决定非线性函数的曲线。

log函数:

反正切函数:

归一化处理的好处

  1. 加快梯度下降的求解速度,即提升模型的收敛速度


    scikit_learn学习笔记八——scikit_learn标准化/归一化操作_第2张图片
    image.png

    如上图所示,两个特征区间相差非常大时,如左图中的x1[0-2000]和x2[1-5],形成的等高线偏椭圆,迭代时很有可能走“之字型”路线(垂直长轴),从而导致需要迭代很多次才能收敛。
    而右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。

  2. 有可能提高模型的精度
    一些分类器需要计算样本之间的距离,如果一个特征的值域范围非常大,那么距离计算就会主要取决于这个特征,有时就会偏离实际情况。

正则化(Regularization)

用一组与原不适定问题相“邻近”的适定问题的解,去逼近原问题的解,这种方法称为正则化方法。

正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。

scikit_learn学习笔记八——scikit_learn标准化/归一化操作_第3张图片
image.png

【总结】
归一化是为了消除不同数据之间的量纲,方便数据比较和共同处理,比如在神经网络中,归一化可以加快训练网络的收敛性;标准化是为了方便数据的下一步处理,而进行的数据缩放等变换,并不是为了方便与其他数据一同处理或比较,比如数据经过零-均值标准化后,更利于使用标准正态分布的性质,进行处理;正则化而是利用先验知识,在处理过程中引入正则化因子(regulator),增加引导约束的作用,比如在逻辑回归中使用正则化,可有效降低过拟合的现象。

你可能感兴趣的:(scikit_learn学习笔记八——scikit_learn标准化/归一化操作)