特征选择
- 创建: 片刻,最新修改于: 2017-09-27
原文链接 : http://scikit-learn.org/stable/modules/feature_selection.html
译文链接 : http://cwiki.apachecn.org/pages/viewpage.action?pageId=10814341
sklearn.feature_selection
模块中的类可以用于样本集中的特征选择/维数降低,以提高估计器的准确度分数或提高其在非常高维数据集上的性能。
删除低方差特征
VarianceThreshold
是特征选择的简单基线方法。它删除方差不符合某个阈值的所有特征。默认情况下,它会删除所有零差异特征,即所有样本中具有相同值的特征。
例如,假设我们有一个具有布尔特征的数据集,并且我们要删除超过80%的样本中的一个或零(开或关)的所有特征。布尔特征是伯努利随机变量,这些变量的方差由下式给出
所以我们可以选择使用阈值:.8 * (1 - .8)
|
如预期的那样,VarianceThreshold
已经删除了第一列,其具有包含零的概率。
单变量特征选择
通过选择基于单变量统计测试的最佳特征来进行单变量特征选择。它可以被看作是估计器的预处理步骤。Scikit学习将特征选择例程公开为实现该transform
方法的对象:
SelectKBest
除去最高得分功能之外的所有功能SelectPercentile
删除除用户指定的最高得分百分比的功能之外的所有内容- 对每个特征使用常见的单变量统计检验:假阳性率
SelectFpr
,假发现率SelectFdr
或家族误差SelectFwe
。GenericUnivariateSelect
允许使用可配置策略执行单变量特征选择。这允许使用超参数搜索估计器来选择最佳的单变量选择策略。
例如,我们可以对样本执行测试,以仅检索两个最佳特征,如下所示:
|
这些对象将输入一个评分函数作为输入,该函数返回单变量分数和p值(或仅用于SelectKBest
和的 分数SelectPercentile
):
基于F检验的方法估计两个随机变量之间的线性依赖程度。另一方面,互信息方法可以捕获任何种类的统计依赖,但是非参数化,它们需要更多的样本进行准确的估计。
特征选择与稀疏数据
如果你使用稀疏数据(即表示为稀疏矩阵数据) chi2
,mutual_info_regression
,mutual_info_classif
将处理数据,而使其密集。
警告
小心不要使用具有分类问题的回归计分功能,您将获得无用的结果。
例子:
递归特征消除
给定一个向特征分配权重(例如,线性模型的系数)的外部估计器,递归特征消除(RFE
)是通过递归地考虑更小和更小的特征集来选择特征。首先,对初始的特征集进行训练,并将权重分配给它们中的每一个。然后,从当前设置的特征修剪绝对权重最小的特征。在修剪的集合上递归地重复该过程,直到最终达到期望的要选择的要素数量。
RFECV
在交叉验证循环中执行RFE以找到最佳数量的特征。
例子:
- 递归特征消除:递归特征消除示例,显示数字分类任务中像素的相关性。
- 递归功能消除与交叉验证:递归功能消除示例,自动调整通过交叉验证选择的功能数量。
使用SelectFromModel功能选择
SelectFromModel
是一种元变压器,可以与任何在拟合后具有coef_
或feature_importances_
属性的估计器一起使用。如果相应的coef_
或feature_importances_
值低于提供的 threshold
参数,则这些特征被认为是不重要和被去除的 。除了在数值上指定阈值之外,还有内置的启发式方法用于使用字符串参数来查找阈值。可用的启发式是“平均值”,“中位数”和浮点倍数,如“0.1 * mean”。
有关如何使用的示例,请参阅以下部分。
例子
- 使用SelectFromModel和LassoCV进行功能选择:从波士顿数据集中选择两个最重要的功能,而不必事先知道阈值。
基于L1-特征选择
用L1范数惩罚的线性模型具有稀疏解:他们的许多估计系数为零。当目标是降低与另一个分类器一起使用的数据的维度时,它们可以与feature_selection.SelectFromModel
选择非零系数一起使用。特别是对于这个目的有用的稀疏估计是linear_model.Lasso
用于回归linear_model.LogisticRegression
和svm.LinearSVC
归类和分类:
|
使用SVM和逻辑回归,参数C控制稀疏度:较小的C选择的功能越少。使用Lasso,Alpha参数越高,所选的功能越少。
例子:
- 使用稀疏特征的文本文档分类:文档分类不同算法的比较,包括基于L1的特征选择。
L1恢复和压缩感测
对于α的好选择,只要满足某些特定条件,Lasso可以仅使用少量观察结果完全恢复精确的一组非零变量。特别地,样本数应该“足够大”,否则L1模型将随机执行,其中“足够大”取决于非零系数的数量,特征数的对数,噪声量,非零系数的最小绝对值以及设计矩阵X的结构。此外,设计矩阵必须显示某些特定属性,例如不太相关。
选择用于恢复非零系数的alpha参数没有一般规则。它可以通过交叉验证(LassoCV
或LassoLarsCV
)进行设置,尽管这可能导致处罚不力的模型:包括少量非相关变量对预测分数不是有害的。LassoLarsIC
相反,BIC()倾向于设置高的α值。
参考 Richard G. Baraniuk“压缩感知”,IEEE信号处理杂志[120] 2007年7月http://dsp.rice.edu/sites/dsp.rice.edu/files/cs/baraniukCSlecture07.pdf
随机稀疏模型
在特征选择方面,有一些众所周知的用于回归和分类的L1惩罚模型的限制。例如,已知Lasso将倾向于从一组高度相关的特征中选择一个单独的变量。此外,即使特征之间的相关性不太高,L1惩罚方法一致地选择“良好”特征的条件一般也可以是限制性的。
为了减轻这个问题,可以使用诸如[B2009]和[M2010]中提出的随机化技术。被称为稳定性选择的后一种技术在模块中实现sklearn.linear_model
。在稳定性选择方法中,数据的子样本适合于L1惩罚模型,其中系数的随机子集的惩罚已经被缩放。具体地,给定数据的子样本 ,其中是大小数据的随机子集,获得以下修改的套索拟合:
在哪里是公平的伯努利随机变量的独立试验,是比例因子。通过在不同随机子样本和伯努利试验中重复此过程,可以计算随机化程序选择每个特征的次数,并将这些分数用作特征选择的分数。
RandomizedLasso
使用Lasso实现这种回归设置策略,同时RandomizedLogisticRegression
使用逻辑回归,适用于分类任务。要获得可以使用的稳定性分数的完整路径lasso_stability_path
。
注意,随机稀疏模型在检测非零特征时比标准F统计量更强大,地面实数模型应该是稀疏的,换句话说,应该只有一小部分特征不为零。
例子:
- 稀疏恢复:稀疏线性模型的特征选择:比较不同特征选择方法的一个例子,并讨论在哪种情况下,每种方法是有利的。
参考文献:
[B2009] | F.Bach,“Model-Consistent Sparse Estimation through the Bootstrap”,https://hal.inria.fr/hal-00354771/ |
[M2010] | N.Meinshausen,P.Bohlmann,“Stability selection”,Journal of the Royal Statistical Society,72(2010)http://arxiv.org/pdf/0809.2932.pdf |
基于树的特征选择
基于树的估计器(参见sklearn.tree
模块中树的模块和森林sklearn.ensemble
)可以用于计算特征重要性,而后者又可用于丢弃不相关的特征(与sklearn.feature_selection.SelectFromModel
元变换器耦合时):
|
例子:
- 与森林森林的特征重要性:合成数据示例显示实际有意义的特征的恢复。
- 具有平行森林树木的像素重要性:人脸识别数据示例。
功能选择作为管道的一部分
在进行实际学习之前,功能选择通常用作预处理步骤。在scikit学习中推荐的方法是使用sklearn.pipeline.Pipeline
:
|
在这个片段中,我们利用一个sklearn.svm.LinearSVC
耦合sklearn.feature_selection.SelectFromModel
来评估特征重要性并选择最相关的特征。然后,a sklearn.ensemble.RandomForestClassifier
对转换的输出进行训练,即仅使用相关的特征。您可以使用其他功能选择方法和分类器执行类似的操作,以提供评估功能重要性的方法。有关sklearn.pipeline.Pipeline
详细信息,请参阅示例。