在建立机器模型时,并不是所有属性对模型有同等贡献的,也不是属性越多,模型也好,因此要从众多属性中选择对模型输出及预测结果贡献最大的特征变量,这个过程就叫特征选择,特征选择的作用:消除无关变量,较少训练数据,节省了训练时间,同时提供了模型准确率,也可以缓解过拟合问题。

sklearn.feature_selection模块实现了特征选择算法,目前主要包括:单变量特征选择和递归特征消除。该模块的类主要用于特征选择或样本集上降维,提高算法的准确率或者提升在高位数据集上表现

①sklearn.feature_selection.VarianceThreshold(threshold=0.0):通过特征的方差来提取特征,默认方差为0的特征会自动删除

  • 默认删除方差为0的特征
[python] view plaincopy
  1. In [1]: from sklearn.feature_selection import VarianceThreshold
  2. ...: X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
  3. ...: selector = VarianceThreshold()#默认threshold=0.0
  4. ...: selector.fit_transform(X)
  5. ...:
  6. Out[1]:
  7. array([[2, 0],
  8. [1, 4],
  9. [1, 1]])
  • 指定方差阈值(threshold)参数:表示只提取特征方差大于阈值的特征
[python] view plaincopy
  1. In [6]: from sklearn.feature_selection import VarianceThreshold
  2. ...: X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 6]]
  3. ...: selector = VarianceThreshold(threshold=2)
  4. ...: selector.fit_transform(X)
  5. ...:
  6. Out[6]:
  7. array([[0],
  8. [4],
  9. [1]])
  10. In [7]: selector.variances_
  11. Out[7]: array([ 0.        ,  0.22222222,  2.88888889,  2.        ])
  • 通过variances_属性查看样本各个特征的方差
[python] view plaincopy
  1. In [2]: selector.variances_
  2. Out[2]: array([ 0.        ,  0.22222222,  2.88888889,  0.        ])
  • fit(X, y=None):从特征向量X中学习方差,返回sklearn.feature_selection.variance_threshold.VarianceThreshold对象,y参数只是为了兼容sklearn.pipeline.Pipeline
[python] view plaincopy
  1. In [8]: from sklearn.feature_selection import VarianceThreshold
  2. ...: X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 6]]
  3. ...: st = VarianceThreshold(threshold=2)
  4. ...: st.fit(X)
  5. ...: print(type(st.fit(X)))
  6. ...: st.variances_
  7. ...:
  8. <class 'sklearn.feature_selection.variance_threshold.VarianceThreshold'>
  9. Out[8]: array([ 0.        ,  0.22222222,  2.88888889,  2.        ])
  • fit_transform(X, y=None, **fit_params):返回提取特征转换后的数组
[python] view plaincopy
  1. In [9]: selector.fit_transform(X)
  2. Out[9]:
  3. array([[0],
  4. [4],
  5. [1]])
  • get_params(deep=True):获取估计器参数,以字典形式返回
[python] view plaincopy
  1. In [10]: selector.get_params(deep=True)
  2. Out[10]: {'threshold': 2}
  • get_support(indices=False):若indices参数为False,返回所有特征的布尔数组,满足条件的特征列为True,不满足的特征列为False;若indices为True,则满足条件的特征列对应的整数组成的数组
[python] view plaincopy
  1. In [11]: selector.get_support(False)
  2. Out[11]: array([False, False,  True, False], dtype=bool)
  3. In [12]: selector.get_support(True)
  4. Out[12]: array([2], dtype=int64)
  • inverse_transform(X):返回X剔除的特征列值用0替换的数组
[python] view plaincopy
  1. In [13]: selector.inverse_transform(selector.fit_transform(X))
  2. Out[13]:
  3. array([[0, 0, 0, 0],
  4. [0, 0, 4, 0],
  5. [0, 0, 1, 0]])
  • set_params(**params):设置估计器参数
[python] view plaincopy
  1. In [14]: selector.set_params(threshold=1)
  2. Out[14]: VarianceThreshold(threshold=1)
  • transform(X):数据转换
