首页 > 其他分享 >Matplotlib | 结合numpy中argsort函数来画出特征阶梯图

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

时间:2024-11-20 22:14:11浏览次数:3  
标签:plt Matplotlib argsort 数组 indices 排序 numpy importances

  • 代码
#构建分类随机森林分类器
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 是一个非常有用的函数,特别是在数据分析和机器学习中,当你需要根据数值对数据进行排序,并且关心排序后元素的原始位置时。

标签:plt,Matplotlib,argsort,数组,indices,排序,numpy,importances
From: https://blog.csdn.net/HG0724/article/details/143924075

相关文章

  • numpy02——广播原则
    1.广播原则的解释2. 索引3.切片,跟python的切片差不多4.sort方法,他是列表的内置方法,用于在列表就地排序,即直接在原列表上进行排序,不返回新列表,他是一个方法,可以对比可变数据类型5.sorted函数,他是一个函数,可以对任何可迭代对象进行排序,返回一个新的排序后的列表。......
  • 解决RuntimeError: Numpy is not available
    解决RuntimeError:Numpyisnotavailable  这是因为Numpy版本太高,将现有Numpy卸载pipuninstallnumpy安装numpy=1.26.4,解决此问题pipinstallnumpy==1.26.4-ihttps://pypi.tuna.tsinghua.edu.cn/simple......
  • 基于numpy、pandas、matplotlib的数据分析项目详解(超详细版)
    一、引言在之前的文章中,我们介绍了NumPy、Pandas和Matplotlib这三款强大的数据分析工具。今天,我们将通过一个实际项目来帮助大家更好地掌握这些工具。项目名称为《餐厅订单数据分析》。在这个项目中,我们将分析餐厅的订单数据,以获取有关菜品销售、订单趋势和顾客偏好的有价......
  • Python可视化Matplotlib折线图plot用法详解
    importmatplotlib.pyplotaspltimportrandom,iofrompylabimportmplimportnumpyasnp#画出温度变化图#设置显示中文字体mpl.rcParams["font.sans-serif"]=["SimHei"]#设置正常显示符号mpl.rcParams["axes.unicode_minus"]=False# 准备x.y坐标......
  • numpy浅用
        numpy是一项python语言编写的,开源的,使用github管理的数据分析工具项目。它使用与matlab相似结构的数组操作单元、矩阵操作单元,两种操作单元十分类似除了一些调用、规格和适配性问题不同,混用的话几乎不影响实际中的轻度使用。市面上很多具体的数据分析和可视化工具......
  • Matplotlib 2D绘图库
    1、基本介绍Matplotlib是一个Python2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。Matplotlib可用于Python脚本,Python和IPythonShell、Jupyteropen 笔记本,Web应用程序服务器和四个图形用户界面工具包。Matplotlib尝试使容易的事情变得更容易,使困难......
  • 使用NumPy、Pandas和Matplotlib进行数据处理和可视化
    前言在数据科学和数据分析领域,NumPy、Pandas和Matplotlib是最常用的数据处理和可视化库。NumPy提供了高效的数组操作功能,Pandas则在NumPy的基础上增加了丰富的数据处理工具,而Matplotlib则是最流行的Python绘图库之一。本文将详细介绍如何使用这三个库进行数据处理和可视化。......
  • Python数据分析NumPy和pandas(二十六、数据整理--连接、合并和重塑 之三:重塑和透视)
    对表格数据的重新排列操作,称为reshape或pivot。有很多种方法对表格数据进行重塑。一、使用分层索引进行reshape分层索引提供了一种在DataFrame中重新排列数据的方法。主要有两个函数方法:stack:将数据中的列旋转或透视到行。unstack:从行转为列。还是用代码示例来学习......
  • 用numpy将nc批量转的降雨表格按市县整理成逐年逐月降雨
    之前用arcmap的模型工具将nc文件转tif后,提取降雨数据到excel中,距离最终需要的数据还是有一定的差距。需要用到Python进行处理。                         1、降雨需要的格式做高标准农田,水资源平衡分析,用到的历年降雨资料......
  • 数据处理与统计分析——01-Numpy的属性&ndarray数组创建
    Numpy的属性Numpy简介NumPy(NumericalPython)是Python数据分析必不可少的第三方库NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力。本身是由C语言开发,是个很基础的扩展,NumPy被Python其它科学计算包作......