R数据分析:集成学习方法之随机生存森林的原理和做法,实例解析

机器学习系列|基于随机森林的生存分析模型-R实战 机器学习系列|基于随机森林的生存分析模型-R实战 随机生存森林 随机生存森林通过训练大量生存树,以表决的形式,从个体树之中加权选举出最终的预测结果。 构建随机生存森林的一般流程为: Ⅰ. 模型通过“自助法”(Bootstrap)将原始数据以有放回的形式随机抽取样本,建立样本子集,并将每个样本中37%的数据作为袋外数据(Out-of-Bag Data)排除在外; Ⅱ. 对每一个样本随机选择特征构建其对应的生存树; Ⅲ. 利用Nelson-Aalen法估计随机生存森林模型的总累积风险; Ⅳ. 使用袋外数据计算 阅读详情

很久很久以前给大家写过决策树,非常简单明了的算法。今天给大家写随机(生存)森林,随机森林是集成了很多个决策数的集成模型。像随机森林这样将很多个基本学习器集合起来形成一个更加强大的学习器的这么一种集成思想还是非常好的。所以今天来写写这类算法。

集成学习方法

Ensemble learning methods are made up of a set of classifiers—e.g. decision trees—and their predictions are aggregated to identify the most popular result.

所谓的集成学习方法,就是把很多的比较简单的学习算法统起来用,比如光看一个决策树,好像效果比较单调,还比较容易过拟合,我就训练好多树,把这些树的结果综合一下,结果应该会好很多,用这么样思路形成的算法就是集成学习算法Ensemble methods,就是利用很多个基础学习器形成一个综合学习器。

Basically, a forest is an example of an ensemble, which is a special type of machine learning method that averages simple functions called base learners.The resulting averaged learner is called the ensemble

集成学习方法最有名的就是bagging 和boosting 方法:

The most well-known ensemble methods are bagging, also known as bootstrap aggregation, and boosting

BAGGing

BAGGing, or Bootstrap AGGregating这个方法把自助抽样和结果合并整合在一起,包括两个步骤,一个就是自助抽样,抽很多个数据集出来,每个数据集来训练一个模型,这样就可以有很多个模型了;第二步就是将这么多模型的结果合并出来最终结果,这个最终结果相对于单个模型结果就会更加稳健。

In the bagging algorithm, the first step involves creating multiple models. These models are generated using the same algorithm with random sub-samples of the dataset which are drawn from the original dataset randomly with bootstrap sampling method

The second step in bagging is aggregating the generated models.

随机森林就可以看作是遵循了bagging方法的一个思路,只不过在每一个抽样样本中的树(模型)是不一样的:

Boosting:

Boosting为强化学习,最大的特点是可以将原来的弱模型变强,逻辑在于算法会先后训练很多模型,后面训练模型的时候会不断地给原来模型表现不好的样本增大权重,使得后面的模型越来越将学习重点放在之前模型表现差的样本上,这么一来,整体模型越来越强。就像人会从之前的错误中反省经验一个意思了。

这么一描述大家就知道,boosting方法的模型训练是有先后顺序的,并行算法就用不了了

Boosting incrementally builds an ensemble by training each model with the same dataset but where the weights of instances are adjusted according to the error of the last prediction.

Boosting方法本身也有很多,常见的如AdaBoost,Gradient Boosting(XGBoost and LightGBM),下图感兴趣的同学可以看看:

上面的算法之后再给大家写,接下来的实操部分还是以随机森林为例子给大家具体介绍:

随机森林

随机森林模型的拟合过程大概可以分为三步:

1.通过有放回的自助抽样形成ntree个抽样样本集(Bootstrap)

2.对每个抽样样本集形成一个决策树,这个树是基于mtry个预测因子的

3.将最终的模型结果就是ntree个抽样样本集得出的结果的最大票数或者均值(AGGregating)

随机森林的整个的流程就如下图:

