第十一章:特征选择与稀疏学习
11.1 子集搜索与评价
一般情况下,我们可以用很多属性/特征描述一个示例,而对于特定的学习任务,我们会发现已知的所有属性中,有些特征是与该学习任务的目标无关的(如预测一个人的收入,年龄/学历/专业可能很大程度上影响了收入,身高/体重这些外貌属性也有较小的可能性影响收入,但像是否是一个地地道道的吃货这种属性就八杆子打不着了),称之为无关特征,对当前学习任务有用的属性称之为相关特征。
我们只需要对学习任务有用的相关特征,特征选择便是从给定的特征集合中选出相关特征子集的过程。
显然,特征选择的过程同样也实现了降维的效果,也可以有效解决维数灾难的问题。具体而言:
- 降维从一定程度上起到了提炼优质低维属性和降噪的效果
- 特征选取直接剔除那些与学习任务无关的属性选取出最佳特征子集
要从初始的特征集合中选取一个包含所有重要信息的特征子集,若直接遍历所有特征子集,在维数过多时则会遭遇指数爆炸。可行的做法是产生一个候选子集,评价出它的好坏,基于评价结果产生下一个候选子集,再对其进行评价,…这个过程持续进行下去,直至无法找到更好的候选子集为止。这就极大地降低了复杂度。早期的特征选择常用方法涉及两个关键环节:
- 如何根据评价结果获取下一个候选特征子集?
- 如何评价候选特征子集的好坏?
子集搜索
书上介绍了贪心算法,分为三种策略:
前向搜索:初始将每个特征当做一个候选特征子集,然后从当前所有的候选子集中选择出最佳的特征子集;接着在上一轮选出的特征子集中添加一个新的特征,同样地选出最佳特征子集;最后直至选不出比上一轮更好的特征子集。
后向搜索:初始将所有特征作为一个候选特征子集;接着尝试去掉上一轮特征子集中的一个特征并选出当前最优的特征子集;最后直到选不出比上一轮更好的特征子集。
双向搜索:将前向搜索与后向搜索结合起来,即在每一轮中既有添加操作也有剔除操作。
以上的策略由于都基于贪心算法,故都是仅考虑了使本轮选定集最优,故有几率得不到全局最优解。遗憾的是,若不进行穷举,这样的问题无法避免。
特征子集评价
书中给出了一些想法及基于信息熵的方法。假设数据集的属性皆为离散属性,这样给定一个特征子集,便可以通过这个特征子集的取值将数据集合划分为V个子集。例如:A1={男,女},A2={本科,硕士}就可以将原数据集划分为2*2=4个子集,其中每个子集的取值完全相同。这时我们就可以像决策树选择划分属性那样,通过计算信息增益来评价该属性子集的好坏。
信息增益Gain(A)越大,意味着特征子集A包含的有助于分类的特征越多。故对于每个候选特征子集,我们可以基于训练数据集D来计算其信息增益,以此作为评价准则。
以上,将特征子集搜索机制和子集评价机制相结合,即可得到特征选择方法。值得一提的是,若将前向搜索和信息熵相结合,则与ID3决策树算法非常相似。事实上,决策树可用于特征选择,树结点的划分属性所组成的集合就是选择出的特征子集。
常见的特征选择方法大致可分为三类:
- 过滤式(filter):过滤式方法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关。
- 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则。其目的就是为给定学习器选择最有利于其性能的特征子集。
- 嵌入式(embedding):将特征选择过程与学习器的训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练的过程中自动地进行了特征选择。
11.2 过滤式选择
过滤式方法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关。
Relief(Relevant Features)是一种著名的过滤式特征选择方法,该方法设计了一个相关统计量,其每个分量分别对应于一个初始特征,而特征子集的重要性由子集中每个特征所对应的相关统计量分量之和决定。最终有两种方法选择特征:
- 指定一个阈值t,然后选择比t大的相关统计量分量所对应的特征即可
- 指定欲选取的特征个数k,然后选择相关统计量分量最大的k个特征
Relief的相关统计量
Relief的关键在于如何确定相关统计量。对于训练集的每个示例 x i x_i xi,Relief先在 x i x_i xi的同类样本中寻找其最近邻 x i