[机器学习与scikit-learn-48]:特征工程-特征选择(降维)-3-初级过滤:方差过滤法

2023-10-27

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123970142


目录

前言:

第1章 特性选择常见方法

1.1 scikit-learn中特征工程

1.2 人工过滤 

第2章 方差过滤

2.1 什么是方差

2.2 scikit-learn的方差过滤:feature_selection.VarianceThreshold

第3章 方差过滤对算法的影响

3.1 方差过滤对KNN的影响

3.2 方差过滤随机深林的影响


前言:

当样本的特征的数量太多(比如成百上千,或上千上万)时,就需要一种方法,过滤掉对结果影响小的特征,来降低特征的维度。

哪些特征可以优先过滤掉呢?

第1章 特性选择常见方法

1.1 scikit-learn中特征工程

 

(1)特征提取(特征编码)

把非数值数据转换成适合模型训练的数值数据。

(2)特征创作(特征升维)

对现有的少量特征进行组合,得到新的特征。

(3)特征选择(特征降维)

在众多的特征中,选择部分特征,用来表征特定业务应用的样本。

  • 人工过滤:通过人工分析的方法过滤的明显无关的特征。
  • 方差过滤:根据特征值的波动范围的大小过滤,过滤到不同样本中,特征值相差不大的特征。
  • 相关性过滤:合并相关性一致的特征。
  • 嵌入法
  • 包装法
  • 降维算法

备注:本文重点探讨方差过滤

1.2 人工过滤 

算法工程师与业务工程师一起探讨特征对应的业务含义,过滤掉明显与业务不相关的特征。

上述泰坦尼克号存活的特征信息。很显然,票号、乘客的登录框与是否能够存活下来的关系不大。可以直接进过滤掉。

比如考试成绩的高低,与学号无关也可以过滤掉。

人工过滤,必须要理解每个特征的业务含义!!!!

第2章 方差过滤

2.1 什么是方差

方差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。

概率论中方差用来度量随机变量和其数学期望(即平均值)之间的偏离程度。

统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数

在许多实际问题中,研究方差即偏离程度有着重要意义。

方差越小,反应的是不同样本之间该特征值的差别越小,越说明该特征值用于区分不同样本的能力越小。这样的特征数据,对于模型区分不同目标的用处就越小。

一个特征本身的方差很小,就表示样本在这个特征上基本没有差异,可能特征中的大多数值都一样,甚至整个特征的取值都相同,那这个特征对于样本区分没有什么作用。所以无论接下来的特征工程要做什么,都要优先消除方差为0的特征,   然后优先过滤掉方差小的某个门限的特征。

2.2 scikit-learn的方差过滤:feature_selection.VarianceThreshold

(1)VarianceThreshold类概述

VarianceThreshold是通过特征本身方差筛选特征

VarianceThreshold有重要参数threshold,表示方差的阈值,表示舍弃所有方差小于threshold的特征,不填默认为0,即删除所有的记录都相同的特征。

(2)代码展示

from sklearn.feature_selection import VarianceThreshold
import numpy as np

variance = X.var().values
threshold_min = np.min(variance)
threshold_mid = np.median(variance)
threshold_max = np.max(variance)
print("variance.shape", variance.shape)
print("threshold_min", threshold_min)
print("threshold_mid", threshold_mid)

selector_zero = VarianceThreshold()            #=》默认过滤掉方差位0的特征
selector_min = VarianceThreshold(threshold_min)#=》默认过滤掉方差小于最小值的特征
selector_mid = VarianceThreshold(threshold_mid)#=》默认过滤掉方差小于中值的特征

X_fsvar_zero = selector_zero.fit_transform(X)
X_fsvar_min  = selector_min.fit_transform(X)
X_fsvar_mid  = selector_mid.fit_transform(X)

print("\n过滤前的特征维度:", X.shape)             # 874 =>
print("X_fsvar_zero.shape", X_fsvar_zero.shape)   # 708 =>
print("X_fsvar_min.shape", X_fsvar_min.shape)     # 708 =>
print("X_fsvar_mid.shape", X_fsvar_mid.shape)     # 392

第3章 方差过滤对算法的影响

3.1 方差过滤对KNN的影响

(1)对算法时间复杂度的影响:非常大

