1. 特征选择( Feature Selection )
1.1 特征选择的定义
- 特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )。是指从已有的M个特征(Feature)中选择N个特征使得系统的特定指标最优化,是从原始特征中选择出一些最有效特征以降低数据集维度的过程,是提高学习算法性能的一个重要手段,也是数据预处理的重要步骤。对于一个学习算法来说,好的学习样本是训练模型的关键。
- 此外,需要区分特征选择与特征提取。特征提取 ( Feature extraction )是指利用已有的特征计算出一个抽象程度更高的特征集,也指计算得到某个特征的算法。
1.2 为什么要特征选择
1.2.1 特征的分类
1.2.1.1 根据特征和标签的关系
- 依据特征和标签的关系分为相关特征和无关特征。
- 相关的特征说明该特征和预测的结果有关系,此处的相关包含正相关,负相关和线性相关,非线性相关。相关的特征蕴含一部分信息,从该特征我们可以推测结果,对我们建立的模型有一定的提升效果。
- 无关的特征,对模型结果毫无关系,不会给我们的模型带来任何影响。
1.2.1.2 依据特征之间的关系
- 依据特征之间的关系分为冗余特征和非冗余特征。
- 冗余特征:指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。不仅仅指样本的重复还指特征的重复。狭义上讲,冗余特征不仅仅是重复的数据,也可以是从一个特征推断出来的特征。比如从身份证提取年龄,出生年月日,性别,所属省市。
- 往往冗余的特征会造成多重共线性的问题,会给我们的模型增加复杂度,造成精度和泛化能力的下降。因此在建模的过程中,我们要剔除冗余的数据,尽量保持数据的独立性。在这里多说一句,不是冗余的数据都是不好的,在数据库的表中,几乎都有冗余的数据,但是这些冗余的数据能够提升查询的效果。
1.2.1 目的:提高模型泛化性能和提高模型收敛速度
- 刚开始学习机器学习的人,肯定能听到鼎鼎大名的降维,降维的方法有PCA,LDA,LLE,Laplacian Eigenmaps等。其实特征选择的目的和降维一样,一些特征可能对模型的提升效果很小,甚至无影响或负影响,这类型的特征放入模型中,造成了精度下降(无变化)和收敛速度变慢。
- 因此,我们通过剔除无关和冗余的特征,来达到特征选择的目的。
1.3 特征选择的方法
- 一般我们会根据业务和工作经验,直接去掉对模型无用的特征(类似ID字段)和去掉取值变化小的特征,对于不能确定的特征,然后再用一些理论方法进行筛选特征。
1.3.1 过滤法选择特征
- 过滤法的思想:检验每个自变量与因变量的关系,给出每一个自变量对因变量的影响程度,通常影响程度越大,算出来的值越大,比如方差,相关系数。
1.3.1.1 方差
sklearn 有封装好的方差法— 移除低方差的特征 (Removing features with low variance)。方差用来计算每一个变量(观察值)与总体均数之间的差异。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。
当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和较大,方差就较大;当数据分布比较集中时,各个数据与平均数的差的平方和较小。因此方差越大,数据的波动越大;方差越小,数据的波动就越小。 往往方差是不小于0的数值,建模的过程中,更偏向于方差大的变量,对于接近0的变量,往往会剔除。极限的思想,当方差为0的时候,说明该字段的所有数据都一样,对于建模根本毫无意义。换个角度,在不考虑异常点的前提下,方差的大小也间接反映了信息量的多少,也就是信息熵。
VarianceThreshold 是特征选择的一个简单基本方法,它会移除所有那些方差不满足一些阈值的特征。默认情况下,它将会移除所有的零方差特征,即那些在所有的样本上的取值均不变的特征。
有理论知,随机变量(也就是自变量,特征。概率论上喜欢叫它随机变量)的方差,分为连续型随机变量和离散型随机变量。不同类型的随机变量求其方差公式不一样。查看源码知,sklearn直接简单粗暴的把变量当成离散型随机变量处理。可是我们的特征有离散的也有连续的变量?此处提供两种思路,思路一:当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用;思路二:无论是离散型变量还是连续性变量,全部当成离散型变量处理。这是因为把连续型变量细分,可以分成一个个的离散变量(极限的思想),将积分换算为数项级数。
-
方差的优缺点:
- 我们知道,方差越小,对平均值的偏离就越小,其变量越稳定。假设某特征的特征值只有0和1,并且在所有输入样本中,95%的样本的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。而且实际当中,先去掉那些取值变化小的特征,然后再使用其他特征选择方法中选择合适的进行进一步的特征选择。
- 优点:计算速度快(相对于嵌入式方法)。此特性可以用在几千上万维的特征中,我们可以使用方差法,过滤掉大量的方差较小的特征;
- 缺点:简单,可能忽视了重要特征(重要特征不一定方差很大)。
1.3.1.2 皮尔逊相关系数( Pearson correlation coefficient )
皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称 PPMCC或PCCS),是用于度量两个变量X和Y之间的线性相关性(只是线性),其值介于-1与1之间。
-
了解皮尔逊相关系数,不得不谈谈方差和协方差。
** 方差用来计算每一个变量(观察值)与总体均数之间的差异。考虑到无偏估计,下面只展示样本方差计算公式,不在展示总体方差计算公式。样本方差公式:
其中,$S^2$为样本方差,X为变量,$\mu $为样本均值,n为样本例数
** 协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。下面是协方差公式。
从协方差的公式知,协方差就是X与其均值偏离程度和Y与其均值偏离程度的乘积平均值。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
-
下面引出为什么了解方差和协方差之后,才接触到相关系数【这里特指皮尔逊相关系数,还有其他相关系数】。我们知道方差是特殊的协方差,而协方差有一个缺点,协方差是有量纲的量,譬如表示人的身高,单位是米(),表示人的体重,单位是千克(),则协方差带有量纲(),为了消除量纲的影响,现对协方差除以相同的量,就得到一个新的概念----相关系数。变量的方差必须大于0,因为分母不能为零,也就是变量不能为常量。具体公式如下。
通过相关系数,我们可以知道特征之间和特征与标签的协方差,进而解决多重共线性的问题。在分类问题中,不建议过滤掉相关系数小的值,因为相关系数为0,只能说明自变量与因变量的线性相关性为0,也有可能存在非线性关系,比如二次,三次,指数的关系,通常用来判别特征的多重共线性。
-
优缺点:
- 优点:其值介于-1与1之间,能分辨出因变量和自变量的正负相关;计算速度快(相对于嵌入式方法);
- 缺点:Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。
1.3.1.3 假设检验
- 假设检验就是大学数理统计中的三大抽样分布,包含卡方分布(χ2分布)、T分布和F分布。
- 比如卡方检验。卡方检验就是统计样本的实际值与预测值之间的偏离程度,实际值与预测值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。如果大家对卡方检验不熟悉,可以参看这篇卡方检验原理及应用,这里就不展开了。推荐讲解卡方分布视频。我们还可以使用F检验和t检验,它们都是使用假设检验的方法。上诉的3个检验方法是概率论的三大抽样分布,具体原理点击此连接
- 卡方检验:前提是变量属于标准正态分布。使用时,我们可以先进行标准化处理(z-score标准化)
1.3.1.4 互信息
简单解释一下,什么是信息熵。人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。香农提出了“信息熵”的概念,才解决了对信息的量化度量问题。变量的不确定性越大,把它搞清楚所需要的信息量也就越大,从而信息熵也就越大。
两事件的互信息为各自事件单独发生所代表的信息量之和减去两事件同时发生所代表的信息量之后剩余的信息量,这表明了两事件单独发生给出的信息量之和是有重复的,互信息度量了这种重复的信息量大小。最后再求概率和表示了两事件互信息量的期望。
从信息熵的角度分析各个特征和输出值之间的关系评分。在决策树算法中,互信息(信息增益)越大,说明该特征和输出值之间的相关性越大,越需要保留。
互信息是非负的,而且是对称的。变量X和Y的互信息为零当且仅当 X 和 Y 为独立随机变量。
-
优缺点:
- 优点:不需要标准化(归一化),在不同数据集可以直接比较;
- 缺点:线性相关性有时不如Pearson相关系数相关性强。变量独立性检测不如dcor(距离相关系数)。用于大规模探索性分析会产生太多错误判。详细查看此链接
1.3.1.5 距离相关系数(dcor)
- 距离相关系数是为了克服Pearson相关系数的弱点而生的。在Pearson相关系数是0(比如:X和X的平方),我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。
- 利用距离相关系数可以判别两个变量的独立性,当距离相关系数为0时,说明变量之间是独立的;距离相关系数越大,说明变量的相关性越强。
- 欧氏距离相关系数的具体公式,点击此链接
- 常见的距离公式
- 尽管有 MIC 和 距离相关系数 在了,但当变量之间的关系接近线性相关的时候,Pearson相关系数仍然是不可替代的。
第一,Pearson相关系数计算速度快,这在处理大规模数据的时候很重要。
第二,Pearson相关系数的取值区间是[-1,1],而MIC和距离相关系数都是[0,1]。这个特点使得Pearson相关系数能够表征更丰富的关系,符号表示关系的正负,绝对值能够表示强度。当然,Pearson相关性有效的前提是两个变量的变化关系是单调的。
1.3.1.6 基于模型的特征排序 (Model based ranking)
- 这种方法的思路是直接使用你要用的机器学习算法,针对每个单独的特征和响应变量建立预测模型。假如特征和响应变量之间的关系是非线性的,可以用基于树的方法(决策树、随机森林)、或者扩展的线性模型等。基于树的方法比较易于使用,因为他们对非线性关系的建模比较好,并且不需要太多的调试。但要注意过拟合问题,因此树的深度最好不要太大,再就是运用交叉验证。
1.3.2 包装法选择特征
- Wrapper: 模型将特征选择算法作为学习算法的一个组成部分, 并且直接使用分类性能作为特征重要性程度的评价标准. 它的依据是选择子集最终被用于构造分类模型. 因此, 若在构造分类模型时, 直接采用那些能取得较高分类性能的特征即可, 从而获得一个分类性能较高的分类模型. 该方法在速度上要比Filter 方法慢, 但是它所选择的优化特征子集的规模相对要小得多, 非常有利于关键特征的辨识; 同时它的准确率比较高, 但泛化能力比较差, 时间复杂度较高.
1.3.2.1 递归消除特征法(recursive feature elimination,以下简称RFE)。
- 递递归特征消除的目标是通过递归地考虑越来越小的特征集来选择特征。首先,选择指定的模型,在初始特征集上训练,并且通过coef_属性或通过feature_importances_属性获得每个特征的重要性 。然后,从当前的一组特征中删除最不重要的特征。在修剪的集合上递归地重复该过程,直到最终到达所需数量(百分比)的要选择的特征。
- 我们下面以经典的SVM-RFE算法来讨论这个特征选择的思路。这个算法以支持向量机来做RFE的机器学习模型选择特征。它在第一轮训练的时候,会选择所有的特征来训练,得到了分类的超平面wx+b=0后,如果有n个特征,那么RFE-SVM会选择出w中分量的平方值w2i最小的那个序号i对应的特征,将其排除,在第二类的时候,特征数就剩下n-1个了,我们继续用这n-1个特征和输出值来训练SVM,同样的,去掉w2i最小的那个序号i对应的特征。以此类推,直到剩下的特征数满足我们的需求为止。
1.3.3 嵌入法选择特征
- 过滤选择方法独立的衡量每个特征与响应变量之间的关系,包装法是基于机器学习模型的方法。但有些机器学习方法本身就具有对特征进行打分的机制,或者很容易将其运用到特征选择任务中,例如回归模型,SVM,决策树,随机森林等等。该方法根据重要性权重选择特征。其实Pearson相关系数等价于线性回归里的标准化回归系数。
- 嵌入法也是用机器学习的方法来选择特征,但是它和RFE的区别是它不是通过不停的筛掉特征来进行训练,而是使用的都是特征全集。在sklearn中,使用SelectFromModel函数来选择特征。
- 最常用的是使用L1正则化和L2正则化来选择特征。在之前讲到的用scikit-learn和pandas学习Ridge回归第6节中,我们讲到正则化惩罚项越大,那么模型的系数就会越小。当正则化惩罚项大到一定的程度的时候,部分特征系数会变成0,当正则化惩罚项继续增大到一定程度时,所有的特征系数都会趋于0. 但是我们会发现一部分特征系数会更容易先变成0,这部分系数就是可以筛掉的。也就是说,我们选择特征系数较大的特征。常用的L1正则化和L2正则化来选择特征的基学习器是逻辑回归。
- 此外也可以使用决策树或者GBDT。那么是不是所有的机器学习方法都可以作为嵌入法的基学习器呢?也不是,一般来说,可以得到特征系数coef或者可以得到特征重要度(feature importances)的算法才可以做为嵌入法的基学习器。
1.3 特征选择的评价
- 评价标准在特征选择过程中扮演着重要的角色,它是特征选择的依据。
- 评价标准可以分为两种:一种是用于单独地衡量每个特征的预测能力的评价标准;另一种是用于评价某个特征子集整体预测性能的评价标准。
- 在Filte方法中,一般不依赖具体的学习算法来评价特征子集,而是借鉴统计学、信息论等多门学科的思想,根据数据集的内在特性来评价每个特征的预测能力,从而找出排序较优的若干个特征组成特征子集。通常,此类方法认为最优特征子集是由若干个预测能力较强的特征组成的。
- 相反,在Wrapper 方法中,用后续的学习算法嵌入到特征选择过程中,通过测试特征子集在此算法上的预测性能来决定它的优劣,而极少关注特征子集中每个特征的预测性能如何。因此,第二种评价标准并不要求最优特征子集中的每个特征都是优秀的。
2. 特征提取
- 特征提取也叫高级特征。一个较优的模型,往往都会含有一部分高级特征。特征提取往往要结合实际的行业背景。