基于SHAP进行特征选择和贡献度计算——可解释性机器学习

news2024/9/21 16:36:29

方法介绍

SHAP(SHapley Additive exPlanations)是一个 Python 包,旨在解释任何机器学习模型的输出。SHAP 的名称源自合作博弈论中的 Shapley 值,它构建了一个加性的解释模型,将所有特征视为“贡献者”。对于每个预测样本,模型会产生一个预测值,而 SHAP 值则表示该样本中每个特征的贡献度。

假设第i个样本为Xi,第i个样本的第j个特征为Xij,模型对该样本的预测值为yi,整个模型的基线(通常是所有样本的目标变量的均值)为 ybase,那么 SHAP 值服从以下等式:

yi=ybase+f(Xi1)+f(Xi2)+⋯+f(Xik)

其中 f(Xij)表示第i个样本中第j个特征的 SHAP 值。从直观上看,f(Xi1)表示第i个样本中第1个特征对最终预测值yi的贡献。当f(Xj1)>0时,说明该特征提升了预测值,有正向作用;反之,则说明该特征降低了预测值,有反向作用。

解释器Explainer
 

在SHAP中进行模型解释需要先创建一个explainer,SHAP支持很多类型的explainer(例如deep、gradient、kernel、tree、sampling等),以tree为例,它支持常用的XGB、LGB、CatBoost等树集成算法。

explainer = shap.TreeExplainer(model) # #这里的model在准备工作中已经完成建模,模型名称就是modelshap_values = explainer.shap_values(X) # 传入特征矩阵X,计算SHAP值

上面的shap_values对象是一个包含两个array的list。第一个array是负向结果的SHAP值,而第二个array是正向结果的SHAP值。通常从预测正向结果的角度考虑模型的预测结果,所以会拿出正向结果的SHAP值(拿出shap_values[1])。

局部可解释性Local Interper,Local可解释性提供了预测的细节,侧重于解释单个预测是如何生成的。它可以帮助决策者信任模型,并且解释各个特征是如何影响模型单次的决策。

使用例子

import xgboost as xgb
from sklearn.model_selection import train_test_split
import shap
import pandas as pd

data = pd.read_csv('example.csv')
X = data[['A', 'B', 'C', 'D', 'E']]
Y = data['F']
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, shuffle=False)
xgb_model = xgb.XGBRegressor(random_state=42)
xgb_model.fit(X_train, Y_train)
explainer = shap.Explainer(xgb_model)
shap_values = explainer(X_test)

shap.summary_plot(shap_values)  #提琴图

shap.plots.bar(shap_values)  # Bar Plot

shap.plots.bar(shap_values.cohorts(2).abs.mean(0))  # 队列图

shap.plots.heatmap(shap_values[1:1000])  # 热图

shap.plots.waterfall(shap_values[0])  # 瀑布图

shap.initjs()
explainer = shap.TreeExplainer(xgb_model)
shap_values = explainer.shap_values(X_test)
def p(j):
    return(shap.force_plot(explainer.expected_value, shap_values[j,:], X_test.iloc[j,:]))
p(0)

shap_values = explainer.shap_values(X_test)[1]
shap.decision_plot(explainer.expected_value, shap_values, X_test)


最后:

小编会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

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

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

相关文章

深入探讨量子计算领域的最新进展及其对社会经济的影响

一、引言 在21世纪的科技浪潮中,量子计算作为一项颠覆性技术,正逐步从理论走向实践,成为各国竞相争夺的科技制高点。量子计算利用量子力学原理,实现了对传统计算模式的根本性变革,其强大的并行处理能力和指数级增长的…

如何正确使用 Parallels Desktop 的快照功能

在 Parallels Desktop for Mac 中,快照(Snapshot)功能非常实用,特别是当你需要在不同的状态之间自由切换,或是想要在实验或测试前备份虚拟机状态时。以下是使用快照功能的详细步骤和注意事项: 注意 在 Ap…

基于x86_64系统构建并运行aarch64架构docker镜像

基于x86_64系统构建并运行aarch64架构docker镜像 1.安装qemu模拟器2.编写Dockerfile3.查看镜像架构4.启动容器 1.安装qemu模拟器 docker run --privileged --rm tonistiigi/binfmt --install all如果出现invalid argument等信息,表示qemu安装失败。可能是内核版本问…

python读取csv,中文输出乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

基于51单片机的百叶窗proteus仿真

地址:https://pan.baidu.com/s/19M6jeTIHJcyDBGNx4H9nTA 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

从最浅层剖析C语言——第四节(超详细讲解一维数组内容)

目录 1. 数组的概念 2. 一维数组的创建及其初始化 2.1 数组的创建 2.2 数组的初始化 考点总结:当我们未对数组进行初始化时,数组里面的元素打印出来是乱码,但哪怕只对数组里面一个元素赋值,之后未被赋值的元素也会默认赋值为…

