特征选择的几种方法

2023-05-16

目录

1、 过滤法(Filter)

1.1 方差选择法

1.2 相关系数法

1.3 卡方检验

1.4 互信息法

1.5 relief算法

2、包裹法(Wrapper)

2.1 递归特征消除法

2.2 特征干扰法

3、嵌入法(Embedded)

3.1 基于惩罚项的特征选择法

3.2 基于树模型的特征选择法

4、机器学习中的特征选择和优缺点


1、 过滤法(Filter)

1.1 方差选择法

  使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的VarianceThreshold类来选择特征的代码如下:

from sklearn.feature_selection import VarianceThreshold

#方差选择法,返回值为特征选择后的数据
#参数threshold为方差的阈值
VarianceThreshold(threshold=3).fit_transform(iris.data)

1.2 相关系数法

  使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。用feature_selection库的SelectKBest类结合相关系数来选择特征的代码如下:

from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr

#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

1.3 卡方检验

  经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:

  不难发现,这个统计量的含义简而言之就是自变量对因变量的相关性。用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:

from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

#选择K个最好的特征,返回选择特征后的数据
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

1.4 互信息法

  经典的互信息也是评价定性自变量对定性因变量的相关性的(例如决策树ID3算法),互信息计算公式如下:

  为了处理定量数据,最大信息系数法被提出,使用feature_selection库的SelectKBest类结合最大信息系数法来选择特征的代码如下:

 from sklearn.feature_selection import SelectKBest
 from minepy import MINE
 
 #由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
 def mic(x, y):
     m = MINE()
     m.compute_score(x, y)
     return (m.mic(), 0.5)

#选择K个最好的特征,返回特征选择后的数据
SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

1.5 relief算法

      Relief算法最早由Kira提出. 基本内容:从训练集D中随机选择一个样本R, 然后从和R同类的样本中寻找k最近邻样本H,从和R不同类的样本中寻找k最近邻样本M, 最后按照公式更新特征权重.

        

Relief算法python实现:https://blog.csdn.net/qq_40871363/article/details/86511843 

2、包裹法(Wrapper)

2.1 递归特征消除法

  递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。使用feature_selection库的RFE类来选择特征的代码如下:

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

2.2 特征干扰法

特征选择原理:用加上噪声的特征和原特征下的误差对比来评价特征重要性,误差越大,说明特征越重要。以随机森林为例:

  1. 对随机森林中的每一颗决策树,用OOB(袋外数据)计算误差errOOB1;
  2. 对OOB所有样本特征X加上噪声干扰,再次计算误差errOOB2;
  3. N棵树,特征X的重要性=\frac{\sum (errOOB1-errOOB2)}{N}
  4. 若某个特征加上噪声后,袋外的准确率大幅度降低,说明此特征对于样本的分类结果影响很大,即重要程度越高。

sklearn中会对每个特征赋予一个分数,分数越大,特征越重要,因此,可以根据特征重要性排序,然后选择最佳特征组合;

RandomForestClassifier(n_estimators=200,oob_score=True)

oob_score : bool (default=False) Whether to use out-of-bag samples to estimate the generalization accuracy.

oob_score:  bool(默认=False) 是否使用袋外样品进行估算 泛化精度。

3、嵌入法(Embedded)

嵌入特征选择方法和算法本身紧密结合,在模型训练过程中完成特征选择。例如,

决策树算法每次都选择分类能力最强的特征;

线性回归+L2正则化:某些信号比较弱的特征权重减小;

线性回归+L1正则化:某些信号比较弱的特征权重为0;

弹性网络:L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。

3.1 基于惩罚项的特征选择法

  使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用feature_selection库的SelectFromModel类结合带L1惩罚项的逻辑回归模型,来选择特征的代码如下:

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression

#带L1惩罚项的逻辑回归作为基模型的特征选择
SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)

3.2 基于树模型的特征选择法

  树模型中GBDT也可用来作为基模型进行特征选择,使用feature_selection库的SelectFromModel类结合GBDT模型,来选择特征的代码如下:

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier

#GBDT作为基模型的特征选择
SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)

4、机器学习中的特征选择和优缺点

参考:https://blog.csdn.net/piaodexin/article/details/77203696

——————————————————————

参考:

https://www.cnblogs.com/bonelee/p/8632866.html 

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

特征选择的几种方法 的相关文章

