sklearn学习之使用sklearn进行特征选择

2023-11-16


在本节中我们将使用 sklearn.feature_selection模块中的类在高维度的样本集上进行特征选择、降维来提升估计器的性能。

1. Removing features with low variance方差选择法

sklearn.feature_selection.VarianceThreshold(threshold=0.0)

方差选择法是一种进行特征选择的简单的baseline方法,它移除所有不满足给定阈值要求的特征。阈值默认为0,此方法默认移除方差为0的特征,即在所有样本上取值相同的特征。
example:

from sklearn.feature_selection import VarianceThreshold
# X_train的方差为[0.        , 0.22222222, 2.88888889, 0.        ]
X_train = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
# X_test的方差为[1.55555556, 8.66666667, 0.22222222, 0.22222222]
X_test = [[1, 2, 0, 3], [3, 4, 0, 3], [4, 9, 1, 2]]
# 实例化一个阈值为0.5的方差选择器对象
selector = VarianceThreshold(threshold=0.5)
# fit方法计算给定数据(这里为X_train)的方差,返回一个实例化对象
selector.fit(X_train)
# variances属性返回X_train每个特征的方差值
selector.variances_
# 使用方差选择器去选择X_train的特征,输出为第二列[[0],[4],[1]]
X_train = selector.transform(X_train)
# 使用方差选择器去选择X_test的特征,输出为第二列[[0],[0],[1]]
X_test = selector.transform(X_test)
  • 如上面的例子,第一步实例化一个阈值为0.5的方差选择器对象,选择器此时只知道它的阈值为0.5;
  • 第二步对于给定的训练数据X_train进行fit操作,在fit阶段选择器selector首先计算X_train每个特征的方差,然后按照threshold进行选择,如上面的例子按照计算出来的方差的大小以及给定的threshold只有第二列(从0开始)满足条件,将这个条件保存下来,具体的保存方式可能是以mask的形式,如[False,False,True,False],(注意此时还没有进行特征选择的行为,只是选择器将如何选择特征的方法已经保存在了选择器对象中),
  • 第三步transform,在transform传入的数据和fit传入的数据在特征维度上相等的情况下,按照mask选择第二列作为特征选择后的结果,注意在transform的过程中不需要计算给定数据(X_train或X_test)的特征方差。
  • 其实这里的fit和transform方法可以把它们类比为模型的train和predict过程进行理解,在这个例子中我们的特征选择器按照给定的训练数据方差进行特征选择,然后选择训练数据特征和测试数据特征,虽然测试数据中第0列和第1列的方差更大,所以在实际的处理过程中对数据的要求很高,一方面样本很多的情况下不会出现测试数据和训练数据对应特征相差过大的情况,另一方面训练数据和测试数据在采样的时候应该保证它们尽可能服从同一个分布,不会出现我们例子中的极端情况。
  • 方差选择法根据实际的训练数据的不同和给定阈值的不同单独考虑特征的分布,更倾向于选择分布比较离散的特征,每次可以剔除不定数量的特征。

2. Univariate feature selection 单变量特征选择

单变量特征选择是在单变量统计检验的基础上选择最佳特征。它可以看做估计器的预处理阶段,sklearn将特征选择流程看做实现transform方法的对象。
单变量特征选择可以从多个方面观察每个独立特征对于目标变量的影响,清楚直观,易于理解;但忽视了特征之间可能存在的某些关系。

2.1 特征选择方法

  • SelectKBest removes all but the highest scoring features
  • SelectPercentile removes all but a user-specified highest scoring percentage of features
  • using common univariate statistical tests for each feature: false positive rate SelectFpr, false discovery rate SelectFdr, or family wise error SelectFwe.
  • GenericUnivariateSelect allows to perform univariate feature selection with a configurable strategy. This allows to select the best univariate selection strategy with hyper-parameter search estimator.

SelectKBest按照scores保留K个特征;SelectPercentile按照scores保留指定百分比的特征;SelectFprSelectFdrSelectFwe对每个特征使用通用的单变量统计检验;GenericUnivariateSelect允许使用可配置策略如超参数搜索估计器选择最佳的单变量选择策略。

