机器学习系列|基于随机森林的生存分析模型-R实战
机器学习系列|基于随机森林的生存分析模型-R实战
随机生存森林
随机生存森林通过训练大量生存树,以表决的形式,从个体树之中加权选举出最终的预测结果。
构建随机生存森林的一般流程为:
Ⅰ. 模型通过“自助法”(Bootstrap)将原始数据以有放回的形式随机抽取样本,建立样本子集,并将每个样本中37%的数据作为袋外数据(Out-of-Bag Data)排除在外;
Ⅱ. 对每一个样本随机选择特征构建其对应的生存树;
Ⅲ. 利用Nelson-Aalen法估计随机生存森林模型的总累积风险;
Ⅳ. 使用袋外数据计算模型准确度。
案 例
以美国梅奥诊所在1974—1984年间收集的原发性胆汁性胆管炎(primarybiliarycholangitis,PBC)数据为例,通过构建随机生存森林模型来探究D-青霉胺(DPCA)治疗对于原发性胆汁性胆管炎生存的影响。同时,也探讨其他主要临床指标是否也对PBC的生存有影响。原始数据共有总计418例患有PBC的研究对象,其中时间(time)的单位为生存天数,在此换算为生存年数。由于只考虑单次复发的情况,原始数据“status”变量中的事件重新分组为“0”(删失)和“1”(事件)。
随机生存森林的构建:
通过“randomForestSRC”包中的rfsrc函数构建随机生存森林模型。
#建立随机生存森林模型rfsrc_pbcmy <- rfsrc(Surv(days, status) ~ ., data = data_train, nsplit = 10, na.action = "na.impute", tree.err = TRUE, importance = TRUE)
结果如下,包括模型的一些默认参数设置等信息:
变量 | 输出值 |
---|---|
Sample size | 312 |
Number of deaths | 121 |
Was data imputed | yes |
Numberoftrees | 1000 |
Forest terminal node size | 15 |
Average no. of terminal nodes | 15.779 |
No. of variables tried at each split | 5 |
Total no. of variables | 17 |
Resampling used to grow trees | swor |
Resample size used to grow trees | 197 |
Analysis | RSF |
Family | surv |
Splitting rule | logrankrandom |
Number of random split points | 10 |
Error rate | 19.85% |
随机生存森林使用了Harrell的一致性指数(concordance index)来计算其准确度。从上表可以看出模型的C-index约为1-Error rate = 1-19.85% = 0.8。模型默认生成了1000个二元生存树,从下图可以看出当生存树增加到一定数量后,错误率(Error rate)曲线趋于平稳(19.85%),说明树的棵数是合适的。
#袋外数据错误率与生存树数量关系的可视化rfsrc_error <- gg_error(rfsrc_pbcmy)rfsrc_error <- na.omit(rfsrc_error)plot(rfsrc_error)
变量筛选和结论
随机生存森林可以对变量重要性进行排名,VIMP法和最小深度法是最常用的方法:变量VIMP值小于0说明该变量降低了预测的准确性,而当VIMP值大于0则说明该变量提高了预测的准确性;最小深度法通过计算运行到最终节点时的最小深度来给出各变量对于结局事件的重要性。
下图为综合两种方法的散点图,其中,蓝色点代表VIMP值大于0,红色则代表VIMP值小于0;在红色对角虚线上的点代表两种方法对该变量的排名相同,高于对角虚线的点代表其VIMP排名更高,低于对角虚线的点则代表其最小深度排名更高。
**相较于Cox比例风险回归模型等传统生存分析方法,随机生存森林模型的预测准确度至少等同或优于传统生存分析方法。**随机生存森林模型的优势体现在它不受比例风险假定、对数线性假定等条件的约束。同时,随机生存森林具备一般随机森林的优点,能够通过两个随机采样的过程来防止其算法的过度拟合问题。除此之外,随机生存森林还能够对高维数据进行生存分析和变量筛选,也能够应用于对竞争风险(competing risk)的分析。因而,随机生存森林模型有着更为广泛的研究空间。
**但是随机生存森林也存在缺陷:易受离群值的影响。**分析中有离群值数据时,预测准确度会稍劣于传统生存分析方法。Cox比例风险回归模型对于生存数据的分析不仅仅用于预测,还可以较为便捷地给出各变量与生存结局的关系,所以随机生存森林模型应该和传统生存分析相结合应用,并不能完全替代传统生存分析模型。
参考文献:
[1]陈哲,许恒敏,李哲轩,等.随机生存森林:基于机器学习算法的生存分析模型[J].中华预防医学杂志,2021,55(01):104-109.
[2]KayR.Goodnessoffitmethodsfortheproportionalhazardsregressionmodel:areview[J].RevEpidemiolSantePublique,1984,32(3-4):185-198.IshwaranH,KogalurUB,BlackstoneEH,etal.Randomsurvivalforests[J].AnnApplStat,2008,2(3):841-860.DOI:10.1214/08-aoas169.
[3]ZhouY,McArdleJJ.RationaleandApplicationsofSurvivalTreeandSurvivalEnsembleMethods[J].Psychometrika,2015,80(3):811-833.DOI:10.1007/s11336-014-9413-1.
[4]CuzickJ.Countingprocessesandsurvivalanalysis.ThomasR.FlemingandDavidP.Harrington,Wiley,NewYork,1991[J].StatisticsinMedicine,1992,11(13):1792-1793.DOI:10.1002/sim.478011131
机器学习系列|基于随机森林的生存分析模型-R实战相关推荐
- 机器学习:基于随机森林(RFC)对酒店预订分析预测
机器学习:基于随机森林(RFC)对酒店预订分析预测 作者:i阿极 作者简介:Python领域新星作者.多项比赛获奖者:博主个人首页
- 【python3】基于随机森林的气温预测
前言 这个项目实战系列主要是跟着网络上的教程来做的,主要参考<跟着迪哥学习机器学习>中的思路和具体实现代码,但是书中使用到的应该是python2的版本,有一些代码也有问题,有的是省略了一些 ...
- kaggle项目:基于随机森林模型的心脏病患者预测分类!
公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 新年的第一个项目实践~给大家分享一个新的kaggle案例:基于随机森林模型(RandomForest)的心脏病人预测分类 ...
- RDKit | 基于随机森林的化合物活性二分类模型
基于随机森林算法的化合物二分类机器学习模型 代码示例 #导入依赖包 import pandas as pd import numpy as np from rdkit import Chem, Dat ...
- 【项目实战】基于随机森林算法的房屋价格预测模型
[博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...
- 随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程
本发明涉及评分领域及机器学习领域,它特别涉及一种基于随机森林的c语言源代码静态评分的构建方法. 背景技术: c语言源代码静态评分是指对根据一定的题目描述做出解答的c语言源代码进行评分.目前,主要流行的 ...
- 动手实操丨基于随机森林算法进行硬盘故障预测
摘要:业界期望使用机器学习技术来构建硬盘故障预测的模型,更准确地提前感知硬盘故障,降低运维成本,提升业务体验.本案例将使用随机森林算法来训练一个硬盘故障预测模型. 本文分享自华为云社区<基于随机 ...
- 集成树模型系列之一——随机森林
集成树模型系列之一--随机森林 随机森林一般会被认为集成树模型的开端,虽然现在工业或者比赛中都很少会被应用,但是我们学习集成树模型都绕不过它,它的一些思想被广泛地应用到后面的集成树模型中. 随机森林这 ...
- 机器学习-Sklearn-02(随机森林)
机器学习-Sklearn-02(随机森林) 学习2 随机森林在sklearn中的实现 1 概述 1.1 集成算法概述 集成学习(ensemble learning)是时下非常流行的机器学习算法,它本身 ...
最新文章
- 关于量子计算,你应该知道的七个事实
- Java的新项目学成在线笔记-day12(九)
- Opengl-光照-颜色(其实要想做出好看的东西这章最重要了)
- ElasticSearch日志删除命令
- 使用maven快速构建SSM项目
- 【大二在读】说说我对“软件工程”的理解
- wxWidgets:设备上下文
- Jerry Wang 2013年几篇比较受欢迎的SAP社区博客
- echarts自定义showlading()样式和文本
- vue项目H5 跳转微信小程序
- jenkins+docker 持续构建非docker in docker
- Graphics进行局部旋转的办法
- requests第三方库在测试中的使用
- linux返回上一行命令行,linux命令行编辑快捷键
- ecplise和lomboz和tomcat配置
- vs2010 正式版官方下载地址
- 企业邮箱哪个品牌最好用?10年hr的经验分享
- kafka消费策略 随笔
- 简易版购物车案例(vue)
- 「无刷新跳转」window.history两个新方法pushState和replaceState详解
热门文章
- C语言在工业工程专业的应用,工业工程专业.PDF
- 深入理解机器学习——概率图模型(Probabilistic Graphical Model):条件随机场(Conditional Random Field,CRF)
- Revit二次开发小火车工具集的复现
- 为什么使用pnpm可以光速建立好用的monorepo(比yarn/lerna效率高)
- 股票交易系统推荐杨方配资_【杨方配资】杨方配资怎么样?这个平台值得股民信任吗?...
- 数字资产存在万圣节效应吗?
- 华为OD题目: 相同数字的积木游戏1
- Lagrangian relaxation and duality
- 超详细解析:用sql查找连续登陆7天或者登陆天数最多的用户id
- C# 链接Kep进行读取数据