为了方便理解“最终的模型结果就是ntree个抽样样本集得出的结果的最大票数或者均值”我们用例子做个解释,先看下图:

我们有一个水果集,然后我训练一个3棵树组成的随机森林来判断每一个水果到底是何种类,有两棵树都告诉我是某一个水果是苹果,一棵树告诉我是香蕉,那么最后我们随机森林就会输出该水果是香蕉的结论。

上面的过程有几个超参需要确定

  • mtry: Number of variables randomly sampled as candidates at each split.
  • ntree: Number of trees to grow.

mtry一般需要调参,ntree都是越大越好自己设定就行。在上面的过程中我们每棵树的节点都是不同的,叫做特征随机化,通过特征随机化我们保证了森林中树的多样性,随机森林模型也更加稳健。

Feature randomness, also known as feature bagging or “the random subspace method”, generates a random subset of features, which ensures low correlation among decision trees

随机森林实操

比如我现在有一个数据集,结局变量是class为二分类,我要适用随机森林算法就可以写出如下代码:

rf_default <- train(Class~., 
                    data=dataset, 
                    method='rf', 
                    tuneLength  = 15, 
                    trControl=control)
print(rf_default)

输出的结果中有随机调参的过程,共15次,最终发现超参mtry=3的时候模型最优,具体如下:

以上的随机森林模型的简单展示,接着我们再看随机生存森林。

随机生存森林

和随机森林一样,随机生存森林也是一个集成学习方法,区别在于其结局为生存资料。

示例文章

依然我们来看一篇发表在Cancer Med.上的文章,名字如下:

Prognostic risk factor of major salivary gland carcinomas and survival prediction model based on random survival forests

作者用cox进行了变量筛选,使用随机生存森林进行了预测模型构建,并得到了相应的风险分,明确了风险分的最佳截断值(“maxstat” R package),对于模型的表现作者使用了c指数和time-dependent ROC来评估,文章中主要的结果报告如下,包括:

树的数量和模型误差情况,以及变量重要性的结果:

time-dependent ROC曲线结果展示和相应的AUC值:

风险分界址点确定:

高低风险组的组间生存曲线比较:

也是一篇预测模型类文章的常规套路了。挑一个算法,拟合模型后评估,做个风险分,应用风险分划分病人证明模型可用性。我们以这篇文章为例子看随机生存森林预测模型的实操。

随机生存森林实例操作

我现在的数据中ttodead,died两个变量分别是时间和生存状态,此时我想做一个随机生存森林模型就可以写出如下代码:

RF_obj <- rfsrc(Surv(ttodead,died)~., dataSet, ntree = 1000,  membership = TRUE, importance=TRUE)

对代码运行后生成的对象RF_obj进行plot即可出图如下,就得到了原文中的figure2:

然后我们可以画出模型的不同时间点的timeRoc曲线(下面代码中的risk_score为随机生存森林对象的预测值),就得到了原文中的figure3,figure4:

ROC_rsf<-timeROC(T=finaldata.Test$Surv_day,delta=finaldata.Test$status,
             marker=risk_score,
             cause=1,
             times=c(365,365*3,365*5),iid=TRUE)
plot(ROC_lasso,time=365)
plot(ROC_lasso,time=365*3,add = T,col="blue")
plot(ROC_lasso,time=365*5,add = T,col="green")
legend(.8, .3, legend=c("T=1 Year AUC=0.895", "T=3 Year AUC=0.917","T=5 Year AUC=0.926"),
       col=c("red", "blue","green"), lty=1, cex=0.7,bty = "n")

并且将模型预测值的截断值找出来,验证模型在不同风险组的区分能力。其中找风险分截断值的代码如下:

y.pred <- predict(RF_obj)[["predicted"]]
plot(surv_cutpoint(dataSet, time = "ttodead", event = "died",
                   variables = c("y.pred")), "y.pred", palette = "npg")