These objects take as input a scoring function that returns univariate scores and p-values (or only scores for SelectKBest and SelectPercentile):

  • For regression: f_regression, mutual_info_regression
  • For classification: chi2, f_classif, mutual_info_classif

The methods based on F-test estimate the degree of linear dependency between two random variables. On the other hand, mutual information methods can capture any kind of statistical dependency, but being nonparametric, they require more samples for accurate estimation.

2.2 特征选择指标

method describe scenery
f_classif(X, y) 计算样本的方差分析f值 分类
mutual_info_classif(X, y) 估计离散目标变量的互信息 分类
chi2(X, y) 计算非负特征和类别之间的卡方统计数据 分类
f_regression(X, y) 计算单个特征和目标变量线性回归测试的f值 回归
mutual_info_regression(X, y) 估计连续目标变量的互信息 回归

f-regression

sklearn.feature_selection.f_regression(X, y, center=True)

  • X是特征矩阵,y是目标变量,center表示是否对X和y进行中心化
  • 第一步,计算每个特征与目标变量的相关系数
    - ( ( X [ : , i ] − m e a n ( X [ : , i ] ) ) ∗ ( y − m e a n y ) ) / ( s t d ( X [ : , i ] ) ∗ s t d ( y ) ) ((X[:, i] - mean(X[:, i])) * (y - mean_y)) / (std(X[:, i]) * std(y)) ((X[:,i]mean(X[:,i]))(ymeany))/(std(X[:,i])std(y))
  • 第二步,将相关系数转换为F score和p-value

mutual_info_regression

sklearn.feature_selection.mutual_info_regression(X, y, discrete_features=’auto’, n_neighbors=3, copy=True, random_state=None)

  • X是特征矩阵,y是目标变量,discrete_features用于指定哪些是离散的特征,n_neighbors是[1][2]中用来估计随机变量互信息的近邻数,大的n_neighbors可以降低估计器的方差,但会造成偏差
  • 两个随机变量之间的互信息是一个非负值,度量变量之间的依赖关系。独立随机变量之间的互信息等于0,互信息越大表示依赖关系越强。
  • 该函数依赖于[1]和[2]中描述的基于k近邻距离的熵估计的非参数方法。这两种方法都基于[3]最初提出的思想。

2.3 示例

>>> 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)

3.Recursive feature elimination 递归特征消除

给定一个可以给出特征权重的外部estimator(如线性模型的系数),recursive feature elimination (RFE)就是递归地考虑越来越小的特征集合。第一步,estimator在所有原始特征上训练,通过coef_或者feature_importances_获得每个特征的重要性;第二步,最不重要的特征将会从现有的特征集中剪去,这个过程重复迭代直到特征的数目达到期望值。

RFECV实现了在RFE中使用cross-validation循环寻找最优特征数量的过程。

A recursive feature elimination example showing the relevance of pixels in a digit classification task.

A recursive feature elimination example with automatic tuning of the number of features selected with cross-validation.


4.基于模型的特征选择

sklearn.feature_selection.SelectFromModel(estimator, threshold=None, prefit=False, norm_order=1, max_features=None)

SelectFromModel is a meta-transformer that can be used along with any estimator that has a coef_ or feature_importances_ attribute after fitting. The features are considered unimportant and removed, if the corresponding coef_ or feature_importances_ values are below the provided threshold parameter. Apart from specifying the threshold numerically, there are built-in heuristics for finding a threshold using a string argument. Available heuristics are “mean”, “median” and float multiples of these like “0.1*mean”.
example: Feature selection using SelectFromModel and LassoCV

4.1 基于L1的特征选择

4.2 基于数的特征选择


5. Feature selection as part of a pipeline

使用sklearn.pipeline.Pipeline流程化预处理和训练过程

