Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
在SHAP summary_plot中自定义特征显示顺序的教程_创想鸟

在SHAP summary_plot中自定义特征显示顺序的教程

在shap summary_plot中自定义特征显示顺序的教程

SHAP summary_plot 默认按特征重要性排序。本文将详细介绍如何通过设置 sort=False 参数并结合Pandas DataFrame对特征数据和SHAP值进行手动重排,从而实现自定义特征在SHAP摘要图中的显示顺序,提升图表的可控性和解读灵活性。

1. 理解SHAP summary_plot 及其默认行为

SHAP (SHapley Additive exPlanations) 是一种流行的模型可解释性框架,能够解释单个预测以及模型整体的行为。shap.summary_plot 是其核心可视化工具之一,它能够以多种形式(如条形图、点图)展示每个特征对模型输出的平均影响。默认情况下,summary_plot 会根据特征的平均绝对SHAP值(即特征重要性)从高到低进行排序,将最重要的特征显示在顶部。

然而,在某些场景下,用户可能希望按照特定的业务逻辑、预设顺序或为了与其他图表保持一致性来排列特征,而非单纯依赖模型计算出的重要性。例如,你可能希望将一组相关的特征放在一起,或者按照数据输入的原始顺序进行展示。

2. 自定义特征排序的核心策略

要实现自定义特征顺序,主要依赖于 shap.summary_plot 函数的一个关键参数:sort。

sort=False 参数: 当此参数设置为 False 时,summary_plot 将不再对特征进行自动排序,而是按照你传入的特征数据和SHAP值的列顺序进行绘制。手动重排数据: 由于 sort=False 只是禁用了自动排序,因此你需要确保传入 summary_plot 的 shap_values 和特征数据(通常是 X 或 features)已经按照你期望的顺序进行了排列。这通常通过重新组织这些数据的列来实现。

3. 实践指南:通过Pandas DataFrame实现特征重排

以下是一个详细的步骤,演示如何使用Pandas DataFrame来方便地重排特征数据和SHAP值,从而控制 summary_plot 的显示顺序。

3.1 准备数据与模型解释器

首先,我们需要一个训练好的模型和相应的SHAP解释器及SHAP值。我们将使用一个简单的卷积神经网络(CNN)示例来生成SHAP值。

import matplotlib.pyplot as pltimport numpy as npimport shapimport pandas as pd # 导入pandas用于数据操作from tensorflow import kerasfrom tensorflow.keras import layers# 示例数据X = np.array([[(1,2,3,3,1),(3,2,1,3,2),(3,2,2,3,3),(2,2,1,1,2),(2,1,1,1,1)],              [(4,5,6,4,4),(5,6,4,3,2),(5,5,6,1,3),(3,3,3,2,2),(2,3,3,2,1)],              [(7,8,9,4,7),(7,7,6,7,8),(5,8,7,8,8),(6,7,6,7,8),(5,7,6,6,6)],              [(7,8,9,8,6),(6,6,7,8,6),(8,7,8,8,8),(8,6,7,8,7),(8,6,7,8,8)],              [(4,5,6,5,5),(5,5,5,6,4),(6,5,5,5,6),(4,4,3,3,3),(5,5,4,4,5)],              [(4,5,6,5,5),(5,5,5,6,4),(6,5,5,5,6),(4,4,3,3,3),(5,5,4,4,5)],              [(1,2,3,3,1),(3,2,1,3,2),(3,2,2,3,3),(2,2,1,1,2),(2,1,1,1,1)]])y = np.array([0, 1, 2, 2, 1, 1, 0])# 构建并训练一个简单的CNN模型model = keras.Sequential([    layers.Conv1D(128, kernel_size=3, activation='relu', input_shape=(5,5)),    layers.MaxPooling1D(pool_size=2),    layers.LSTM(128, return_sequences=True),    layers.Flatten(),    layers.Dense(128, activation='relu'),    layers.Dense(3, activation='softmax') # 假设有3个类别])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])model.fit(X, y, epochs=10, verbose=0) # verbose=0 减少训练输出# 解释器和SHAP值计算explainer = shap.GradientExplainer(model, X)shap_values = explainer.shap_values(X)# 原始问题中指定了用于绘图的数据切片cls = 0 # 针对第一个类别idx = 0 # 针对X的第一个"时间步"或"特征组"X_for_plot = X[:, idx, :] # 形状为 (num_samples, num_features)shap_values_for_plot = shap_values[cls][:, idx, :] # 形状为 (num_samples, num_features)# 定义原始特征名称original_feature_names = ["Feature1", "Feature2", "Feature3", "Feature4", "Feature5"]# 绘制默认排序的摘要图(可选,用于对比)print("--- 默认排序的SHAP摘要图 ---")shap.summary_plot(shap_values_for_plot, X_for_plot, plot_type="bar", feature_names=original_feature_names)plt.title("Default SHAP Summary Plot (Sorted by Importance)")plt.show()