运行后得到下图(原文中的figure5),就说明我们这个模型的风险分截断值应该为43.21:

然后根据这个风险分我们就可以将原始人群分为高风险组和低风险组,再做出组间km曲线,到这儿相当于Cancer Med的这篇用随机生存森林的文章就完全复现出来了。

以上是给大家介绍的随机生存森林的内容。

随机森林实现及调参的R与Python对比——以泰坦尼克幸存者数据为例 随机森林实现及调参 阅读详情

相关推荐

利用R语言Tidymodel包,对随机森林R语言实现

利用tidymodel包,对随机森林R语言实现

Sanfenpai6的博客 4930

深度学习用于医学预后-第二课第四周大作业-使用 Cox 比例风险和随机生存森林估计原发性胆汁性肝硬化患者的生存风险

使用 Cox 比例风险和随机生存森林估计原发性胆汁性肝硬化患者的生存风险欢迎来到第二门课程的最终作业!在这个作业中,你将使用生存数据以及线性和非线性技术开发风险模型。我们将使用一个包含原发性胆汁性肝硬化(pbc)患者的生存数据集。PBC 是一种由于肝内胆汁积聚(胆汁淤积)导致小胆管受损并排出肝内胆汁的疾病。我们的目标是了解不同因素对患者的生存时间的影响。

Tina姐的博客 4339

从决策树到生存森林:机器学习在基因筛选中的进化之路

本文探讨了机器学习在基因筛选中的技术演进,重点介绍了随机生存森林(RSF)的核心机制及其在基因数据分析中的应用。通过双重随机化设计和变量重要性评估,RSF能够高效处理高维基因数据,自动捕捉基因间交互作用,显著提升预测准确性。文章还提供了临床研究案例和参数调优建议,展示了RSF在生物信息学领域的巨大潜力。

weixin_29181861的博客 343

MachineLearning 11. 机器学习之随机森林生存分析(randomForestSRC)

生存分析别只用Cox回归了,试试机器学习之随机森林生存分析(randomForestSRC)

weixin_41368414的博客 1万+

用R进行gwas meta分析,原来如此简单

欢迎关注”生信修炼手册”!在生物信息数据分析中,R语言是必备技能,简洁的语法,丰富的生态,美观的可视化,种种优势使得其成为该领域中使用最广泛的编程语言之一。用R进行meta分析当然也是可...

庐州月光的博客 4946

JMP数据分析实战:从实验设计到机器学习建模的完整指南

数据分析是现代科研与工程决策的核心,其本质是从数据中提取信息、验证假设并指导行动。其基本原理通常遵循探索性数据分析、统计建模与验证的流程,旨在将原始数据转化为可操作的洞察。在众多工具中,交互式可视化与统计计算相结合的平台能极大提升分析效率与深度。以实验设计(DOE)为例,它通过D-最优、I-最优等算法系统规划实验,能以最少资源获得可靠模型,是工艺优化和质量改进的关键。而预测建模则广泛采用决策树、随机森林等机器学习算法,通过集成学习降低方差,提升模型在未知数据上的泛化能力。这些技术的价值在于,它们将统计原理封

weixin_34127717的博客 424

在R语言中,基本的算术运算是数据分析和计算的基础

在R语言中,基本的算术运算是数据分析和计算的基础。掌握这些运算不仅是进行统计分析的前提,也是处理医学数据和进行医学研究的关键步骤。本文将详细讲解R语言中的基本算术运算,并通过医学实例进行说明,帮助大家更好地理解和应用这些运算。

MD Code 317

Microapp 接入vite子应用

MicroApp接入vite版本,干货满满,手把手步骤说明,加上报错说明,赶紧上车!

outsider76557的博客 4660

r语言npsurv_用R进行gwas meta分析,原来如此简单

