机器学习中常见的标准化和归一化方法

特征工程是机器学习中非常重要的一个环节,业内有句话是这么说的 “ 数据决定了机器学习的上限,而算法和模型是逼近这个上限 ”。可见数据是机器学习的关键所在,而特征工程就是处理数据,因此特征工程的做的好坏往往直接影响了最终的结果。而特征工程里非常重要的两个步骤就是对特征的归一化和标准化。

一、归一化、标准化、中心化的概念

1、归一化

将数据映射到 [0,1] 或者 [-1, 1] 区间,一来可以方便计算,二来可以消除不同特征量纲的影响,无量纲化可以直接纯数值计算

2、标准化

标准化是将数据映射为均值是0,标准差是1的正态分布数据,该方法常用于SVM,LR,神经网络等模型中。

3、中心化

中心化相比于标准化更简单一些,只将数据映射到均值为0的新数据中,无需满足标准差为1的条件。

归一化和标准化的区别

  • 不同
    (1)、首先从两者的定义上可以看出不一样;
    (2)、其次归一化后的值只受原样本数据里的极值影响,而标准化后映射的值受原数据里每一个样本的影响。
    (3)、标准化是对特征矩阵里的列数据做处理,通过 z-score 变换转为标准正态分布数据,和整体样本分布相关。

  • 相同
    (1)、都是消除了量纲的影响
    (2)、都是一种线性变换,都是对向量 X X 按照比例压缩再进行平移

二、为什么要归一化/标准化

为什么要做归一化和标准化,其实前面的内容也提到了一些,不重复赘述。其实归一化和标准化本质上是一种线性变换,它并没有改变数据的数值顺序,因此不会使数据 “失效”。总的来说,归一化/标准化的原因可以归结如下几点:
(1)、消除量纲的影响
例如身高体重都是影响某种疾病的可能因素,但不能直接对这俩因素加减,通过分别归一化后转为无量纲的数值,即可进行数值运算。

(2)、避免数值问题
在训练模型参数时,如果某个特征的值特别大,那边这个值对模型的影响可能就比较大,训练出的模型参数会与实际情况有所偏差,归一化/标准化后,数值会限定在某一个范围内,避免了极值的影响。

(3)、某些模型的要求

  • 在使用梯度下降法求解参数的时候,如果特征进行了归一化/标准化,那么在迭代求解的时候会加快收敛速度

在这里插入图片描述

  • 一些分类器需要计算样本之间的距离(如欧氏距离),例如 KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

三、常见的归一化/标准化方法

3.1 归一化方法

3.1.1 Min-Max Normalization
x = x x min x max x min x' = \frac{x-x_{\min}}{x_{\max}-x_{\min}}

3.1.2 平均归一化
x = x μ x max x min x' = \frac{x-\mu}{x_{\max}-x_{\min}}

这两种归一化方法都有一个问题,就是当有新的数据加入时,极大极小值可能发生变化。

3.1.3 非线性归一化

  • 对数函数转换: y = log ( x ) y=\log(x)
  • 反正切函数转换: y = a t a n ( x ) 2 / π y=atan(x)*2/\pi

这种方法通常用于数据分化较大的场景,有些数值很大,有些则很小,利用一些数学函数进行映射。

3.2 标准化方法

3.2.1 Z-score规范化
x = x μ σ x'=\frac{x-\mu}{\sigma}

3.3 中心化方法

x = x μ x' = x-\mu

四、使用场景

那究竟什么时候用归一化?什么时候用标准化?

  • 如果对输出结果范围有要求,用归一化。
  • 如果数据较为稳定,不存在极端的最大最小值,用归一化。
  • 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。

参考资料:
[1]. https://www.jianshu.com/p/95a8f035c86c
[2]. https://www.zhihu.com/question/20455227

猜你喜欢

转载自blog.csdn.net/zuolixiangfisher/article/details/88649185