机器学习之归一化

作者: 就是杨宗 | 来源:发表于2017-08-07 23:44 被阅读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

    相关文章

      网友评论

      • 谢小胖_2ddc:您好,数据的归一化和数据的标准化不是一样的吧?虽然二者都是为了消除量纲的影响
        就是杨宗:@谢小胖_2ddc 有道理有道理😂,那看来我还是没完全理解到位。
        谢小胖_2ddc:@就是杨宗 标准化不是Standardization吗?归一化相当于区间缩放,而标准化应该表示的是原始值与均值之间差多少个标准差,是一个相对值,所以也有去除量纲的功效。个人理解哈
        就是杨宗:@谢小胖_2ddc 应该是类似的意思吧,normalization是标准化的意思,但也见过把它翻译成归一化。

      本文标题:机器学习之归一化

      本文链接:https://www.haomeiwen.com/subject/kvezlxtx.html