数据比算法重要。数据决定了机器学习的上限,而算法只是去尽可能的逼近这个上限。这里的数据不是指原始数据,而是经过特征工程处理后的精修数据。一个好的预测模型与高效的特征提取息息相关,如果特征工程可以得到许多和类别相关的特征,那么学习过程就变得的很容易了。下面介绍下特征工程前需要进行的必要特征处理。
特征缩放
特征缩放的目的是保证所有的特征数值具有相同的数量级,因为有些情况下,数据中某些特征会具有不同的尺度,比如身高和体重,为了消除这种不同尺度所造成的偏差,需要 进行特征缩放。有以下两种方式:
标准化是原始数据减掉均值再除以标准差,得到新的数据均值为0,方差为1,将所有数据强制拉倒一个尺度上。归一化是根据特征的取值范围按比例转换,让所有的数据落在0-1的范围。虽然实现的方式不同,但实现的效果是相似的。
除了尺度,还需要关注偏度,偏度是用于描述概率分布非对称性的一个指标。如图
偏度的分布图形都是类似的:一侧是瘦高,占据了概率分布的大部分,另一侧是比较长的拖尾。
如果发现数据分布是有偏的,可能是数据中存在异常点。在处理异常点时,首先要判断这些异常点是不是由错误或者失误导致,如果不是则要考虑异常点和正常值源于不同的分布,尤其是在异常点占比比较大时,需要单独处理。
即使数据中没有异常点,数据中依然可能出现有偏分布,其一大特点就是最大值和最小值之间差别很大,一种常见的处理偏度的方法就是取对数变换,也就是对特征值取对数。除了对数,求平方根和求倒数也是常见的处理方法。
异常点和尺度都是针对完整的数据,但还有一些特征没有取值即缺失值。
当缺失值得占比比较小时,最简单的方法就是直接删除,但这在样本集很小的情况下并不是好方法。主动的处理方法是对缺失值作认为的填充,常见的方法有K近邻算法,选取离缺失值最近的k个样本,并以他们对应特征的均值作为填充。但人为赋值会带来不确定性,给模型的性能造成影响。
小结
- 特征缩放可以让特征取值具有相同尺度,方法包括标准化和归一化。
- 异常值会导致数据有偏,对数变化可以去除数据的偏度。
- k近邻和线性回归都可以用来对特征的缺失值进行赋值。