一、 背景
1) 问题
在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果:
1. 特征个数越多,分析特征、训练模型所需的时间就越长,模型也会越复杂。
2. 特征个数越多,容易引起“维度灾难”,其推广能力会下降。
3. 特征个数越多,容易导致机器学习中经常出现的特征稀疏的问题,导致模型效果下降。
4. 对于模型来说,可能会导致不适定的情况,即是解出的参数会因为样本的微小变化而出现大的波动。
特征选择,能剔除不相关、冗余、没有差异刻画能力的特征,从而达到减少特征个数、减少训练或者运行时间、提高模型精确度的作用。
2) 如何做特征选择
特征选择,即是指从全部特征中选取一个特征子集,使得使构造出来的模型效果更好,推广能力更强。如何做特征选择呢,如果要从全部特征中选择一个最优的子集,使得其在一定的评价标准下,在当前训练和测试数据上表现最好。
从这个层面上理解,特征选择可以看作三个问题:
1. 从原始特征集中选出固定数目的特征,使得分类器的错误率最小这是一个无约束的组合优化问题;
2. 对于给定的允许错误率,求维数最小的特征子集,这是一种有约束的最优化问题;
3. 在错误率和特征子集的维数之间进行折中。
上述3个问题都是一个NP难问题,当特征维度较小时,实现起来可行,但是当维度较大时,实现起来的复杂度很大,所以实际应用中很难实用。上述三种特征选择都属十NP难的问题。由于求最优解的计算量太大,需要在一定的时间限制下寻找能得到较好次优解的算法。以下介绍对次优解的求解过程。
二、 特征选择的一般过程
特征选择的一般过程可用图1表示。首先从特征全集中产生出一个特征子集,然后用评价函数对该特征子集进行评价,评价的结果与停止准则进行比较,若满足停止准则就停止,否则就继续产生下一组特征子集,继续进行特征选择。选出来的特征子集一般还要验证其有效性。
综上所述,特征选择过程一般包括:特征子集产生过程,评价函数,停止准则,验证过程,这4个部分。
特征子集产生过程( Generation Procedure )
采取一定的子集选取办法,为评价函数提供特征子集。根据搜索过程的方法的不同,可以将特征选择分为穷举、启发式、随机几种方法。
以上几种方法不改变特征的原始属性,而有些方法通过对特征进行空间变换,去除相关性。比如PCA、傅立叶变换、小波变换等.
评价函数( EvaluationFunction )
评价函数是评价一个特征子集好坏程度的一个准则。评价函数的设计在不同的应用场景下会不同,比如有的会根据其分布是否均匀判断,或者看对最终模型的效果进行判断。每种评价函数各有优劣,所以需要根据实际情况进行选择。根据不同的评价准则,可以分为:过滤器模型、封装器模型以及混合模型。过滤器模型是将特征选择作为一个预处理过程,利用数据的内在特性对选取的特征子集进行评价,独立于学习算法。而封装器模型则将后续学习算法的结果作为特征评价准则的一部分根据评价函数的不同(与采用的分类方法是否关联),可以将特征选择分为独立性准则、关联性度量。
筛选器通过分析特征子集内部的特点来衡量其好坏。筛选器一般用作预处理,与分类器的选择无关。筛选器的原理如下图1:
图1. Filter原理(RicardoGutierrez-Osuna 2008 )
封装器实质上是一个分类器,封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准。封装器的原理如图2所示。