机器学习之归一化
这篇关于归一化的文章是最近学习的一个总结,放在简书上,方便日后查阅。
一、前言
此篇博文首先说明了什么是归一化,接着介绍了两种常用的归一化方法,然后说明了为什么需要归一化,这样做有什么好处,最后给出一个例子。
二、归一化是什么
数据归一化(标准化)是机器学习/数据挖掘的一项基础工作,是数据预处理的重要一步。样本各个特征往往具有不同的分布范围,通过归一化将各个维度的特征值映射到相同区间,使得各特征值具有相同量纲,处于同一数量级。
三、有哪些归一化的方法[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