网站首页 > 技术文章 正文
这是我的第377篇原创文章。
一、引言
SHAP有多种实现方式,每种方式都适用于特定的模型类型,可以实现更快的逼近。
- TreeExplainer :TreeExplainer专为树集合方法开发,如XGBoost,LightGBM或CatBoost。
- DeepExplainer :DeepExplainer是为深度学习模型开发的,支持TensorFlow / Keras。
- GradientExplainer :GradientExplainer也是为深度学习模型中的SHAP值而开发的,但速度比DeepExplainer慢,并且做出了不同的假设。此方法基于Integrated Gradient归因方法,并支持TensorFlow / Keras / PyTorch。
- KernelExplainer :KernelExplainer使用加权线性回归近似任何类型模型的SHAP值。
使用特定于模型类型的算法(TreeExplainer,DeepExplainer)而不是通用KernelExplainer更快更有效。
本文以逻辑回归分类器为例,展示了如何使用条形图和蜂群图来可视化全局特征重要性。
二、实现过程
2.1 准备数据
# 准备数据
data = pd.read_csv(r'dataset.csv')
df = pd.DataFrame(data)
# 提取目标变量和特征变量
target = 'target'
features = df.columns.drop(target)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)
df:
2.2 模型训练
# 模型的构建与训练
model = LogisticRegression()
model.fit(X_train, y_train)
2.3 创建SHAP解释器
# 创建Explainer
explainer = shap.KernelExplainer(model.predict, X_test_m)
# 以numpy数组的形式输出SHAP值
shap_values = explainer.shap_values(X_test_m)
print(shap_values) # shap_values = shap_obj.values
# 以SHAP的Explanation对象形式输出SHAP值
shap_obj = explainer(X_test_m)
print(shap_obj.values) # shap_values = shap_obj.values
2.4 绘制全局条形图
SHAP提供了一种全局特征重要性图的方法,这种方法考虑了所有样本,并计算每个特征的平均绝对SHAP值:
shap.summary_plot(shap_obj, X_test_m, plot_type="bar",feature_names=features)
# shap.plots.bar(shap_obj)
2.5 绘制全局蜂群图
蜂群图(Beeswarm Plot)是另一种可视化特征重要性和影响的方法。蜂群图旨在显示数据集中的TOP特征如何影响模型输出的信息密集摘要。
shap.summary_plot(shap_obj, X_test_m,feature_names=features)
# shap.plots.beeswarm(shap_obj, show=True) # 全局蜂群图
给定解释的每个实例由每个特征流上的一个点表示;点的 x 位置由该特征的 SHAP 值 ( shap_values.value[instance,feature]) 确定,并且点沿每个特征行“堆积”以显示密度;
条形图与蜂群图的对比,条形图就只是展示了蜂群图的平均值。
作者简介: 读研期间发表6篇SCI数据算法相关论文,目前在某研究院从事数据算法相关研究工作,结合自身科研实践经历持续分享关于Python、数据分析、特征工程、机器学习、深度学习、人工智能系列基础知识与案例。关注gzh:数据杂坛,获取数据和源码学习更多内容。
原文链接:
- 上一篇: python 简单几句搞定逻辑回归AI算法
- 下一篇: Python之短路逻辑和运算符优先级
猜你喜欢
- 2025-01-18 Python机器学习库Sklearn系列教程(14)-逻辑回归
- 2025-01-18 Google裁撤Python团队的背后逻辑
- 2025-01-18 快乐8预测遗传算法的实现逻辑
- 2025-01-18 Python电子发票管理工具4:前后端业务逻辑实现
- 2025-01-18 Python之短路逻辑和运算符优先级
- 2025-01-18 python 简单几句搞定逻辑回归AI算法
- 2025-01-18 一文带您了解逻辑回归(Logistic Regression): Python示例
- 2025-01-18 膜拜!终于有人能把人工智能算法的“逻辑回归”讲得明明白白了
- 2025-01-18 Python类与对象:构建复杂逻辑的魔法
- 2025-01-18 Python 比较难的问题,逻辑结构和代码
- 258℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 83℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)