KNN算法是通过求样本点的距离来进行分类的,而样本向量的距离与样本的维度密切相关。

KNK算法,维度越高,求解样本距离的复杂度越高,

因此,降维对KNN算法的计算时间影响非常大!!!

(2)对算法空间复杂度的影响:非常大

由于每个特征都会占用内存变量,因此对空间复杂度影响较大。

(3)对算法准确率的影响:较小

由于方差过滤是过滤掉那些对区分结果影响不大的样本,

因此,降维对KNN算法的准确率的影响不大!!!

3.2 方差过滤随机深林的影响

(1)对算法时间复杂度的影响:较小

随机深林的每次决策,都是随机的选择特征进行决策分类,每次决策无需计算所有的特征。

因此,降维对随机深林的时间复杂度影响较小。

(2)对算法空间复杂度的影响:非常大

由于每个特征都会占用内存变量,因此对空间复杂度影响较大。

(3)对算法准确率的影响:较小

由于方差过滤是过滤掉那些对区分结果影响不大的样本,

因此,降维对随机算法的准确率的影响不大!!!


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123970142

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[机器学习与scikit-learn-48]:特征工程-特征选择(降维)-3-初级过滤:方差过滤法 的相关文章

  • Lasso 和 RobustScaler 之后如何对回归预测进行逆变换?

    我试图弄清楚如何在使用 RobustScalar 和 Lasso 后取消缩放数据 大概使用 inverse transform 进行预测 下面的数据只是一个例子 我的实际数据更大 更复杂 但我希望使用 RobustScaler 因为我的数据
  • scikit-learn 中的“详细”参数

    许多 scikit learn 函数都有verbose根据他们的文档 c 控制冗长 越高 消息越多 例如 网格搜索简历 https scikit learn org stable modules generated sklearn mode
  • 如何找到逻辑回归模型特征的重要性?

    我有一个通过逻辑回归算法训练的二元预测模型 我想知道哪些特征 预测变量 对于正类别或负类别的决策更重要 我知道有coef 参数来自 scikit learn 包 但我不知道它是否足够重要 另一件事是我如何评估coef 值对于消极类和积极类的
  • Scorer函数:make_scorer/score_func和的区别

    在 scikit 0 18 1 文档中 我发现接下来的内容有点令人困惑 似乎可以通过多种方式编写自己的评分函数 但有什么区别呢 网格搜索简历 http scikit learn org stable modules generated sk
  • 在Python或Sklearn中用整数值对具有字符串值的列变量进行编码

    如何用整数值对数据表中字符串类型的列值进行编码 例如 我有两个特征变量 颜色 可能的字符串值 R G 和 B 和技能 可能的字符串值 C Java SQL 和 Python 给定数据表有两列 Color gt R G B B G R B G
  • Sklearn 随机森林回归器的错误

    当尝试使用 y 数据拟合随机森林回归器模型时 如下所示 0 00000000e 00 1 36094276e 02 4 46608221e 03 8 72660888e 03 1 31375786e 04 1 73580193e 04 2
  • 仅正样本和未标记数据集的二元半监督分类

    我的数据由评论组成 保存在文件中 其中很少被标记为正面 我想使用半监督和PU http www cs uic edu liub publications ICDM 03 pdf分类将这些评论分为正面和负面类别 我想知道 python sci
  • 分组时间序列(面板)数据的交叉验证

    我使用面板数据 随着时间的推移 我观察许多单位 例如人 对于每个单元 我都有相同固定时间间隔的记录 当将数据分为训练集和测试集时 我们需要确保这两个集是不相交的并且顺序的 即训练集中的最新记录应该在测试集中最早的记录之前 参见例如此博客文章
  • Python 中高效的逐元素函数计算

    我有以下优化问题 给定两个 np arraysX Y和一个函数K我想尽快计算矩阵关联 gram matrix 其中 i j th元素计算为K X i Y j 这里有一个使用嵌套 for 循环的实现 它被认为是解决此类问题最慢的 def pr
  • 没有循环匹配指定的签名和转换错误

    我是 python 和机器学习的初学者 当我尝试将数据放入 statsmodels formula api OLS fit 时 出现以下错误 回溯 最近一次调用最后一次 文件 第 47 行 位于 regressor OLS sm OLS y
  • 无法通过Anaconda/jupyter获取MNIST数据库

    Hu guys 我是 python anaconda jupyter numPy panda 等的新手 所以如果这是一个非常愚蠢的问题 请原谅我 我正在尝试使用 anaconda jupyter 获取 MNIST 数据库 但每次我最后都会收
  • 混淆矩阵错误“分类指标无法处理多标签指标和多类目标的混合”

    我得到了 Classification metrics can t handle a mix of multilabel indicator and multiclass targets 当我尝试使用混淆矩阵时出错 我正在做我的第一个深度学
  • ValueError: n_splits=10 不能大于每个类中的成员数

    我正在尝试运行以下代码 from sklearn model selection import StratifiedKFold X hey join now hello join today join us now not today jo
  • 无法在 OS X 上安装 scikit-learn

    我无法安装scikit学习 http scikit learn org stable 我可以通过从源代码构建或通过 pip 来安装其他软件包 没有任何问题 对于 scikit learn 我尝试在 GitHub 上克隆项目并通过 pip 安
  • 属性错误:未找到下层;在 scikit-learn 中使用带有 CountVectorizer 的 Pipeline

    我有一个这样的语料库 X train this is an dummy example in reality this line is very long here is a last text in the training set 和一
  • Python 上每个系数具有特定约束的多元线性回归

    我目前正在数据集上运行多元线性回归 起初 我没有意识到我需要限制自己的体重 事实上 我需要有特定的正权重和负权重 更准确地说 我正在做一个评分系统 这就是为什么我的一些变量应该对音符产生积极或消极的影响 然而 当运行我的模型时 结果不符合我
  • Scikit-learn、带有洗牌组的 GroupKFold?

    我正在使用 scikit learn 中的 StratifiedKFold 但现在我还需要观察 组 有一个很好的函数 GroupKFold 但我的数据非常依赖时间 与帮助中的相似 即周数是分组索引 但每周应该只折叠一次 假设我需要折叠 10
  • 在 Python 中使用 mca 包

    我正在尝试使用MCA 套餐 https github com esafak mca blob master docs usage rst在Python中进行多重对应分析 我对如何使用它有点困惑 和PCA我希望fit一些数据 即找到这些数据的
  • 如何指定聚类的距离函数?

    我想对给定距离的点进行聚类 奇怪的是 似乎 scipy 和 sklearn 聚类方法都不允许指定距离函数 例如 在sklearn cluster AgglomerativeClustering 我唯一可以做的就是输入一个亲和力矩阵 这将非常
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11

