特征选择

转载 2011年11月25日 15:18:05

一.什么是特征选择(Feature Selection )

 

特征选择也叫特征子集选择 ( FSS , Feature Subset Selection ) 。是指从已有的M个特征(Feature)中选择N个特征使得系统的特定指标最优化。

需要区分特征选择与特征提取。特征提取 ( Feature extraction )是指利用已有的特征计算出一个抽象程度更高的特征集,也指计算得到某个特征的算法。

特征提取与特征选择都能降低特征集的维度。

       评价函数 ( Objective Function ) ,用于评价一个特征子集的好坏的指标 。这里用符号J ( Y )来表示评价函数,其中Y是一个特征集,J( Y )越大表示特征集Y越好。

       评价函数根据其实现原理又分为2类,所谓的Filter和Wrapper 。

       Filter(筛选器) : 通过分析特征子集内部的信息来衡量特征子集的好坏,比如特征间相互依赖的程度等 。Filter实质上属于一种无导师学习算法。

       Wrapper(封装器) : 这类评价函数是一个分类器,采用特定特征子集对样本集进行分类,根据分类的结果来衡量该特征子集的好坏。Wrapper实质上是一种有导师学习算法。

 

 

二.为什么要进行特征选择? 

获取某些特征所需的计算量可能很大,因此倾向于选择较小的特征集 特征间的相关性,比如特征A完全依赖于特征B,如果我们已经将特征B选入特征集,那么特征A是否还有必要选入特征集?我认为是不必的。 特征集越大,分类器就越复杂,其后果就是推广能力(generalization capability)下降。选择较小的特征集会降低复杂度,可能会提高系统的推广能力。Less is More !
 

三.特征选择算法分类 

       精确的解决特征子集选择问题是一个指数级的问题。常见特征选择算法可以归为下面3类:

第一类:指数算法 ( Exponential algorithms )

       这类算法对特征空间进行穷举搜索(当然也会采用剪枝等优化),搜索出来的特征集对于样本集是最优的。这类算法的时间复杂度是指数级的。

第二类:序列算法 ( Sequential algorithms )

       这类算法实际上是一种贪心算法,算法时间复杂度较低,但是可能会陷入局部最优值,不一定能找到全局最优解。

第三类:随机算法 ( Randomized algorithms )

       随机算法属于一种近似算法,能找出问题的近似最优结。随机算法在近似求解NP完全问题上显示出突出的优势,可尝试用在特征选择上。

 

 

四.指数算法 

1. 穷举搜索( Exhaustive Search )  

算法描述:穷举所有满足条件的特征子集,从中选择最优。若不限定选取特征的个数,则特征子集有2^M个。

算法评价:该算法理论上可以找出最优特征子集,但其复杂度是指数级的,而实际上使用的特征数一般比较多,因而通常是不可取的。

 

2. 分支限界搜索( Branch and Bound )

       在穷举基础上加上了分支限界,例如可以剪掉不可能搜索出比当前已找到的最优解更优的解的分支。

       使用分支限界进行特征选择需要先引入一个单调性假设(monotonicity assumption):J(Y) < J(Y+x),即任何特征集的都优于其任何的子集。这样才能剪枝!看到这里读者们可能会嚷嚷了:如果这个假设成立,那直接选择全部特征就得了,还分支限界个屁啊。的确,这个假设本身就有问题,特征过多反而会因此所谓“维度灾难”( curse of dimensionality ) 。

 

3. 定向搜索(Beam Search )

       算法描述:选择N个得分最高的特征作为特征子集,将其加入一个限制最大长度的优先队列,每次从队列中取出得分最高的子集,然后穷举向该子集加入1个特征后产生的所有特征集,将这些特征集加入队列。若不限制队列的长度,这个算法就变成了最佳优先搜索( best-first search ) 。

 

 

五.序列算法 

 

1. 朴素序列特征选择 ( Naïve Sequential Feature Selection )

       算法描述:将M个特征逐个送入评价函数,选择得分最高的N个特征组成特征子集。

       算法评价:简单,但没有考虑特征间的相关性,因此通常性能不好。例如,有{1,2,3,4,5}这五类样本,一共有A,B,C三个特征,现要从中选出2个特征来区分这5类。特征A能将其分为 {1},{2},{3},{4,5}这4类,特征B能将其分为{1},{2,3},{4,5}这3类,特征C只能将其分为{1,2,3,4},{5} 这2类。那么显然最优特征是A,然后是B,最后是C,朴素序列特征选择算法会选择特征A和B,但是特征A和B并不能区分4和5类。 其实最优选择应该是A和C,只有特征A和C能将5类区分开来。

 

2. 序列前向选择( SFS , Sequential Forward Selection )

       算法描述:每次选择一个特征x加入特征子集Y,使得特征函数J( Y+x )最大。简单说就是,每次都选择一个使得特征函数的取值达到最优的特征加入,其实就是一种简单的贪心算法。“前向”的意思就是这个算法只能加入特征而不能去除特征。

       算法评价:缺点是只能加入不能去除,例如:特征A完全依赖于特征B与C,可以认为如果加入了特征B与C则A就是多余的。假设序列前向选择算法首先将A加入特征集,然后又将B与C加入,那么特征子集中就包含了多余的特征A。

 

3. 序列后向选择( SBS , Sequential Backward Selection )

       算法描述:首先将全部特征加入特征集合Y,然后每次从特征集Y中去除一个特征x,使得J(Y-x)最优。“后向”的意思就是特征只能去除而不能加入。

       算法评价:序列后向选择与序列前向选择正好相反,它的缺点是特征只能去除不能加入。

 

4. 增L去R选择算法 ( LRS , Plus-L Minus-RSelection )

算法描述:该算法有两种形式。

