特征选择(2)

特征选择(1)

 

在sklearn.feature_selection模块中,可以对样本集进行特征选择(feature selection)和降维(dimensionality reduction),这样会提高估计器的准确度或者增强在高维数据集上的性能。

 

1. 移除低方差特征

VarianceThreshold是特征选择的一个基本方法,移除所有方差不满足阈值的特征。默认移除所有零方差特征,即在所有样本上取值不变的特征。

例如:假设有一个特征是布尔值的数据集,我们要移除那些在整个数据集中特征为0或者为1的比例超过80%的特征。布尔特征是伯努利随机变量,变量方差为 Var[X] = p(1-p),因此,我们用阈值“0.8*(1-0.8)”进行选择:

from sklearn.feature_selection import VarianceThreshold

X = [[0,0,1], [0,1,0], [1,0,0], [0,1,1], [0,1,0], [0,1,1]]
sel = VarianceThreshold(threshold=(.8*(1-.8)))

print(sel.fit_transform(X))
[[0 1]
 [1 0]
 [0 0]
 [1 1]
 [1 0]
 [1 1]]

VarianceThreshold移除了第一列,它的值为0的概率为 p=5/6>0.8

 

2. 单变量特征选择

单变量的特征选择是通过基于单变量的统计测试来选择最好的特征。它可以当做评估期的预处理步骤。

Scikit-learn将特征选择的内容作为实现transform方法的对象:

  • SelectKBest:移除评分最高的K个特征之外的所有特征
  • SelectPercentile:移除指定的最高得分百分比之外的所有特征
  • 对每个特征应用常见的单变量统计测试:假阳性率(false positive rate)SelectFpr,伪发现率(false discovery rate)SelectFdr,或族系误差(family wise error)SelectFwe
  • GenericUnivariateSelect:允许使用可配置方法来进行单变量特征选择。它允许超参数搜索评估器来选择最好的单变量特征。

例如下面的实例,我们可以使用 \chi^2 检验样本集来选择最好的两个特征:

>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)

这些对象将得分函数作为输入,返回单变量的得分和 p 值 (或者仅仅是 SelectKBest 和 SelectPercentile 的分数):

对于回归:f_regressionmutual_info_regression

对于分类:chi2f_classifmutual_info_classif

这些基于 F-test 的方法计算两个随机变量之间的线性相关程度。另一方面,mutual information methods(互信息)能够计算任何种类的统计相关性,但是作为非参数的方法,互信息需要更多的样本来进行准确的估计。

 

3. 特征选择作为pipeline(管道)的一部分

特征选择通常在机器学习之前来做预处理。具体表现如scikit-learn中的sklearn.pipeline.Pipeline

clf = Pipeline([
  ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
  ('classification', RandomForestClassifier())
])
clf.fit(X, y)

在上述代码中, 首先利用sklearn.svm.LinearSVC和sklearn.feature_selection.SelectFromModel来评估特征的重要性并选择出相关的特征然后,在转换后的输出中使用sklearn.ensemble.RandomForestClassifier分类器。

 

 

 

来自:sklearn官方文档

posted @ 2020-07-22 23:10  做梦当财神  阅读(314)  评论(0编辑  收藏  举报