[python] view plaincopy
  1. In [15]: X2= [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
  2. ...: selector.transform(X2)
  3. ...:
  4. Out[15]:
  5. array([[0, 3],
  6. [4, 3],
  7. [1, 3]])

②sklearn.feature_selection.GenericUnivariateSelect(score_func=<function f_classif>, mode=’percentile’,param=1e-05):可以设置不同的策略来进行单变量特征选择,也可以同时超参数调优选择最佳单变量选择策略

参数说明:

score_func:回调函数,函数接受X和y两个数组,返回(scores, pvalues)元组数组

mode:特征选择模式,可选项:‘percentile’, ‘k_best’, ‘fpr’, ‘fdr’, ‘fwe’

[python] view plaincopy
  1. In [1]: from sklearn.datasets import load_iris
  2. ...: from sklearn.feature_selection import chi2
  3. ...: from sklearn.feature_selection import GenericUnivariateSelect
  4. ...: iris = load_iris()
  5. ...: X,y = iris.data , iris.target
  6. ...: s = GenericUnivariateSelect(score_func =chi2, mode='k_best',param=2)
  7. ...: s.fit_transform(X,y)
  8. ...:
  9. Out[1]:
  10. array([[ 1.4,  0.2],
  11. [ 1.4,  0.2],
  12. [ 1.3,  0.2],
  13. [ 1.5,  0.2],
  14. [ 1.4,  0.2],
  15. [ 1.7,  0.4],
  16. .....
  17. [ 5.4,  2.3],
  18. [ 5.1,  1.8]])

scores_属性:查看各个特征的score

[python] view plaincopy
  1. In [2]: s.scores_
  2. Out[2]: array([  10.81782088,    3.59449902,  116.16984746,   67.24482759])

pvalues_属性:查看各特征P值

[python] view plaincopy
  1. In [3]: s.pvalues_
  2. Out[3]:
  3. array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
  4. 2.50017968e-15])

③sklearn.feature_selection.SelectKBest(score_func=<function f_classif>, k=10):scores按升序排序,选择排前k名所对应的特征

参数说明:k取整数或all

属性值:

[python] view plaincopy
  1. In [1]: from sklearn.datasets import load_iris
  2. ...: from sklearn.feature_selection import SelectKBest,chi2
  3. ...: iris = load_iris()
  4. ...: X,y  = iris.data,iris.target
  5. ...: s = SelectKBest(chi2, k='all').fit(X,y)
  6. ...:
  7. In [2]: s.scores_
  8. Out[2]: array([  10.81782088,    3.59449902,  116.16984746,   67.24482759])
  9. In [3]: s.pvalues_
  10. Out[3]:
  11. array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
  12. 2.50017968e-15])
  13. In [4]: sk =SelectKBest(chi2, k=2).fit(X,y)
  14. In [5]: sk.scores_
  15. Out[5]: array([  10.81782088,    3.59449902,  116.16984746,   67.24482759])
  16. In [6]: sk.pvalues_
  17. Out[6]:
  18. array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
  19. 2.50017968e-15])

方法:

  • fit_transform(X, y=None, **fit_params):训练和转换数据
[python] view plaincopy
  1. In [7]: sk.fit_transform(X,y)
  2. Out[7]:
  3. array([[ 1.4,  0.2],
  4. [ 1.4,  0.2],
  5. [ 1.3,  0.2],
  6. ...
  7. [ 5.2,  2. ],
  8. [ 5.4,  2.3],
  9. [ 5.1,  1.8]])
  • get_support(indices=False):indices=False返回布尔数组,选择的特征列为True,未选择的特征列为False;indices=True返回选择特征列的整数索引
[python] view plaincopy
  1. In [8]: sk.get_support(indices=False)
  2. Out[8]: array([False, False,  True,  True], dtype=bool)
  3. In [9]: sk.get_support(indices=True)
  4. Out[9]: array([2, 3], dtype=int64)
  • inverse_transform(X):返回和原X大小相同的数组,未选择的特征用0替换
[python] view plaincopy
  1. In [11]: sk.inverse_transform(sk.fit_transform(X,y))
  2. Out[11]:
  3. array([[ 0. ,  0. ,  1.4,  0.2],
  4. [ 0. ,  0. ,  1.4,  0.2],
  5. [ 0. ,  0. ,  1.3,  0.2],
  6. [ 0. ,  0. ,  1.5,  0.2],
  7. ....
  8. [ 0. ,  0. ,  5.4,  2.3],
  9. [ 0. ,  0. ,  5.1,  1.8]])
  • transform(X):返回X降维到所选的特征上数组
