✨ 欢迎关注 ✨
本节介绍:整体SHAP解释TOPSIS优化与多模型融合的扩展 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。 获取 前请咨询,避免不必要的问题
✨ 信息 ✨
在文献中,采用了SHAP值来解释最优GBDT子模型在预测脓毒性休克患者28天死亡风险中的特征重要性。SHAP值通过颜色渐变从红色(高重要性)到蓝色(低重要性)进行表示,突出了对死亡风险预测影响最大的临床特征
这种可视化方法帮助理解最优模型的决策过程,明确了各个特征在死亡风险预测中的重要性。由于融合模型本身无法直接提供特征贡献排名,文献又通过对各个基于树的子模型(如决策树、随机森林、XGBoost、LightGBM、GBDT)的特征重要性进行汇总,得到了每个特征在多模型融合中的贡献排名。最终,发现这些子模型的贡献排名与SHAP针对最优模型的排名相差不大,具体可以关注往期文章——顶刊复现:通过TOPSIS赋权优化多模型融合的SHAP解释提升模型透明性
需要强调的是,文献中并未对融合模型本身进行整体的SHAP解释,因此,整体SHAP解释需要进一步通过TOPSIS优化与多模型融合的扩展方法来进行,下面就进行对融合模型整体的解释
✨ 基础代码 ✨
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
path = r"2025-8-9公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['Electrical_cardioversion'], axis=1)
y = df['Electrical_cardioversion']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=250807,
stratify=df['Electrical_cardioversion']
)
from imblearn.over_sampling import SMOTE # 原始文献中经过采样 所以这里加上采样 但是实际上该模拟数据集不采样性能会更好 直接使用X_train y_test进行后面的模型训练即可 这里是和文献一致
# 导入SMOTE算法用于数据过采样
smote = SMOTE(sampling_strategy=1, k_neighbors=20, random_state=1314)
# sampling_strategy=1 表示将少数类样本的数量增加到与多数类相同,即使样本平衡
# k_neighbors=20 表示用于生成合成样本时使用20个最近邻点,SMOTE算法将基于这些邻居生成新的样本
# 使用SMOTE对训练集数据进行过采样,生成新的平衡数据集
X_SMOTE_train, y_SMOTE_train = smote.fit_resample(X_train, y_train)
X_SMOTE_train
实现从数据加载、划分训练集与测试集、到应用SMOTE进行过采样的过程(在训练集上进行)。主要目的是在处理类别不平衡问题时,通过生成合成样本使得训练集中的少数类和多数类样本数目接近,从而提高模型对少数类的预测性能
import joblib
ensemble_model = joblib.load('ensemble_model.pkl')
加载一个名为 'ensemble_model.pkl' 的已保存集成模型,并将其存储在ensemble_model变量中以供后续进行SHAP整体解释使用,模型在该其文章进行训练保存——顶刊复现:基于TOPSIS赋权的多模型融合方法及其优化应用提升模型预测性能,当进行完整体模型SHAP值的计算后(完整代码通过文末提供的方式进行获取),就可以进行相应图表的绘制
# 创建 shap.Explanation 对象
shap_explanation = shap.Explanation(shap_values, # 绘制类别1
base_values=explainer.expected_value,
data=X_test, feature_names=X_test.columns)
# 绘制热图
shap.plots.heatmap(shap_explanation)
使用SHAP绘制基于测试集数据X_test的SHAP值热图,以展示各个特征对模型预测结果的重要性。文献中也是针对最优子模型进行此类可视化,因此首先绘制该热图以便对比最优子模型与在融合模型整体上进行SHAP解释是否存在显著性差异
该SHAP热图为往期文章——顶刊复现:通过TOPSIS赋权优化多模型融合的SHAP解释提升模型透明性得到,也就是针对最优子模型的结果,可以发现二者的特征在排名上前几排名特征还是这几个特征只是具体的排名有一定的变化,但是第一还是 NtproBNP该特征,所以对融合模型进行整体解释具有强烈的意义,接下来进行一些其它基础的可视化,针对融合模型的SHAP解释
plt.figure(figsize=(10, 5), dpi=1200)
shap.summary_plot(shap_values, X_test, plot_type="bar", show=False)
plt.tight_layout()
plt.show()
plt.figure()
shap.summary_plot(shap_values, X_test, feature_names=X_test.columns, plot_type="dot", show=False)
plt.show()
绘制两个SHAP特征重要性总结图:一个是条形图(plot_type="bar"),另一个是点图(plot_type="dot"),分别展示X_test中各个特征对模型预测的贡献和重要性
# 设置图形大小
plt.figure(figsize=(10, 5), dpi=1200)
# 绘制第1个样本
shap.force_plot(explainer.expected_value, shap_values[0], X_test.iloc[0], feature_names=X_test.columns, matplotlib=True, show=False)
# 保存图形为 PDF 文件
plt.savefig("force_plot.pdf", format='pdf', bbox_inches='tight',dpi=1200)
plt.tight_layout()
plt.show()
绘制第一个测试样本的SHAP 力图(shap.force_plot),展示该样本特征对模型预测结果的影响,由于这里作者计算融合模型的SHAP值时是针对预测为类别1进行计算得到的,所以这里的f(x)=0.09是代表该样本预测为类别1的概率为0.09
ensemble\_model.predict\_proba(X\_test)[0:5]
使用集成模型ensemble_model对测试集 X_test 进行预测,返回前五个样本的类别概率值
array([[0.91124867, 0.08875133],
[0.70989455, 0.29010545],
[0.74452501, 0.25547498],
[0.24400397, 0.75599602],
[0.75547564, 0.24452435]])
结果表示前五个测试样本的预测类别概率,每行包含两个数值,分别表示样本属于类别0和类别1的概率。例如,第一个样本的概率为类别0为0.91,类别1为0.09,和前文力图是一一对应上的,接下来在绘制第四个样本的力图,进行展示,因为其预测结果为类别1的概率为0.76
# 设置图形大小
plt.figure(figsize=(10, 5), dpi=1200)
shap.force_plot(explainer.expected_value, shap_values[3], X_test.iloc[3], feature_names=X_test.columns, matplotlib=True, show=False)
# 保存图形为 PDF 文件
plt.savefig("force_plot_1.pdf", format='pdf', bbox_inches='tight',dpi=1200)
plt.tight_layout()
plt.show()
绘制测试集X_test中第四个样本的SHAP力图,展示该样本特征对模型预测结果的影响
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
往期推荐
期刊复现:连续数据与分类数据共存的SHAP可视化散点图与箱形图组合形式
期刊复现:多分类任务如何拆分为二分类任务并进行堆叠预测提高模型预测性能
期刊配图:SHAP值分析模型可解释性在柱状图与蜂窝图中的进阶组合展示
期刊配图:通过堆叠Mean|SHAP|展示不同区间对模型贡献度的可视化分析
期刊复现:利用UMAP降维算法可视化深度学习随着训练次数的增加模型区分能力的变化
期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比
Science期刊复现:分类、回归与Shap分析多角度揭示同一数据集变量对目标的影响
多模型SHAP+PDP解读Stacking集成模型:从基学习器到元学习器的可解释性与模型调参实现
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考