Matplotlib | 结合numpy中argsort函数来画出特征阶梯图

  • 代码
#构建分类随机森林分类器
clf=RandomForestClassifier(n_estimators=10,random_state=42,max_depth=4)
clf.fit(x_val, y_val) #对自变量和因变量进行拟合
for feature in zip(x_feature,clf.feature_importances_):print(feature)
('V1', 0.0038989752714058486)
('V2', 0.0027038871454469217)
('V3', 0.026952559757713098)
('V4', 0.02159376763527073)
('V5', 0.01798767663560397)
('V6', 0.0005289202626423892)
('V7', 0.03184662339558151)
('V9', 0.012345829031178873)
('V10', 0.0917851429181416)
('V11', 0.0068039329696330765)
('V12', 0.20512839327084872)
('V14', 0.13941079529437903)
('V16', 0.12561363630520125)
('V17', 0.26507827141261814)
('V18', 0.03456786771378745)
('V19', 0.0005833168045762355)
('Amount', 0.006863681529958022)
('Hour', 0.006306722646013179)
plt.style.use('fivethirtyeight')
plt.rcParams['figure.figsize'] = (12,6)## feature importances 可视化 
importances = clf.feature_importances_
feat_names = data_df_new[x_feature].columns# 对特征重要性进行降序排序,并获取排序后的索引
indices = np.argsort(importances)[::-1]fig = plt.figure(figsize=(20,6))
plt.title("阶梯图-importances by RandomTreeClassifier")x = list(range(len(indices)))plt.bar(x, importances[indices], color='lightblue',  align="center")
plt.step(x, np.cumsum(importances[indices]), where='mid', label='Cumulative')
plt.xticks(x, feat_names[indices],fontsize=14)
plt.xlim([-1, len(indices)]) # 设置了 x 轴的范围,从 -1 到 len(indices),确保所有特征都能在图表中显示。
plt.show()
  • 结果
    在这里插入图片描述

进一步:在柱状图上显示当前的特征重要性取值

plt.style.use('fivethirtyeight')
plt.rcParams['figure.figsize'] = (12,6)## feature importances 可视化 
importances = clf.feature_importances_
feat_names = data_df_new[x_feature].columns
# 对特征重要性进行降序排序,并获取排序后的索引
indices = np.argsort(importances)[::-1]fig = plt.figure(figsize=(20,6))
plt.title("阶梯图-importances by RandomTreeClassifier")x = list(range(len(indices)))bars = plt.bar(x, importances[indices], color='lightblue',  align="center")
# 在每个条形上方添加特征名称
for bar, label in zip(bars, importances[indices]):plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height(), f"{label:.5f}",ha='center', va='bottom', fontsize=10, color='black')plt.step(x, np.cumsum(importances[indices]), where='mid', label='Cumulative')
plt.xticks(x, feat_names[indices],fontsize=14)
plt.xlim([-1, len(indices)])
plt.show()

在这里插入图片描述

plt.step()

  • 阶梯图
plt.step(x, np.cumsum(importances[indices]), where='mid', label='Cumulative')
以下是参数的详细解释:x:这是阶梯图的 x 坐标,通常是一个数字列表,表示每个阶梯的位置。np.cumsum(importances[indices]):这是 numpy 库中的 cumsum 函数,它计算数组中元素的累积和。
在这里,它被用来计算特征重要性的累积和,indices 是特征重要性排序后的索引。where='mid':这个参数指定了阶梯图的台阶应该位于每个区间的哪个位置。
'mid' 表示台阶位于每个区间的中间位置,这意味着每个阶梯的高度将从当前点跳到下一个点,然后在下一个点保持水平。label='Cumulative':这是为阶梯图设置的图例标签,表示这个阶梯图代表的是累积和。

argsort

在 Python 的 NumPy 库中,argsort 函数用于对数组中的元素进行排序,并返回排序后元素的索引。这个函数对于找到数组值从小到大(或从大到小)的顺序对应的索引非常有用。

函数定义

numpy.argsort(a, axis=-1, kind=None, order=None)

参数解释

  • a:要排序的数组。
  • axis:指定沿着哪个轴进行排序。默认为 -1,表示沿着最后一个轴。
  • kind:指定排序算法的类型。常用的值有 quicksort(快速排序,默认值)、mergesort(归并排序)、heapsort(堆排序)等。
  • order:用于多维数组排序时指定次序的参数。

