归一化、标准化、中心化

一、概念

归一化:把数据变成 [0,1] 或 [-1,1] 之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。是一种简化计算的方式,将有量纲的表达式,经过变换,化为无量纲的表达式,成为标量,便于不同单位或量级的指标能够进行比较和加权。

标准化:在机器学习中,我们可能要处理不同种类的资料,例如,音讯和图片上的像素值,这些资料可能是高维度的,资料标准化后会使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1,这个方法被广泛的使用在许多机器学习算法中(例如:支持向量机、逻辑回归和类神经网络)。

中心化:平均值为0,对标准差无要求。

二、区别

归一化和标准化的区别:归一化是将样本的特征值转换到同一量纲下把数据映射到 [0,1] 或者 [-1,1] 区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。

标准化和中心化的区别:标准化是原始分数减去平均数然后除以标准差,中心化是原始分数减去平均数。 所以一般流程为先中心化再标准化。

三、方法

1、归一化

(1) Max-Min归一化

x’ = (x - x_min) / (x_max - x_min)
该方法实现对原始数据的等比例缩放

(2)平均归一化

x’ = (x - μ) / (x_max - x_min)
( 1)和(2)有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

(3)非线性归一化

对数函数转换:y = log(x)
反余切函数转换:y = atan(x) * 2 / π
经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。

2、标准化

z-score规范化(标准差标准化 / 零均值标准化):x’ = (x - μ)/σ

3、中心化

x’ = x - μ

四、作用

归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。

归一化和标准化常用于以下几个方面:

1、某些模型求解需要

(1)在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。如下图所示,未归一化/标准化时形成的等高线偏椭圆,迭代时很有可能走“之”字型路线(垂直长轴),从而导致迭代很多次才能收敛。而如右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。
归一化、标准化、中心化_第1张图片
(2)一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

2、无量纲化

,无量纲化是使不同规格的数据转换到同一规格,例如房子数量和收入,因为从业务层知道,这两者的重要性一样,所以把它们全部归一化。 这样训练的时候便不会产生权重偏差。

3、避免数值问题

太大的数会引发数值问题。

五、哪些模型必须归一化/标准化

1、SVM

不同的模型对特征的分布假设是不一样的。比如SVM 用高斯核的时候,所有维度共用一个方差,这不就假设特征分布是圆的么,输入椭圆的就坑了人家,所以简单的归一化都还不够好,来杯白化才有劲。比如用树的时候就是各个维度各算各的切分点,没所谓。

2、KNN

需要度量距离的模型,一般在特征值差距较大时,都会进行归一化/标准化。不然会出现“大数吃小数”。

3、神经网络

4、PCA

参考文章

https://www.jianshu.com/p/95a8f035c86c

你可能感兴趣的:(机器学习,归一化,标准化,机器学习)