sklearn中的单变量特征选择

单变量的特征选择是通过基于一些单变量的统计度量方法来选择最好的特征,比如卡方检测等。Scikit-learn 将单变量特征选择的学习器作为实现了 transform方法的对象:

sklearn中实现的方法有:

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

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

  • 对于回归: f_regression , mutual_info_regression
  • 对于分类: chi2 , f_classif , mutual_info_classif

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

稀疏数据的特征选择

如果你使用的是稀疏的数据 (例如数据可以由稀疏矩阵来表示),
chi2 , mutual_info_regression , mutual_info_classif 可以处理数据并保持它的稀疏性。

以上文字主要来自于ApacheCN的sklearn0.19的用户手册的翻译,略有修改

例子

简单使用

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest,SelectPercentile
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
print("X.shape : ",X.shape)
X_new = SelectKBest(chi2, k=2).fit_transform(X, y) # k=2 保留两个特征
print("X_new.shape : ",X_new.shape)
X_new_2 = SelectPercentile(score_func=chi2, percentile=75).fit_transform(X,y) # percentile=75 保留75%
print("X_new_2.shape : ",X_new_2.shape)
X.shape :  (150, 4)
X_new.shape :  (150, 2)
X_new_2.shape :  (150, 3)

Comparison of F-test and mutual information

F-test 与 mutual information 的比较,这个例子说明了单变量F检验统计量和互信息量之间的差异。

我们考虑3个特征x_1,x_2,x_3在[0,1]上均匀分布,目标依赖于它们如下:

y = x_1 + sin(6 * pi * x_2)+ 0.1 * N(0,1),即第三个特征是完全不相关的。

下面的代码绘制了y对个体x_i的依赖性和单变量F检验统计量和互信息的归一化值。由于F检验仅捕获线性依赖性,因此将x_1作为最具有判别力的特征。另一方面,互信息可以捕捉变量之间的任何依赖关系,并将x_2作为最具有判别力的特征,这可能与我们对这个例子的直观认识更为一致。这两种方法都正确地将x_3标记为无关紧要。

但是与方差过滤同样的在于,很多时候去除了低指标的数据之后,并不一定代表这性能的上升,甚至可能是下降。这主要取决于你选择的统计函数。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regressionnp.random.seed(0)
X = np.random.rand(1000, 3)
y = X[:, 0] + np.sin(6 * np.pi * X[:, 1]) + 0.1 * np.random.randn(1000)f_test, _ = f_regression(X, y)
f_test /= np.max(f_test)mi = mutual_info_regression(X, y)
mi /= np.max(mi)plt.figure(figsize=(15, 5))
for i in range(3):plt.subplot(1, 3, i + 1)plt.scatter(X[:, i], y, edgecolor='black', s=20)plt.xlabel("$x_{}$".format(i + 1), fontsize=14)if i == 0:plt.ylabel("$y$", fontsize=14)plt.title("F-test={:.2f}, MI={:.2f}".format(f_test[i], mi[i]),fontsize=16)
plt.show()

其他例子

除了上面的两个例子外,sklearn的官网还给出了一个多项式核的非线性支持向量机的例子Univariate Feature Selection,其证明了单变量特征选择在多项式核的非线性支持向量机的实际作用是让原模型将注意力更多地放在了更重要的特征上,其与多项式核的非线性支持向量机本身所得到的特征重要程度的对比同样有着微妙的联系.原文点这里

参考

  • sklearn官方文档:Univariate Feature Selection
  • sklearn官方文档:Comparison of F-test and mutual information
  • sklearn ApacheCN 官方翻译

转载于:https://www.cnblogs.com/fonttian/p/9162731.html