Dijkstra(c++)

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略&#…

《晶核》服务器架构——第二篇

继上面的第一篇文章,没看的可以翻一下。还是进程数量多的问题? 副本问题怎么解决?服务器该如何设计? 按照他们这个做法是副本与场景都是地图,所以就造成了下面这样的问题。假如,我有1万人的在线数量&…

从源码开始:在线教育系统与网校APP的架构设计与开发实践

这篇文章将从源码层面探讨在线教育系统与网校APP的架构设计与开发实践,帮助开发者理解核心技术与实现路径,进而打造功能全面、性能优异的在线教育平台。 一、在线教育系统的核心功能模块 在设计在线教育系统时,首先需要明确其核心功能模块。…

PCL区域生长分割

文章目录 一、算法原理1、输入2、初始化3、算法二、代码部分三、代码解释参考文献本文,我们将学习如何使用 pcl::RegionGrowing 类中实现的区域生长算法。该算法的目的是合并在平滑度约束方面足够接近的点。因此,该算法的输出是簇的集合,其中每个簇被认为是同一光滑表面的一…

NASA:北极辐射-冰桥海冰实验(ARISE)2014年原地云数据产品

ARISE_Cloud_AircraftInSitu_C130_Data 简介 ARISE_Cloud_AircraftInSitu_C130_Data_1是北极辐射-冰桥海冰实验(ARISE)2014年原地云数据产品。该产品是位于华盛顿的美国宇航局科学任务局地球科学部辐射科学、冰冻层科学和机载科学计划共同努力的成果。…

Mysql高可用之组复制 (MGR)从原理到实战一篇解决

一:原理 简介: MySQL Group Replication(简称 MGR )是 MySQL 官方于 2016 年 12 月推出的一个全新的高可用与高扩展的解决方案。 组复制是 MySQL 5.7.17 版本出现的新特性,它提供了高可用、高扩展、高可靠的 MySQL 集群服务 MySQL 组复制分…

如何优雅处理异步组件加载:Vue 3 的 Suspense 特性

在日常开发中,我们可能会遇到网络不佳或内容加载时间较长的情况。如果当前页面没有任何内容提示,用户的体验非常糟糕,可能会反复刷新以便加载成功。因此,我们需要给用户提供一个加载中的效果,告知用户“我在努力加载中…

怎样快速搭建 Linux 虚拟机呢?(vagrant 篇)

作为一名Coder(程序员或码农),供职于中小型互联网公司,而你恰恰偏向于服务端,那么,产品部署在生产环境的艰巨任务,便毫无疑问的落在你身上了。 只有大厂(大型互联网)企业…

程序员:全栈的痛你不知道

上周一个同事直接对我开喷,骂我无能,说:“你怎么一个人就搞不定所有系统呢?”,我半支烟纵横IT江湖14余年,还是第一次被人这么嫌弃。 事情缘由 某公司的业务线特别多,有个业务线前后端项目共计…

新手入门:Python+Selenium自动化测试(爬虫),如何自动下载WebDriver!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 自动下载WebDriver 📒📝 安装📝 使用📝 支持主流浏览器⚓️ 相关链接 ⚓️📖 介绍 📖 好久没有使用Selenium的自动化(爬虫)了,还记得那个时候使用Python+Selenium进行爬虫项目还需要手动下载Webdriver。每次换浏…

SSRF攻击

目录 1、curl_exec函数 2、dict协议 3、file协议 4、Redis未授权访问 5、gopher协议 6、SSRF 定义: 原理: 防御: ssrf实现.ssh未创建写shell 1、环境搭建 2、实施攻击 2.1、生成公钥 2.2、用SSH公钥数据伪造Redis数据 2.3、攻…

Python | Leetcode Python题解之第368题最大整除子集

题目: 题解: class Solution:def largestDivisibleSubset(self, nums: List[int]) -> List[int]:n len(nums)nums.sort()dp [1]*nres [[nums[i]] for i in range(n)]ans res[0]for i in range(n):for j in range(i):if nums[i] % nums[j] 0 and…

ECCV`24 | 艺术文本和场景文本分割任务新SOTA 方法!华科Adobe提出WAS!

文章链接:https://arxiv.org/pdf/2408.00106 git链接:https://github.com/xdxie/WAS_WordArt-Segmentation 亮点直击 提出了艺术文本分割这一新任务,并构建了一个真实数据集用于模型性能基准测试。 设计了训练数据合成策略,生成了…

PyCharm汉化:简单一步到胃!PyCharm怎么设置中文简体

最近在弄python的项目 一起加油哦 步骤: PyCharm的汉化可以通过两种主要方法完成: 方法一:通过PyCharm内置的插件市场安装中文语言包 1. 打开PyCharm,点击File -> Settings(在Mac上是PyCharm -> Preferences…