数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
数据挖掘
和数据分析
时,数据是所有问题的基础,有时候处理好数据能比使用复杂的算法得到更加意想不到的收益.换言之,好的特征即使使用简单的模型也能取得很好的效果。
1. 特征工程是什么
特征工程的组成如下图描述:
特征处理是特征工程的核心部分,python的sklearn
库提供了较为完整的特征处理方法,包括数据预处理,特征选择,降维等方法。
2. 数据预处理
原始未经处理的数据可能存在以下问题:
- 不属于同一量纲:进行无量纲化
- 信息冗余:删除多余的数据
- 定性特征无法使用:通过哑编码将定性特征转化为定量特征
- 存在缺失值
- 信息利用率低
使用sklearn中的
preproccessing
库来进行数据预处理,可以覆盖以上问题的解决方案
2.1 无量纲化
- 标准化:前提是特征值服从
正态分布
,计算特征的均值和标准差: - 区间放缩法:思路有多种,最常见的是利用两个最值进行放缩:
- 归一化:
3. 特征选择
当数据预处理完成后,需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征: - 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用
- 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑
根据特征选择的形式又可以将特征选择的方法分为3种: - Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征
- Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征
- Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣
3.1 Filter
- 方差选择法:使用方差选择法,需要首先计算各个特征的方差,然后根据阈值选择方差大于阈值的特征
- 相关系数法:使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值
- 卡方检验:卡方检验是检验定性自变量对因变量的相关性。假设自变量N种取值,因变量M种取值。考虑自变量i,因变量j的样本频数的观察值与期望的差距,构造统计量:
互信息法:经典的互信息法也是评价定性自变量对因变量的相关性的。计算公式如下:
3.2 Wrapper
递归特征消除法
:使用一个基模型来进行多轮训练。每轮训练后,消除若干全职系数的特征,再基于新的特征集进行下一轮的训练3.3 Embedded
基于惩罚项的特征选择法
- 基于树模型的特征选择法
4. 降维
当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有
主成分分析法(PCA
)和线性判别分析(LDA)
,线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法