随机推荐

  • elementUI的日期选择器获取选择时间的格式,获取时间戳等

    elementUI的日期选择器获取选择时间的格式 获取时间戳等 在使用日期选择器的时候 我们需要把时间进行格式化 然后再传给后端 比如传时间戳 value format timestamp
  • unity 第五期

    原题1 什么是单例 举一个游戏中使用单列的例子 答 单例 啊 那是一种内功心法 而且是行走江湖必备的一种最基本的内功心法 说到单例 我们得要把后面两个字补全 也就是单例模式 单例模式是传说中的23种设计模式之一 为什么DC老湿说其实内功心法
  • 2-2、java详述scope作用

    创建Java项目 一个类是Test类 包名com jd test 一个类是UserInfo类 包名com jd vo 还有一个application xml
  • 使用Python,Matplotlib显示RGB图像

    使用Python Matplotlib显示RGB格式的 图像 1 效果图 2 源码 参考 这篇博客将介绍如何使用matplotlib显示RGB图像 具体是使用matplotlib pyplot和mpimg来加载和显示图像 调用plt axi
  • 电机驱动详解--从原理到智能车驱动(DRV8701)

    目录 1 全H桥电路驱动电机原理 2 H桥工作模式 3 死区控制 1 全H桥电路驱动电机原理 从上图可以看出 电路是由四个NMOS管 一个motor 以及VCC GND所构成的 可以控制栅极的电平高低 来控制NMOS管的开通与关闭 所以可以
  • Jmeter 课程笔记(四)关联

    LR中有手动关联和自动关联 Jmeter中只有手动关联 自动关联准确性低 1 第一种关联方式 Http请求 右键 后置处理器 正则表达式提取器 将其放在生成想要关联的页面下 在页面中找到其位置复制当前区域 源码中有相似的值对该区域进行拓展复
  • vbs之createobject大全

    2007年10月30日 11 12 00 ADO对象ConnectionCommandRecordSetRecordStreamServer CreateObject Scripting FileSystemObject Server Cr
  • 【论文精读】CVRecon: Rethinking 3D Geometric Feature Learning For Neural Reconstruction

    今天读的是一篇发表在ICCV2023上的文章 试图使用mvs的方法来助力neural reconstruction 项目地址 点击前往 文章地址 点击前往 文章目录 Abstract 1 Introduction 2 Related Wor
  • React 开发用到的chrome扩展插件

    1 安装react developer tools开发工具 1 下载地址 https pan baidu com s 1eSZsXDC 下载好是一个crx 格式的文件 把下载后的 crx扩展名的离线Chrome插件的文件扩展名改成 zip或
  • Google colab 阻止自动掉线

    Google colab 可以免费使用GPU TPU等计算资源进行人工智能计算 但计算页面隔一段时间无操作之后就会自动掉线 之前训练的数据都会丢失 最后终于找到了一种可以让其自动保持不离线的方法 用一个js程序自动点击连接按钮 代码如下 f
  • 详细介绍下Rational Rose及其功能与优点

    Rational Rose是一款由IBM公司开发的商业软件工具 主要用于软件建模和设计 它支持多种软件工程方法 如面向对象分析和设计 OOA D 面向过程分析和设计 PPA D 数据流分析和设计 DFD 等 Rational Rose提供了
  • mysql5 存储过程

    MySql5 0以后均支持存储过程 最近有空 研究了一把这个格式 CREATE PROCEDURE 过程名 过程参数 特性 过程体CREATE FUNCTION 函数名 函数参数 RETURNS 返回类型 特性 函数体过程参数 IN OUT
  • UE 虚幻引擎项目启动快捷键

    1 Epic Games Launcher目录下找到UnrealVersionSelector exe 2 将UnrealVersionSelector exe添加到任务栏 鼠标右键点击 可以看到所有打开的UE项目 不限UE版本 鼠标左键点
  • IP反查域名

    IP反查域名 ip反查域名的三种方法 方法有很多 我这边只描述三种 也算是两种 1 在线网站 http stool chinaz com same 2 在线网站 https site ip138 com 3 工具 https github
  • 程序员如何实现财富自由?

    有国外的码农在论坛里提问 为了过上更好的生活我两年前移民到法国后 开始从事前端开发 我的月薪从当时的1 5万涨到现在的1 9万 这样的工资还算可以 但我觉得不够多 我在想为什么所有人都能赚大钱 而我作为码农 实在不知道该如何提高自己的收入
  • 给VMware Workstation 16 Pro中安装的Ubuntu 20.04.3 LTS安装VMware Tools

    安装VMware Tools 点击虚拟机 安装VMware Tools 如果之前安装过 则是 重新安装VMware Tools 之后启动虚拟机 在虚拟机中出现一个DVD光盘 如果没有 则点击虚拟机 可移动设备 CD DVD 设置使用ISO映
  • Linux任务前后台的切换 【转】

    文章来源 Linux任务前后台的切换 Shell支持作用控制 有以下命令实现前后台切换 1 command 让进程在后台运行 2 jobs 查看后台运行的进程 3 fg n 让后台运行的进程n到前台来 4 bg n 让进程n到后台去 5 k
  • 简单HTML网页制作 实例

    HTML网页制作 1 新建文本文档 以 html 结尾 2 用html网页逻辑器打开 这里我们用Sublime Text打开 Tips 使用 Tab 按键 那么就可以自动生成HTML文档模板 推荐大家使用的前端工具有 Vscode hbui
  • Mysql在哪些场景会flush脏页?

    我们在日常使用sql中 查询数据库反映的时间过长 这时候可能是flush脏页导致的 而脏页会什么时候触发呢 当查询的数量太多 每次全量查询都会淘汰掉脏页从而触发磁盘的I O操作户导致查询时间过长 当innoDB的redo log满了后 这时
  • [机器学习与scikit-learn-48]:特征工程-特征选择(降维)-3-初级过滤:方差过滤法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123970142 目录 前言 第1章