特征选择

Posted keye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征选择相关的知识,希望对你有一定的参考价值。

在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:允许使用可配置方法来进行单变量特征选择。它允许超参数搜索评估器来选择最好的单变量特征。

例如下面的实例,我们可以使用 技术图片 检验样本集来选择最好的两个特征:

>>> 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(互信息)能够计算任何种类的统计相关性,但是作为非参数的方法,互信息需要更多的样本来进行准确的估计。

 

 

 

来自:sklearn官方文档

以上是关于特征选择的主要内容,如果未能解决你的问题,请参考以下文章

创建特征向量以对空中图像中的片段进行分类

20个简洁的 JS 代码片段

微信小程序代码片段

20个简洁的 JS 代码片段

pycharm添加Odoo代码片段

Android - 片段中的联系人选择器