移除方差较小的特征
方差阈值(VarianceThreshold)是特征选择的一个简单方法,去掉那些方差没有达到阈值的特征。默认情况下,删除零方差的特征,例如那些只有一个值的样本
假设我们有一个有布尔特征的数据集,然后我们想去掉那些超过80%的样本都是0(或者1)的特征。布尔特征是伯努利随机变量,方差为 p(1-p)。
VarianceThreshold去掉了第一列,第一列里面0的比例为5/6。
单变量特征选择
单变量特征选择通过单变量统计检验选择特征,可以看作一个估计器的预处理步骤。Sklearn将特征选择视为日常的转换操作:
- SelectBest 只保留 k 个最高分的特征;
- SelectPercentile 只保留用户指定百分比的最高得分的特征;
- 使用常见的单变量统计检验:假正率SelectFpr,错误发现率selectFdr,或者总体错误率SelectFwe;
- GenericUnivariateSelect 通过结构化策略进行特征选择,通过超参数搜索估计器进行特征选择。
举个例子,使用卡方检验选择两个最优特征:
SelectKBest和SelectPerecntile能够返回特征评价的得分和P值:
其中的参数 score_func 有以下选项:
(1)回归
f_regression:相关系数,计算每个变量与目标变量的相关系数,然后计算出F值和P值;
mutual_info_regression:互信息,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。
参考:http://www.cnblogs.com/gatherstars/p/6004075.html
(2)分类
chi2:卡方检验;
f_classif:方差分析,计算方差分析(ANOVA)的F值 (组间均方 / 组内均方);
mutual_info_classif:互信息,互信息方法可以捕捉任何一种统计依赖,但是作为非参数方法,需要更多的样本进行准确的估计。
卡方(Chi2)检验
经典的卡方检验是检验定性自变量对定性因变量的相关性。比如,我们可以对样本进行一次chi2chi2 测试来选择最佳的两项特征:
Pearson相关系数 (Pearson Correlation)
皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的 pearsonr 方法能够同时计算 相关系数和p-value
|
|
这个例子中,我们比较了变量在加入噪音之前和之后的差异。当噪音比较小的时候,相关性很强,p-value很低。Scikit-learn提供的 f_regrssion 方法能够批量计算特征的f_score和p-value,非常方便,参考sklearn的pipeline
Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。例如:
|
|
互信息和最大信息系数
递归特征淘汰(RFE)
给特征赋予一个外部模型产生的权重(例如:线性模型系数),RFE递归地使用越来越少的特征来进行特征选择。首先,在原始数据上建立模型并且给每个特征一个 权重;然后,淘汰绝对权重最小的特征,递归地执行这个过程直到达到希望的特征数。RFECV使用交叉验证方法发现最优特征数量。
使用SelectFromModel方法特征选择
SelectFromModel是一种元转换器,可以与那些有coef_ 或者featureimportances属性的模型一起使用。如果coef_ 或者featureimportances小于阈值,我们就认为特征是不重要的。除了指定阈值以外,也可以使用启发式的方式。有效的启发式方法包括均值、中位数或者乘以系数,比如 0.1*均值。
基于L1范数的特征选择使用
##