3.2 定义目标特征顺序

现在,我们来定义一个自定义的特征顺序。这个顺序将决定特征在图表中的排列方式。

# 定义你期望的特征顺序# 假设我们想将Feature3放在最前面,然后是Feature5,接着是Feature1,以此类推custom_feature_order = ["Feature3", "Feature5", "Feature1", "Feature4", "Feature2"]# 确保自定义顺序中的所有特征名称都存在于原始特征名称中if not all(f in original_feature_names for f in custom_feature_order):    raise ValueError("自定义特征顺序中包含不在原始特征列表中的名称!")

3.3 重排特征数据与SHAP值

这是实现自定义排序的核心步骤。我们将 X_for_plot 和 shap_values_for_plot 转换为Pandas DataFrame,利用DataFrame的列操作功能进行重排,然后再转换回NumPy数组以供 shap.summary_plot 使用。

# 将特征数据转换为DataFramefeatures_df = pd.DataFrame(X_for_plot, columns=original_feature_names)# 将SHAP值转换为DataFrameshap_df = pd.DataFrame(shap_values_for_plot, columns=original_feature_names)# 根据自定义顺序重排DataFrame的列features_df_ordered = features_df[custom_feature_order]shap_df_ordered = shap_df[custom_feature_order]# 将重排后的DataFrame转换回NumPy数组X_ordered_for_plot = features_df_ordered.to_numpy()shap_values_ordered_for_plot = shap_df_ordered.to_numpy()

3.4 绘制自定义顺序的SHAP摘要图

最后,使用重排后的数据和 sort=False 参数来生成图表。

# 绘制自定义排序的摘要图print("n--- 自定义排序的SHAP摘要图 ---")shap.summary_plot(    shap_values_ordered_for_plot,    X_ordered_for_plot,    plot_type="bar",    feature_names=custom_feature_order, # 注意这里传入的是自定义顺序的特征名称    sort=False # 禁用自动排序)plt.title("Custom Ordered SHAP Summary Plot")plt.show()

4. 完整示例代码

将上述所有步骤整合到一个可运行的脚本中:

import matplotlib.pyplot as pltimport numpy as npimport shapimport pandas as pdfrom tensorflow import kerasfrom tensorflow.keras import layers# 示例数据X = np.array([[(1,2,3,3,1),(3,2,1,3,2),(3,2,2,3,3),(2,2,1,1,2),(2,1,1,1,1)],              [(4,5,6,4,4),(5,6,4,3,2),(5,5,6,1,3),(3,3,3,2,2),(2,3,3,2,1)],              [(7,8,9,4,7),(7,7,6,7,8),(5,8,7,8,8),(6,7,6,7,8),(5,7,6,6,6)],              [(7,8,9,8,6),(6,6,7,8,6),(8,7,8,8,8),(8,6,7,8,7),(8,6,7,8,8)],              [(4,5,6,5,5),(5,5,5,6,4),(6,5,5,5,6),(4,4,3,3,3),(5,5,4,4,5)],              [(4,5,6,5,5),(5,5,5,6,4),(6,5,5,5,6),(4,4,3,3,3),(5,5,4,4,5)],              [(1,2,3,3,1),(3,2,1,3,2),(3,2,2,3,3),(2,2,1,1,2),(2,1,1,1,1)]])y = np.array([0, 1, 2, 2, 1, 1, 0])# 构建并训练一个简单的CNN模型model = keras.Sequential([    layers.Conv1D(128, kernel_size=3, activation='relu', input_shape=(5,5)),    layers.MaxPooling1D(pool_size=2),    layers.LSTM(128, return_sequences=True),    layers.Flatten(),    layers.Dense(128, activation='relu'),    layers.Dense(3, activation='softmax')])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])model.fit(X, y, epochs=10, verbose=0)# 解释器和SHAP值计算explainer = shap.GradientExplainer(model, X)shap_values = explainer.shap_values(X)# 原始问题中指定了用于绘图的数据切片cls = 0idx = 0X_for_plot = X[:, idx, :]shap_values_for_plot = shap_values[cls][:, idx, :]# 定义原始特征名称original_feature_names = ["Feature1", "Feature2", "Feature3", "Feature4", "Feature5"]# --- 默认排序的SHAP摘要图(用于对比)---print("--- 默认排序的SHAP摘要图 ---")shap.summary_plot(shap_values_for_plot, X_for_plot, plot_type="bar", feature_names=original_feature_names)plt.title("Default SHAP Summary Plot (Sorted by Importance)")plt.show()# --- 自定义特征排序 ---# 1. 定义你期望的特征顺序custom_feature_order = ["Feature3", "Feature5", "Feature1", "Feature4", "Feature2"]# 确保自定义顺序中的所有特征名称都存在于原始特征名称中if not all(f in original_feature_names for f in custom_feature_order):    raise ValueError("自定义特征顺序中包含不在原始特征列表中的名称!")# 2. 将特征数据和SHAP值转换为DataFramefeatures_df = pd.DataFrame(X_for_plot, columns=original_feature_names)shap_df = pd.DataFrame(shap_values_for_plot, columns=original_feature_names)# 3. 根据自定义顺序重排DataFrame的列features_df_ordered = features_df[custom_feature_order]shap_df_ordered = shap_df[custom_feature_order]# 4. 将重排后的DataFrame转换回NumPy数组X_ordered_for_plot = features_df_ordered.to_numpy()shap_values_ordered_for_plot = shap_df_ordered.to_numpy()# 5. 绘制自定义排序的摘要图print("n--- 自定义排序的SHAP摘要图 ---")shap.summary_plot(    shap_values_ordered_for_plot,    X_ordered_for_plot,    plot_type="bar",    feature_names=custom_feature_order, # 传入自定义顺序的特征名称    sort=False # 禁用自动排序)plt.title("Custom Ordered SHAP Summary Plot")plt.show()