[python] view plaincopy
  1. In [3]: sk.transform(X)
  2. Out[3]:
  3. array([[ 1.4,  0.2],
  4. [ 1.4,  0.2],
  5. [ 1.3,  0.2],
  6. [ 1.5,  0.2],
  7. ...
  8. [ 5.4,  2.3],
  9. [ 5.1,  1.8]])

④sklearn.feature_selection.SelectPercentile(score_func=<function f_classif>, percentile=10):scores按升序排序,选择排前百分percentile所对应的特征

[python] view plaincopy
  1. In [1]: from sklearn.datasets import load_iris
  2. ...: from sklearn.feature_selection import SelectPercentile,chi2
  3. ...: iris = load_iris()
  4. ...: X, y = iris.data, iris.target
  5. ...: sp=SelectPercentile(chi2, percentile=33).fit(X,y)
  6. ...: print(sp.scores_)
  7. ...: X_new = sp.fit_transform(X,y)
  8. ...: X_new[:10]
  9. ...:
  10. [  10.81782088    3.59449902  116.16984746   67.24482759]
  11. Out[1]:
  12. array([[ 1.4],
  13. [ 1.4],
  14. [ 1.3],
  15. [ 1.5],
  16. [ 1.4],
  17. [ 1.7],
  18. [ 1.4],
  19. [ 1.5],
  20. [ 1.4],
  21. [ 1.5]])
  22. In [2]: from sklearn.datasets import load_iris
  23. ...: from sklearn.feature_selection import SelectPercentile,chi2
  24. ...: iris = load_iris()
  25. ...: X, y = iris.data, iris.target
  26. ...: sp=SelectPercentile(chi2, percentile=34).fit(X,y)
  27. ...: print(sp.scores_)
  28. ...: X_new = sp.fit_transform(X,y)
  29. ...: X_new[:10]
  30. ...:
  31. [  10.81782088    3.59449902  116.16984746   67.24482759]
  32. Out[2]:
  33. array([[ 1.4,  0.2],
  34. [ 1.4,  0.2],
  35. [ 1.3,  0.2],
  36. [ 1.5,  0.2],
  37. [ 1.4,  0.2],
  38. [ 1.7,  0.4],
  39. [ 1.4,  0.3],
  40. [ 1.5,  0.2],
  41. [ 1.4,  0.2],
  42. [ 1.5,  0.1]])

没明白上述percentile=33时,只选择一个特征,而percentile=34时,选择了两个特征,该比例值时如何计算的? -----遗留问题

⑤sklearn.feature_selection.SelectFpr(score_func=<function f_classif>, alpha=0.05):alpha默认值为0.05,过滤掉特征的pvalues_高于指定alpha的特征

[python] view plaincopy
  1. In [3]: from sklearn.datasets import load_iris
  2. ...: from sklearn.feature_selection import SelectFpr,chi2
  3. ...: iris = load_iris()
  4. ...: X, y = iris.data, iris.target
  5. ...: sp=SelectFpr(chi2, alpha=0.05).fit(X,y)
  6. ...:
  7. In [4]: sp.pvalues_
  8. Out[4]:
  9. array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
  10. 2.50017968e-15])
  11. In [5]: sp.get_support(indices=True)
  12. Out[5]: array([0, 2, 3], dtype=int64)

⑥sklearn.feature_selection.SelectFdr(score_func=<function f_classif>, alpha=0.05),同SelectFpr类似

[python] view plaincopy
  1. In [6]: from sklearn.datasets import load_iris
  2. ...: from sklearn.feature_selection import SelectFdr,chi2
  3. ...: iris = load_iris()
  4. ...: X, y = iris.data, iris.target
  5. ...: sp=SelectFdr(chi2, alpha=0.004).fit(X,y)
  6. ...:
  7. In [7]: sp.pvalues_
  8. Out[7]:
  9. array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
  10. 2.50017968e-15])
  11. In [8]: sp.get_support(indices=True)
  12. Out[8]: array([2, 3], dtype=int64)