随机推荐

  • 错排问题(排列组合习题)

    标题 xff1a 错排问题 题目描叙 xff1a 某人写了n封信和n个信封 如果所有的信都装错了信封 求所有的信都装错信封共有多少种不同情况 Input 输入n xff08 n lt 61 20 xff09 Output 输出情况总数 Sa
  • C++ 求素数的三种方法

    include lt iostream gt include lt cmath gt using namespace std 方法一 暴力搜索 void test01 for int i 61 2 i lt 101 i 43 43 for
  • 30个免费的CSS3动画片段代码

    对于网页设计师来说 xff0c 前端代码CSS HTML不是强项 xff0c 但有时候也是需要写的 特别是现在流行CSS3动画 xff0c 学习和了解一些相关知识是必须的 CSS3动画其实不算复杂 xff0c 比JS简单得多 xff0c 今
  • 麒麟系统开机自启动服务、执行脚本、命令

    rc local是一个较旧Linux启动加载脚本 目前主流系统主要用systemctl控制开机启动 xff0c 目前仍然可用 1 普通命令可以直接写在rc local里 xff0c xff08 rc local须有执行权限 xff0c 没有
  • 每天进步一点点之Android基础(3)—— Activity的onNewIntent

    onNewIntent 的触发时间 xff1a 如图所示 xff0c onCreate 和 onNewIntent 不会被同时调用 如果在 AndroidManifest xml 中 xff0c 将 Activity 的 launchMod
  • 重载全局new和delete

    程序代码 如下所示 xff1a span class token macro property span class token directive keyword include span span class token string
  • Android LottieAnimationView 源码分析(仅包含加载和缓存机制)

    使用 mLottieAnimationView 61 rootView findViewById R id lottie anim layout 此处的animRes 为R raw 文件 mLottieAnimationView setAn
  • xstart使用方法

    出处 xff1a 点击打开链接 有时工作中 xff0c 我们需要用到Linux图形用户界面环境进行一些操作 xff08 比如装Oracle数据库等等 xff09 xff0c 这时就需要用xstart远程连接linux图形用户界面 xff0c
  • 资源网站-转自知乎

    作者 xff1a 吴剃中 链接 xff1a https zhuanlan zhihu com p 21479053 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 一 找资源利器 PS
  • java网络故障报修系统J2EE

    目 录 第一章 绪论 1 1 1 课题开发背景 1 1 2 课题研究意义 1 1 3 本课题主要工作 1 第二章 相关技术介绍 3 2 1 JSP技术 3 2 2 MySQL数据库 3 2 3 J2EE 技术 4 2 4 B S架构 5 第
  • linux脚本中的命令command not found的原因及解决方法

    场景描述 xff1a 一个生产的数据库备份脚本 xff0c 使用定时任务crontab配置自动执行bakup sh xff0c 报错信息是 expdp xff1a command not found 可是 xff0c 我在linux中 xf
  • ubuntu防火墙安装和设置-ufw

    ubuntu防火墙使用的是iptables 为了简化iptables设置 xff0c ubuntu提供了一个名为ufw的工具 本文主要介绍ufw使用方法 如果ufw没有安装 xff0c 那么可以使用如下命令安装 xff1a sudo apt
  • Win10/11+Ubuntu 双系统 修改grub默认启动选项 | 默认等待时间

    文章目录 进入Ubuntu xff0c 修改配置更新配置 本文环境为Win11 43 Ubuntu22 04 进入Ubuntu xff0c 修改配置 span class token function sudo span span clas
  • 2022-08-14 SSH 相关命令详解

    SSH 相关命令详解 sshssh keygenssh copy idssh agent 和 ssh addssh keyscansshd ssh ssh OpenSSH 远端登陆客户端 xff0c 默认22端口 描述 xff1a span
  • 浅谈Centos用户权限管理

    一 用户与组的概念 1 xff0e 理解linux多用户 xff0c 多任务的特性 Linux是一个真实的 完整的多用户多任务操作系统 xff0c 多用户多任务就是可以在系统上建立多个用户 xff0c 而多个用户可以在同一时间内登录同一个系
  • Linux centos升级nodejs,解决升级NodeJS遇到的问题,升级GLIBC、GLIBCXX、gcc(含资源包下载)

    公司网站用的Nuxt开发的 xff0c 本地开发环境NodeJS已经升级到16 14 2版本 xff0c 服务器也要从12版本升级到16 14 2 如需本次安装的资源 xff0c 请下滑到文章下面下载整套资源 NodeJS版本下载地址 xf
  • 关于UEFI引导的理解

    UEFI 和 Legacy区别 UEFT和Legacy是引导模式 xff0c 是用来引导系统的 按下开机键到看到windows标识 Legacy 传统BIOS模式 xff0c 启动顺序 xff1a 开机 gt BIOS初始化 gt BIOS
  • IDEA license server 地址

    旧地址 xff1a http jetbrains license server 新地址 xff1a http fls jetbrains agent com
  • 线性探测再散列

    哈希表又称散列表 哈希表存储的基本思想是 xff1a 以数据表中的每个记录的关键字 k为自变量 xff0c 通过一种函数H k 计算出函数值 把这个值解释为一块连续存储空间 xff08 即数组空间 xff09 的单元地址 xff08 即下标
  • 特征选择的几种方法

    目录 1 过滤法 xff08 Filter xff09 1 1 方差选择法 1 2 相关系数法 1 3 卡方检验 1 4 互信息法 1 5 relief算法 2 包裹法 xff08 Wrapper xff09 2 1 递归特征消除法 2 2