http://blog.csdn.net/linkin1005/article/details/43018827
特征选择是一种及其重要的数据预处理方法。假设你需要处理一个监督学习问题,样本的特征数非常大(甚至 ),但是可能仅仅有少部分特征会和对结果产生影响。甚至是简单的线性分类,如果样本特征数超过了n,但假设函数的VC维确仍然是O(n),那么,除非大大扩展训练集的数量,否则即会带来过拟合的问题。在这样的情况下,可以使用特征选择算法降低特征的数量。
假设样本有n个特征,那么,其有种可能的特征子集,如果特征选择需要去穷举所有种可能的特征子集,对于n比较大的情况,计算的代价太大,无法真正实现。因此可以通过一些启发式算法实现特征的选择。
正向搜索/反向搜索(forward/backwardsearch)
正向搜索的基本思想是:依次在当前集合中加入一个其没有的属性,然后用交叉验证等方法对新的集合进行评估,找出评估结果最佳的属性加入当前集合。不断重复上面的步骤,直到加入任何新的属性都不能提高评估结果算法即告停止。此算法是一个典型的贪心算法,可能找到局部最优的属性集,但是不一定是全局最优。
2.repeat{
(a) for i=1,…,n
(b) 找出步骤(a)中最佳特征子集F
}
3. 找出在整个搜索过程中最佳特征子集。
反向搜索与正向搜索恰恰相反,它是假设所有的特征都在集合内,逐步减少属性,直至找到(局部)最优属性集。
类似前向/后向搜索方法,称为封装模型特征选择算法(wrapper model feature selection algorithm),因为在该方法执行过程中,不断重复的运行学习算法去评估属性集的好坏。封装模型特征选择算法通常比较有效,但是需要反复的运行学习算法,产生大量的计算。事实上,完成一次前向搜索算法,大约需要调用次学习算法。
过滤特征选择(filter feature selection)
过滤特征选择算法也是一种启发式算法,但是在选择特征子集过程中,计算量较少。其基本思想是:制定一个衡量标准S(i),用来衡量每个特征,对标签值y的影响程度,最后再选择得分最高的k个特征值。
其中一种策略是定义S(i)为和y的关联程度,这样可以选择出和结果关联性最高的一批特征。在实际操作中,通常(对于离散值)采用互信息(themutual information)来度量和y的关联程度:
(上面假设了和y都是二值属性)而概率值都可以通过训练样本计算出来。最后,依然可以通过交叉验证的方法,找到使得泛化误差最小的特征数量k。
这可能是最短的一篇,原因是这些笔记主要以 Andrew Ng的机器学习系列课程讲义为基础,所以只介绍了两个维度选择的方法,实际上维度选择的方法有很多(见weka截图),以后等自己掌握了,再补充进来。