当L>R ,算法从空集开始,每轮先加入L个特征,然后从中去除R个特征,使得J(Y)最大。

当L<R ,算法从全集开始,每轮先去除R个特征,然后加入L个特征,使得J(Y)最大。

算法评价:增L去R选择算法结合了序列前向选择与序列后向选择思想, L与R的选择是算法的关键。

 

5. 双向搜索( BDS , Bidirectional Search )

       算法描述:使用序列前向选择(SFS)与序列后向选择(SBS)分别从两端开始搜索,两者搜索到一个相同的特征子集Y才停止搜索。

       双向搜索的出发点是O(2*N^(k/2)) < O(N^k),如下图所示,O点代表搜索起点,A点代表搜索目标。灰色的圆代表单向搜索可能的搜索范围,绿色的2个圆表示某次双向搜索的搜索范围,容易证明绿色的面积必定要比灰色的要小。

 



为了确保序列前向选择与序列后向选择会搜索到相同的子集,需要确保:

       (1) 被SFS选中的特征SBS就不能去除

       (2) 被SBS去除的特征SFS就不能选择

算法评价:BDS结合了SFS与SBS,其时间复杂度比SFS与SBS小,但是兼有SFS与SBS的缺点。

 

6. 序列浮动选择( Sequential Floating Selection )

       算法描述:序列浮动选择由增L去R选择算法发展而来,该算法与增L去R选择算法的不同之处在于L与R不是固定的,而是“浮动”的,也就是变化的。

序列浮动选择同样有以下两种变种。

(1) 序列浮动前向选择( SFFS , Sequential Floating Forward Selection )

算法描述:从空集开始,每轮在未加入的特征中选择一个集合x,使得J(Y+x)达到最优,将x加入Y,然后在已选择特征集中选择集合z,使得J(Y-z)达到最优,然后再Y中剔除z。

(2)序列浮动后向选择( SFBS , Sequential Floating Backward Selection )

算法描述:与SFFS类似,不同之处在于SFBS是从全集开始,每轮先去除特征,然后加入特征。

 

 

六.随机算法 

 

1. 随机产生序列选择算法(RGSS, Random Generation plus Sequential Selection)

       算法描述:首先随机产生一个特征子集,然后在该子集上执行SFS与SBS算法。

       算法评价:作为SFS与SBS的补充,用于跳出局部最优值。

 

2. 模拟退火算法( SA, Simulated Annealing )

       模拟退火可以参考这篇文章:模拟退火算法入门

 

3. 遗传算法( GA,  Genetic Algorithms )

       遗传算法可以参考这篇文章:遗传算法入门

 

特征选择的一般步骤

很多时候需要降低特征的数量,一方面是为了jiang'di
  • u010198460
  • u010198460
  • 2014年07月24日 16:20
  • 969

特征选择方法学习笔记

一直以来,笔者在实际工作中,对于特征变量的选取,往往是基于业务经验,根据一定的指标口径加工出一个个指标后,即投入到建模过程。而这些指标的好坏、计算口径是否恰当,较少有进行科学地分析与深入思考。与此同时...
  • a_step_further
  • a_step_further
  • 2016年04月04日 21:43
  • 5874

机器学习--特征选择

本文转自:  http://blog.csdn.net/linkin1005/article/details/43018827 特征选择是一种及其重要的数据预处理方法。假设你需要处理一个监督...
  • Sunshine_in_Moon
  • Sunshine_in_Moon
  • 2015年06月08日 16:54
  • 547

(7)文本挖掘(四)——特征选择

特征选择指的是按照一定的规则从原来的特征集合中选择出一小部分最为有效的特征。通过特征选择,一些和任务无关或是冗余的特征被删除,从而提高数据处理的效率。 文本数据的特征选择研究的重点就是用来衡量单词重...
  • Fighting_No1
  • Fighting_No1
  • 2016年03月29日 10:06
  • 3348

一些常见的特征选择方法

现实中产生的特征维度可能很多,特征质量参差不齐,不仅会增加训练过程的时间,也可能会降低模型质量。因此,提取出最具代表性的一部分特征来参与训练就很重要了。 通常有特征抽取和特征选择两种方法。这里分别介...
  • a345017062
  • a345017062
  • 2016年09月20日 18:10
  • 3139

特征选择和特征抽取(学习小结)

本篇博客的目的不是深刻的讲解特征提取和特征选择的方法,而是区分清楚他们之间的关系和区别,让大家对特征抽取 特征选择 PCA LDA有个概念框架上的了解,为大家的下一步的深入理解打好基础。   如果我的...
  • qq_26562641
  • qq_26562641
  • 2016年01月06日 11:11
  • 999

机器学习中特征降维和特征选择的区别

在用machine learning是,为了tia
  • computerme
  • computerme
  • 2014年09月09日 16:56
  • 4087

转:xgboost特征选择

Xgboost在各大数据挖掘比赛中是一个大杀器,往往可以取得比其他各种机器学习算法更好的效果。数据预处理,特征工程,调参对Xgboost的效果有着非常重要的影响。这里介绍一下运用xgboost的特征选...
  • xuxiatian
  • xuxiatian
  • 2017年11月15日 16:48
  • 250

【Python学习系列十九】基于scikit-learn库进行特征选择

场景:特征选择在模型训练前是非常有意义的,实际上就是先期对特征相关性进行分析。 参考:http://blog.csdn.net/fjssharpsword/article/details/73550...
  • fjssharpsword
  • fjssharpsword
  • 2017年06月29日 17:20
  • 1577

基于伪label的一类无监督特征选择方法

本文介绍无监督特征选择方法的一种解决思路。
  • blackring007
  • blackring007
  • 2016年10月24日 19:00
  • 630
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:特征选择
举报原因:
原因补充:

(最多只允许输入30个字)