定义:Feature scaling is a method used to standardize the range of independent variables or features of data. In data processing, it is also known as data normalization and is generally performed during the data preprocessing step.(来源于wikipedia)

简单来说,它主要用来把所有特征值范围映射至同样的范围里面如(0,1)、(-1,1)、(-0.5,0.5)等。

Feature scaling (数据规范化) 是数据挖掘或机器学习常用到的步骤,这个步骤有时对算法的效率和准确率都会产生巨大的影响。

对精度的影响:很明显,这个步骤的必要性要依赖于数据特征的特性,如果有>=2特征,并且不同特征间的值变化范围差异大,那就很有必要使用Feature scaling。比如说,在信用卡欺诈检测中,如果我们只使用用户的收入作为学习特征,那就没有必要做这个步骤。但是如果我们同时使用用户的收入和用户年龄两个特征的话,在建模之前采用这个步骤就很有可能能提高检测精度,这是因为用户收入这个特征的取值范围可能为[50000,60000]甚至更大,但用户年龄只可能是[20,100]左右,这时候,假如说我用K最近邻的方法去做检测的话,用户收入这个特征的相似度对检测结果的影响将会大大大于用户年龄的作用,然而事实上,这两个特征对欺诈检测可能有着同等的重要性。因此,假如我们在检测实施前,对着两个特征进行规范化,那我们的检测方法中就能真正地同等对待它们。

对效率的影响:再举一个例子,该例子来源于Ng教授的ML课程,

Feature Scaling-LMLPHP

例子如上图,在该例子中,我们想用线性回归根据房屋的大小和房屋的卧室数量来预测房价,采用的优化方法为batch gradient descent。在建立模型的过程中,如果不对房屋的大小和房屋的卧室数量两个特征规范化,我们的优化问题将会在很skewed的区域中进行(如左图所示),这样会使得batch gradient descent的收敛很慢。而当我们对其进行规范化之后,问题就会转变为偏圆形的空间中优化,这时候,batch gradient descent的收敛速度将会得到大幅度提高。

实践:

常用的Feature scaling方法有如下几种:

xi' = (xi - a) / b;

其中a可以为特征xi的均值,b则可以为xi的最大值、(最大值 - 最小值)、 标准差等。

总结

该步骤的原理和方法都是很简单的,但是如果数据挖掘或机器学习中少了这一步,有时候会对学习效率和准确度产生巨大影响,因此,在学习建模之前,要认真考虑是否进行Feature scaling

问题:

1、online算法怎么把数据规范化。

2、那些算法在什么时候需要feature scaling

参考资源:

http://en.wikipedia.org/wiki/Feature_scaling

https://class.coursera.org/ml/

Is scaling of feature values in LibSVM necessary?

Regularization and feature scaling in online learning?

04-14 18:38