在生物信息数据分析中,R语言是必备技能,简洁的语法,丰富的生态,美观的可视化,种种优势使得其成为该领域中使用最广泛的编程语言之一。用R进行meta分析当然也是可以的,本文要介绍的R包rmeta, 就是其中之一,可以用于gwas meta分析,支持随机效应模型和固定效应模型,官方文档如下https://cran.r-project.org/web/packages/rmeta/rmeta.pdf作为...

weixin_30476033的博客 1617

机器人控制入门:用SAC算法让机械臂学会抓取(PyBullet仿真教程)

本文详细介绍了如何使用SAC算法在PyBullet仿真环境中训练机械臂完成抓取任务。通过强化学习中的软Actor-Critic(SAC)算法,结合熵最大化机制和双Q网络架构,有效解决了机械臂控制中的探索难题。教程包含环境搭建、算法原理、状态空间设计、奖励函数优化等核心内容,并提供了实用的训练技巧和参数调优指南。

weixin_29091105的博客 366

【Labview】对连续采集数据的一种采样方法

图1如图1,想要对这样一个连续信号进行数据点的采集,我根据网上收集到的方法,在此分享一下最终的结果。可以拓展结合文件的写入,完成对连续信号的采集和输出。 已知: 一个连续信号,如图1. 目标: 设定一定采集点个数、采集点时间间隔、和采集周期次数,得到这条连续信号的数据点,如图2. 图2 方法如下: 主要利用的是队列的方法。 在连续信号生成的时候,不断的写入队列,并且清除队列。 ...

李时珍食疗志的博客 1万+

为什么越来越多的医药研究者开始重视R语言?

摘要: R语言作为医药数据科学的主流工具,凭借其统计基因、专业可视化及强大社区支持脱颖而出。其优势包括:专为统计分析设计,拥有两万多个专业统计包;在医药研究中提供全面统计方法(如生存分析、Meta分析)和高级可视化(如ggplot2、交互式图形);支持可复现研究,与公共数据库(如NHANES、SEER)无缝对接。专栏《用R探索医药数据科学》系统覆盖从基础到高阶技术(临床试验统计、机器学习、数据库挖掘等),通过案例驱动帮助用户高效掌握R语言,解决实际科研问题,紧跟医药数据科学前沿。

MD Code 454

Unity3D安装:离线安装 Unity

Unity 下载助手 (Download Assistant) 支持离线部署。在这种部署方式中,可下载用于安装 Unity 的所有文件,然后生成脚本以便在未接入互联网的其他计算机上重复相同的安装。运行下载助手,并在一台计算机上正常安装 Unity。此计算机必须有足够的可用磁盘空间来下载所有文件。单击下拉选单并选择 __Custom__,然后选择要将文件下载到的位置。打开 PC 的文件管理器,导航到之前指定的自定义位置文件夹,然后在该文件夹内查找。整理翻译,转载请注明出处!

ygtu2018的博客 3258

为什么导师更青睐会 R 的学生?

在医药科研领域,R语言正成为课题组内的关键技能分水岭。掌握R语言的研究生能高效完成Meta分析复现(meta包)、临床数据清洗(dplyr包)和论文格式转换(RMarkdown)等核心工作,效率远超传统SPSS/Excel操作。该技能不仅提升科研产出速度,更培养独立解决复杂问题的能力,成为导师青睐的核心竞争力。

MD Code 349

QGIS之二十六pbf转osm转shp

QGIS之二十六pbf转osm转shp

yilvyangguang520的博客 7502

实战|mitmproxy+Playwright 拦截篡改Cloudflare验证流程,实现无感爬取(2026实测可用)

2026年对抗Cloudflare,别再死磕滑块、轨迹、算法。高伪装浏览器 + 中间层劫持篡改验证流程Playwright + mitmproxy = 无感过CF这篇是纯实战、无废话、可直接上线的方案。你只要把目标网站、cf_clearance填进去,就能跑通。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1284

R语言因其强大的统计功能、灵活的编程环境、活跃的社区支持和强大的R扩展包,迅速成为统计学和数据科学领域的首选工具之一