5. 注意事项

feature_names 参数: 确保在调用 shap.summary_plot 时,feature_names 参数传入的列表与你重排后的数据列顺序严格一致。这是图表正确显示特征名称的关键。数据维度匹配: 传入 shap.summary_plot 的 shap_values 和特征数据 (X) 必须具有相同的样本数和特征数。在进行重排操作时,务必保持这种对应关系。Pandas的便利性: 使用Pandas DataFrame进行列重排非常方便直观。如果你的数据已经是DataFrame格式,则可以省去 to_numpy() 的转换步骤(尽管 shap.summary_plot 也能接受DataFrame作为输入)。plot_type 的选择: summary_plot 支持多种 plot_type,如 “bar” (条形图) 和 “dot” (点图)。自定义排序的方法适用于所有这些类型。

6. 总结

通过灵活运用 shap.summary_plot 的 sort=False 参数,并结合Pandas DataFrame强大的数据操作能力,我们可以轻松地实现SHAP摘要图中特征的自定义排序。这不仅提高了图表的可控性,也使得我们能够根据特定的分析需求或业务背景,更有效地解读模型解释结果,从而增强模型的可解释性和沟通效率。

以上就是在SHAP summary_plot中自定义特征显示顺序的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1372456.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
将扁平列表转换为指定长度子列表的交错填充方法
上一篇 2025年12月14日 12:20:34
Polars groupby 上下文中的数据插值与上采样技术
下一篇 2025年12月14日 12:20:48

