首页 > 代码库 > 机器学习 特征工程之特征选择

机器学习 特征工程之特征选择

概念

首先看一下维基百科中关于特征选择的介绍:

在机器学习和统计学中,特征选择 也被称为变量选择、属性选择 或变量子集选择 。它是指:为了构建模型而选择相关特征(即属性、指标)子集的过程。

在机器学习中,每个特征对于目标类别的影响并不相同,所以需要从特征集中挑选出一组最具统计意义的特征子集,把其他无用数据删掉,达到降维的目的。

特征选择的目标是寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化模型,协助理解数据产生的过程。

常用的特征选择方法分为过滤法(Filter)、包装法(Wrapper)和集成法(Embedded)

下面有个清晰的特征工程的思维导图:

技术分享
图片源自(http://www.csuldw.com/2015/10/24/2015-10-24%20feature%20engineering/)

过滤法(Filter)

按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征

方差选择法

使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。默认设置下,它将移除所有方差为0的特征,即那些在所有样本中数值完全相同的特征。

相关系数法

使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。

卡方检验

经典的卡方检验是检验定性自变量对定性因变量的相关性。

互信息法

经典的互信息也是评价定性自变量对定性因变量的相关性的

filter(刷选器)优缺点

上面提到的这种特征子集选择的方法属于filter(刷选器)方法,它主要侧重于单个特征跟目标变量的相关性。优点是计算时间上较高效,对于过拟合问题也具有较高的鲁棒性。缺点就是倾向于选择冗余的特征,因为他们不考虑特征之间的相关性,有可能某一个特征的分类能力很差,但是它和某些其它特征组合起来会得到不错的效果。

包装法(Wrapper)

根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。有逐步回归(Stepwise regression)、向前选择(Forward selection)和向后选择(Backward selection)

递归特征消除法

递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练

wrapper(封装器)优缺点

封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准,经过比较选出最好的特征子集。常用的有逐步回归(Stepwise regression)、向前选择(Forward selection)和向后选择(Backward selection)。它的优点是考虑了特征与特征之间的关联性,缺点是:当观测数据较少时容易过拟合,而当特征数量较多时,计算时间又会增长。

集成法(Embedded)

集成法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。Regularization,或者使用决策树思想,Random Forest和Gradient boosting等

基于惩罚项的特征选择法

使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。

基于树模型的特征选择法

树模型中GBDT也可用来作为基模型进行特征选择

特征选择-有效性分析

对特征的有效性进行分析,得到各个特征的特征权重,根据是否与模型有关可以分为1.与模型相关特征权重,使用所有的特征数据训练出来模型,看在模型中各个特征的权重,由于需要训练出模型,模型相关的权重与此次学习所用的模型比较相关。不同的模型有不同的模型权重衡量方法。例如线性模型中,特征的权重系数等。2.与模型无关特征权重。主要分析特征与label的相关性,这样的分析是与这次学习所使用的模型无关的。与模型无关特征权重分析方法包括(1)交叉熵,(2)Information Gain,(3)Odds ratio,(4)互信息,(5)KL散度等

资料引用

本文是自己在学习过程中,阅读博客整理而来,大部分是直接摘取自他人内容,如有侵权,请告知删除,有些引用内容有所遗漏,没有注明,请告知。

http://www.csuldw.com/2015/10/24/2015-10-24%20feature%20engineering/

https://www.zhihu.com/question/29316149

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    机器学习 特征工程之特征选择