随着数据科学和人工智能的快速发展,R语言在这些领域的应用前景广阔。R语言在统计分析和数据可视化方面的优势使其在科研和教学中仍然具有重要地位。

MD Code 321

C# ScottPlot 5.0 WinForms 十字光标示例:轻松实现动态数值显示,你学会了吗?

ScottPlot是一个免费、开源的.NET交互式绘图库,能够轻松地实现大型数据集的交互式显示。它支持多种图表类型,如折线图、柱状图、饼图、散点图等。ScottPlot的性能非常出色,即使是处理千万级别的数据也游刃有余。

java专栏 2220

使用R的函数安装和查看扩展包

在R中,可以使用函数来安装和管理包。要第一次安装一个包,可以使用 install.packages() 函数(注意括号内需要用英文字符的双引号 " ")。例如,要安装 ggpubr 扩展包,只需输入以下代码:

MD Code 262

Open3D 可视化(1)——简单可视化【2026最新版】

简单可视化,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 5687

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

AI 时代,学会R之后,很多人后悔了

《用R探索医药数据科学》专栏摘要 本专栏系统讲解R语言在医药科研中的高效应用,覆盖从基础操作到SCI发表的完整路径。通过9大核心模块(数据预处理、统计分析、可视化、机器学习等)和10个公共数据库实战案例,帮助研究者解决四大痛点。

MD Code 303

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

RStudio作为R语言的集成开发环境,因其强大的功能和易用性

除了用于编写和运行代码,RStudio还提供了强大的项目管理功能,帮助用户有效地组织和管理数据分析项目。本篇文章将详细介绍如何用RStudio进行项目管理,包括项目的创建与结构、文件管理、版本控制、协作工具和自动化工作流程。

MD Code 341

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

为什么90%的R语言学习者都半途而废?

《用R探索医药数据科学》专栏针对医学研究者学习R语言的痛点,提供系统性解决方案。专栏指出90%学习者因目标模糊、案例脱离医学、报错困扰而放弃。为此设计了明确医学应用目标(如发SCI)、真实医疗数据集案例、常见报错指南、结构化学习路径和快速成果反馈机制。内容涵盖从基础操作到高级统计、机器学习、公共数据库挖掘等9大模块,包含临床试验分析、Meta分析、文献计量学等医学特色专题。通过医学场景化教学(如NHANES数据分析)、分阶段学习计划和社区支持,帮助临床医生跨越学习障碍,掌握用R进行医学研究的完整技能链。

MD Code 305

你想不想用一套系统方法,把复杂的医学数据变成清晰结论?

本文系统介绍了医学数据分析的标准流程与R语言实现方案。医学数据具有复杂多元的特点,有效分析需遵循八大步骤:明确研究问题→数据收集→预处理→描述统计→探索性分析→统计建模→结果解读→可视化呈现。每个环节都有关键技术要点,如研究问题需具体量化、缺失值处理需科学严谨、模型选择需与研究设计匹配等。 R语言为医学数据分析提供了完整工具链:dplyr/tidyr用于数据清洗、ggplot2用于可视化、各类回归模型函数用于统计分析。

MD Code 218

R 是一种功能强大且灵活的编程语言,广泛应用于数据科学和统计分析领域。结合人工智能技术,R 不仅为智能系统开发提供了稳健的框架,还为数据处理、建模和分析带来了高效的解决方案

R 是一种功能强大且灵活的编程语言,广泛应用于数据科学和统计分析领域。结合人工智能技术,R 不仅为智能系统开发提供了稳健的框架,还为数据处理、建模和分析带来了高效的解决方案

MD Code 266
上一篇: R数据分析:净重新分类(NRI)和综合判别改善(IDI)指数的理解
下一篇: R数据分析:非劣效性研究设计的统计处理方法,原理和实例
公众号Codewar原创作者
博客等级 码龄7年 2025粉丝 185原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公众号Codewar原创作者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值