现在看来当时找到的资料还是太少了, 这篇笔记更详细一些:
归因分析笔记5:机器学习可解释性_越开源越幸运-CSDN博客
目录
思路来源论文
参考之前看到的论文:
https://doi.org/10.1093/jamiaopen/ooab008
基于机器学习的儿科器官移植受者健康结果预测
利用Shapley加性解释(Shapley additive explanations)提高DL模型的可解释性(Interpretability)
XAI作用介绍:
基于DL算法的预测模型尽管具有卓越的预测能力,但其本身的复杂性和解释难度很大[41]。与传统的ML模型相比,他们预测背后的潜在推理更难提取[46]。因此,大量研究致力于可解释人工智能(explainable artificial intelli-gence, XAI),以探索向人类解释复杂AI模型的可能方法[47]。
Shapley附加解释(Shapley additive explanations, Shap)领域最先进的XAI统一框架[48]。
SHAP实现方法:
Shap基于复杂模型的条件期望函数的Shapley值(即,用于对合作博弈论中的游戏的“值”进行数值评估的函数)来报告该模型中的变量或特征重要性[49]。
Shapely values是解决归因问题(attribution problem即模型的预测分数在输入变量上的分布)的主要方法之一。因此,数值可以表示变量对模型预测结果的影响。由于精确的Shap值的计算具有挑战性,我们引入了Kernel Shap[48],它得益于已知的加性变量属性方法(即LIME)[50]来近似实际Shap值。我们建议感兴趣的读者参考原文以了解更多细节[48]。Shap的实现由其作者在gihub上公开提供(https://github.com/slundberg/shap)
使用Shap解释DL模型
在本研究中,将Shap应用于DL模型的结果以变量重要性的方式显示(图3)。每行的条形图对应一个器官类型:肾脏、肝脏和心脏。每列中的条形图指的是对1年、3年和5年结果的预测。这些曲线图中的变量根据重要性进行排序(降序)。变量越重要,对与其相关的模型输出的影响程度就越大。注意,本研究中产生的Shap解释是全局的(即,通过对数据集中所有样本的Shap值大小求和来提供关于数据集中的整个样本的解释,而不是关于特定样本的解释)。此外,为了降低计算成本,我们使用k-Means算法将样本总结为50个加权样本(对于心脏1年数据集为25个)[51]。相应的形状汇总曲线图可在补充材料中找到。考虑到所有9种器官类型和预测窗口的模型,通常情况下,受者的功能状态(在列出、移植和随访时)以及主要诊断(在列出和移植时)、种族和种族是最重要的变量。
SHAP
https://github.com/slundberg/shap
对机器学习模型解释
import xgboost import shap # train an XGBoost model X, y = shap.datasets.boston()#shap自带的数据集 model = xgboost.XGBRegressor().fit(X, y) # explain the model's predictions using SHAP # (same syntax works for LightGBM, CatBoost, scikit-learn, transformers, Spark, etc.) explainer = shap.Explainer(model) shap_values = explainer(X) # visualize the first prediction's explanation shap.plots.waterfall(shap_values[0]) |
直接解释Model的话, 输入X就应该是model使用的特征, 而不是降维之前的原始特征
为了了解单个特征如何影响模型的输出,我们可以绘制数据集中所有示例的该特征的 SHAP 值与特征值。
对transformers模型解释
import transformers import shap # load a transformers pipeline model model = transformers.pipeline('sentiment-analysis', return_all_scores=True) # explain the model on two sample inputs explainer = shap.Explainer(model) shap_values = explainer(["What a great movie! ...if you have no taste."]) # visualize the first prediction's explanation for the POSITIVE output class shap.plots.text(shap_values[0, :, "POSITIVE"]) |
Explainer后依然是可以直接作为模型输入的内容
归因问题attribution problem
参考: https://zhuanlan.zhihu.com/p/447219154
markov、Sharpley 是市面上最、最常见的两种归因分析的方法
其中markov考虑时间序列
因果推理
Matlib代码
https://github.com/Silver-Shen/Causally-Regularized-Learning
这篇论文的详细介绍见下篇笔记