单变量特征选择:Univariate feature selection相关推荐

  1. sklearn 5.14.7 univariate feature selection

    # 一个单变量特征选择的例子 # 在使用iris数据集时,会往里添加噪音特征,然后再应用单变量特征选择.对于每一个特征,会同时展示出单变量特征选择给出的p值和SVM算法给出的权重值 # 可以看到单变量 ...

  2. 机器学习 基础理论 学习笔记 (8)特征选择(feature selection)(一)

    0.说明 本文也许比较乱,请看目录再食用. 后续会 出文 机器学习 基础理论 学习笔记 (8)特征选择(feature selection)(二) 将 分类问题 和 回归问题 分开总结. 以及或将出文 ...

  3. R语言基于随机森林进行特征选择(feature selection)

    R语言基于随机森林进行特征选择(feature selection) 目录 R语言基于随机森林进行特征选择(feature selection)

  4. 特征选择(Feature Selection)

    主要内容: 为什么要进行特征选择? 什么是特征选择? 怎么进行特征选择 特征选择: 在现实生活中,一个对象往往具有很多属性(以下称为特征),这些特征大致可以被分成三种主要的类型: 相关特征:对于学习任 ...

  5. 斯坦福大学机器学习——特征选择(Feature selection)

    特征选择是一种及其重要的数据预处理方法.假设你需要处理一个监督学习问题,样本的特征数非常大(甚至 ),但是可能仅仅有少部分特征会和对结果产生影响.甚至是简单的线性分类,如果样本特征数超过了n,但假设函 ...

  6. 特征选择-单变量特征选择

    1.SelectKBest可以依据相关性对特征进行选择,保留k个评分最高的特征. ①方差分析 分类问题使用f_classif,回归问题使用f_regression. f_classif:分类任务 跟目 ...

  7. 【机器学习】Feature selection – Part I: univariate selection

    Feature selection – Part I: univariate selection 特征选择--1:单变量选择 原文链接:http://blog.datadive.net/selecti ...

  8. 特征选择与稀疏学习(Feature Selection and Sparse Learning)

    本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...

  9. 使用通用的单变量选择特征选择提高Kaggle分数

    Kaggle 是全球首屈一指的数据科学网,Kaggle 现在每月提供表格竞赛,为像我这样的新手提供提高该领域技能的机会.因为 Kaggle 提供了一个很好的机会来提高我的数据科学技能,所以我总是期待着 ...

最新文章

  1. WebSocket在容器化管理平台的应用
  2. 谷歌利用OKR系统考核 脑力行业或可借鉴
  3. In English or Chinese?
  4. k8s高可用集群多个主节点_k8s-高可用集群实现(keepalived)
  5. [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
  6. 2021-2025年中国窗帘行业市场供需与战略研究报告
  7. C# 使用X509Certificate2获取数字证书信息对接联通沃支付
  8. USB Repair v8.1.3.1285 – USB 修复工具
  9. 40个经典的社交心理学现象
  10. 一次完整的HTPPS请求
  11. Tesseract-OCR 图片数字识别的样本训练
  12. php和android和mysql_如何使用JSON连接Android和PHP Mysql数据库
  13. Ubuntu18.04网络连接图标上显示问号
  14. Niagara Networks和Fortinet安全解决方案
  15. 最近感觉公司的福利还不错
  16. java小游戏之飞机大战
  17. 12、手机归属地查询API接口,免费好用
  18. fragment中viewpage2留白的问题
  19. php如何实现局域网,局域网中是如何实现一对一通信
  20. 13天搞定java_[Java基础] 魔乐科技教你13天搞定JAVA系列高端教程 视频教程 教学视频...

热门文章

  1. 关于网络安全的画怎么画,关于网络的东西简笔画
  2. Android 11 之后,获取 Android 手机屏幕的尺寸(英寸)
  3. Linux操作系统配置Go编程环境
  4. 测试听力 html,听力测试,看看你的耳朵听力受损了没
  5. TensorFlow - 求导
  6. 网页打印预览为空白页,解决!!
  7. 老码识途——在堆中构建mov和jmp指令
  8. 【opencv】(9) 图像识别实战:银行卡数字识别,附python完整代码和数据集
  9. 7-3 Point3D类
  10. c# 使用百度通用翻译api DEMO 报错