SHAP 分析的三种应用场景及其意义

SHAP 分析的三种应用场景及其意义

随着SHAP分析应用的深入,SHAP在三个场景具有广泛的应用,体现出独特的分析价值:

1. 全局性解释:展示变量重要性

  • 在众多机器学习模型中,如随机森林、神经网络等,模型内部的计算逻辑往往较为复杂,难以直观理解各个输入变量对最终预测结果的贡献程度。而 SHAP 分析通过计算每个特征的 SHAP 值,可以清晰地呈现出不同变量在模型中的重要性排序,图形展示是SHAP的蜂窝图和柱形图。

  • 应用场景是在危险因素鉴定或者预测模型构建过程中,定量预测变量与结局变量之间的关系,借此展示对结局有重要影响的变量,类似变量的重要性,且变量之间SHAP值是可比的。需要注意的是,某个变量的SHAP值解释的时候,要在当前变量组合的前提下进行解释,换一个变量组合,SHAP就不同了。
    在这里插入图片描述

2. 全局性解释:单个变量与结局变量之间的关系

  • 当我们想要探究某个特定变量如何影响结局变量时,SHAP 分析可以发挥重要作用。它能够展示出随着某个变量的变化,结局变量是如何变动的,这种关系可能是线性的,也可能是非线性的。SHAP典型图是散点图。
  • 应用的场景,是危险因素鉴定场景,在通过以上的蜂窝图了解了变量具有重要作用之后,接下来可以深入观察了解这个变量随变量值的变化其对结局变量贡献的变化,还可以结合立方样条拟合曲线关系来配合分析。这种分析对于二分类结局变量具有特别的重要性,这种分析将结局分类变量转变一个连续变量,让我们可以使用散点图来观察变量间关系。当某个变量的SHAP值为零的时候时一个关键点,代表了预测变量值从支持一个结局到支持另外一个结局。
    在这里插入图片描述

3. 局部性解释:解释单个样本的预测结果,精准化诊断

  • 除了全局性解释,SHAP 分析在局部性解释方面也有重要应用。它可以针对单个样本,分析每个特征对该样本预测结果的影响。典型的图是力图和瀑布图。
  • 应用场景是在模型预测的时候,给出各个变量当前值对于预测结果的贡献,如果预测结果是阳性的,那对预测结果有重要贡献的变量就是用户的病因,需要重点关注和处理。可以说是根据患者的具体状况,精准地给出了对应的诊断和措施,实现了“精准化”医疗。 我将其用在临床预测模型APP的预测过程中,赋予了预测结果更大的价值。
    在这里插入图片描述

4. 总结

SHAP分析可以展示变量重要性、描述变量间的关系、给出变量当前值对预测结果的贡献,展现出了巨大的分析价值,并且除了以上的结果,SHAP分析还可以做交互作用分析,但是具体的应用场景话费意义还有待遇进一步挖掘。

### 使用Python进行SHAP分析的代码示例 为了展示如何利用Python执行SHAPSHapley Additive exPlanations)分析,下面提供了一个基于XGBoost分类器的例子。此案例修改自SHAP包中的教程实例[^3]。 #### 加载必要的库和数据集 首先加载所需的Python库以及准备用于训练的数据集: ```python import xgboost as xgb import shap import numpy as np from sklearn.model_selection import train_test_split import pandas as pd # 假设已经有一个DataFrame df 和目标变量 target df = ... # 数据特征 target = ... # 目标标签 # 将数据分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(df, target, test_size=0.2, random_state=7) dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) ``` #### 训练模型并解释预测结果 接着定义参数、训练模型,并通过SHAP来解析模型的行为: ```python param = { 'max_depth': 3, 'eta': 0.1, 'objective': 'binary:logistic', 'eval_metric': 'auc' } num_round = 50 bst = xgb.train(param, dtrain, num_round) # 创建Explainer对象 explainer = shap.Explainer(bst) # 获取shap values shap_values = explainer.shap_values(dtest) # 显示单个样本的重要性图 shap.initjs() shap.force_plot(explainer.expected_value, shap_values[0,:], X_test.iloc[0,:]) ``` 上述代码片段展示了如何使用`xgboost`构建一个简单的二元分类器,并应用`shap`模块计算Shapley值以理解各个输入特征对于特定预测的影响程度。此外还包含了绘制力图的方法,这有助于直观地呈现某个具体观测点上各因素的作用方向及其相对重要性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

医学AppMatrix

文中代码请大家随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值