clf = Pipeline([
  ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
  ('classification', RandomForestClassifier())
])
clf.fit(X, y)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn学习之使用sklearn进行特征选择 的相关文章

  • sklearn GridSearchCV网格搜索和SVM的两个参数 C 和 gamma

    GridSearchCV 它存在的意义就是自动调参 只要把参数输进去 就能给出最优化的结果和参数 GridSearchCV用于系统地遍历多种参数组合 通过交叉验证确定最佳效果参数 引用自 公众号 写bug的程旭源 个人博客 写bug的程旭源
  • 10.机器学习sklearn-------手写数字识别实例

    1 概念介绍 图像识别 Image Recognition 是指利用计算机对图像进行处理 分析和理解 以识别各种不同模式的目标和对像的技术 图像识别的发展经历了三个阶段 文字识别 数字图像处理与识别 物体识别 机器学习领域一般将此类识别问题
  • sklearn库中数据预处理函数fit_transform()和transform()的区别--01

    coding utf 8 from sklearn import preprocessing import numpy as np from sklearn preprocessing import StandardScaler Stand
  • xgboost特征选择

    Xgboost在各大数据挖掘比赛中是一个大杀器 往往可以取得比其他各种机器学习算法更好的效果 数据预处理 特征工程 调参对Xgboost的效果有着非常重要的影响 这里介绍一下运用xgboost的特征选择 运用xgboost的特征选择可以筛选
  • 超参数优化--随机网格法

    随机网格搜索RandomizedSearchCV 在网格搜索时我们提到 伴随着数据和模型的复杂度提升 网格搜索所需要的时间急剧增加 以随机森林算法为例 如果使用过万的数据 搜索时间则会立刻上升好几个小时 因此 我们急需寻找到一种更加高效的超
  • 随机森林筛选变量(Python实现)

    文章转自每日一Python公众号 当数据集的特征过多时 容易产生过拟合 可以用随机森林来在训练之后可以产生一个各个特征重要性的数据集 利用这个数据集 确定一个阈值 选出来对模型训练帮助最大的一些特征 筛选出重要变量后可以再训练模型 本文所用
  • 关于K-means的通俗理解

    机器学习通俗理解系列 关于knn的通俗理解 文章目录 前言 一 什么是K means 二 什么原理 三 重点 1 K值的选定 2 样本之间的距离 四 优缺点 五 优化进阶 总结 前言 刚学习机器学习的时候免不了百度 问什么是K means
  • Python数据分析-房价预测及模型分析

    摘 要 Python数据分析 房价的影响因素图解https blog csdn net weixin 42341655 article details 120299008 spm 1001 2014 3001 5501 上一篇OF讲述了房价
  • python宽度学习训练后模型的持久化存储和快速调用

    在模型训练完成后 我们需要对我们训练出来的模型进行持久性储存 这样既能将我们调参后得到的最佳模型进行存储 还可以方便后期同团队的人进行调用预测 1 原理 此处用到的是sklearn库中的joblib包进行存储和加载 因为宽度学习的类属于自定
  • 机器学习——1.Sklearn:特征工程

    目录 scikit learn数据集API介绍 sklearn小数据集 sklearn大数据集 sklearn数据集的使用 数据集的划分 特征工程 特征抽取 特征提取 特征提取API 字典特征提取 文本特征提取 中文文本特征值抽取 停用词
  • 基于sklearn的特征选择方法

    1 特征选择 我们主要关心以下几个问题 1 特征差异性 也就是一列特征值若几乎没有什么变化 那么这个特征对模型并没有什么作用 2 相关性大小 也就是该维特征与target的相互作用有多大 2 过滤法 1 方差判别 给定阈值 排除那些方差低于
  • 机器学习-Sklearn-11(支持向量机SVM-SVC真实数据案例:预测明天是否会下雨)

    机器学习 Sklearn 11 支持向量机SVM SVC真实数据案例 预测明天是否会下雨 11 SVC真实数据案例 预测明天是否会下雨 这个案例的核心目的 是通过巧妙的预处理和特征工程来向大家展示 在现实数据集上我们往往如何做数据预处理 或
  • sklearn矩阵分解类库学习

    sklearn decomposition模块提供矩阵分解算法 其他PCA NMF 或ICA 其中大部分算法都被视为降维技术 主成分分析 sklearn decomposition PCA n components None copy Tr
  • sklearn机器学习包中的对原始数据的预处理及训练集、测试集的分割

    sklearn机器学习包中的对原始数据的预处理及训练集 测试集的分割 一 数据预处理 1 标准化 2 归一化 3 最小最大标准化 4 缺失值插补 二 训练集测试集的划分 一 数据预处理 sklearn preprocessing 包提供了几
  • sklearn pip install 安装失败

    看机器学习教程用sklearn然后我pip install 无论怎么安装都是失败的 后来查了一下之后发现是sklearn更名为scikit learn pip install scikit learn 就可以得到sklearn 库啦
  • sklearn与分类算法

    导读 众所周知 Scikit learn 以前称为 scikits learn 是一个用于 Python 编程语言的免费软件机器学习库 它具有各种分类 回归和聚类算法 包括支持向量机 随机森林 梯度增强 k means 和 DBSCAN 旨
  • 密度聚类DBSCAN、主成分分析PCA算法讲解及实战(附源码)

    需要源码请点赞关注收藏后评论区留言私信 一 基于密度的聚类 基于密度的聚类算法的主要思想是 只要邻近区域的密度 对象或数据点的数目 超过某个阀值 就把它加到与之相近的聚类中 也就是说 对给定类中的每个数据点 在一个给定范围的区域中必须至少包
  • 机器学习——无监督学习

    机器学习的分类 一般分为下面几种类别 监督学习 supervised Learning 无监督学习 Unsupervised Learning 强化学习 Reinforcement Learning 增强学习 半监督学习 Semi supe
  • 实战22:文本摘要实战:基于句子相似度矩阵构建图结构实现文本摘要 代码+数据

    任务描述 自动文本摘要 Text Summarization 是指给出一段文本 我们从中提取出要点 然后再形成一个短的概括性的文本 自动的文本摘要是非常具有挑战性的 当我们作为人类总结一篇文章时 我们通常会完整地阅读它以发展我们的理解 然后
  • 『sklearn学习』多种模型预测脸的下半部分的结果对比

    预测脸的下半部分 import numpy as np import matplotlib pyplot as plt from sklearn datasets import fetch olivetti faces from sklea

