精华内容
下载资源
问答
  • shap 模型可解释
    千次阅读
    2019-07-21 20:41:48

    SHAP使用基础框架

    在这里插入图片描述

    实际效果

    预测商品未来一周销量的XGBoost模型特征分析效果:
    在这里插入图片描述

    更多相关内容
  • SHAP模型可解释机器学习模型

    千次阅读 2021-08-24 10:47:29
    首先个人理解SHAP模型是对机器学习模型进行解释的一个模型 上面这个图就是一个比较直观的解释 机器学习模型一般都是一个黑盒。比如某个模型要进行一些预测任务,首先对模型输入一些已知条件(Age=65,Sex=F,BP=...

     小白进阶选手,如果写的内容有什么问题大家一起讨论学习呀 :)

    模型介绍

    首先个人理解SHAP模型是对机器学习模型进行解释的一个模型

     上面这个图就是一个比较直观的解释

    机器学习模型一般都是一个黑盒。比如某个模型要进行一些预测任务,首先对模型输入一些已知条件(Age=65,Sex=F,BP=180,BMI=40),然后模型根据输入进行训练,最终训练完的模型可以对该条件输出预测结果(Output=0.4)

    所以这样模型只能得到最终的结果,至于模型内部是怎么计算的,输入的已知条件(Age=65,Sex=F,BP=180,BMI=40)是怎么对预测结果(Output=0.4)影响的,我们都没法知道

    而SHAP模型就可以让我们知道这些已知条件到底对最终预测结果起到哪些影响(是对结果起到正向影响还是对结果起到了负向影响),除了SHAP模型,其实也有其他方法可以进行特征重要性的计算,比如下面这个表格里提到的,我们可以根据各种方法的优点选择适合的进行特征重要性计算

    而本文主要介绍的SHAP 属于模型事后解释的方法,它的核心思想是计算特征对模型输出的边际贡献,再从全局和局部两个层面对“黑盒模型”进行解释。SHAP构建一个加性的解释模型,所有的特征都视为“贡献者”

    SHAP的全称是SHapley Additive exPlanation,SHAP是由Shapley value启发的可加性解释模型。而Shapley value起源于合作博弈论,那什么是合作博弈呢。比如说甲乙丙丁四个工人一起打工,甲和乙完成了价值100元的工件,甲、乙、丙完成了价值120元的工件,乙、丙、丁完成了价值150元的工件,甲、丁完成了价值90元的工件,那么该如何公平、合理地分配这四个人的工钱呢?Shapley提出了一个合理的计算方法,我们称每个参与者分配到的数额为Shapley value

    结合文章一开始提到的预测任务,我认为就是已知条件(Age=65,Sex=F,BP=180,BMI=40)一起完成了预测结果(Output=0.4),那么该如何公平、合理地分配这四个已知条件对预测结果的贡献呢?此时SHAP模型就会给这四个已知条件都分配一个Shapley value值,根据这个值我们就可以很好的进行理解

    SHAP可以具体解决的任务

    • 调试模型用
    • 指导工程师做特征工程
    • 指导数据采集的方向
    • 指导人们做决策
    • 建立模型和人之间的信任

    这一部分在https://yyqing.me/post/2018/2018-09-25-kaggle-model-insights这个网站里讲的很详细

    SHAP库可用的explainers

    在SHAP中进行模型解释需要先创建一个explainer,SHAP支持很多类型的explainer

    • deep:用于计算深度学习模型,基于DeepLIFT算法,支持TensorFlow / Keras。
    • gradient:用于深度学习模型,综合了SHAP、集成梯度、和SmoothGrad等思想,形成单一期望值方程,但速度比DeepExplainer慢,并且做出了不同的假设。 此方法基于Integrated Gradient归因方法,并支持TensorFlow / Keras / PyTorch。
    • kernel:模型无关,适用于任何模型
    • linear:适用于特征独立不相关的线性模型
    • tree:适用于树模型和基于树模型的集成算法,如XGBoost,LightGBM或CatBoost

    实验

    在网上找了几个相关的实验跑一下加深印象,SHAP模型输出的可视化图真的是挺美观的

     

    感觉要把SHAP运用理解透,首先对于机器学习的一些模型需要运用的比较熟练

    网上找的的几个代码都是回归类的问题,所以了解的也比较浅显,以后遇到其他问题也可以尝试用SHAP对模型进行解释看看(网上对SHAP解释深度学习模型的例子不算很多,比如有看到一个CV方向的例子,通过SHAP来解释深度学习模型每一层网络对最终检查结果的影响情况,以后可以尝试一下这个方面),然后不断补充这里的实验部分

    问题1:

    足球运动员身价估计

    每个足球运动员在转会市场都有各自的价码,这个问题的目的是根据球员的各项信息和能力值来预测该球员的市场价值。

    问题2:

    波士顿房价估计

    通过数据挖掘对影响波士顿房价的因素进行分析

    具体代码:

    https://colab.research.google.com/drive/1V6XUWCbR7cPKXfdCJXKC1LjNHlg0GpFE?usp=sharing

    SHAP导出各种格式的图

    注意画图前需要加:

    shap.initjs()

    不加就会报错:

    Visualization omitted, Javascript library not loaded!
    Have you run `initjs()` in this notebook? If this notebook was from another user you must also trust this notebook (File -> Trust notebook). If you are viewing this notebook on github the Javascript has been stripped for security. If you are using JupyterLab this error is because a JupyterLab extension has not yet been written.

    如果想要在论文中添加SHAP模型输出的图,只是在代码最后加上plt.savefig,保存下来的图像为空白图。python的shap库,底层仍然使用matplotlib,根据源码可以发现在调用shap.xxx_plot时可以选择传递一个参数就可以正常使用plt.savefig了,几种不同的shap.xxx_plot需要传递的参数可能是不一样的,下面就举几个例子,一般情况下加上matplotlib=True,show = False这两个参数的比较多

    除了下面几个例子,瀑布图直接调用plt.savefig即可,shap.decision_plot则需要传入参数return_objects=True

    shap.force_plot(explainer.expected_value, shap_values[j], data[cols].iloc[j],matplotlib=True,show = False)
    plt.savefig('./result_300dpi.jpg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.jpg', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.png', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.png', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.tiff', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.tiff', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.svg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.svg', bbox_inches='tight', dpi=150)
    shap.summary_plot(shap_values, data[cols],show = False)
    plt.savefig('./result_300dpi.jpg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.jpg', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.png', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.png', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.tiff', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.tiff', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.svg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.svg', bbox_inches='tight', dpi=150)
    shap.dependence_plot('age', shap_values, data[cols], interaction_index=None, show=False)
    plt.savefig('./result_300dpi.jpg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.jpg', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.png', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.png', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.tiff', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.tiff', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.svg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.svg', bbox_inches='tight', dpi=150)

    References 

    https://www.jianshu.com/p/324a7c982034

    https://zhuanlan.zhihu.com/p/64799119

    https://zhuanlan.zhihu.com/p/83412330

    展开全文
  • Shap值衡量特征的边际贡献度,是当前模型解释的最佳方法之一,对于模型进行可视化的全局解释、局部解释,可以在一定程度上满足业务对于模型解释性的要求。 本文通过实例对shap原理进行讲解,帮助初学者、从业人员...

            Shap值衡量特征的边际贡献度,是当前模型解释的最佳方法之一,对于模型进行可视化的全局解释、局部解释,可以在一定程度上满足业务对于模型解释性的要求。其全局解释,(特征对于整体模型的影响)可以作为特征重要性帮助筛选变量;局部解释(对单个样本的预测结果进行解释)可以直观地让我们看到单个样本预测结果的主要影响因素-特征有哪些、以及相应的影响程度,这样在风控业务中对于模型预测风险偏高的样本、我们可以给出模型认为他风险偏高的原因。

    一、shap的本质原理,以例子来说明:

            有甲、乙、丙三个工人,单人工作时、多人协同工作时每天的罐子产量如下:

            按照产量计算每个人的边际贡献度:

            得到每人的平均贡献度:

    二、代码应用

    1 导包及模型训练

    # 导包
    import pandas as pd
    import numpy as np
    import warnings
    warnings.filterwarnings('ignore')
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import roc_curve,roc_auc_score
    import xgboost as xgb
    import matplotlib.pyplot as plt
    
    # 训练模型
    train=df_train.head(10000)
    test=df_train.tail(5000)
    
    dtrain = xgb.DMatrix(train[col_list], label = train['isDefault'])
    dtest = xgb.DMatrix(test[col_list], label = test['isDefault'])
    
    params={
        'booster': 'gbtree',
        'objective': 'binary:logistic',
        'eval_metric': [ 'logloss','auc'],
        'gamma':10,
        'max_depth': 3}
    model = xgb.train(params=params,
              dtrain=dtrain,
              verbose_eval=True,
              evals=[(dtrain, "train"), (dtest, "valid")],
              early_stopping_rounds=10,
              num_boost_round = 30
                      )

    2 Shap包导入及shap_value计算

    import shap
    shap.initjs() 
    # 加载js,否则会报错Visualization omitted, Javascript library not loaded!

    explainer = shap.Explainer(model)
    shap_values = explainer.shap_values(train[col_list])
    shap_values2=explainer(train[col_list])
    shap_values2

    (一)局部解释性

    对单个样本的预测结果解释,通过shap值展示出各特征值对当前预测结果的贡献度,可以使用shap值top变量给出该条样本最终被拒绝的原因

    (1) 力图

    shap.plots.force(shap_values[0])

            此处第一条样本的实际预测结果为0.3338,在力图及下面瀑布图中显示的结果-0.69与预测概率为logit的关系,两者保持单调;图中红色条框为正向影响、蓝色条框为负向的变量,下方均为相应变量以及变量值,其中interestRate的正向贡献度最大。

    (2)瀑布图

    shapley_value(train[col_list].head(1),model,max_display=10)

            瀑布图中给出了基准线E[f(x)] = -1.445,对应的预测概率计算方式为取反logit:p=1-1/(math.exp(-1.445)+1)=0.19为平均预测概率,此处interestRate贡献度为0.74。瀑布图更加直观地展示出模型对于单个样本预测结果的解释,该样本的预测结果0.3338,结合下图的散点图(interestRate与y标签保持正向相关性)可以给出解释:由于该样本的interestRate值偏高,导致预测概率偏高。

    (3)散点图-依赖图

    shap.plots.scatter(shap_values2[:,"interestRate"])

            散点图可以大致看到interestRate特征与shap值是正相关关系,即其他特征稳定的条件下,interestRate特征值越大、shap值越大、对应的最终预测概率越高。

    shap.dependence_plot('interestRate', shap_values2.values, train[col_list])

    (二) 全局解释性

    (1)蜂窝图

    shap.plots.beeswarm(shap_values2)

            为了了解哪些特征对模型最重要,我们可以绘制每个样本的每个特征的 SHAP 值。蜂窝图按照所有样本的 SHAP 值之和对特征进行降序排序(即特征重要性降序排序),并使用 SHAP 值显示每个特征对模型输出结果的影响分布。颜色代表特征值(红色代表特征值高,蓝色代表特征值低)。此处,红色方向在右边代表特征对模型预测结果的影响为正向的,反之为逆向的。

    (2)平均shap值的条形图

    shap.plots.bar(shap_values2)

            此处取每个特征 SHAP 值的平均绝对值来获得标准条形图,效果类似于feature_importance的条形图,可以通过设置参数来显示多个特征shap值,其他特征的总shap值会放在最后一条。

    更多知识、代码分享请拿起手机微信扫描关注,扫不出吃亏、也扫不出上当

    展开全文
  • 模型可解释性(SHAP)

    千次阅读 2020-05-13 10:53:14
    ... 特征重要性计算 ...基本思想:计算一个特征加入到模型时的边际贡献,然后考虑到该特征在所有的特征序列的情况下不同的边际贡献,取均值,即某该特征的SHAPbaseline value。 例如:A单独工作产生的价值为v...

    https://christophm.github.io/interpretable-ml-book/

    https://www.jianshu.com/p/324a7c982034

    特征重要性计算

     

     

    夏普利值-博弈论

    SHAP 含义:观察到某一个样本的预测中各个特征对预测结果产生的影响。

    基本思想:计算一个特征加入到模型时的边际贡献,然后考虑到该特征在所有的特征序列的情况下不同的边际贡献,取均值,即某该特征的SHAPbaseline value。

    例如:A单独工作产生的价值为v{A},加入B后共同产生价值v{A,B},那么B的累加贡献是v{A,B}-v{A}.

    对于所有能够形成的全局N的序列,求其中关于元素xi的累加贡献,然后取均值即可得到xi的shapley

    value.

     

    交互shap值

    SHAP包⽂文章:https://github.com/slundberg/shap

    SHAP算法解析:https://towardsdatascience.com/one-feature-attribution-method-to-supposedly-rule-them-all-shapley-values-f3e04534983d

    https://christophm.github.io/interpretable-ml-book/shapley.html

    SHAP包应⽤用中⽂文解析:https://yyqing.me/post/2018/2018-09-25-kaggle-model-insights

    https://christophm.github.io/interpretable-ml-book/shapley.html


     

    展开全文
  • 可解释机器学习在这几年慢慢成为了机器学习的重要研究方向。作为数据科学家需要防止模型存在偏见,且帮助决策者理解如何正确地使用我们的模型。越是严苛的场景,越需要模型提供证明它们是如何运作且避免错误的证据 ...
  • shap模型可解释来选择特征

    千次阅读 2020-04-14 19:26:15
    https://github.com/slundberg/shap
  • 可解释机器学习在这几年慢慢成为了机器学习的重要研究方向。作为数据科学家需要防止模型存在偏见,且帮助决策者理解如何正确地使用我们的模型。越是严苛的场景,越需要模型提供证明它们是如何运作且避免错误的证据 ...
  • SHAP 是机器学习模型解释可视化工具。在此示例中,使用 SHAP 计算使用 Python 和 scikit-learn 的神经网络的特征影响 。对于这个例子,使用 scikit-learn 的 糖尿病数据集,它是一个回归数据集。首先安装shap库。!...
  • 最近在系统性的学习AUTOML一些细节,本篇单纯从实现与解读的角度入手, 因为最近SHAP版本与之前的调用方式有蛮多差异,就从新版本...来看一下SHAP模型,是比较全能的模型可解释性的方法,既可作用于之前的全局解释,.
  • 模型可解释性-SHAPE

    千次阅读 多人点赞 2020-09-09 20:37:33
    SHAP, 全称是 SHapley Additive exPlanation,属于模型事后解释的方法,可以对复杂机器学习模型进行解释,其中各个单词的意义为: SHapley:代表对每个样本中的每一个特征变量,都计算出它的 Shapley Value。 ...
  • SHAP解释模型

    千次阅读 2021-09-20 17:07:51
    环境配置: 以下实验使用当前最新版本shap:0.39.0 $ pip install shap ...SHAP可解释性,基于对每一个训练数据的解析。比如:解析第一个实例每个特征对最终预测结果的贡献。 shap.plots.force(shap_
  • 机器学习模型解释-SHAP

    千次阅读 多人点赞 2020-05-18 15:01:59
    SHAP需要为幂集中的每个不同的组合训练一个不同的预测模型,这意味着有8个模型。当然,这些模型在涉及到它们的超参数和训练数据时是完全等价的。唯一改变的是模型中包含的一组特征。 假设上图是已经用相同训练样本...
  • SHAP(SHapley Additive exPlanations)是一种游戏理论方法,用于解释任何机器学习模型的输出。 它使用博弈论中的经典Shapley值及其相关扩展将最佳信用分配与本地解释联系起来(详细信息和引文,请参见)。 安装 ...
  • 机器学习模型可解释性进行到底 —— SHAP值理论(一) 接下来主要围绕一篇文章的内容展开【黑盒模型实际上比逻辑回归更具可解释性】 源代码部分:smazzanti/tds_black_box_models_more_explainable 自己的测试代码:...
  • 找到了一篇介绍如何保存Shap图的博客(原文地址:shap解释模型特征,多张图保存的实现(要改源码)),但是里面并没有提到image_plot怎么处理。此外,前面那个链接里提到的“先在画图前调用myfig
  • 使用 SHAP模型预测作解释

    千次阅读 2021-10-13 15:12:29
    模型的评测指标只能反映它准不准, 如果没有好的可解释性, 人们就会担心它不够鲁棒, 难以放心去投用. SHAP 是一个库, 依据 组合博弈论领域 中的 shapely value 思想, 对模型的单个预测作解释. shapely value ...
  • import time import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split import xgboost import pandas as pd import numpy as np #混淆矩阵计算 from sklearn import metrics ...
  • 基于对高 SHapley 加性解释 (SHAP) 值特征的分析,我们发现新考虑的网络和公司关系特征具有很高的重要性(22 个关键特征中的 10 个)。 我们还通过解释 SHAP 值阐明了这些新特征如何有助于预测收购发生。
  • shap官网网址:https://shap.readthedocs.io/en/latest/index.html ...在pycharm中打开terminal,输入 pip install shap,就自动匹配python版本,不要从设置里面添加shap库,添加的不匹配python的版本。
  • 手把手教你使用SHAP(机器学习模型解释工具)

    千次阅读 热门讨论 2021-11-21 20:10:51
    SHAP(SHapleyAdditive exPlanation)是解决模型可解释性的一种方法。SHAP基于Shapley值,该值是经济学家Lloyd Shapley提出的博弈论概念。“博弈”是指有多个个体,每个个体都想将自己的结果最大化的情况。 该方法为...
  • Captum是PyTorch的模型可解释性和理解库。 Captum在拉丁语中是指理解,并且包含PyTorch的模型可解释性和理解库,其中包含Py的集成梯度,显着性图,smoothgrad,vargrad等的通用实现。 Captum在拉丁语中是指理解,...
  • SHAP | 机器学习模型解释

    千次阅读 2021-10-26 00:26:15
    来源:大邓和他的PythonSHAP机器学习模型解释库想象一下,你正试图训练一个机器学习模型来预测广告是否被特定的人点击。在收到关于某人的一些信息后,模型预测某人会不会点击广告。但是为什么...
  • Captum是PyTorch的模型可解释性和理解库。 Captum在拉丁语中意味着理解,并且包含PyTorch模型的集成梯度,显着性图,smoothgrad,vargrad等的通用实现。 它可以快速集成使用特定领域的库(例如torchvision,...
  • Yoon, Arik, & Pfister, 2019)和固有的可解释模型(Choi 等人,2016 年;Guo、Lin 和 Antulov-Fantulin,2019 年)获得。 事后解释方法,例如LIME (Ribeiro et al., 2016)、SHAP (Lundberg & Lee, 2017) 和 RL-LIM...
  • 我们知道模型可解释性已成为机器学习管道的基本部分,它使得机器学习模型不再是"黑匣子"。幸运的是,近年来机器学习相关工具正在迅速发展并变得越来越流行。本文主要是针对回归问题的 SHAP 开源 Python 包进行 XAI ...
  • Shap 是一个开源的 python 库,用于解释模型。它可以创建多种类型的可视化,有助于了解模型解释模型是如何工作的。 在本文中,我们将会分享一些 Shap 创建的不同类型的机器学习模型可视化。 我们开始吧… 安装所需...
  • features=train_x[cols],interaction_index=None) # 图8 # 前1000个样本的shap累计解释选择坐标内容 shap.force_plot(explainer.expected_value[1], shap_values[1][:1000,:], train_x.iloc[:1000,:]) # 图9 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,641
精华内容 656
关键字:

shap 模型可解释

友情链接: fengzhuang.rar