特征选择的几种方法[通俗易懂]

目录1过滤法(Filter)1.1方差选择法1.2相关系数法1.3卡方检验1.4互信息法1.5relief算法2包裹法(Wrapper)2.1递归特征消除法2.2特征干扰法3嵌入法(Embedded)3.1基于惩罚项的特征选择法3.2基于树模型的特征选择法4特征选择方法的优…

大家好,又见面了,我是你们的朋友全栈君。

目录

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 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126695.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解[通俗易懂]

    关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解[通俗易懂]lambda是Python编程语言中使用频率较高的一个关键字。那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多。这里,我们通过阅读各方资料,总结了关于Python中的lambda的“一个语法,三个特性,四个用法,一个争论”。欢迎阅读和沟通(个人微信:slxiaozju)。由于文章是从我的公众号上复制过来的,因此排版不整齐,但是内容绝对充实,欢迎关注公众…

  • navicat激活码2021【2021免费激活】

    (navicat激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 如何理解海森堡的「不确定性原理」(总结)「建议收藏」

    如何理解海森堡的「不确定性原理」(总结)「建议收藏」如何理解海森堡的「不确定性原理」(总结)一、总结一句话总结:海森堡紧跟着给出“测不准原理”:【越精确地知道位置,则越不精确地知道动量】不确定性原理”的意思是:【一个运动粒子的位置和它的动量不可

  • 显示屏如何检测坏点(手机屏幕坏点检测图片)

    文章来源:http://bbs.50bang.com/read.php?tid=23543通过debug检测屏幕颜色显示坏点、低格硬盘等等技巧通过如下方法,可以方便地在手头么有工具特情况下检测LCD显示器的坏点  购买LCD显示器最忌有亮点或暗点,我们可以借助相关的检测软件来辅助查看,但在配电脑时,老板常常不让我们装软件,其实利用Debug中的F命令就可以看得清清楚楚!  为了检测LCD屏…

  • MATLAB 安装包「建议收藏」

    MATLAB 安装包「建议收藏」呃,想说的话看栏目简介。我只有三种MATLAB,MATLAB2014a,2018b,2019a,是上学时学风电和现控时用的,这玩意还是越新版本的越好,个人对MATLAB是又爱又恨,,,链接:https://pan.baidu.com/s/1CTDfWmuefLcKW8hW5-569w提取码:xtmd…

  • mysql mediumtext 最大_mysql – TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT最大存储大小

    mysql mediumtext 最大_mysql – TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT最大存储大小上升到@Ankan-Zerob的挑战,这是我对每个文本类型中可以存储的最大长度的估计:Type|Bytes|Englishwords|Multi-bytewords———–+—————+—————+—————–TINYTEXT|255|±44…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号