顶刊复现:RSF生存随机森林模型在生存分析中的应用与SHAP解释

机器学习算法人工智能与算法

picture.image

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

本节介绍:RSF生存随机森林模型在生存分析中的应用与SHAP解释,数据采用模拟数据无任何现实意义 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的AI工具~!点赞、推荐参与文末包邮赠书~!

✨ 论文信息 ✨

picture.image

picture.image

在前文中——期刊复现:COX、XGB、RSF、GBSA与SSVM模型在生存分析中的应用与SHAP解释,已经通过说明在文献生存分析中最优的机器学习模型是XGBoost,并使用SHAP进行了解释。然而,在使用模拟数据集进行实验时,实际模型生存随机森林模型(RSF)在真实表现上最为出色。因此,在本文中,将针对这个在模拟数据集上表现最优的模型(RSF)进行相应的SHAP解释,作为扩展

✨ 基础代码 ✨

  
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")  
df = pd.read_excel('2025-10-15公众号Python机器学习AI.xlsx')  
from sklearn.model_selection import train_test_split  
# 划分特征和目标变量  
X = df.drop(['OS', 'OS_State'], axis=1)    
y = df[['OS', 'OS_State']]    
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(  
    X,    
    y,   
    test_size=0.3,   
    random_state=42,   
    stratify=df['OS_State']   
)  
# 将 y_train 和 y_test 转换为结构化数组  
y_train_struct = np.array(  
    list(zip(y_train['OS_State'] == 0, y_train['OS'].astype(float))),  
    dtype=[('cens', '?'), ('time', '<f8')]  
)  
  
y_test_struct = np.array(  
    list(zip(y_test['OS_State'] == 0, y_test['OS'].astype(float))),  
    dtype=[('cens', '?'), ('time', '<f8')]  
)  
from sksurv.util import Surv  
  
# 转换为 scikit-survival 的格式  
y_train_surv = Surv.from_arrays(event=~y_train_struct['cens'], time=y_train_struct['time'])  
y_test_surv = Surv.from_arrays(event=~y_test_struct['cens'], time=y_test_struct['time'])  
  
from sksurv.ensemble import RandomSurvivalForest  
from sklearn.metrics import make_scorer  
random_state = 1314  
# 创建 RandomSurvivalForest 模型,使用默认参数  
rsf = RandomSurvivalForest(random_state=random_state)  
  
# 直接训练模型,不进行网格搜索  
rsf.fit(X_train, y_train_surv)  
  
# 计算训练集和测试集的 C-index  
train_c_index_RSF = rsf.score(X_train, y_train_surv)  
test_c_index_RSF = rsf.score(X_test, y_test_surv)

使用随机生存森林(RSF)模型对生存分析数据进行训练,并计算训练集和测试集的C-index值,其他模型的复现请参考上一期文献复现——期刊复现:COX、XGB、RSF、GBSA与SSVM模型在生存分析中的应用与SHAP解释

  
import shap  
.......  
X_to_explain = X_test.to_numpy()  
try:  
    shap_values = explainer.shap_values(X_to_explain, nsamples='auto')  
    print("SHAP 值计算完成,形状:", shap_values.shape)  
except Exception as e:  
    print(f"计算 SHAP 值时发生错误: {e}")

使用SHAP库对生存随机森林(RSF)模型的预测结果进行解释,计算测试集(仅55个样本,32个特征)的SHAP值,然而,由于RSF模型的计算复杂性,相较于XGBoost,SHAP值计算耗时更长,约为7分钟,这也是为什么在前面——期刊复现:COX、XGB、RSF、GBSA与SSVM模型在生存分析中的应用与SHAP解释会提到 文献最终选择了CPH模型作为风险分层和进一步分析的最佳模型

  
plt.figure(figsize=(10, 5))  
# 设置 max_display=20 限制显示前20个特征  
shap.summary_plot(  
    shap_values,   
    X_test,   
    plot_type="bar",   
    max_display=20,     
    show=False  
)  
  
plt.tight_layout()  
plt.savefig("SHAP-RSF-1.pdf", format='pdf',bbox_inches='tight', dpi=1200)  
plt.show()

picture.image

使用SHAP库绘制生存随机森林(RSF)模型在测试集上的前20个最重要特征的条形图,结果展示各特征对模型输出的平均影响程度,如:SDMA-ADMA_pos-140和2-Ketohexanoic acid_neg-005 是影响模型预测结果最重要的特征

  
plt.figure()  
shap.summary_plot(  
    shap_values,  
    X_test,  
    feature_names=X_test.columns,  
    plot_type="dot",  
    max_display=20,     
    show=False  
)  
  
plt.savefig("SHAP-RSF-2.pdf", format='pdf',bbox_inches='tight', dpi=1200)  
plt.show()

picture.image

绘制前20个特征对模型输出的影响(SHAP值)的散点(蜂巢)图,展示每个特征对预测结果的贡献程度

picture.image

绘制排名前4特征的SHAP值散点图,每个子图展示相应特征与其SHAP值之间的关系,其实就是对前面蜂巢图的扩展,类似于提取一个特征来进行单独的可视化,更方便进行模型的趋势解释

以最高贡献特征为列,横轴表示特征SDMA-ADMA_pos-140的值,纵轴显示该特征的SHAP值。SHAP绝对值衡量了每个特征对模型预测的贡献程度,正值表示该特征增加了预测值,负值则表示该特征减少了预测值,临界点为SHAP=0表示没有任何影响

SDMA-ADMA_pos-140在较低的值区间(大约在0.0008到0.0013之间)对应的SHAP值为负,意味着该特征的值越低时,模型的风险预测分数越低(可能意味着较低的风险)

SDMA-ADMA_pos-140的值增加到接近0.0013后,SHAP值变为正值。这意味着该特征值的增加会导致预测的风险分数上升(即模型预测的风险增加),只是增加的程度随绝对值变化

所以,SDMA-ADMA_pos-140 对生存分析模型的影响是非线性的,而不是像Cox比例风险模型中,通过回归系数来判断特征对风险的影响

当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息

picture.image

✨ 该文章案例 ✨

picture.image

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

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

✨ 书籍推荐 ✨

无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能

✨ 介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。

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

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!

✨ AI工具推荐 ✨

picture.image

✨ 赠书活动 ✨

picture.image

支持知识分享,畅享学习乐趣!特别感谢清华大学出版社 对本次赠书活动的鼎力支持!即日起,只需点赞、推荐、转发 此文章,作者将从后台随机抽取一位幸运儿,免费包邮赠送清华出版社提供的《具身智能 从理论到实践》这本精彩书籍📚!

💡 赶快参与,一键三连,说不定你就是那位幸运读者哦!

往期推荐

期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示

期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释

期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化

期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)

期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧

期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建

期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释

期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论