相关推荐

  • PHP如何实现视频留言评论_PHP实现视频留言评论功能

    答案:通过数据库设计、前端表单、后端处理和评论展示四步实现PHP视频留言功能。1. 创建comments表存储信息;2. 构建表单提交昵称与评论;3. 用add_comment.php接收并存入数据库;4. 在页面读取并安全输出评论,防止XSS。 要实现视频留言评论功能,PHP可以结合前端页面、数据…

    2026年9月22日
    000
  • Java中如何区分逻辑错误和系统异常

    系统异常是程序运行中由JVM抛出的RuntimeException,如空指针、数组越界,会导致程序中断并打印堆栈;逻辑错误是程序语法正确但结果不符预期,如条件写反、循环次数错误,不会崩溃但行为异常。两者区别在于是否抛出异常、是否中断执行及调试方式不同,需通过防御性编程、单元测试和日志调试加以防范。 …

    2026年9月22日
    000
  • 歧路旅人2兑换码是什么 八方旅人2最新2025兑换码大全

    歧路旅人2最新通用兑换码:qlyrdldbz2025、qdn4xkcndx、qllrdldbz等,可在游戏内商城直接使用,领取剑士黄金武器皮肤、双倍经验加成及1000叶币,奖励丰富限时有效,先到先得。 无限资源畅玩|游戏辅助工具: 2025年最新可用兑换码汇总如下: 1、兑换码: qlyrdldbz…

    2026年9月22日
    000
  • mysql安装后怎么建表 mysql创建数据表的详细步骤

    mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤

    安装完 mysql 后,建表的关键在于先创建数据库并选择使用,然后通过 create table 语句定义表结构。1. 创建数据库:使用 create database mydatabase; 创建数据库;2. 使用数据库:通过 use mydatabase; 选择当前操作的数据库;3. 建表语法:…

    2026年9月22日 • 用户投稿
    200
  • LINUX怎么查看哪个进程占用了某个端口_LINUX端口占用查询方法

    使用ss或lsof命令可快速查看端口占用情况,如sudo ss -tulnp | grep :端口号或sudo lsof -i :端口号,结合PID进一步通过ps或/proc文件系统定位进程详情。 在Linux系统中,查看某个端口被哪个进程占用,常用的方法是使用命令行工具结合网络和进程信息进行查询。…

    2026年9月22日
    000
  • 夸克浏览器电脑网页版访问入口 夸克官网主页链接地址

    夸克浏览器电脑网页版访问入口是https://www.quark.cn/,用户可直接在浏览器地址栏输入该链接访问,其界面采用极简设计并集成智能搜索、网盘服务与跨设备同步等功能。 立即进入“☞☞☞☞☞点击夸克资源网(永久免费)入口☜☜☜☜☜”; 立即进入“☞☞☞☞☞点击夸克浏览器电脑网页版访问入口☜☜…

    2026年9月22日
    500
  • 抖音小店如何运营?普通人开店选品与推广的实用策略

    抖音小店如何运营?普通人开店选品与推广的实用策略抖音小店如何运营?普通人开店选品与推广的实用策略抖音小店如何运营?普通人开店选品与推广的实用策略抖音小店如何运营?普通人开店选品与推广的实用策略

    新手做抖音小店最现实的问题是没钱投广告和没专业团队,解决方法是抓住选品和推广两个核心环节。一、选品要找市场需求高且利润合理的商品,避开竞争激烈或太冷门的品类,结合多平台数据测试;二、前期重点用“商品卡”推广,通过短视频展示产品使用场景并挂链接引流,成本低且适合测试;三、适当尝试直播积累经验,但不依赖…

    2026年9月22日 • 用户投稿
    400
  • Spring Boot 应用中的单元测试、Mockito 和集成测试:最佳实践

    第一段引用上面的摘要: 本文旨在帮助初学者理解在 Spring Boot 应用中何时以及如何使用 JUnit、Mockito 和集成测试。我们将探讨这些测试框架在 Controller、Service 和 Repository 层中的应用,并提供示例说明何时使用 Mockito 模拟对象,以及何时使…

    2026年9月22日
    000
  • 如何查询命令所属包 yum provides反向查找

    如何查询命令所属包 yum provides反向查找如何查询命令所属包 yum provides反向查找如何查询命令所属包 yum provides反向查找如何查询命令所属包 yum provides反向查找

    使用 yum provides 可以查找某个命令或文件属于哪个软件包,解决“command not found”问题。1. 使用时建议带上完整路径,如 yum provides /usr/sbin/ifconfig;2. 支持通配符模糊查找,如 yum provides */python3;3. 若…

    2026年9月22日 • 用户投稿
    000
  • mysql如何输入变量值 mysql交互式代码输入步骤详解

    mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解

    在mysql命令行中交互式输入变量值可通过预处理语句或用户自定义变量实现。1. 使用预处理语句时,先用prepare定义含占位符的sql语句,再通过set设置变量值,最后用execute执行并传参,完成后需deallocate释放资源;2. 使用用户自定义变量时,直接通过set赋值并在sql语句中引…

    2026年9月22日 • 用户投稿
    100
  • Karate框架中处理带方括号和日期范围的GET请求参数

    本文旨在解决Karate框架中构建包含复杂、带方括号(如filters[start_date])及日期范围的GET请求参数时遇到的URL编码问题。通过对比直接定义查询对象和使用param关键字的方法,详细阐述了如何正确地构造URL,确保参数格式符合预期,从而有效进行API测试。 1. 问题背景与挑战…

    2026年9月22日
    000
  • RAID 0阵列对NVMe SSD性能的提升与数据安全风险分析

    RAID 0通过多NVMe SSD并行提升读写性能,理论速度翻倍且显著优化高负载响应,但无冗余导致任一硬盘故障即全阵列崩溃,数据恢复极难,仅建议用于可接受高风险的临时工作或性能优先场景,并必须配合外部备份。 raid 0通过将数据条带化分布在多个存储设备上,理论上可提升读写性能。在搭配nvme ss…

    用户投稿 2026年9月22日
    200
  • SonyCatalyst如何制作高质量AI视频?专业工具剪辑AI内容的指南

    Sony Catalyst通过素材筛选、视觉修正、色彩校正、细节雕琢与音频优化,将AI生成的粗胚视频精修为具备叙事感与视觉一致性的专业作品,其强大色彩管理、稳定器与降噪工具有效解决AI视频的抖动、噪点、色彩偏差等问题,并支持高分辨率素材处理与跨平台输出,实现AI内容与传统剪辑流程的高效融合。 ☞☞☞…

    2026年9月22日
    000
  • 谷歌浏览器窗口透明边框显示异常如何修复

    首先尝试修改快捷方式添加–disable-gpu –disable-software-rasterize参数,若可正常运行则关闭硬件加速,并重置chrome://flags实验功能及清除ShaderCache缓存文件。 谷歌浏览器出现窗口透明边框显示异常,通常和硬件加速或GP…

    2026年9月22日
    000
  • windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程

    windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程

    首先确认硬件支持并开启CPU虚拟化,再根据系统版本通过图形界面或命令行启用Hyper-V,操作后重启生效,最后使用Hyper-V管理器验证状态。 如果您在使用Windows 11时需要运行虚拟机或兼容特定模拟器,可能需要开启或关闭Hyper-V功能。该功能依赖于系统版本和硬件支持,操作后需重启生效。…

    2026年9月22日 • 用户投稿
    100
  • VSCode配合Quartus开发FPGA(环境设置教程,提高开发效率)

    使用VSCode配合Quartus开发FPGA可提升效率,核心是结合VSCode的代码编辑功能与Quartus的编译仿真能力。首先安装Quartus、VSCode及Python,再安装VHDL/Verilog插件和Makefile Tools等扩展。配置系统环境变量,将Quartus命令路径加入PA…

    2026年9月22日
    100
  • 如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    Dask在处理超大规模数据集时的独特优势在于其Python原生的分布式计算能力,能无缝扩展Pandas和NumPy的工作流,突破单机内存限制,实现高效的数据预处理与模型训练。它通过惰性计算、分块处理和内存溢写机制,支持TB级数据的并行操作,相比Spark提供了更贴近Python数据科学生态的API和…

    2026年9月22日 • 用户投稿
    100
  • 抖音小店网页版怎么登录?抖音我的小店在哪里

    随着抖音电商平台的快速发展,越来越多的商家选择入驻该平台。作为商家运营的重要工具之一,抖音小店网页版为店铺管理带来了诸多便利。那么,如何正确登录抖音小店网页版?又该如何找到“我的小店”?下面将为您详细介绍。 一、为什么需要登录抖音小店网页版? 通过抖音小店网页版,商家可以高效地进行商品管理、订单处理…

    2026年9月22日
    000
  • 如何设置Linux用户磁盘配额 xfs_quota配置完整流程

    如何设置Linux用户磁盘配额 xfs_quota配置完整流程如何设置Linux用户磁盘配额 xfs_quota配置完整流程如何设置Linux用户磁盘配额 xfs_quota配置完整流程如何设置Linux用户磁盘配额 xfs_quota配置完整流程

    linux用户磁盘配额是通过xfs_quota工具配置,以限制用户或组的磁盘空间和文件数量。1. 确认文件系统为xfs并安装xfsprogs;2. 修改/etc/fstab启用usrquota和grpquota后重新挂载;3. 使用xfs_quota初始化数据库;4. 用limit命令设置用户或组的…

    2026年9月22日 • 用户投稿
    000
  • php-gd怎么应用复古滤镜_php-gd图像怀旧色调处理

    使用PHP-GD库实现复古滤镜主要通过色调偏移和色彩调整模拟老照片效果。1. 色调偏黄褐色:先转灰度,再用imagefilter添加棕黄色调;2. 手动像素级调整:逐像素计算灰度并赋予暖色系值,降低饱和度;3. 增强质感:结合对比度降低与轻微模糊提升真实感;4. 示例流程包括加载图像、应用滤镜、输出…

    2026年9月22日
    100

发表回复

登录后才能评论
关注微信