特征选择

特征选择和降维计算一样,都能有效的减轻维数灾难问题,事实上,特征选择和降维计算是处理高维数据的两大主流技术

什么是特征选择

对于一个学习任务来说,给定属性值,其中有些属性很关键、很有用,另一些属性则可能没什么用。我们将属性称为“特征”,对当前学习任务有用的属性称为“相关特征”,没什么用的属性称为“无关特征”。从给定的特征集合中选出相关特征子集的过程,称为“特征选择”。

为什么要进行特征选择

有两个很重要的原因:首先,我们在现实任务中经常会遇到维数灾难问题,这是由于属性过多而造成的,若能从中选择出重要的特征,使得后续学习过程仅需在一部分特征上构建模型,则维数灾难问题会大为减轻。第二个原因就是,去掉不相关特征往往会降低学习任务的难度,这就像侦探破案一样,若将纷繁复杂的因素抽丝剥茧,只留下关键因素,则真相往往更易看清。
需注意的是,特征选择过程必须确保不丢失重要特征,否则后续学习过程会因为重要信息的缺失而无法获得好的性能。
有一类特征称为“冗余特征”,它们所包含的信息可以从其他的特征中推演出来。如果能把这些特征从我们的数据集中筛选出去,那么可以极大地提高我们的程序运行效率。当然有的时候我们还需要人为保留或者创造一些冗余特征,当且仅当这些冗余特征恰好对应了完成任务所需要的“中间概念”。比如要求一个立方体的体积时,输入数据只有长宽高,如果能人为创造一个“底面积”或者“侧面积”这样的冗余特征,那么更容易求解,这个冗余特征要分情况来确定。

子集搜索与评价

想要找一个最好的特征子集,最简单最笨的方法就是把所有的特征排列组合,遍历每一个子集,然后从中选择里面最好的一个,这明显也是一个NP难问题。对这种方法的一种改进就是使用子集搜索与评价,它的思想就是先产生一个特征子集,然后对它进行评价,之后根据评价结果选择下一个特征子集,再进行评价,直到无法找到更好的候选子集。 这里涉及到两个关键环节:如何根据评价结果获取下一个候选特征子集?如何评价候选特征子集的好坏?

子集搜索分为“前向”(forwardforward)搜索、“后向”(backwardbackward)搜索和“双向”(bidirectional)搜索。

前向搜索就是只从一个特征开始,每次增加一个特征,直到某次的特征子集不如上一轮的子集为止。

后向搜索就是从完整的特征集合开始,每次去掉一个无关的特征,直到某次的特征子集不如上一轮的子集为止。

双向搜索就是将前两种方法结合在一起,每一轮逐渐增加选定的相关特征(这些特征在后续迭代中不会被去掉),同时减少无关特征。

每一个特征子集的特征都是对数据集的一种划分,而我们希望的就是这种划分与用样本标记信息对数据集的划分结果越相似越好,因此就可以利用这两种划分方式的不同来对特征子集进行评价,信息熵是子集评价的一种方式,还有其他很多方式。
信息增益 Gain(A)越大,意味着特征子集 A 包含的有助于分类的信息越多,因此,就可以基于训练数据集来计算每个候选特征子集的信息增益,从而作为评价指标。

特征选择

常见的特征选择方法大致分为三类:过滤式(filterfilter)、包裹式(wrapperwrapper)和嵌入式(embeddingembedding)。

过滤式:过滤式方法先对数据进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关。这就相当于先用特征选择过程对初始特征进行“过滤”,再用过滤后的特征来训练模型。

包裹式:直接把最终要使用的学习器的性能作为特征子集的评价准则。换言之包裹式特征选择的目的就是为了给定学习器选择最有利于其性能、“量身定做”的特征子集。

嵌入式:嵌入式选择是将特征选择过程与学习器训练过程融合为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择。

Relief是一种著名的过滤式特征选择方法,该方法设计了一个“相关统计量”来度量特征的重要性。该统计量是一个向量,其每个分量分别对应于一个初始特征,而特征子集的重要性则是由子集中每个特征所对应的相关统计量分量之和来决定。于是,最终只需要指定一个阈值,然后选择比这个阈值大的相关统计量分量所对应的特征即可;也可以指定欲选取的特征个数k,然后选择相关统计量最大的k个特征。

给定训练集,对每个示例,Relief先在同类的样本中寻找其最近邻,称为“猜中近邻”(near-hit),再从异样的样本中寻找其最近邻,称为“猜错近邻”(near-miss),然后,相关统计量对应于属性的分量为
如果最后的结果小于0,则说明属性j对区分同类与异类样本是有益的,于是增大属性j所对应的统计量分量;如果最后的结果大于0,则说明j起到负面作用,于是减少属性j所对应的统计量分量。最后,对基于不同样本得到的估计结果进行平均,就得到各属性的相关统计量分量,分量越大,所对应属性的分类能力就越强。

你可能感兴趣的:(特征选择)