python——机器学习:sklearn特征选择feature_selection

这篇具有很好参考价值的文章主要介绍了python——机器学习:sklearn特征选择feature_selection。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    特征选择是机器学习中很重要的一部分,构造并选取合适的特征,能极大的提高模型的表现。sklearn中feature_selection模块提供了一些特征选择方法。可以通过dir()的方法整体看一下。

import sklearn
from sklearn import datasets
from sklearn import feature_selection as fs

import numpy as np
import matplotlib.pyplot as plt

dir(sklearn.feature_selection)

sklearn.feature_selection.mutual_info_classif,机器学习,Python,python,机器学习,sklearn

0. 读取测试数据

# 鸢尾花数据
iris_data = datasets.load_iris()
X, y = iris_data.data, iris_data.target

# 查看前三条
X[:3]

sklearn.feature_selection.mutual_info_classif,机器学习,Python,python,机器学习,sklearn

 1. 方差阈值法 VarianceThreshold

        该方法筛选掉方差低于某个值的变量,用于剔除常量或接近常量的变量。

# 设置方差阈值为0.4,则方差小于0.4的变量将被过滤掉
vf1 = fs.VarianceThreshold(threshold=0.4)
X1 = vf1.fit_transform(X)

# 查看结果
X1[:3]

# 查看每个特征变量的方差
np.var(X,axis=0)

sklearn.feature_selection.mutual_info_classif,机器学习,Python,python,机器学习,sklearn

         可见第二列方差为0.1887,小于0.4,故被剔除。

2. 相关性过滤

2.1 卡方检验 chi2

        该方法专门针对离散型标签(分类问题),且特征为非负。卡方检验chi2计算每个非负特征和标签之间的卡方统计量和p值,我们可以通过不同标准,基于该结果进行变量筛选。

from sklearn.feature_selection import chi2, SelectKBest

# 计算卡方统计量
Chi2, p_value = chi2(X, y) # 返回卡方统计量和p值
Chi2, p_value

   sklearn.feature_selection.mutual_info_classif,机器学习,Python,python,机器学习,sklearn

         选择变量的标准:(1)可以设置变量个数K为一个固定值,选取卡方统计量最大的K个变量; 

# 可以设置为一个固定值如3; 
X2 = SelectKBest(chi2, k=3).fit_transform(X, y)
X2[:3]

# 结果可知筛掉第二列
# array([[5.1, 1.4, 0.2],
#        [4.9, 1.4, 0.2],
#        [4.7, 1.3, 0.2]])

        选择变量的标准:(2)筛掉所有p值大于设定值,比如0.05或0.01的特征; 根据p值可知筛掉第二列。

k = F.shape[0] - (p_value > 0.05).sum()
print(k)
## 结果
# k=3

X3 = SelectKBest(chi2, k=k).fit_transform(X, y)
X3[:3]

        选择变量的标准: (3) 结合SelectKBest方法,输入”评分标准“来选出前k个分数最高的特征的类,即在一个范围内遍历k值,得到使评分函数效果最好的K值,从而再选取前K个卡方统计量最大的变量。

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier as RFC

# 在一个范围内遍历k值,使随机森林模型评分函数效果最好
score=[]
for i in range(4,0,-1):
    new_data = SelectKBest(chi2, k=i).fit_transform(X, y)
    score.append(cross_val_score(RFC(n_estimators=4,random_state=0),new_data,y,cv=5).mean())

plt.plot(range(4, 0,-1),score)
plt.show()

sklearn.feature_selection.mutual_info_classif,机器学习,Python,python,机器学习,sklearn

         有图,k=3时效果最好。

2.2 F检验

        F检验,又称ANOVA,方差齐性检验,是用来捕捉每个特征与标签之间的线性关系的过滤方法。它即可以做回归也可以做分类,包含f_classif(用于分类问题)和f_regression(用于回归问题)两个函数。

from sklearn.feature_selection import f_classif, f_regression

