社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

一键完成机器学习算法XGBoost+SHAP可解释性蜂群图【0代码无需下载】

易侕科研 • 1 周前 • 47 次点击  

今天我们来谈一谈XGBoost+SHAP的原理、在SCI文章中的应用,以及如何不写代码实现XGBoost+SHAP的分析

最近几年,机器学习在临床研究文章中出现的频率越来越高了,相比于传统的回归分析,机器学习能够处理的问题更复杂,能够探索各种可能存在的统计组合,然后给出一个最佳的变量组合。而在众多机器学习方法中,XGBoost 出现的频次最高。XGBoost 尤其适合解决临床研究中那些变量繁多、关系错综复杂的预测和分类难题。 无论是构建疾病风险预测模型、识别潜在的治疗靶点,还是对患者进行精准分型,XGBoost都展现出强大的潜力。

    XGBoost的原理

XGBoost的原理比较复杂,我们用一个简单的案例向大家解释一下核心逻辑:

我们以学生考试为例,每个学生都类似于一个模型考的分越高说明错误率低,模型的预测效果好。反之考分低,说明模型能力差。我们的目标是找到一个考分最高的模型。

传统的预测模型是基于学生一次考试的结果来判断好坏,大部分时候模型不可能拿到最高分。

XGBoost则是让多个学生进行接力:

  1. 第一个学生(弱模型):他先考试,但成绩一般(预测不准)。他答错的题(预测误差),就是下一棒的重点。

  2. 第二个学生:他不直接做原题,专门研究第一个学生错在哪里(学习残差)。他目标是:如果第一个学生给某病人打了60分(低估风险),他就努力补上缺失的分数(比如+20分)。

  3. 第三个学生:他研究前两人加起来还错的地方,继续补漏(可能+5分)。

  4. 不断接力:加更多学生,每个都专注于修正前面所有人组合起来还存在的错误。

  5. 最终成绩:新病人的风险预测 = 第一个学生的打分 + 第二个学生的补分 + 第三个学生的补分 + ... 所有学生补分累加。

简单来说,XGBoost 就是让一堆简单模型接力学习,后一个专修前一个的错误,把所有修正加起来得到远超单个模型的精准预测。 它特别擅长处理像临床数据这样复杂、有缺失的情况,预测患者的预后情况。

当然,XGBoost也有缺点:它无法像回归模型那样直接给出OR值或β系数,所以没办法直观解释某个X对Y的影响大小是多少,这就是我们通常说的“黑箱”。为了解决这个问题,统计学家和计算机专家引入了SHAP 的概念,量化了每个模型参数的贡献值

SHAP值(Shapley Additive exPlanations)的定义: 基于博弈论的Shapley值,表示在特定预测中,某个特征相对于基线预测(所有特征取平均值的预测)的贡献值,这就相当于解决了黑箱子的问题。

比如在我们使用某些指标来预测人的生存年龄,SHAP值显示:

  • 吸烟贡献 -3.5年

  • 饮酒贡献 -2.8年

  • 规律运动贡献 +4.5年

那么,我们就可以量化的知道每一个因素对于生存年龄的影响大小。

因此越来越多的文章,开始使用XGBoost+SHAP这个组合来开发临床预测模型。下面我们以一篇真实的SCI文章案例来说明这个问题。最后也会告诉大家如何使用统计工具零代码复现整套分析。

    SCI案例

文章标题是:XGBoost Regression of the Most Significant Photoplethysmogram Features for Assessing Vascular Aging(IF 6.8),中文是:基于最显著光电容积脉搏波特征评估血管老化的XGBoost回归分析。文章在 752 名志愿者的 PPG(光电容积描记法) 波形里提取的 78 个特征的数据,通过XGBoost回归模型预测志愿者年龄,并计算了SHAP值去评估特征重要性。

该研究在构建XGBoost预测血管衰老的模型时,使用了贝叶斯优化的方法进行调参,找到了最优参数,用于预测模型的构建,最终得到的预测模型具有 8.1 年的平均绝对误差(MAE)和9.9年的均方根误差(RMSE),通过SHAP值进行的特征重要性分析表明,收缩压和舒张压峰值振幅、上升时间、偏度以及脉搏面积等特征在血管老化评估中起关键作用,比其他PPG特征在血管老化评估中更具重要性。

关键结果解读:

  • XGBoost模型的性能指标

MAE (Mean absolute error) =8.1,表明预测年龄与实际年龄平均相差8.1年。Root mean squared error (Mean absolute error) =9.9,表明预测年龄平均偏离真实值约 9.9年。

多个性能评价指标综合表明,XGBoost回归模型的表现与现有基于光电容积脉搏波(PPG)的血管老化评估模型相当。

  • 贝叶斯优化得到的最佳参数组合

这篇文章在执行贝叶斯优化时用了10折交叉验证,所以得到Mean ± SD (range)。一般研究会选择交叉验证得到的参数分布的均值或者中位数,来构建XGBoost模型。

  • SHAP值——特征重要性

特征重要性条形图:展示各特征对模型预测的平均绝对影响力(mean(|SHAP value|))。结果分析:

