本文由作者授权发布,未经许可,请勿转载。
作者:侯江畔,网易杭州研究院算法工程师
数据决定了模型的上限,而算法只是去逼近这个上限。如何从海量特征中科学提取关键特征呢?
特征选择(Feature Selection)和特征提取(Feature Extraction)是特征工程(Feature Engineering)的两个重要子内容。其中特征提取是指从数据中找到可以表征目的的属性,而特征选择是从候选特征中选出“优秀”的特征。通过特征选择可以达到降维、提升模型效果、提升模型性能等效果,深度学习目前这么火热,其中一个重要原因是其减少了特征选择的工作,但对于机器学习,特征选择仍然是其应用中很重要的一步。
一、为什么要特征选择?
1.1特征数量与分类器性能的关系
一般来说,进入模型的特征数量与模型的效果之间满足以下曲线,在某个位置达到最优。过多或过少都会使分类器的效果发生严重的下降。
1.2特征不足的影响
当特征不足时,极易发生数据重叠,这种情况下任何分类器都会失效。如下图所示,仅依赖x1或x2都是无法区分这两类数据的。
1.3特征冗余的影响
增加特征可以理解为向高维空间映射,当这个“维度”过高时,容易造成同类数据在空间中的距离边远,变稀疏,这也易使得很多分类算法失效。如下图所示,仅依赖x轴本可划分特征,但y轴的引入使得同一类别不再聚集。
1.4特征选择的难点问题
首先我们已经明确,特征选择解决的工程问题是:当我们拥有大量特征时,需要判断哪些是相关特征、哪些是不相关特征。因而,特征选择的难点在于:其本质是一个复杂的组合优化问题。
当我们构建模型时,假设拥有N维特征,每个特征有两种可能的状态:保留和剔除。那么这组状态集合中的元素个数就是2N。如果使用穷举法,其时间复杂度即为O(2N)。假设N仅为10时,如果穷举所有特征集合,需要进行1024次尝试。这将是巨大的时间和计算资源的消耗,因而在特征选择时,我们需要找到明智的方法。
二、特征选择经典三刀
特征选择的经验总结有三种方法:Fliter、Wrapper、Embedded。
2.1Filer
Filter故名思议就是过滤式方法,对过滤之后的特征进行训练,特征选择的过程与后序学习器无关。其评估手段是判断单维特征与目标变量之间的关系,常用的手段包括pearson相关系数、Gini系数、信息增益、方差校验和相似度度量等。这里选取Pearson系数与方差检验进行说明。
2.1.1方差
方差的统计学意义表征的是数据分布的“发散”程度,即方差越大数据分布越不集中。而在特征选择中,我们往往认为如果特征分布相对集中,即特征取值差异不大,则其对分类器的贡献值相对较小。
2.1.2 Pearson相关系数
Pearson系数能衡量分布之间的线性相关性,但是计算相对复杂一些。其计算公式如下图所示,但Pearson系数需要满足的前提是两个变量在误差范围之内服从高斯分布。
2.2 Wrapper
Wrapper即封装法,可理解为将特征选择的过程与分类器封装在一起,以一个分类器的交叉验证结果,作为特征子集是否优秀的评估方式。
而特征子集的产生方式分为前向搜索与后向搜索两种方法,在实现上,常见的方法有稳定性选择(Stability Selection)和递归特征消除(Recursive Feature Elimination)两种方式。
2.2.1递归特征消除
递归特征消除的主要思想是,反复构建模型,然后选出其中贡献最差的特征,把选出的特征剔除,然后在剩余特征上继续重复这个过程,直到所有特征都已遍历。这是一种后向搜索方法,采用了贪心法则。而特征被剔除的顺序,即是它的重要性排序。为了增强稳定性,这里模型评估常采用交叉验证的方法。
2.2.2 稳定性选择
这是对基于L1正则方法的一种补充,基于L1正则方法的局限性在于:当面对一组关联的特征时,它往往只会选择其中的一项特征。为了减轻该影响,使用了随机化的技术,通过多次重新估计稀疏模型,用特征被选择为重要的次数/总次数来表征该特征最终的重要程度。
稳定性选择是一种基于抽样和选择相结合的方法,评估的方法可以是回归、SVM等可引入正则项的算法,理想情况下,重要特征的得分会接近100%,而无用的特征得分会接近于0.
2.3 Embedded
Embedded可以理解为嵌入法,即使用分类器本身的特性进行特征选择。这种方法速度快,也易出效果,但需较深厚的先验知识调节模型。
2.3.1 基于正则化的方法进行特征选择
线性模型也可用于特征选择。我们知道线性模型可以看作一个多项式模型,其中每一项的系数可以表征这一维特征的重要程度,越是重要的特征在模型中对应的系数就会越大,而跟输出变量越是无关的特征对应的系数越接近于零。但线性模型无法解决相互之间不独立的特征,即是“多重共线性”,对离群点或噪声较为敏感。
而在特征选择中,我们更常使用的是L1正则化与L2正则化。正则化在机器学习常常被作为惩罚项,防止过拟合的发生,即上述公式的最后一项。其中,L1正则表示权值向量的绝对值之和,L2正则表示权值向量的平方和再开平方。当损失函数去均方误差,正则项取L1时,即是LASSO回归;正则项取L2时即是Ridge回归。
2.3.1.1 L1正则化
目标函数在优化时常常使用梯度下降的方法,L1正则项是权值向量的绝对值之和,因此其对权值的偏导为一常量,在梯度下降时,容易下降至0,这会导致 特征稀疏,自然的淘汰不重要的特征。这样的特点使其可以天然的成为特征选择的工具。虽然L1正则无法解决与线性模型相同的不稳定问题,但它的稀疏性仍然使其成为特征选择的利器。
2.3.1.2 L2正则化
同理,因为L2正则项是平方项之和,因此梯度下降的方向为一个关于权值的表达式,梯度下降的过程则可以看作权值缩放的过程,它虽然不会使特征稀疏,但对大数的惩罚力度大,因此可以使 各项权值趋于平均,解决线性模型与L1正则无法解决的不稳定问题,在特征选择时常常被用到。
2.3.2基于树模型的特征选择
树模型在学习时,是以纯度为评价基准,选择最好的分裂属性进行分裂,这本身也可以看作一个特征选择的过程。这里选择随机森林为选择算法,在实现上,有平均不纯度减少和平均精确度减少两种。
2.3.2.1 平均不纯度减少
树模型的训练过程,总在选择最优的属性将数据分裂,属性的优劣是通过计算每个特征对树的不纯度的减少程度。而对于随机森林,可以计算 每课树减少的不纯度的平均值,作为特征的重要性系数。
但不纯度方法存在一定的缺陷。不论哪种度量手段,都存在着一定的偏好。例如信息增益偏好取值多的属性、信息增益率偏好取值少的属性。且对于存在关联的一组强特征,率先被选择的属性重要性远远高于后被选择的属性,因为某属性一旦备选意味着数据集不纯度会迅速下降,而其他属性无法再做到这一点,容易对特征的理解产生歧义。
2.3.2.2 平均精确率减少
平均精确度减少是直接度量每个特征对模型精确率的影响。主要思路是打乱特征的特征值顺序,度量顺序变动对于模型精确率的影响。很明显,对于不重要的变量,打乱顺序对精确率影响不会太大,但重要的特征,就会对精确率产生明显的影响。
三、方法实现
我对上述常用方法进行了实现,抽象为一个特征分析的工具。
输入:数据集特征矩阵、数据集标签值、特征名称
返回:所调用方法评估方式的特征值得分
3.1 Filter
Pearson方法返回各个特征的Pearson相关系数值。
Variance方法返回各个特征的方差值。
3.2 Wrapper
RFECV是以交叉验证为评估方式的递归特征消除方法,自定义参数nflod表示交叉验证的k值,默认为5;nstep大于等于1时表示每次剔除的特征数目,小于1时表示按比例剔除特征,默认为1。
Stability_Selectio借助随机化LASSO模型实现的稳定性选择方法,自定义参数n_model表示随机模型的数量,默认200。
3.3 Embedded
L1_Regularization使用了带有L1正则的线性回归,即LASSO方法。自定义参数al表示惩罚项系数,越大结果越稀疏,默认为0.1。
L2_Regularization使用了带有L2正则的线性回归,即Ridge方法。自定义参数al表示惩罚项系数,越大结果越均匀,默认为1.0。
Mean_Decrease_Impurity是使用了随机森林为评价函数的平均不纯度减少方法。
Mean_Decrease_accuracy是使用随机森林为评价方法的平均精确率减少方法。
四、总结
特征选择是一个非常重要的数据预处理过程。进行特征选择有两个重要的意义:首先,我们经常会遇到维数灾难问题,若能从中选择出重要的特征,使得后序学习仅在一部分特征上构建模型,维数灾难问题会大为减轻。笔者自己的一个业务,通过特征选择后,准确率基本不变的情况下,维度降低了29维。第二个原因是去除不相关特征往往会降低学习的难度。并且特征分析有助于我们理解特征背后表征的具体含义,尤其是面对安全问题时,笔者认为特征背后的表征意义并不低于机器学习的结果。
总之,希望可以有助于大家 用最少的资源,完成最好的业务。