F, p_value = f_classif(X_scale,y)
F, p_value

## 输出
# (array([ 119.26450218,   49.16004009, 1180.16118225,  960.0071468 ]),
# array([1.66966919e-31, 4.49201713e-17, 2.85677661e-91, 4.16944584e-85]))

        选择变量的标准同上。

2.3 互信息

        互信息法是用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法。既可以做回归也可以做分类问题,包含mutual_info_classif(分类)和mutual_info_regression(回归)两个函数。 它返回“每个特征与目标之间的互信息量的估计”,这个估计量在[0,1]之间取值,为0则表示两个变量独立,为1则表示两个变量完全相关。

from sklearn.feature_selection import mutual_info_classif, mutual_info_regression

mutual_info_classif(X, y)

## 输出
# array([0.49703472, 0.23401444, 0.9931895 , 0.97820121])

        选择变量的标准,同样可以给定变量数K,选取互信息量最大的K个变量。或者结合SelectKBest方法。

3. 嵌入法

        嵌入法是一种让算法自己决定使用哪些特征的方法,即特征选择和算法训练同时进行。 在使用嵌入法时,我们先使用某个机器学习的算法或模型进行训练,得到各个特征对模型的贡献或者说重要性,比如决策树的featureimportance属性。基于这种重要性的评估,找的一个重要性的临界值,根据该临界值确定对模型建立更加有用的特征。

优点:嵌入法基于模型本身,选择更合适的变量,更有利于提高该模型效果。
缺点:需要通过一定方法(经验或超参数)确定重要性的临界值;计算可能耗时耗力

        嵌入法的基本使用:

from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.feature_selection import SelectFromModel 

RFC_=RFC(n_estimators=4,random_state=0)
 
new_data = SelectFromModel(RFC_,threshold=0.1).fit_transform(X,y) #这个是嵌入法的实例化
# threshold 特征重要性的阈值,重要性低于这个阈值的特征都将被删除
 
print('新数据的维度',new_data.shape)

## 输出
# 新数据的维度 (150, 3)

        可通过一下方法确定重要性的阈值:

from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.feature_selection import SelectFromModel 
from sklearn.model_selection import cross_val_score

# 如:模型选用随机森林模型
RFC_=RFC(n_estimators=4,random_state=0)

# 通过超参数方法,确定重要性特征的临界值
score = []
for i in np.linspace(0,0.3,20):  ## 临界值取0-0.3之间,每隔0.015取一个值
    # 根据重要性特征阈值,得到取得的重要特征。(threshold参数为特征重要性的阈值,重要性低于这个阈值的特征都将被删除)
    X_embedded = SelectFromModel(RFC_,threshold=i).fit_transform(X,y) 
    # 计算模型得分
    once = cross_val_score(RFC_,X_embedded,y,cv=5).mean()
    score.append(once)

# 画出取不同阈值时的得分
plt.plot(np.linspace(0,0.3,20),score)
plt.show()

sklearn.feature_selection.mutual_info_classif,机器学习,Python,python,机器学习,sklearn

         由图可知,阈值可取0.1-0.15。

4. 包装法

        包装法,也是一个特征选择和算法训练同时进行的方法。不同的是我们往往使用一个目标函数作为黑盒来帮助我们完成特征选择,而不是我们自己输入某个评估指标或统计量的阈值。包装法在初始训练集上训练我们的评估器,并且通过coef_属性或feature_importances_属性获得每个特征的重要性,然后从当前的一组特征中删除掉一些最不重要的特征,然后在新的特征集合上重复该过程,直到最后剩下的特征是我们规定的数量。

from sklearn.feature_selection import RFE

score = []
# 确定最优的特征变量个数
for i in range(1,5):
    rfe = RFE(RFC_, n_features_to_select=i, step=1)
    rfe.fit(X, y)
    X_rfe = rfe.transform(X)
    once = cross_val_score(RFC_, X_rfe, y, cv=5).mean()
    score.append(once)