舒张期波幅(Amp_dia),重搏波面积(Area_rppG)和收缩期上升时间 (RT_sys )是最强预测因子(SHAP>1.0)。前9个关键特征贡献度 ≈ 7.86,69个次要特征总和达11.44。(次要特征总和 > 关键特征,可以优化冗余特征)。

特征重要性条形图

SHAP蜂群图:展示各特征值对预测的方向性影响(SHAP value impact),其中每一个点代表一个样本的某个特征值对模型预测的贡献,横坐标表示SHAP范围,纵坐标表示特征重要性排序,点颜色表示特征值高低(默认红=高值,蓝=低值)。结果分析:

Area_rppG(重搏波面积):高值(红点) 主要分布在SHAP<0区域,表明特征值越大,血管年龄越小,对健康有促进作用。提示重搏波面积越大,预测血管年龄更年轻。

RT_sys(收缩期上升时间):低值(蓝点) 集中在SHAP<0区域,表明特征值越小,血管年龄越小,对健康有促进作用。提示上升时间缩短,预测血管年龄更年轻。

SHAP蜂群图

在这篇SCI中,XGBoost+SHAP强强联合,探讨了XGBoost作为血管衰老评估模型的潜力,并通过SHAP值分析,研究探讨了关键PPG特征。

那么,这么好用的机器学习方法,该如何分析呢?

机器学习的代码比传统回归分析要复杂很多,还涉及到模型超参数的贝叶斯优化,为了解决这些问题,EasyR统计软件开发一套0代码复现XGBoost的工具,大家动动鼠标就可以完成复杂的XGBoost+SHAP的分析结果。下面我们看看实战教程。

    0代码复现XGBoost+SHAP

1.登录EasyR网站,上传自己的数据。

这个软件是在线工具,无需下载、无需安装,打开网页就可以试用(网址是https://www.easyrdata.com),第一次使用需要注册,注册非常简单。进入网站之后,大家可以用系统自带的demo数据进行测试,也可以上传自己的数据。

2.分析数据查看

在【首页】和【变量清单】可以查看数据的基本情况。

3.选择“高级建模与预测-XGBoost”模块

在【高级建模与预测】里,找到【XGBoost】,选择【因变量Y】和自变量【X】,设置【训练集比例】,然后一键分析。

4.结果输出。

我们的结果展示了贝叶斯优化的全局最优参数组合,XGBoost预测模型的性能指标,SHAP值,以及SHAP值条图和蜂群图,后期我们会上线AI解读功能,帮助大家快速解读模型结果。

好了,以上就是EasyR里XGBoost的操作教程了,大家可以跟着教程一步一步操作。非常建议大家收藏分享,等到需要用的时候可以快速拿来参考。

    关于EasyR的几个问题
1.EasyR工具使用方法:
EasyR的网址是:www.easyrdata.com 软件基于网页,不需要下载、安装,直接浏览器访问即可。第一次使用需要注册,后续就可以直接使用了。
2.软件的后台是什么,结果可靠吗?
EasyR软件后台是R语言,已经在数十篇SCI文章中使用了,分析结果经过了SPSS和SAS的验证,结果可靠可信,受SCI认可。目前使用的是R 4.5.1版本,后续会根据随R稳定版本进行升级。
文章1:Insights into orbital morphological features and fracture patterns in medial and inferior wall fracture: a retrospective cohort study
文章2:Effects of various extraocular muscle enlargement patterns on muscle diameter index in graves ophthalmopathy patients: a retrospective cohort study

3.如何在文章中引用EasyR,引用后是否有奖励?

英文期刊引用模板1:The statistical analysis was conducted using R version 4.5.1 (https://www.R-project.org) and EasyR (https:// www.easyrdata.com Solutions, Inc., Shanghai). Statistical significance was determined by P values 

英文期刊引用模板2:Statistical analysis was performed with R version 4.5.1 (https://www.R-project.org) and EasyR (https://www.easyr. cc Solutions, Inc., Shanghai).

中文期刊引用:统计分析采用R软件4.5.1版本(https://www.R-project.org )以及EasyR(https://www.easyrdata.com ,上海,斯录欣)完成。所有分析中,统计学显著性水平设定为P<0.05。

文章见刊后,可以联系我们的客服,领取软件的免费延长激活码。

4.EasyR软件是哪个团队开发的?
EasyR软件是由专业统计师团队研发,并获得了专利授权。2020年V1.0版本上线,现在是2.0版本,新版本重新设计了软件的框架,性能更好、操作更便利。本软件和易侕统计软件无关,是独立的公司和团队开发,账号和会员也无法通用。
5.EasyR软件收费吗?
EasyR软件是收费软件,注册之后可以免费基于demo数据试用,如果上传自己的数据则需要付费,目前支持按星期、按月付费。如果你在文章中引用了EasyR,我们将赠送一定时长的激活码。
6.软件目前有多少模块,后期会增加吗?
软件目前包括了智能三线表、数据插补、倾向性评分、单因素/多因素分析、生存分析、XGboost、机器学习、lasso回归、RCS等20多项模块,后续会持续更新,欢迎大家持续关注。
除了正态性检验,我们之前还做了其他统计教程比如相关性热图正态性检验三线表,如果觉得有用,记得关注+收藏哦,后续我们会继续分享更多SCI统计方法的教程,欢迎大家持续关注。
关注易侕科研不迷路~

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/198538