返回值

argsort 返回的是排序后的元素索引数组,该数组的形状与输入数组相同,但元素值是原数组中元素从小到大排序后的索引。

示例代码

import numpy as np# 创建一个随机数组
arr = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])# 使用 argsort 对数组进行排序,并获取索引
sorted_indices = np.argsort(arr)# 打印排序后的索引
print("排序后的索引:", sorted_indices)# 使用排序后的索引获取排序后的数组
sorted_array = arr[sorted_indices]# 打印排序后的数组
print("排序后的数组:", sorted_array)

输出结果

排序后的索引: [1 7 3 0 2 4 9 5 6 8 10]
排序后的数组: [1 1 2 3 3 4 5 5 5 6 9]

在这个例子中,argsort 返回了数组中元素从小到大排序后的索引,然后我们使用这些索引来获取排序后的数组。

注意事项

  • 如果输入数组中有重复值,argsort 返回的索引将对应于这些重复值在原数组中首次出现的顺序。
  • argsort 可以用于多维数组,但需要指定 axis 参数来确定沿着哪个轴进行排序。
  • [::-1]:这是 Python 中的切片语法,用于反转数组。当应用于 np.argsort(arr) 的结果时,它将索引数组反转,从而实现降序排序。

argsort 是一个非常有用的函数,特别是在数据分析和机器学习中,当你需要根据数值对数据进行排序,并且关心排序后元素的原始位置时。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本

GRAPH ATTENTION NETWORKS 代码详解 前言0.引言1. 环境配置2. 代码的运行2.1 报错处理2.2 运行结果展示 3.总结 前言 在前文中,我们已经深入探讨了图卷积神经网络和图注意力网络的理论基础。还没看的同学点这里补习下。接下来,将开启一个新的阶段&#…

Linux驱动开发(7):使用设备树实现RGB 灯驱动

通过上一小节的学习,我们已经能够编写简单的设备树节点,并且使用常用的of函数从设备树中获取我们想要的节点资源。 这一小节我们带领大家使用设备树编写一个简单的RGB灯驱动程序,加深对设备树的理解。 1. 实验说明 本节实验使用到 EBF6ULL-…

安卓手机root+magisk安装证书+抓取https请求

先讲一下有这篇文章的背景吧,在使用安卓手机fiddler抓包时,即使信任了证书,并且手机也安装了证书,但是还是无法捕获https请求的问题,最开始不知道原因,后来慢慢了解到现在有的app为了防止抓包,把…

【深度学习】循环神经网络及文本生成模型构建

循环神经网络 词嵌入层 ​ 词嵌入层的作用就是将文本转换为向量。 ​ 词嵌入层首先会根据输入的词的数量构建一个词向量矩阵,例如: 我们有 100 个词,每个词希望转换成 128 维度的向量,那么构建的矩阵形状即为: 100*128,输入的每…

51单片机基础01 单片机最小系统

目录 一、什么是51单片机 二、51单片机的引脚介绍 1、VCC GND 2、XTAL1 2 3、RST 4、EA 5、PSEN 6、ALE 7、RXD、TXD 8、INT0、INT1 9、T0、T1 10、MOSI、MISO、SCK 11、WR、RD 12、通用IO P0 13、通用IO P1 14、通用IO P2 三、51单片机的最小系统 1、供电与…

【前端知识】前端打包工具webpack深度解读

webpackandesign搭建前端脚手架 webpack概述一、核心功能二、主要特点三、核心概念四、使用场景五、安装与配置六、常用命令 配置文件详解一、基本结构二、主要配置项及其作用三、示例配置 加载器一、加载器的定义与作用二、常见的加载器类型及作用三、加载器的配置与使用四、加…

用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转(跨文件跳转)这些功能

(一)方法一:安装插件SystemVerilog - Language Support 安装一个vscode插件即可,插件叫SystemVerilog - Language Support。虽然说另一个插件“Verilog-HDL/SystemVerilog/Bluespec SystemVerilog”也有信号提示及定义跳转功能&am…

uniapp vue3小程序报错Cannot read property ‘__route__‘ of undefined

在App.vue里有监听应用的生命周期 <script>// 只能在App.vue里监听应用的生命周期export default {onError: function(err) {console.log(AppOnError:, err); // 当 uni-app 报错时触发}} </script>在控制台打印里无意发现 Cannot read property ‘__route__‘ of …