plt.plot(range(1,5),score)
plt.show()

sklearn.feature_selection.mutual_info_classif,机器学习,Python,python,机器学习,sklearn文章来源地址https://www.toymoban.com/news/detail-827912.html

到了这里,关于python——机器学习:sklearn特征选择feature_selection的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?

    在实际应用中,特征选择作为机器学习和数据挖掘领域的重要环节,对于提高模型性能和减少计算开销具有关键影响。特征选择是从原始特征集中选择最相关和最具区分力的特征子集,以提高模型的泛化能力和可解释性。 特征选择在实践中具有以下重要性: 提高模型性能:

    2024年02月12日
    浏览(36)
  • 【机器学习】特征降维 - 方差选择法VarianceThreshold

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 提取的特征当中,有一些相关(相似)的 「冗余特征」 ,这种特征是没有必

    2024年02月13日
    浏览(30)
  • 【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 引言: 在机器学习的世界中,特征选择是一项至关重要的任务。它能够帮助我们筛选出与目标变量

    2024年03月14日
    浏览(48)
  • 【Python机器学习】sklearn.datasets分类任务数据集

    如何选择合适的数据集进行机器学习的分类任务? 选择合适的数据集是进行任何机器学习项目的第一步,特别是分类任务。数据集是机器学习任务成功的基础。没有数据,最先进的算法也无从谈起。 本文将专注于 sklearn.datasets 模块中用于分类任务的数据集。这些数据集覆盖

    2024年02月07日
    浏览(37)
  • 【Python机器学习】sklearn.datasets回归任务数据集

    为什么回归分析在数据科学中如此重要,而 sklearn.datasets 如何助力这一过程? 回归分析是数据科学中不可或缺的一部分,用于预测或解释数值型目标变量(因变量)和一个或多个预测变量(自变量)之间的关系。 sklearn.datasets 模块提供了多种用于回归分析的数据集,这些数据

    2024年02月07日
    浏览(48)
  • 猿创征文|Python-sklearn机器学习之旅:我的第一个机器学习实战项目

    目录 前言 一、从目的出发 1.导入数据 二、项目开启 1.导入数据

    2024年01月24日
    浏览(53)
  • python机器学习——机器学习相关概念 & 特征工程

    监督学习:输入数据有特征有标签,即有标准答案 分类:k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络 回归:线性回归、岭回归 标注:隐马尔可夫模型 (不做要求) 无监督学习:输入数据有特征无标签,即无标准答案 聚类:k-means 特征工程是将原始数据

    2024年02月11日
    浏览(48)
  • 泰坦尼克号沉船数据分析与可视化、数据建模与分类预测【Python | 机器学习-Sklearn】

    前言:泰坦尼克号,不只是卡梅隆导演的经典电影,它是一个真实存在的悲剧,也是电影的故事背景与题材。作为一个IT人,分析事实还得看数据,了解到泰坦尼克号沉船幸存者多为老人、小孩和妇女,而牺牲者多为年轻的男士,这样的历史数据,让我感受到了人性之美与善

    2024年02月02日
    浏览(48)
  • 【Python机器学习】决策树——树的特征重要性

    利用一些有用的属性来总结树的工作原理,其中最常用的事特征重要性,它为每个特征树的决策的重要性进行排序。对于每个特征来说,它都是介于0到1之间的数字,其中0代表“根本没有用到”,1代表“完美预测目标值”。特征重要性的求和为1。 将特征重要性进行可视化:

    2024年02月03日
    浏览(48)
  • 随机森林的REF递归特征消除法来筛选特征(python实现不依赖sklearn)

    随机森林的REF递归特征消除法是一种基于模型的特征选择方法。它通过构建随机森林模型,并反复训练模型来评估每个特征的重要性,从而递归地消除不重要的特征。REF方法通过以下步骤实现: 1.计算初始模型在所有特征上的特征重要性得分。 2.去掉得分最低的特征,并重新

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包