sklearn特征选择类库使用小结相关推荐

  1. scikit-learn K近邻法类库使用小结

    1. scikit-learn 中KNN相关的类库概述 在scikit-learn 中,与近邻法这一大类相关的类库都在sklearn.neighbors包之中.KNN分类树的类是KNeighborsC ...

  2. scikit-learn Adaboost类库使用小结

    在集成学习之Adaboost算法原理小结中,我们对Adaboost的算法原理做了一个总结.这里我们就从实用的角度对scikit-learn中Adaboost类库的使用做一个小结,重点对调参的注意事项做 ...

  3. 06_特征选择,特征选择的原因,sklearn特征选择API

    1.特征选择 在现实生活中,一个对象往往具有很多属性(以下称为特征),这些特征大致可以被分成三种主要的类型: 1.相关特征: 对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果: 2.无关特征 ...

  4. python xgboost用法_XGBoost类库使用小结

    在XGBoost算法原理小结中,我们讨论了XGBoost的算法原理,这一片我们讨论如何使用XGBoost的Python类库,以及一些重要参数的意义和调参思路. 1. XGBoost类库概述 XGBoo ...

  5. XGBoost类库使用小结

    在XGBoost算法原理小结中,我们讨论了XGBoost的算法原理,这一片我们讨论如何使用XGBoost的Python类库,以及一些重要参数的意义和调参思路. 本文主要参考了XGBoost的Pytho ...

  6. scikit-learn 逻辑回归类库使用小结

    之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结.这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结.重点讲述调参中要注意的事项. 1. 概述 在scikit-lear ...

  7. scikit-learn 朴素贝叶斯类库使用小结

    之前在朴素贝叶斯算法原理小结这篇文章中,对朴素贝叶斯分类算法的原理做了一个总结.这里我们就从实战的角度来看朴素贝叶斯类库.重点讲述scikit-learn 朴素贝叶斯类库的使用要点和参数选择. 1. ...

  8. scikit-learn决策树算法类库使用小结及可视化方法

    2019独角兽企业重金招聘Python工程师标准>>> 1. scikit-learn决策树算法类库介绍 scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法 ...

  9. scikit-learn决策树算法类库使用小结

    之前对决策树的算法原理做了总结,包括决策树算法原理(上)和决策树算法原理(下).今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的 ...

  10. 决策树留一法python代码_ScikitLearn决策树算法类库使用小结

    1 scikit-learn决策树算法类库介绍 scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归.分类决策树的类对应的是DecisionTree ...

最新文章

  1. mysql查看当前实时连接数
  2. 实现AGI,强化学习就够了?Sutton:奖励机制足够实现各种目标
  3. python识别简单训练模型_Python3+OpenCV实现简单交通标志识别
  4. Mui --- app与服务器之间的交互原理、mui ajax使用
  5. java解析xml文件四种方式介绍、性能比较和基本使用方法
  6. 基于图结构的图合成与差分隐私【LDPGen】
  7. 深度学习笔记(11) 超参数调试
  8. C雨涵课后习题(18)
  9. 数据结构—链表-建立单链表
  10. Android 设备上可以实现 3D Touch 吗?| 原力计划
  11. oracle正则表达式
  12. android删除未知字符,如何删除Android Studio中所有配置的未使用字符串资源?
  13. 群晖修改php文件系统,群晖6.2版本修改eSATA挂载NTFS硬盘设置方法
  14. 计算机桌面声音图标,声音图标不见了,教您电脑声音图标不见了如何解决
  15. [moment 使用]-javascript使用
  16. 小米路由器 你的连接不是专用连接
  17. 关于学校订单班的那些事
  18. thinkphp5学习路程 三 数据库操作
  19. MERGE操作学习总结
  20. GDKOI2018爆炸记

热门文章

  1. Packet Tracer基本使用
  2. linux|计划任务
  3. 新建mavan项目转为web项目
  4. 电子邮件服务器-PostFix
  5. 分布式与集群的联系与区别
  6. Oracle:grouping和rollup
  7. 几个更新(Update声明)查询方法
  8. Java架构师成长之道之Java数据存储
  9. C# Get请求携带body
  10. 实习阶段修改的第一个bug(完成了一个需求)