就是杨宗的学习记录@IT·互联网人工智能/模式识别/机器学习精华专题

机器学习之归一化

2017-08-07  本文已影响364人  就是杨宗

这篇关于归一化的文章是最近学习的一个总结,放在简书上,方便日后查阅。

一、前言

此篇博文首先说明了什么是归一化,接着介绍了两种常用的归一化方法,然后说明了为什么需要归一化,这样做有什么好处,最后给出一个例子。

二、归一化是什么

数据归一化(标准化)是机器学习/数据挖掘的一项基础工作,是数据预处理的重要一步。样本各个特征往往具有不同的分布范围,通过归一化将各个维度的特征值映射到相同区间,使得各特征值具有相同量纲,处于同一数量级。

三、有哪些归一化的方法[1]

1、min-max归一化(Min-Max Normalization)

对各维特征值分别进行线性变换,使得各维特征值被映射到[0, 1]之间,转换函数如下:

min-max归一化转换函数[1]

其中max为某一维特征值的最大值,min为某一列特征值的最小值。这种方法有个缺陷,就是当有新样本加入时,max和min可能会变化,需要重新定义(当然,问题不大)。

2、z-score归一化

这种方法用各维的均值和标准差来归一化各维特征值,它的转换函数为:

z-score归一化转换函数[1]

经过处理后,各维特征值符合标准正态分布,即各维特征服从标准正态分布。


四、为什么需要归一化,什么时候需要归一化,有什么好处

这主要看机器学习算法是否具有伸缩不变性[2]。

有些机器学习算法在将样本各个维度特征值进行不均匀伸缩后(例如各维特征值乘以不同系数),训练得到的模型与原来不等价,例如SVM,这样的算法我们说它不具有伸缩不变性。对于这一类算法,除非本来各维特征的分布范围就比较接近,否则必须进行归一化。

现在通过画图的方式直观地说明一下未归一化可能导致的后果[3]。以分类为例,假设有一些样本,样本只有两个特征,X1范围是100000到200000,X2范围是1到2,然后每一个样本都有一个标签,对应着样本所属类别。

现在在样本空间(其实就是平面坐标轴)上画出这些点,显然会发现,这些点几乎处于同一直线上。这个时候很难找到一条划分线将不同类别样本分开,这会导致模型正确率降低,并且X2几乎可以被忽略掉(X2相对于X1而言几乎没有变化,分类结果几乎只由X1决定,而只靠X1是不能将所有样本都分类正确的),仅仅因为所谓量纲的问题。

以下图为例,设纵坐标为X2,将X2压缩,使得样本点几乎处于同一直线上,再来思考X2为什么会被忽略掉。

分类示意图

这里以预测房价的例子来说明为什么归一化可以加快模型训练速度[3]。假设有一些样本,样本只有两个特征,分别是面积(设为x1,x1的范围为0~1000)和房间数(设为x2,x2的范围为0~10),然后每一个样本都有一个标签,对应着房价。

显然这是一个线性回归问题,可以得到线性模型:

线性模型

其中y是房价,theta1表示面积变量前的系数,theta2表示房间数变量前的系数。

大部分机器学习都是一个最优化问题,所谓寻找模型最优解就是,调整模型参数使得损失函数最小,此时的模型参数即为最优解。最优化一般采用梯度下降,首先画出损失函数的等高线,横纵坐标轴分别为theta1和theta2。

1、未归一化时

此时样本可能为((面积: 600,房间数: 3), ycorrect),则损失函数为:

未归一化的损失函数[3]

于是损失函数的等高线类似椭圆形状,最优解的寻优过程如下图所示,可以发现梯度下降方向只要不在椭圆对称轴上,这一步损失函数几乎就不会减小,这会导致震荡,使得收敛很慢,甚至不收敛。

未归一化的梯度下降[3]

2、归一化后

此时样本可能为((面积: 0.5,房间数: 0.55), XXXX),则损失函数为:

归一化的损失函数[3]

此时损失函数等高线类似圆形形状,最优解的寻优过程如下图所示,可以发现归一化后,寻优过程变得平滑,收敛速度得到提高,加快模型训练速度。

归一化的梯度下降[3]

另外,各维分别做归一化会丢失各维方差这一信息,但各维之间的相关系数可以保留[4]。

如果本来各维的量纲是相同的,最好不要做归一化,以尽可能多地保留信息。

如果本来各维的量纲是不同的,就需要先对各维分别归一化。

五、小结

归一化是机器学习中必不可少的一步,只要样本各维量纲不一致,我们就需要对数据集进行归一化,不管训练什么机器学习模型,最好都先对数据集进行归一化,这是因为,归一化不仅可以提高模型正确率(针对不具有伸缩不变性的机器学习算法),还可以加快模型收敛,提升训练速度。


六、举个例子[5]

例如用SVM做手写数字识别,如果直接用未归一化的原始数据集训练模型,则预测时所有输出都为同一类别,全部对应数字1,正确率也只有10%左右。

可以用libsvm中提供的归一化工具——svm-scale,将符合SVM格式要求的原始数据集归一化到指定的范围内,具体命令为:

svm-scale –l 0–u 1 train.txt > train-to-one.txt

这可以把原始数据集train.txt归一化到[0, 1],并将结果存入train-to-one.txt。

用归一化后的数据集训练模型并预测,可以发现,准确率和模型训练速度都明显提高。


引用

[1] 博客园. 数据归一化和两种常用的归一化方法[EB/OL]. http://www.cnblogs.com/chaosimple/archive/2013/07/31/3227271.html, 2017-8-6.

[2] 知乎. 在进行数据分析的时候,什么情况下需要对数据进行标准化处理?[EB/OL]. https://www.zhihu.com/question/30038463/answer/50491149, 2017-8-7.

[3] 知乎. 处理数据时不进行归一化会有什么影响?归一化的作用是什么?什么时候需要归一化?有哪些归一化的方法?[EB/OL]. https://www.zhihu.com/question/20455227, 2017-8-7.

[4] 知乎. 数据特征的归一化,是对整个矩阵还是对每一维特征?[EB/OL]. https://www.zhihu.com/question/31186681/answer/50929278, 2017-8-7.

[5] CSDN. libsvm中数据归一化的重要性[EB/OL]. http://blog.csdn.net/jeryjeryjery/article/details/72649320, 2017-8-6.

转载请注明如下内容:

文章来自简书,作者:就是杨宗

原文链接:http://www.jianshu.com/p/f9bde6a37d75

上一篇下一篇

猜你喜欢

热点阅读