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

目录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 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 哈希冲突

    java 哈希冲突问题一:什么是哈希冲突通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的哈希值。这时候就产生了哈希冲突。问题二:怎么解决哈希冲突开放地址法;再哈希法;链地址法(拉链法);公共溢出区法。开放地址法:开放地址法处理冲突的基本原则就是出现冲突后按照一定算法查找一个空位置存放…

    2022年6月16日
    31
  • SpringCloud(七)—OpenFeign访问带有参数的控制器

    SpringCloud(七)—OpenFeign访问带有参数的控制器

    2020年11月12日
    235
  • react router 路由守卫_React路由鉴权的实现方法「建议收藏」

    react router 路由守卫_React路由鉴权的实现方法「建议收藏」前言上一篇文章中有同学提到路由鉴权,由于时间关系没有写,本文将针对这一特性对vue和react做专门说明,希望同学看了以后能够受益匪浅,对你的项目能够有所帮助,本文借鉴了很多大佬的文章篇幅也是比较长的。背景单独项目中是希望根据登录人来看下这个人是不是有权限进入当前页面。虽然服务端做了进行接口的权限,但是每一个路由加载的时候都要去请求这个接口太浪费了。有时候是通过SESSIONID来校验登陆…

    2022年6月8日
    131
  • 计算机病毒445端口,关闭135 445端口_445端口关闭方法_怎么防止电脑中勒索病毒「建议收藏」

    计算机病毒445端口,关闭135 445端口_445端口关闭方法_怎么防止电脑中勒索病毒「建议收藏」关闭135445端口_445端口关闭方法_怎么防止电脑中勒索病毒这几天,永恒之蓝勒索病毒迅速传播,让网友们都担惊受怕。而这种勒索病毒基本上都是通过135,137,138,139,445等端口入侵,关闭445135137138139端口是有效预防入侵的方式之一,同时更新微软最新补丁,及时备份重要数据,才能从容应对病毒侵袭,现在就快和小编一起来看看关闭135,137,138,139,44…

    2022年10月17日
    3
  • file write error怎么解决_internal error 28013

    file write error怎么解决_internal error 28013(原創) 如何解決Nios II EDS的『Error parsing project STF file』錯誤訊息? (SOC) (Nios II)

    2022年4月21日
    133
  • 进出口流程 & 报关单据

    进出口流程 & 报关单据出口流程一.委托人1.需找货运代理公司2.向代理公司询问价格一般为ALLIN价格(空运费+燃油费+战险费)总费用=ALLIN价格*(货物公斤数)ALLIN价格

    2022年7月3日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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