Shap,一个超酷的python库

Shap,一个超酷的python库

大家好,我是木木。今天给大家分享一个超酷Python 库,Shap

这是一个高度模块化的Python库,主要用于解释机器学习模型的输出。Shap 利用博弈论的Shapley值来解释各个特征对模型预测结果的贡献度。

Shap,一个超酷的python库
图源网络

核心特点

  • 模型透明
    • Shap 使得机器学习模型的决策过程变得透明,帮助开发者理解模型如何做出预测。
  • 特征重要性
    • 它提供了一个量化模型特征重要性的方式,明确哪些特征对预测结果影响最大。
  • 跨框架兼容
    • Shap 支持多种机器学习框架,包括 XGBoost、Sklearn、Keras 等。

安装方法

要安装 Shap,您可以使用 pip:

pip install shap

项目地址:https://github.com/shap/shap

❗以下所有代码均在jupyter完成

基本使用

  1. 树集成示例 使用 Shap 库来解释单个预测模型的输出,可以更好地理解模型如何工作。
import xgboost
import shap

# 训练一个XGBoost模型
X, y = shap.datasets.california()
model = xgboost.XGBRegressor().fit(X, y)

# 解释模型
explainer = shap.Explainer(model)
shap_values = explainer(X)

# 可视化展示
shap.plots.waterfall(shap_values[0])
Shap,一个超酷的python库
图源网络
  1. 可视化特征影响 针对单个样本预测的解释。
# 针对单个样本预测的解释
shap.initjs()
shap.plots.force(shap_values[0])
Shap,一个超酷的python库
图源网络
  1. 整个数据集进行预测解释
shap.initjs()
shap.plots.force(shap_values[:500])
Shap,一个超酷的python库
图源网络
  1. 根据shap值对特征排序,显示每个特征对模型影响的分布。红色的为正贡献,蓝色为负贡献
# 针对单个样本预测的解释
shap.initjs()
shap.plots.beeswarm(shap_values)
Shap,一个超酷的python库
图源网络

高级功能实现

深入特征依赖分析 预期梯度融合了多种解释方法,允许使用整个数据集作为背景分布,并进行局部平滑。本方法可用于解释 VGG16 模型第7层如何影响输出概率,这需要较深的理解和分析技巧。

from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
import keras.backend as K
import numpy as np
import json
import shap

# 加载模型
model = VGG16(weights='imagenet', include_top=True)
X,y = shap.datasets.imagenet50()
to_explain = X[[39,41]]

# 加载数据
url = "https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json"
fname = shap.datasets.cache(url)
with open(fname) as f:
    class_names = json.load(f)

# 解释输入到第七层模型的数据是如何与最高的两种类型所匹配
def map2layer(x, layer):
    feed_dict = dict(zip([model.layers[0].input], [preprocess_input(x.copy())]))
    return K.get_session().run(model.layers[layer].input, feed_dict)
e = shap.GradientExplainer(
    (model.layers[7].input, model.layers[-1].output),
    map2layer(X, 7),
    local_smoothing=0 # std dev of smoothing noise
)
shap_values,indexes = e.shap_values(map2layer(to_explain, 7), ranked_outputs=2)

# 获取类别名称
index_names = np.vectorize(lambda x: class_names[str(x)][1])(indexes)

# 可视化
shap.image_plot(shap_values, to_explain, index_names)
Shap,一个超酷的python库
图源网络

小结

Shap 是一个极具启发性和实用性的库,能够帮助开发者和数据科学家深入理解机器学习模型的内在机制。通过详细的特征贡献分析,Shap 使模型的解释性达到了一个新的水平。



—— End ——


【限时福利】专为粉丝打造的《Python入门到入魔保姆级教程》来啦!

   现在扫码或者添加 vx:257735 即可领取

Shap,一个超酷的python库



原文始发于微信公众号(木木夕咦):Shap,一个超酷的python库

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/285314.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!