随机推荐

  • vue中实现高德地图上打点,并添加点击事件,

    文章目录 1 在地图上打点 并定义 click 事件 2 数据由websocket订阅 后台实时推送 3 实时失效 1 在地图上打点 并定义 click 事件 地图上打点 并定义click事件 param map map对象 param i
  • iviewui中表格控件中render的使用示例

    示例了如何在表格中显示按钮 如何将代码转化为文字 iviewui新版本中 如果内容转化输出时 如果不使用render函数 会显示不正常 老版本不存在这个问题
  • 阿里分布式事务框架-seata源码分析

    详细可参考 AT下流程图 TCC下流程图 基于该流程图可大致了解seata中TC TM RM这3个角色在seata框架中的作用 以及两种模式的优缺点
  • 数学建模常用模型(六):时间序列预测

    数学建模常用模型 六 时间序列预测 时间序列预测是数学建模中的一个重要领域 用于预测时间序列数据中未来的趋势和模式 时间序列预测可以帮助我们了解数据的演变规律 做出合理的决策和规划 这是我自己总结的一些代码和资料 本文中的代码以及参考书籍等
  • 移动Web应用的性能及其未来趋势

    在一篇深入的实质性文章中 某iOS开发公司的老板Drew Crawford表示他认为目前移动Web应用运行迟缓 而且并不指望能在不久的将来看到重大改善 并列出了以上观点的全部原因 该文章是此前某篇博客文章的后续之作 在那篇文章中 他指出 与
  • el-select 点击输入框不弹出选项的下拉框

    el select 点击输入框不弹出选项的下拉框 重点是绑定click事件 用它的event判断点击的是输入框还是下拉箭头 如果是输入框 就让它失去焦点 就不会弹出选项的下拉框
  • JSTL在JSP页面上的使用

    1 JSTL标准标签库 JSTL JSP标准标签库 JSTL 是一个JSP标签集合 它封装了JSP应用的通用核心功能 JSTL支持通用的 结构化的任务 比如迭代 条件判断 XML文档操作 国际化标签 SQL标签 除了这些 它还提供了一个框架
  • QNX的应用移植迁移到Linux

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 author 锋影 e mail 174176320 qq com 近年来许多嵌入式产品将是公司从自营到开放源代码平台为他们提供更多灵活性和成本
  • 基于微信小程序的manster云音乐小程序

    代码地址 https gitee com manster1231 master cloud music 介绍 基于网易云音乐真实接口开发的音乐小程序 软件架构 Nodejs作为后端 跨站请求伪造 CSRF 伪造请求头 调用官方 API 网易
  • 基于TCP的服务器端/客户端

    TCP服务器端默认函数调用顺序 socket 创建socket bind 分配socket地址 listen 等待连接请求状态 accept 允许连接 read write 数据交换 close 断开连接 等待连接请求状态 int list
  • 数据挖掘-数据清理-噪声数据

    数据清理 噪声数据 数据清理例程试图填充缺失的值 光滑噪声并识别离群点 纠正数据中的不一致 噪声数据 噪声 noise 是被测量的变量的随机误差或方差 光滑数据 去除噪声方法如下 1 分箱 binning 分箱方法通过考察数据的近邻 即周围
  • Linux内核中断之获取中断号

    目录 一 调用流程 二 应用举例 1 查找中断号 2 dts配置 3 驱动函数 Linux内核中可使用platform get irq 函数获取dts文件中设置的中断号 函数原型 int platform get irq struct pl
  • 保姆级Pythpn连载讲义:第五篇注释相关

    注释 目标 注释的作用 单行注释 行注释 多行注释 块注释 01 注释的作用 使用用自己熟悉的语言 在程序中对某些代码进行标注说明 增强程序的可读性 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img caIBaVK
  • 2012,这一年我该做些啥

    这一年 我应该完成2011年没有完成的事情 让自己在2012没有遗憾 这一年 我应该想想未来的路 给自己一个职业规划 这一年 我应该提升一下自己的技术 让自己更加专业 这一年 我应该提升一下自己的思想 让自己的头脑更加丰富 这一年 我应该养
  • 元素出栈、入栈顺序的合法性(判断一个字符串是否按照出栈顺序)

    假设入栈的序列 1 2 3 4 5 出栈序列为 4 5 3 2 1 判断出栈序列是否合法 实现思路 总的来说就是模拟元素的出入栈过程 并进行判断 首先 判断出栈序列和入栈序列的元素个数是否相等 若不相等 则不合法 若相等 则继续进行判断 其
  • pyqt 打开并显示excel表单

    参考链接 Python PyQt5 图形可视化界面 7 打开表格并显示内容 简书 from PyQt5 import QtCore QtGui QtWidgets from PyQt5 QtGui import QIcon from PyQ
  • GitLab SAST:如何将Klocwork与GitLab一起使用

    GitLab SAST是GitLab和Klocwork的结合 GitLab是一种覆盖了整个DevOps生命周期的集成解决方案 Klocwork是一个静态代码分析和应用安全静态测试 SAST 工具 当将这两个工具一起使用时 可以为软件开发团队
  • ACM: Poker Game

    题目描述 A poker deck contains 52 cards Each card has a suit of either clubs diamonds hearts or spades denoted C D H S in th
  • Leetcode-62. 不同路径

    链接 62 不同路径 题目 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 问总共有多少条不同的路径 示例 示例
  • sklearn学习之使用sklearn进行特征选择

    文章目录 1 Removing features with low variance方差选择法 2 Univariate feature selection 单变量特征选择 2 1 特征选择方法 2 2 特征选择指标 f regressio