过滤特征_特征选择总结之 过滤式特征选择(附代码)

资料来源,百度关键字搜索“特征选择 过滤式”的前二三十页不重复的数据(不得不说csdn的文章互抄率也太高了,而且好多优秀的文章都是从知乎转来的)、《机器学习》等平常看的书、google上“feature selection filter”关键字搜索的不重复结果以及自己平常记录的笔记。正好最近要做特征选择的模块,所以借着知乎总结总结,也请各位同行批评指教。

let's begin!

过滤特征_特征选择总结之 过滤式特征选择(附代码)_第1张图片
简单的一个思路图,当然肯定不止这些,不过可以以这个图为基准然后增加新的算法进来这样更有利于记忆和掌握

西瓜书上把特征选择总体分为了过滤式、包裹式、嵌入式,总体来看,过滤式是其中最简单,运行速度最快的,毕竟只涉及到一些很easy的数学运算。

那么为什么要进行特征选择?

(1)、经过特征选择之后特征的数量是下降的,有助于研究人员与用户的理解,尤其是像银行这类非常看重业务内在逻辑的工作场景或者是量化基金公司这类的研究场景,可解释性都是一个非常需要考虑的东西,很多时候需要结合业务知识和机器学习的方法来共同支持业务决策,比如说你通过一些特征衍生的方法(比如使用featuretool、gplearn或者是暴力的polynomial)产生的许多新的特征并且在其中找到了表现很不错的因子,一般来说都是需要通过业务逻辑的分析来增强特征的可信度。

(2)、改善性能,节省存储空间和计算开销。这个很好理解了。

(3)、降低过拟合的风险,特征的维度越高,越容易过拟合(这是这里是越容易过拟合但是不等于说一定过拟合比如ctr领域动不动就是成千上万的特征),这一点可以从pac学习理论的角度给出标准的解释(但是pac好难理解我还没看懂==),不过后来我在某个地方看到了一个更好更直观的解释(类似于从图像上去理解为什么l1相对于l2容易产生稀疏解)

1、以逻辑回归的二分类为例子,假设初始有5个特征x1,x2,x3,x4,x5,则此时训练完的模型的结果为y=sigmoid(w1x1+w2x2+w3x3+w4x4+w5x5+w0),这个时候如果新增了特征x6,假设特征x6非常垃圾对预测完全没有帮助,那么逻辑回归可以通过l1正则化的手段将x6前面的系数w6变成0(或者非常接近0),则训练结果为y=sigmoid(w1x1+w2x2+w3x3+w4x4+w5x5+w6x6+w0),因为w6约等于0,所以上式和下式是基本相同的,从这里可以看出,新增的特征对于模型的拟合能力起到的作用是至少不会降低模型的拟合能力(因为如果特征非常差,至少可以通过正则化的方式将其排除,这一点gbdt、svm、神经网络等算法也是一样的道理),那么举一个极端的例子,假设我们用随机数生成无数的特征,大概率会存在某些特征正好和标签之间存在的很强的关联(比如elo比赛中,有一个kaggler用随机的方式生成的特征居然和原始特征的效果一样好),但是这些特征实际上是没有意义的噪声罢了。

2、当然,这种理解方式的问题在于比较局限,对于knn这种算法就没办法用上面的方式来解释,所以这里直接给出这一篇文章吧:http://www.visiondummy.com/2014/04/curse-dimensionality-affect-classification/ 目前为止找到了关于高维特征和过拟合的讨论最好理解的一篇文章了。从两个角度讨论了高维数据与过拟合的关系:

(1)从高维空间容易拟合噪声的角度出发(因为谷歌翻译的问题。。这里的“功能”实际上是“特征”的意思)

过滤特征_特征选择总结之 过滤式特征选择(附代码)_第2张图片

过滤特征_特征选择总结之 过滤式特征选择(附代码)_第3张图片

核心的意思就是说,越是高维的空间越容易线性可分,(对于回归问题就是越容易拟合,下同),也越容易拟合到特定于训练集数据的异常,学习到的模型倾向于预测与训练集分布类似的新数据(举个iris的例子,iris的特征分布非常均匀相似,所以我们在训练集上无论怎么拟合最终都可以在测试集的数据上得到很高的预测精度),但是一旦新数据不训练数据的分布产生了较大的出入,就会得到非常差的预测结果。

(2)从样本在不同特征空间下的样本密度的角度出发

过滤特征_特征选择总结之 过滤式特征选择(附代码)_第4张图片

我更倾向于这一种理解的方式,直接以上图为例子吧,我们看第二张图,

过滤特征_特征选择总结之 过滤式特征选择(附代码)_第5张图片

二维空间的情况下,我们的训练集的分布是“两只猫和一只狗”,而总的特征空间的分布更加复杂,为了便于表达的我的意思,假设我们把上图分成4个小正方形,红色部分训练集的分布是“两只猫和一只狗”,那么剩下的3个小正方形的分布分别是“两只猫和两只狗”,“一只猫和一只狗”,“三只猫和三只狗”,显然这里就有四种不同的分布情况了,我们知道,不同数据分布下训练出来的模型往往是不太相同的,所以这个时候你使用了总的特征空间的1/4的数据拟合出来的有“偏见”的模型与预测全部的特征空间中的样本,必然会带来一定的泛化无误差。

那么扩展到3维,4维。。。。等更高的维度,也是一样的道理,训练集的数据是有限的,但是当增大特征的数量的时候无形中是使得特征空间的分布更加复杂更加多样化,现有数据在全部特征空间的样本中对应的覆盖率越小,越容易训练出有“偏见”的模型,则最终的泛化误差越大。

这样解释起来应该是比pac好理解。。。不过pac还是需要去仔细研究一下,毕竟是“通过计算来进行学习的理论,即关于机器学习的理论基础,其目的在于分析学习任务的困难本质,为学习算法提供理论保证,并根据分析结果指导算法设计”。回头有时间专门写一篇来总结一下自己对《机器学习》中的pac的计算学习理论的理解和笔记吧


一般来说过滤式特征选择的方法分为单变量和多变量过滤两类,表现形式就是计算出一些衡量特征好坏的指标,然后根据指标来支持特征选择的决策,这一点《美团机器学习实战》上介绍的倒是蛮多的。

写多了,再开一篇写代码吧。。。

你可能感兴趣的:(过滤特征)