期刊复现:结合机器学习临床预测模型shap解释的列线图绘制

大模型机器学习数据库

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍: 结合机器学习临床预测模型shap解释的列线图绘制 。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。 详细数据和代码、文献将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。

✨ 文献信息 ✨

picture.image

picture.image

文献信息,在文献中,构建模型前进行了特征筛选(Boruta+Lasso交集)以及多个模型的比较,最后确定XGBoost模型最优。接下来,代码主要是构建XGBoost临床预测模型的SHAP解释和列线图绘制,至于其他部分可以参考往期公众号文章,皆有相应的教程

为了提高机器学习模型的透明性和可解释性,文章使用了SHAP方法,用于帮助理解每个特征在模型预测中的作用。通过使用SHAP,文章实现了可视化每个特征对模型预测的贡献,从而增强了模型的可解释性,并评估了不同变量(如高血压、SOFA评分、氯化物、血红蛋白和肌酐等)对预测败血症患者谵妄风险的影响。SHAP分析帮助临床医生理解模型为何对某个特定患者做出某种预测,这对高风险医学决策至关重要。基于SHAP分析,文章构建了一个列线图,将最具影响力的前5个特征整合在一起,列线图是一种可视化的预测模型,使临床医生可以通过图形化方式快速评估个体患者的风险。该列线图包括高血压、SOFA评分、氯化物、血红蛋白(Hb)和肌酐(Cr)五个变量,通过这些变量的整合,临床医生可以快速评估败血症患者发生谵妄的可能性,从而进行早期干预

✨ 基础代码 ✨

  
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-5-12公众号Python机器学习AI.csv"  
df = pd.read_csv(path)  
from sklearn.model_selection import train_test_split  
  
# 划分特征和目标变量  
X = df.drop(['target'], axis=1)    
y = df['target']    
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(  
    X,    
    y,   
    test_size=0.3,   
    random_state=1314520,   
    stratify=df['target']   
)  
from xgboost import XGBClassifier  
from sklearn.model_selection import GridSearchCV  
  
# 初始化 XGBoost 分类模型  
model_xgb = XGBClassifier(use_label_encoder=False, eval_metric='logloss', random_state=42)  
  
# 定义参数网格  
param_grid_xgb = {  
    'n_estimators': [50, 100, 200],       # 树的数量  
    'learning_rate': [0.01, 0.1, 0.2],   # 学习率  
    'max_depth': [3, 5, 10],             # 最大深度  
    'subsample': [0.8, 1.0],             # 子采样比率  
    'colsample_bytree': [0.8, 1.0]       # 树的列采样比率  
}  
  
# 使用 GridSearchCV 进行网格搜索和 k 折交叉验证  
grid_search_xgb = GridSearchCV(  
    estimator=model_xgb,  
    param_grid=param_grid_xgb,  
    scoring='neg_log_loss',  # 评价指标为负对数损失  
    cv=5,                    # 5 折交叉验证  
    n_jobs=-1,               # 并行计算  
    verbose=1                # 输出详细进度信息  
)  
  
# 训练模型  
grid_search_xgb.fit(X_train, y_train)  
  
# 使用最优参数训练模型  
best_model_xgb = grid_search_xgb.best_estimator_  
import shap  
explainer = shap.TreeExplainer(best_model_xgb)  
shap_values = explainer.shap_values(X_test)  
plt.figure(figsize=(10, 5), dpi=1200)  
shap.summary_plot(shap_values, X_test, plot_type="bar", show=False)  
plt.tight_layout()  
plt.savefig("1.pdf", format='pdf',bbox_inches='tight')  
plt.show()

picture.image

  
plt.figure()  
shap.summary_plot(shap_values, X_test, feature_names=X_test.columns, plot_type="dot", show=False)  
plt.savefig("2.pdf", format='pdf',bbox_inches='tight')  
plt.show()

