精华内容
下载资源
问答
  • 8月上旬使用Python SHAPsummary_plot()时,画出来的图依然是各特征的shap value,图状为beeswarm,但在中旬重新跑该段代码时,画出来的图为mean(|shap value|),图状为柱状图。 SHAP修改之后: fig = plt.figure...

    8月上旬使用Python SHAP中 summary_plot()时,画出来的图依然是各特征的shap value,图状为beeswarm,但在中旬重新跑该段代码时,画出来的图为mean(|shap value|),图状为柱状图。

    SHAP修改之后:

    fig = plt.figure()
    shap.summary_plot(shap_values, data[cols], show = False, max_display = 30)
    plt.tight_layout()
    plt.show()
    

    效果如下图:
    在这里插入图片描述

    此时画出来的图默认是SHAP value 的mean value。
    这是Python SHAP在8月近期对shap.summary_plot()的修改,此前会直接画出模型中各个特征SHAP值,这可以更好地理解整体模式,并允许发现预测异常值。每一行代表一个特征,横坐标为SHAP值。一个点代表一个样本,颜色表示特征值(红色高,蓝色低)。

    因此去查询了SHAP的官方文档,发现依然可以通过shap.plots.beeswarm()实现上述功能。

    # train XGBoost model
    X,y = shap.datasets.adult()
    model = xgboost.XGBClassifier().fit(X, y)
    
    # compute SHAP values
    explainer = shap.Explainer(model, X)
    shap_values = explainer(X)
    

    跑出来的结果如下图:
    在这里插入图片描述
    至此,问题完美解决。

    展开全文
  • 保存Shap生成的神经网络解释图(shap.image_plot) 调用shap.image_plot后发现使用plt.savefig保存下来的图像为空白图,经过查资料发现这是因为调用plt.show()后会生成新画板。(参考链接:保存plot_如何解决plt....

    保存Shap生成的神经网络解释图(shap.image_plot)

    调用shap.image_plot后发现使用plt.savefig保存下来的图像为空白图,经过查资料发现这是因为调用plt.show()后会生成新画板。(参考链接:保存plot_如何解决plt.savefig()保存的图片为空白的问题?

    找到了一篇介绍如何保存Shap图的博客(原文地址:shap解释模型特征,多张图保存的实现(要改源码)),但是里面并没有提到image_plot怎么处理。此外,前面那个链接里提到的“先在画图前调用myfig = plt.gcf(),再调用myfig.savefig()的方法也不起作用”。

    最后干脆去看了一下shap.image_plot的源代码,不知道怎么查看函数源代码的朋友可以去看一下我写的另一篇博客,简单易操作(链接:Python查看函数源码)发现image_plot使用plt显示图像的源代码为:

    if show:
    	pl.show()
    

    这就好办了,show是调用image_plot时可以选择传递的一个参数,默认为True,调用的时候设为False就行了,代码如下:

    shap.image_plot(shap_values, -x_test[1:5], show = False)
    plt.savefig('./shap.png')
    

    然后就能在源码同级目录下看到保存的shap.png了。

    展开全文
  • 最近在学习Tensorflow 2,使用keras模型可视化的plot_model()绘制模型图的时候报错。上网查找解决方案,发现网上的解决方法没有切中核心,因此在此记录备查。 问题 希望绘制模型图: from tensorflow import keras...

     

    小小和蓝胖 2020-02-15 21:31:36  370  收藏 2
    展开
    最近在学习Tensorflow 2,使用keras模型可视化的plot_model()绘制模型图的时候报错。上网查找解决方案,发现网上的解决方法没有切中核心,因此在此记录备查。

    问题
    希望绘制模型图:

    from tensorflow import keras
    keras.utils.plot_model(model, 'my_first_model.png')
    1
    2
    报错:

    Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
    1
    解决方法
    pip3 install pydot
    sudo apt install graphviz
    1
    2
    pydot是Python包,因此可以使用pip直接安装。
    graphviz是贝尔实验室开源的做图软件。graphviz需要使用apt安装。如果使用pip3 install graphviz进行安装,虽然也能安装上,但是使用plot_model时仍然会报错。

    附上结果图

     

    展开全文
  • 本文主要是针对回归问题的 SHAP 开源 Python 包进行 XAI 分析。 Lundberg 和 Lee (2016) 的 SHAP(Shapley Additive Explanations)是一种基于游戏理论上最优的 Shapley value来解释个体预测的方法。 Shapley value...

    我们知道模型可解释性已成为机器学习管道的基本部分,它使得机器学习模型不再是"黑匣子"。幸运的是,近年来机器学习相关工具正在迅速发展并变得越来越流行。本文主要是针对回归问题的 SHAP 开源 Python 包进行 XAI 分析。

    Lundberg 和 Lee (2016) 的 SHAP(Shapley Additive Explanations)是一种基于游戏理论上最优的 Shapley value来解释个体预测的方法。 Shapley value是合作博弈论中一种广泛使用的方法,它具有令人满意的特性。从博弈论的角度,把数据集中的每一个特征变量当成一个玩家,用该数据集去训练模型得到预测的结果,可以看成众多玩家合作完成一个项目的收益。Shapley value,通过考虑各个玩家做出的贡献,来公平的分配合作的收益。

    在本文中,我们将使用来自 sklearn 数据集的波士顿房价数据集进行示例展示,它是一个简单的回归问题。

    boston = datasets.load_boston() 
    X_train, X_test, y_train, y_test = model_selection.train_test_split(boston.data, boston.target, random_state=0)
    

    拆分数据集进行训练和测试后,创建模型并拟合。

    regressor = ensemble.RandomForestRegressor() 
    regressor.fit(X_train, y_train);
    

    计算Shapley value

    使用 SHAP 包,计算非常简单明了。我们只需要模型(regressor)和数据集(X_train)。

    # Create object that can calculate shap values
    explainer = shap.TreeExplainer(regressor)
    # Calculate Shap values
    shap_values = explainer.shap_values(X_train)
    

    计算 SHAP 值后,我们可以绘制几个分析图,以帮助我们理解模型。

    SHAP 特征重要性

    SHAP 提供了特征重要性的计算方式,取每个特征的SHAP value的绝对值的平均值作为该特征的重要性,得到一个标准的条形图。在下图中,你可以看到由 SHAP value计算的特征重要性与使用 scikit-learn 计算的特征重要性之间的比较,它们看起来非常相似,但它们并不相同。

    shap.summary_plot(shap_values, X_train, feature_names=features, plot_type="bar")
    

    左侧的特征重要性由 SHAP 值计算得出,右侧特征重要性使用 scikit-learn model.feature_importances计算得出

    SHAP Summary Plot

    Summary_plot 结合了特征重要性和特征效果。Summary_plot 为每一个样本绘制其每个特征的Shapley value。y 轴上的位置由特征确定,x 轴上的位置由每 Shapley value 确定。颜色表示特征值(红色高,蓝色低),可以看到特征 LSTAT 是最重要的特征,具有很高的 Shapley value范围。重叠点在 y 轴方向抖动,因此我们可以了解每个特征的 Shapley value分布,这些特征是根据它们的重要性排序的。

    shap.summary_plot(shap_values, X_train, feature_names=features)
    

    在Summary_plot图中,我们首先看到了特征值与对预测的影响之间关系的迹象,但是要查看这种关系的确切形式,我们必须查看 SHAP Dependence Plot图。

    SHAP Dependence Plot

    Partial dependence plot (PDP or PD plot) 显示了一个或两个特征对机器学习模型的预测结果的边际效应,它可以显示目标和特征之间的关系是线性的、单调的还是更复杂的。PDP是一种全局方法:该方法考虑所有实例并给出关于特征与预测结果的全局关系。PDP 的一个假设是第一个特征与第二个特征不相关。如果违反此假设,则PDP计算的平均值将包括极不可能甚至不可能的数据点。

    Dependence plot 是一个散点图,显示单个特征对模型预测的影响。在这个例子中,当每个住宅的平均房间数高于 6 时,房产价值会显着增加。

    • 每个点都是来自数据集的单个预测(行)。
    • x 轴是数据集中的实际值。
    • y 轴是该特征的 SHAP 值,它表示该特征值对该预测的模型输出的改变程度。

    颜色对应于可能与我们正在绘制的特征有交互作用的第二个特征(默认情况下,第二个特征是自动选择的)。如果另一个特征与我们正在绘制的特征之间存在交互作用,它将显示为不同的垂直着色模式。

    shap.dependence_plot(5, shap_values, X_train, feature_names=features)
    


    在上面的例子中,我们可以看到每个住宅的平均房间数高于 7.5,CRIM 总是很低。这些案例的 Shapley value很高,极大地影响了结果,可以看出 RM、CRIM 特征之间相互作用。

    SHAP Force plot

    SHAP force plot为我们提供了单一模型预测的可解释性,可用于误差分析,找到对特定实例预测的解释。

    i = 18 
    shap.force_plot(explainer.expected_value, shap_values[i], X_test[i], feature_names = features)
    


    从图中我们可以看出:

    • 模型输出值:16.83
    • 基值:如果我们不知道当前实例的任何特性,这个值是可以预测的。基础值是模型输出与训练数据的平均值。(代码中的explainer.expected_value)。
    • 绘图箭头上的数字是此实例的特征值。CRIM:城镇人均犯罪率 = 0.06664 和 RM:平均房间数 = 6.546
    • 红色代表将模型分数推高的特征,蓝色代表将分数推低的特征。
    • 箭头越大,特征对输出的影响越大。在 x 轴上可以看到影响的减少或增加量。
    • 0.066 的 CRIM 增加属性值,6.546 的 RM 降低属性值。

    如果我们想要更全面地展现先前的预测,我们可以使用力图的变体。在这里,我们可以看到一组垂直放置(旋转 90°)和并排放置的预测。在下图中,我们可以看到数据集中的前 5 行。

    # visualize the first 5 predictions explanations with a dark red dark blue color map.
    shap.force_plot(explainer.expected_value, shap_values[0:5,:], X_test[0:5,:], plot_cmap="DrDb", feature_names=features)
    

    SHAP Decision plot

    决策图显示的信息与力图基本相同。灰色垂直线是基础值 ,红线表示每个特征是否将输出值移动到高于或低于平均预测的值。

    这张图比前一张图更清晰和直观,尤其是要分析的特征比较多的时候。在力图中,当预测变量的数量较多时,信息可能看起来非常紧凑。

    shap.decision_plot(explainer.expected_value[0], shap_values[0], feature_names = list(features))
    

    决策图的垂直直线标记了模型的基础值。彩色线是预测。特征值在预测线旁边以供参考。从图的底部开始,预测线显示 SHAP value 如何从基础值累积到图顶部的模型最终分数。决策图是 SHAP value 的文字表示,使其易于解读。

    力图和决策图都可以有效地解释上述模型的预测。而且很容易识别出主要影响的大小和方向。

    使用 SHAP 值进行异常值检测

    将决策图叠加在一起有助于根据 SHAP value 定位异常值。在上图中,你可以看到一个不同数据集的示例,用于使用SHAP决策图进行异常值检测。

    Summary

    SHAP 框架已被证明是机器学习模型解释领域的一个重要发展。 SHAP 结合了几种现有方法,创建了一种直观、理论上合理的方法来解释任何模型的预测。 SHAP value 量化了特征对预测影响的大小和方向(正或负)。 我相信使用 SHAP 和其他工具进行 XAI 分析应该是机器学习管道的一个组成部分。

    技术交流

    欢迎转载、收藏本文,码字不易,有所收获点赞支持一下!

    为方便进行学习交流,本号开通了技术交流群,添加方式如下:

    直接添加小助手微信号:pythoner666,备注:CSDN+python,或者按照如下方式添加均可!
    在这里插入图片描述

    展开全文
  • 可解释机器学习-shap value的使用

    千次阅读 多人点赞 2020-03-16 15:50:29
    目录1 数据预处理和建模1.1 加载库和数据预处理1.2 训练2 解释模型2.1 Summarize the feature imporances with a bar chart2.2 Summarize the feature importances with a density scatter plot2.3 Investigate the ...
  • SHAP模型:可解释机器学习模型

    千次阅读 2021-08-24 10:47:29
    首先个人理解SHAP模型是对机器学习模型进行解释的一个模型 上面这个图就是一个比较直观的解释 机器学习模型一般都是一个黑盒。比如某个模型要进行一些预测任务,首先对模型输入一些已知条件(Age=65,Sex=F,BP=...
  • SHAP简介 SHAP优点: 缺点 应用方法 SHAP简介 SHAP(SHapleyAdditive exPlanation)是解决模型可解释性的一种方法。SHAP基于Shapley值,该值是经济学家Lloyd Shapley提出的博弈论概念。“博弈”是指有多个个体,...
  • 可解释的机器学习库—SHAP

    千次阅读 2020-11-09 16:12:02
    1.SHAP介绍 SHAP(SHapley Additive exPlanations),是Python开发的一个“模型解释”包,它可以解释任何机器学习模型的输出。 所有的特征都被视为“贡献者”。 对于每个预测样本,模型都产生一个预测值,SHAP ...
  • shap解释模型特征,多张图保存的实现(要改源码

    千次阅读 热门讨论 2020-06-16 17:31:48
    直接改shap.summary_plot源码可以实现 函数参数增加save=False,path=False 在summary_plot函数最下面增加 if save: pl.savefig(path) pl.close() 这里必须要close掉图层,要不然会出现多层叠加的问题 直接使用...
  • shap 模型Responsible AI has been a very hot topic in recent years. Accountability and explainability now become the necessary components of your machine learning models, particularly when the models ...
  • 利用Shap Value挑选变量

    千次阅读 2019-03-19 09:07:51
    #Shap Value clf = lgb.LGBMClassifier(objective='binary',random_state=1024).fit(X_train,y_train) explainer = shap.TreeExplainer(clf) shap_values = explainer.shap_values(X_train) shap.summary_plot(...
  • shap学习笔记

    千次阅读 2020-09-28 21:25:02
    shap学习笔记1 shap使用代码 shap原理解释 https://yq.aliyun.com/articles/760042?scm=20140722.184.2.173 shap实用案例 https://zhuanlan.zhihu.com/p/83412330 1 shap使用代码 1 首先,准备好机器学习建模,如xgb...
  • # make plot. shap.dependence_plot('Ball Possession %', shap_values[1], X, interaction_index="Goal Scored") 上图是控球和进球数两个指标对Sharpley Value的影响。同样的,当出现位置,颜色两个可视化...
  • ——方法—— ❶模型效果评估指标图 ❶Confusion Matrix 一个完美的分类模型就是,如果一个客户实际上属于类别 good,也预测成 good,处于类别 bad,也就预测成 bad。实际上一些是 good 的客户,根据我们的模型...
  • 特征重要性与shap

    千次阅读 2020-07-23 19:42:30
    shap.summary_plot(shap_values, data[cols], plot_type="bar") 部分依赖图Partial Dependence Plot SHAP提供了部分依赖图的功能,纵坐标为SHAP值,横坐标为变量分布。可以看到历史逾期天数越大,对target预测为1的...
  • 1.Permutation Importance import numpy as np import pandas as pd from sklearn.model_...model) #val_X 表示测试集 shap_values = explainer.shap_values(val_X) #阳性 赢 shap.summary_plot(shap_values[1], val_X)
  • 实验环境是linux 16.10, Python3.6,其他平台应该也一样。 没试过,大家可以去试试看,应该差不多。 1. 正确下载字体文件simhei.ttf ...~/anaconda3/lib/python3.6/site-packages/matplotlib
  • 不同Age的收入大于50k的比率 fig, axes, summary_df = info_plots.target_plot( df=data, feature='Age', feature_name='age', target='label', show_percentile=True) 从图中发现,随着年龄的上升,收入大于50k的...
  • 机器学习很大一个问题是可解释性较差,虽然在RandomForest、LightGBM等算法中,均有feature_importance可以展现模型最重要的N个特征,但是对于单个样本来说情况可能并不与整体模型一致,所以就需要使用SHAP等算法将...
  • minus']=False #用来正常显示负号 shap.summary_plot(shap_values,train_x,max_display=30) #红色高 蓝色低 shap.summary_plot(shap_values,train_x, plot_type="bar") 做一个简单的验证 pd.DataFrame(abs(shap_...
  • TypeError: only integer scalar arrays can be converted to a scalar index 关于这个错误,已经第二次遇到了。 ...上次遇到错误的时候,也就随便搞一搞就解决了,但是这次又碰到这个问题,然后不知道怎么解决...
  • 深入学习机器学习

    2020-11-02 21:08:07
    explainer = shap.TreeExplainer(my_model_1) # Calculate Shap values shap_values = explainer.shap_values(X) # make plot. shap.dependence_plot('Ball Possession %', shap_values[1], X, interaction_index=...
  • 可解释性机器学习

    2021-07-30 11:24:24
    import shap shap_values = shap.TreeExplainer(clf).shap_values(X_train) shap.summary_plot(shap_values, X_train) 从预测结果可以看出,年龄特征对预测结果的贡献最大。如果你想查看特定的类对预测的贡献,我们...
  • SHAP解释模型

    2021-09-20 17:07:51
    以下实验使用当前最新版本shap:0.39.0 $ pip install shap 注意xgboost也需要使用对应的较新版本,如: $ pip install xgboost==0.82 为使用交互界面,notebook环境下,加载用于可视化的JS代码 import ...
  • 利用SHAP解释Xgboost模型

    千次阅读 2020-10-08 20:06:31
    2017年,Lundberg和Lee的论文提出了SHAP值这一广泛适用的方法用来解释各种模型(分类以及回归),其中最大的受益者莫过于之前难以被理解的黑箱模型,如xgboost和神经网络模型。 本教程中,我们在真实数据集上进行...
  • SHAP: 在我眼里,没有黑箱

    千次阅读 热门讨论 2020-07-17 19:47:06
    lgb, cat)和神经网络模型, 它们相对于普通线性模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性, 所以这些模型也往往看作是黑箱模型, 在2017年,Lundberg和Lee的论文提出了SHAP值这一...
  • 转载自:腾讯技术工程模型可解释性方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于模型和特征的优化,更能够帮...
  • #第二条记录也是未点击 shap.plots.waterfall(shap_values[1]) SHAP摘要图 我们可以使用SHAP摘要图,而不是查看每个单独的实例,来可视化这些特性对多个实例的整体影响: shap.summary_plot(shap_values, X) SHAP...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 208
精华内容 83
关键字:

shap.summary_plot