【Python特征工程系列】排列重要性法分析特征重要性-随机森林模型为例(案例+源码)

这是我的第277篇原创文章。

一、引言

      排列重要性(Permutation Importance)是一种基于模型的方法,用于评估每个特征对模型性能的影响程度。该方法通过随机打乱单个特征的值并观察模型性能的变化,从而确定特征的重要性。如果某个特征对模型性能的影响很大,那么当该特征的值被打乱时,模型的性能会明显下降。排列重要性的计算过程如下:

(1)首先,使用原始数据集训练一个机器学习模型,并记录其性能指标(如准确率、F1 分数等)作为基准性能。

(2)对于每个特征,分别将其值随机打乱,然后使用打乱后的数据集重新评估模型,并记录性能指标。

(3)计算每个特征的重要性得分,该得分通常是基准性能与打乱后性能之间的差异。

(4)特征的重要性得分越高,表示该特征对模型的影响越大。

二、实现过程

2.1 准备数据

data = pd.read_csv(r'dataset.csv')
df = pd.DataFrame(data)

图片

2.2 目标变量和特征变量

target = 'target'
features = df.columns.drop(target)

 特征变量如下:

图片

2.3 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

 X_train如下:

图片

2.4 创建随机森林分类器作为选择器的基模型

model = RandomForestClassifier(n_estimators=50, random_state=42)

2.5 训练模型并进行特征重要性分析

model.fit(X_train, y_train)
result = permutation_importance(model, X_test, y_test, n_repeats=10, random_state=1, scoring='accuracy')

2.6 获取特征排名

# 获取特征排名
feature_ranking = selector.ranking_
# 创建特征排名的DataFrame
ranking_df = pd.DataFrame({'Feature': features, 'Ranking': feature_ranking})

 ranking_df如下:

图片

2.7 对特征重要性进行排序

ranking_df = ranking_df.sort_values(by='Ranking')

排序后的 ranking_df如下:

图片

2.8 可视化特征重要性

plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=importance_df)
plt.title('Feature Importance')
plt.xlabel('Importance')
plt.ylabel('Feature')
plt.show()

 可视化结果如下:

图片

三、小结

    • 相对简单:实现简单,易于理解和使用。

    • 无假设:不依赖于数据分布或特定的模型假设,适用于各种类型的数据和模型。

    • 可解释性强:提供直观的特征重要性排序,有助于理解模型预测的原因。

    • 计算开销较大:对于大型数据集和复杂模型,计算排列重要性可能会很耗时。

    • 忽略特征之间的相关性:该方法独立地评估每个特征的重要性,可能忽略特征之间的相关性对模型性能的影响。

    • 对分类器敏感性:不同的分类器可能对排列重要性的计算结果产生不同的影响,因此在选择分类器时需要谨慎考虑。

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/612697.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模型预测控制与模糊控制 —— 潜力控制方案探讨

一、需要多少先验信息? 此图片来源于网络,所有的控制与估计过程都涉及了先验信息与后验信息之间的博弈 评估一个控制方案对先验信息的需求量大小和先验信息质量对其影响的方法涉及以下几个方面: 1、控制方案的理论分析: 详细分析…

【UE Niagara】在UI上生成粒子

效果 步骤 1. 在虚幻商城中将“Niagara UI Render”插件安装到引擎 2. 打开虚幻编辑器,勾选插件“Niagara UI Renderer”,然后重启编辑器 3. 先创建一个控件蓝图,该控件蓝图只包含一个按钮 这里设置尺寸框尺寸为200*50 4. 显示该控件 5. 新…

MFC中关于CMutex类的学习

MFC中关于CMutex类的学习 最近在项目中要实现两个线程之间的同步,MFC中提供了4个类,分别是CMutex(互斥量)、CCriticalSection(临界区)、CEvent(事件对象)、CSemaphore(信号量)。有关这4个类的说明,大家可以参考微软官方文档: CM…

4. 从感知机到神经网络

目录 1. 从感知机到神经网络 2. 最简单的神经网络 3. 激活函数的引入 1. 从感知机到神经网络 之前章节我们了解了感知机,感知机可以处理与门、非与门、或门、异或门等逻辑运算;不过在感知机中设定权重的工作是由人工来做的,而设定合适的&a…

AI算法工程师课程学习-数学基础-高数1-微积分

机器学习数学基础学习路线:1.高中数学-->大学2.微积分-->3.线性代数-->4.概率论-->5.优化理论。 为尽快进入到AI算法课程的学习,现在高数的学习要求: 1.看得懂,知道是什么,能听得懂,能理解讲…

Java框架精品项目【用于个人学习】

源码获取:私聊回复【项目关键字】获取 更多选题参考: Java练手项目 & 个人学习等选题参考 推荐菜鸟教程Java学习、Javatpoint学习 前言 大家好,我是二哈喇子,此博文整理了各种项目需求 此文下的项目用于博主自己学习&#x…