picture.image

  
base_value = explainer.expected_value  
shap.force_plot(base_value, shap_values[0], X_test.iloc[0],   
                feature_names=X_test.columns, matplotlib=True, show=False)  
plt.savefig("3.pdf", format='pdf', bbox_inches='tight',dpi=1200)  
plt.tight_layout()    
plt.show() 

picture.image

这段代码使用SHAP库对训练好的XGBoost模型进行可解释性分析,并生成三种类型的图表,分别是条形图、散点图和力图,这些图表有助于揭示模型的预测过程和特征的重要性

首先,条形图(shap.summary_plot,plot_type="bar") 展示了每个特征对模型预测结果的整体贡献。通过条形图,可以清楚地看到各特征的重要性排序,帮助我们理解哪些特征在整个模型中起到了主导作用

其次,散点图(shap.summary_plot,plot_type="dot") 显示了每个特征对模型预测的具体影响,并通过分布的方式揭示了不同特征在不同样本中的贡献大小。每个点代表一个样本,点的位置反映了该样本在该特征上的预测影响力

最后,力图(shap.force_plot)提供了对单个样本的详细解释,显示了该样本的预测决策过程。通过力图,可以观察到各特征如何推动最终的预测结果,以及它们对样本预测结果的正负贡献。特别地,通过这种方式,临床医生可以清楚地看到单个患者的风险因素和对应的决策路径

接下来,结合文献中的方法,将根据SHAP分析结果,选择排名前5的特征进行列线图(nomogram)的构建。这些特征包括:'cp'、'thal'、'oldpeak'、'thalach'(最大心率)和'ca'。列线图将这些特征与患者的风险预测结合,为临床医生提供一个直观、易操作的工具,帮助他们基于这些关键因素迅速评估患者的风险并做出早期干预,从而改善临床决策的效率和准确性

picture.image

列线图(nomogram)是基于逻辑回归模型构建的,但选择的特征因子是根据XGBoost模型的SHAP解释排名得出的。需要注意的是,XGBoost模型是一个非线性模型,而逻辑回归则是线性模型。因此,基于SHAP排名选择的特征因子,并不一定是最适合线性逻辑回归模型的。这是因为非线性模型和线性模型在特征关系的建模方式上有很大不同,尤其是在处理特征与预测目标之间的复杂交互关系时。

尽管如此,目前已有文献采用了类似的做法,将非线性模型的特征排名用于构建线性模型的列线图。基于此思路,这里也是采用XGBoost模型的SHAP排名来选择特征,进而构建了列线图。接下来,通过测试集上的性能表现对比,评估两种不同模型(XGBoost与逻辑回归) 的预测能力

picture.image

这张ROC曲线图展示了XGBoost模型(使用所有特征)与逻辑回归模型(使用XGBoost模型SHAP排名前5个特征)在测试集上的表现,XGBoost模型的AUC为0.842,而逻辑回归的AUC为0.874

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 购买介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!

往期推荐

机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学

期刊配图:基于SHAP算法的驱动因子相互作用贡献矩阵图

因果推断:利用EconML实现双重机器学习估计条件平均处理效应 (CATE)

期刊复现:基于部分线性模型的双重机器学习方法

期刊复现:基于XGBoost模型的网页工具SHAP力图解释单样本预测结果

期刊配图:nature cities通过ALE(累积局部效应)解析特征对模型影响

期刊复现:结合因果推断与SHAP可解释性的机器学习实现应用流程

期刊配图:一区SCI常用数据缺失率展示图可视化

因果推断:注册行为对后续消费影响的因果推断分析案例

nature communications:基于Light GBM与随机森林结合的多模型特征选择方法

因果推断与机器学习结合:探索酒店预订取消的影响因素

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
大规模高性能计算集群优化实践
随着机器学习的发展,数据量和训练模型都有越来越大的趋势,这对基础设施有了更高的要求,包括硬件、网络架构等。本次分享主要介绍火山引擎支撑大规模高性能计算集群的架构和优化实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论