Ubuntu20.04升级glibc升级及降级的心路历程

想使用pip安装Isaac Sim&#xff0c;无奈此方法只支持 GLIBC>2.34 。使用的是Ubuntu20.04&#xff0c;使用 ldd --version 查看GLIBC版本&#xff0c;如果版本低于 2.34 则需要升级GLIBC&#xff0c;基于此开始了长达一天的尝试。 请注意&#xff0c;升级GLIBC是一个危险操作…

奶龙IP联名异军突起:如何携手品牌营销共创双赢?

在快节奏的互联网消费时代&#xff0c;年轻消费群体对产品和品牌的要求越来越挑剔。因此在品牌年轻化的当下&#xff0c;一方面需要品牌自身形象也要不断追求时代感&#xff0c;另一方面品牌也需要不断引领消费者需求&#xff0c;提升竞争力和产品力。 奶龙作为近年来异军突起…

ROM修改进阶教程------安卓14去除修改系统应用后导致的卡logo验证步骤 适用安卓13 14 安卓15可借鉴参考

上期的博文解析了安卓14 安卓15去除系统应用签名验证的步骤解析。我们要明白。修改系统应用后有那些验证。其中签名验证 去卡logo验证 与可降级安装应用验证等等的区别。有些要相互结合使用。今天的博文将对修改系统应用后卡logo验证做个步骤解析。 通过博文了解💝💝�…

【Spring boot】微服务项目的搭建整合swagger的fastdfs和demo的编写

文章目录 1. 微服务项目搭建2. 整合 Swagger 信息3. 部署 fastdfsFastDFS安装环境安装开始图片测试FastDFS和nginx整合在Storage上安装nginxnginx安装不成功排查:4. springboot 整合 fastdfs 的demodemo编写1. 微服务项目搭建 版本总结: spring boot: 2.6.13springfox-boot…

Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Docker 概述 1.1 Docker 主要组成部分 1.2 Docker 安装 2.0 Docker 常见命令 2.1 常见的命令介绍 2.2 常见的命令演示 3.0 数据卷 3.1 数据卷常见的命令 3.2 常见…

三格电子-EtherNet IP转Modbus TCP网关

EtherNet/IP转Modbus TCP网关 SG-EIP-TCP-210 产品用途 SG-EIP-TCP-210 网关可以实现将 Modbus TCP 接口设备连接到 EtherNet/IP 网络中。用户不需要了解具体的 Modbus TCP 和 EtherNet/IP 协议即可实现将 Modbus TCP 设备挂载到 EtherNet/IP 接口的 PLC 上&#xff0c;并和 …

修改gitee提交时用户名密码输错导致提交失败的解决方法

1、打开控制面板&#xff0c;点击用户账户 点击管理Windows凭据 点击Windows凭据&#xff0c;找到gitee,删除后重新git push 重新输入密码即可

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程&#xff08;10&#xff09;&#xff1a;配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…

安装gentoo之第二步:安装gentoo基本系统

目标 &#xff1a;将gentoo配置为服务器&#xff0c; 一、下载并解压stage文件 1.官网下载stage文件 网址&#xff1a;https://www.gentoo.org/downloads/ 将gentoo配置为服务器&#xff0c;所以只下载了stage3-amd64-systemd-20241117T163407Z.tar.xz这个最小的stage文件. 基…

Methode Electronics EDI 需求分析

Methode Electronics 是一家总部位于美国的全球性技术公司&#xff0c;专注于设计和制造用于多个行业的电子和电气组件&#xff0c;产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域&#xff0c;提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…

Java基础知识(六)

文章目录 StringString、StringBuffer、StringBuilder 的区别&#xff1f;String 为什么是不可变的?字符串拼接用“” 还是 StringBuilder?String#equals() 和 Object#equals() 有何区别&#xff1f;字符串常量池的作用了解吗&#xff1f;String s1 new String("abc&qu…

一文解决Latex中的eps报错eps-converted-to.pdf not found: using draft setting.

在使用Vscode配的PDFLatex编译IEEE TII的Latex模板时&#xff0c;出现eps文件不能转换为pdf错误&#xff0c;看了几十篇方法都没用&#xff0c;自己研究了半天终于可以正常运行了。主要原因还是Settings.JSON中的PDFLatex模块缺少&#xff1a;"--shell-escape", 命令…