模式识别问题中构建、训练分类器的过程中避不开数据预处理这个过程,而在数据预处理过程中,特征选择又尤其的重要,特征选取的好坏很大程度影响到最终分类的正确率上。不仅如此,在很多的分类问题中,原始数据的维度经常会过高,并且包含很多冗余的信息,造成所谓“维数灾难”。
子集搜索:
子集搜索方式分为三类:
1、 前向搜索:起始特征子集为空,贪心地逐次增加一个行的特征进特征子集,每次进行一次性能评价,直至不能取得更好的分类性能为止。
2、 后向搜索:与前向搜索相反,起始候选子集为整个特征集合,然后逐次地减少无关特征。
3、 双向搜索:即同时增加有用特征,以及减少无用特征。(注意:被作为有用特征加入特征子集的不会在后续的操作中被删除,这是确定的)
过滤式选择(Relief法):
基本思路:
针对每一个特征,计算其“相关统计量”,以该指标来表征这个特征的重要性,如果某特征的“相关统计量”大于某一阈值th,就保留该特征,否则删去,也可以保留前k个“统计相关量”最大的特征来作为新的特征子集。
“统计相关量”的计算方法:
遍历每一个特征,对每一个特征(比如第j个特征),计算每一个样本点在此特征上的“猜中(第四声)临近”(near-hit)和“猜错临近”(near-miss),即该点到最近的一个同类点的距离和最近的一个异类点的距离,两个距离的平方再求差,然后将这些差全部累积求和,得到的就是这个特征的“相关统计量”,从而能够表征该特征对分类成功的贡献程度。
计算式如下:
(第j个特征,第i个样本)
这个“相关统计量”的计算式很好理解,如果在某一维度的特征上,一个样本点周围异类特征靠得很近,而同类特征都离得很远,那这个特征就是一个“垃圾特征”,对最终分类没什么卵用;相反,如果在某一维度的特征上,样本点周围异类特征都离得很远,同类特征离得很近,那这个特征就是很有用的“黄金特征”,值得被保留。
在多分类问题中,也有类似的计算方法,在二分类问题的做法上稍做修改就行,即计算猜错邻近时,对所有其他分类都计算一次“猜错距离”,结果依然是累积求和,不详述。
嵌入式选择与L1正则化:
嵌入式特征选择顾名思义,就是将特征选择的过程和训练分类器的过程合二为一了,在训练的过程中学习得到每个特征的所占权重,最终可以将其中的一些特征的权重变为0,就相当于完全舍弃这个特征了。
(这样似乎在原理上有一点问题,既然训练中的是全部的特征,哪这种方法就不能解决训练过程中特征维数过高的问题,依然会有所谓的“维数灾难”,毕竟合理的特征选取方案要等到训练结束才能出来)
具体的方法是在求解分类器得到的优化目标式后加上一个“惩罚项”,比如k||w||或k||w||^2,(分别叫做L1正则化与L2正则化),这种加入惩罚项的目的本来是为了防止过拟合(分类器过度学习的问题),但是采用L1正则化的方法会带来一个附加效果,即L1正则化更容易获得“稀疏解”,即可以使得最终的分类超平面的法向量w中很多的分量为0,即很多特征的权重为0,相当于分类器在训练的过程中认为这些特征用处不大,所以将这些特征完全舍弃了。
具体原因,一图表示(图来自《机器学习》周志华)
图的解释:在图中黑点处,惩罚项能取到最小值,所以此时整个优化目标式能取到最小值。
参考资料:
《机器学习》 周志华