文本三剑客grep与正则表达式、元字符

正则表达式 正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查…

无人播剧直播收益在哪里!快手无人播剧新秘籍:版权无忧,日入四位数攻略

无人播剧顾名思义就是通过短视频平台直播不需要真人出镜受众群体通过网络短视频平台看到的经典影视剧集可以实现24小时不停断的播放利用多种途径变现的一种直播形式 1、操作简单、不露脸、不出镜2、手机、电脑都可以操作3、可以矩阵操作4、0粉丝、0作品、0保证金就可以开播5、…

FreeRTOS任务调度器

目录 1、什么是任务调度器 2、FreeRTOS中的任务调度器 2.1 抢占式调度 2.2 时间片调度 2.3 协作式调度 3、任务调度案例分析 3.1 实验需求 3.2 CubeMX配置 3.3 代码实现 3.3.1 uart.c 重定向printf 3.3.2 打开freertos.c并添加代码 3.3.4 代码现象 1、什么是任务调度…

家装新宠!装修APP开发解决方案,为业主提供全新装修模式

随着人们对家庭装修的需求度越来越高,装修APP开发也随之出现。如今装修APP开发可实现互联网与传统家装行业的信息结合,由传统的家装行业广告模式向移动端的互联网模式进行转移,实现传统家装行业与互联网的相辅相成,以此来推动家装…

Maven 插件使用

1.spring-boot-maven-plugin 我们直接使用 maven package (maven自带的package打包功能),打包Jar包的时候,不会将该项目所依赖的Jar包一起打进去,在使用java -jar命令启动项目时会报错,项目无法正常启动。…

每日一题8:Pandas-改变数据类型

一、每日一题 编写一个解决方案来纠正以下错误: grade 列被存储为浮点数,将它转换为整数。 返回结果格式如下示例所示。 解答: import pandas as pddef changeDatatype(students: pd.DataFrame) -> pd.DataFrame:students[grade] studen…

Java入门基础学习笔记7——Intellij IDEA开发工具概述、安装

之前的开发工具存在一些问题: 文本编辑工具:记事本、NotePad、EditPlus、Sublime...编写代码的时候没有错误提醒、没有智能代码提示、需要自己进行编译、执行、功能不够强大。 集成开发环境(IDE:Integrated Development Environm…

推荐4个可用的github国内镜像

Github是全球最大的代码托管云平台,超过1亿用户在平台上分享代码及数据,深受生物信息学软件开发者的喜爱,并且现在发表文章,若涉及到代码,编辑还要求我们把代码及数据存放在github上,以便检查数据的真实性和…

matlab使用教程(68)—修改双y轴图的属性

使用 yyaxis 函数可创建一个左右两侧都有 y 轴的 Axes 对象。与 y 轴有关的坐标区属性有两个值。但是,MATLAB 仅允许访问活动侧的值。例如,如果左侧处于活动状态,则 Axes 对象的 YDir 属性包含左侧 y 轴的方向。同样,如果右侧处于…

DIY可视化软件环境准备

DIY官网可视化工具做好的可视化拖拽开发工具无须编程、零代码基础、所见即所得设计工具支持轻松在线可视化导出微信小程序、支付宝小程序、头条小程序、H5、WebApp、UNIAPP等源码 支持组件库,高颜值,卡片,列表,轮播图,导航栏,按钮,标签,表单,单选,复选,下拉选择,多层选择,级联选…

XTuner笔记

为什么要微调: 1. 模型不具备一些私人定制的知识 2。模型回答问题的套路你不满意。 对应衍生出来两种概念 增量预训练微调: 使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识训练数据:文章、书籍、代码等…

Microsoft 365 for Mac v16.84 office365全套办公软件

Microsoft 365 for Mac是一款功能丰富的办公软件套件,为Mac用户提供了丰富的功能和工具,提高了工作效率和协作能力。Microsoft 365 for Mac是一款专为Mac用户设计的订阅式办公软件套件,旨在提高生产力和效率。 Microsoft 365 for Mac v16.84正…

图解HTTP(2、简单的 HTTP 协议)

HTTP 协议用于客户端和服务器端之间的通信 请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。 通过请求和响应的交换达成通信 请求必定由客户端发出,而服务器端回复响应报文 请求报文是由请求方法、请求 URI、协议版本、…

ArcGIS10.2能用了10.2.2不行了(解决)

前两天我们的推文介绍了 ArcGIS10.2系列许可到期解决方案-CSDN博客文章浏览阅读2次。本文手机码字,不排版了。 昨晚(2021\12\17)12点后,收到很多学员反馈 ArcGIS10.2系列软件突然崩溃。更有的,今天全单位崩溃。​提示许…
最新文章