归因分析笔记1:计算特征重要程度方法汇总

现在看来当时找到的资料还是太少了, 这篇笔记更详细一些:

归因分析笔记5:机器学习可解释性_越开源越幸运-CSDN博客

目录

思路来源论文

SHAP

对机器学习模型解释

对transformers模型解释

归因问题attribution problem

因果推理


思路来源论文

参考之前看到的论文:

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

这篇论文的详细介绍见下篇笔记

你可能感兴趣的:(医学计算机,人工智能,科研技巧,可解释性,因果推理)