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-…

k8s1.30.0高可用集群部署

负载均衡 nginx负载均衡 两台nginx负载均衡 vim /etc/nginx/nginx.conf stream {upstream kube-apiserver {server 192.168.0.11:6443 max_fails3 fail_timeout30s;#server 192.168.0.12:6443 max_fails3 fail_timeout30s;#server 192.168.0.13:6443 max_fails3…

安卓手机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、供电与…

vue 录音流程

vue 录音流程 RecordRTC npm install recordrtcimport RecordRTC from "recordrtc";<!-- 音频播放器&#xff0c;用于播放录音 --> <audio v-show"false" ref"audioPlayer" controls></audio>async startRecording() {// 检查…

QT使用libssh2库实现sftp文件传输

本篇文章通过用户名和密码来连接服务器端,通过密匙连接服务器端可以参考另外一篇文章: https://blog.csdn.net/u012372584/article/details/143826199?sharetype=blogdetail&sharerId=143826199&sharerefer=PC&sharesource=u012372584&spm=1011.2480.3001.…

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

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

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

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

从零开始搭建Java开发环

目录 引言 一、JDK安装 二、IDE选择与配置 三、构建工具配置 四、测试环境搭建 五、其他建议 引言 随着Java技术的不断进步与应用范围的不断扩大&#xff0c;越来越多的开发者加入到了Java开发的行列。一个高效稳定的开发环境是提高开发效率的基础。本文将详细介绍如何从零…

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 …

Vue3插槽v-slot使用方式

在 Vue 3 中&#xff0c;v-slot 是用来定义和使用插槽的指令。插槽是 Vue 的一个功能&#xff0c;允许你在组件内部定义占位内容&#xff0c;便于在父组件中提供动态内容。以下是 v-slot 的详细使用方法&#xff1a; 1. 基础使用 <template><BaseComponent><te…

Android 网络请求(二)OKHttp网络通信

学习笔记 OkHttp 是一个非常强大且流行的 HTTP 客户端库&#xff0c;广泛用于 Android 开发中进行网络请求。与 HttpURLConnection 相比&#xff0c;OkHttp 提供了更简单、更高效的 API&#xff0c;特别是在处理复杂的 HTTP 请求时。 如何使用 OkHttp 进行网络请求 以下是使…

Vue 3 国际化 (i18n) 最佳实践指南

1. 安装依赖 npm install vue-i18n@9 2. 项目结构建议 src/ ├── i18n/ │ ├── index.ts # i18n 配置文件 │ ├── languages/ # 语言文件目录 │ │ ├── zh-CN.ts # 中文 │ │ ├── en-US.ts # 英文 │ │ └─…

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

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

Android开发实战班 - 网络编程 - WebSocket 实时通信

在现代应用开发中&#xff0c;实时通信是许多应用的核心功能之一&#xff0c;例如聊天应用、实时通知、在线游戏等。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;能够实现服务器与客户端之间的实时双向数据交换。相比于传统的 HTTP 请求&#xff0c;Web…

如何从android的webview 取得页面上的数据

要从Android的WebView中获取页面上的数据&#xff0c;通常有几种常见的方法&#xff1a; JavaScript Interface&#xff1a;通过JavaScript和Android Interface进行通信。这种方法允许你在JavaScript中调用Android的方法&#xff0c;反之亦然。 Evaluate JavaScript&#xff…

力扣--LCR 140.训练计划||

题目 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号&#xff0c;请查找并返回倒数第 cnt 个训练项目编号。 示例 1&#xff1a; 输入&#xff1a;head [2,4,7,8], cnt 1 输出&#xff1a;8 提示&#xff1a; 1 < head.length < 100 0 < hea…

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

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