归一化方法
归一化方法(Normalization Method)
什么是归一化方法
通过某种算法,把需要的数据经过处理后限制在一定范围内(–来自百度百科)
为什么要进行归一化?
归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。
(1)某些模型求解需要
1)在使用梯度下降的方法求解最优化问题时,归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。如左图所示,未归一化/标准化时形成的等高线偏椭圆,迭代时很有可能走“之”字型路线(垂直长轴),从而导致迭代很多次才能收敛。而如右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。
假设现在要预测房价,自变量为面积,和房间数,因变量为房价。那么可以得到公式
下面两张图中红色轨迹代表寻找最优解的过程,蓝色圆圈代表损失函数的等高线。在左图中可以看到,当数据没有归一化的时候,面积数的范围可以从0~2000,房间数的范围为1~5,其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;右图的过程更为平缓,更容易获得正确的最优解。
因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。
2)一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。
(2)无量纲化
例如房子数量和收入,因为从业务层知道,这两者的重要性一样,但计量单位不同,所以把它们全部归一化。 这是从业务层面上作的处理。
(3)避免数值问题
太大的数会引发数值问题。
归一化方法
1、Min-Max Normalization | 简单缩放 | 离差标准化
对各维特征值分别进行线性变换,使得各维特征值被映射到[0, 1]之间(区间缩放),转换函数如下:
其中min和max分别为某一特征值的最小值和最大值。这种方法适用于数值比较集中的情况,该方法的缺点是当有新的数据加入时,可能需要重新定义min和max。
2、均值归一化
除了函数不一样,其他与Min-Max Normalization相似。
3、非线性归一化
- 对数函数归一化
- 反余切函数归一化
- 经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V,
2)还是log(V, 10)等。
python实现归一化
关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
机器学习中的数据预处理(sklearn preprocessing)
一些问题
整体做归一化相当于各向同性的放缩,做了也没有用。
各维分别做归一化会丢失各维方差这一信息,但各维之间的相关系数可以保留。
如果本来各维的量纲是相同的,最好不要做归一化,以尽可能多地保留信息。
如果本来各维的量纲是不同的,那么直接做PCA没有意义,就需要先对各维分别归一化。
参考文章
https://zhuanlan.zhihu.com/p/27627299
https://www.jianshu.com/p/f9bde6a37d75
https://www.jianshu.com/p/95a8f035c86c
https://www.cnblogs.com/sddai/p/6250094.html
https://www.zhihu.com/question/31186681/answer/50929278