顺承上节,本节,我们来介绍三类特征选择。
作为数据维数约简的重要手段之一,特征选择会从最初的特征集合中按照一定的规则删除冗余以及不重要的特征,从而获得一个最优特征集合的过程。
原始样本有个特征,那么如果使用枚举法寻找最优特征子集的话,其复杂度为,因为由个特征构成子集数为个。
所以,我们需要一定的策略来寻找特征子集,特征子集的流程如下:
- 子集生成:按照一定的搜索策略查找候选特征子集
- 子集评价:构建评价函数评估特征子集的优劣
- 停止准则:设定评估函数的阈值,决定特征选择算法什么时候停止
- 结果验证:在测试集上验证最终所选特征子集的有效性
流程图如下:
image.png
根据于学习算法的关系,特征选择可划分为三类方式:过滤式(Filter)方式,封装式(Wrapper)方法和嵌入式(Embedded)方法。
接下来,我们会介绍这三种特征选择方法。
过滤式特征选择
过滤式特征选择方法的特点是其独立于学习算法,直接由原始的特征集合求得。它数据集进行特张选择,然后再训练学习器,这两个过程是独立的。我们会先对原始特征集进行特征选择,排除冗余无关特征,得到一个过滤后的特征子集,我们会用来训练下游的模型或者分类器。
过滤式特征选择算法会通过数据的本质属性对所有特征进行相应的评分,在评价过程中无需分类器完成,在对给出所有特征赋予相应的评分后,选择评分高的特征用于之后的学习算法中。
过滤式特征选择包含单变量过滤式特征选择以及多变量过滤式特征选择两种。
单变量过滤式特征选择算法使用某种评价标准作为度量方式来确定数据集中特征对类别的区分能力。
以学生成绩为例,假设我们预测一个学生高考成绩,那么可以以某种评价标准来度量,例如说他成绩的波动值,越平稳,他就越不容易失误,可以预估他高考的表现。
常见的单变量过滤式特征选择算法有互信息以及信息增益。
多变量过滤式特征选择算法正是通过考虑特征之间的交互作用来确定特征的重要性。
就以我们生活中的例子为例吧,可能不太准确。我们都听过这样的谚语:“蚂蚁搬家蛇过道,明日必有大雨到”。这些特征通过组合来确定特征重要性或者样本标签,不能只考虑单一的特征。
常见的多变量过滤式特征选择算法有Relief,基于相关性的特征选择算法CBFS以及马尔可夫模型等。
过滤式特征选择算法的因为其过程简单快捷,很容易用于高维数据的维数约简中。特征选择过程中不依赖任何模型,依次其特征选择结果可以用到各种分类算法中。
反过来呢,正是因为其与分类算法独立,缺乏了与模型的交互性,在后期应用到分类算法中会由劣势。
这是必然的,事物都是具有双面性的。因为过滤式特征选择算法独立于模型,因而简单高效,缺少与模型也使它在落实到分类算法时会有不足之处。
封装式特征选择
封装式方法最大特点是其与学习算法有关,利用学习算法的性能来评价特征子集的优劣。在进行特征选择过程中,需要一个分类器,根据分类器性能去衡量特征子集,可以使用的分类器有决策树,近邻分类器,贝叶斯分类器以及支持向量机等等。
image.png就以最近邻分类器吧,它的流程比较简单:
先将数据集划分为训练集和测试集,在测试集中遍历样本,寻找每一个样本在训练集中最近的个样本,选择个样本中出现次数最多的标签作为该测试集样本的标签。
可以使用的距离度量方式有很多,详细可见往期博客。
也就是说,封装式特征选择算法会将模型建立与特征子集搜索的过程结合起来,用模型指导特征子集的搜索过程。
它与模型相结合的方式,结果会更精确,但是问题也很明显,容易过拟合。也就是说模型为了尽力拟合所有的训练样本,反而学习到一些不必要学习的知识,因此不能准确反映输入输出的真实函数关系。而且,封装式特征选择算法时间消耗多,当学习算法改变时需要重新进行特征选择,而每次对特征子集的衡量都需要有训练和验证的过程,计算较为复杂,因此不适用于大规模数据集。
嵌入式特征选择
嵌入式嵌入式特征选择算法是特征选择过程嵌入到学习算法的模型训练中通过优化一个目标函数来实现特征选择。常见的嵌入式嵌入式特征选择算法有决策树算法和基于支持向量机的算法等。
与过滤式,封装式特征选择算法不同的是,过滤式和封装式算法的特征选择过程与学习器训练过程有明显的区别,而嵌入式特征选择是将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择。相对于封装式方法,嵌入式特征选择方法不用于将数据集分为训练集和验证集两部分,避免了为了评估每一个特征子集对学习机所进行的重复训练,可以快速地得到最佳特征子集,是一种高效的特征选择方法。但是该类方法较大程度上依赖于参数调整,因此其性能对参数非常敏感,而且如何构造目标函数也是一个研究难点。
总结
我们介绍三种特征选择方法,过滤式算法简单高效,但是缺失与模型的交互性;封装式与模型相结合,结果精确,但是易过拟合;嵌入式有着两者的优点,但是构造起来比较麻烦。各有优劣,之后我们的重点会放在过滤式特征选择算法上。
python的sklearn包提供了相应特征选择算法的方法,详细的信息可以查阅相关资料。
本文参考了:
- 黄晓娟. 面向特征选择的Relief算法研究[D].苏州大学,2018.
网友评论