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

news2024/11/14 3:24:21

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

集成学习方法

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的这篇用随机生存森林的文章就完全复现出来了

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1244336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测

回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现SCN随机配置网络多变量回归预测 1.data为数据集&#xff0c;7个输入特征&#xff0…

二十、索引库

目录 一、Mapping属性 二、创建索引库 1、在DevTools中编写代码 2、运行并查看 三、查询索引库 1、查询索引库语法&#xff1a; 四、删除索引库 1、删除索引库语法 五、修改索引库 一、Mapping属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括:…

Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来 )

Jquery ajax 同步阻塞引起的UI线程阻塞的坑&#xff08;loading图片显示不出来&#xff0c;layer.load延迟&#xff09;jax重新获取数据刷新页面功能&#xff0c;因为ajax属于耗时操作&#xff0c;想在获取数据且加载页面时显示加载遮罩层&#xff0c;结果发现了ajax的好多坑。…

代码随想录算法训练营第五十二天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 1143.最长公共子序列 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:dp [[0] * (len(text2) 1) for _ i…

Modbus故障码速查手册(故障码含义、分析原因、详细解读)

Modbus故障码速查手册 文章目录 Modbus故障码速查手册引言故障码表故障详解0x01 IllegalFunction0x02 IllegalDataAddress0x03 IllegalDataValue0x04 SlaveDeviceFailure0x05 Acknowledge0x06 SlaveDeviceBusy0x08 MemoryParityError0x0A GatewayPathUnavailable0x0B GatewayTa…

使用 PowerShell 中的命令来删除共享目录

Remove-SmbShare -Name "ShareName" 请将 "ShareName" 替换为您要删除的实际共享目录的名称。 请注意&#xff0c;执行此命令需要具有适当的权限。确保您以管理员身份运行 PowerShell 或具有足够的权限来删除共享目录。

【iOS】数据持久化(一)之Plist文件、Preference(NSUserDefaults类)

目录 什么是Plist文件&#xff1f;plist可以存储哪些数据类型plist文件数据的读取与存储 Perference&#xff08;NSUserDefaults&#xff09;使用方法registerDefaults: 方法的使用 什么是Plist文件&#xff1f; Plist文件&#xff08;属性列表&#xff09;是将某些特定的类&a…

Django(十、中间件)

文章目录 一、中间件的介绍中间件有什么用中间件功能自定义中间中间件的顺序 一、中间件的介绍 中间件顾名思义&#xff0c;是介于request与response处理之间的一道处理过程&#xff0c;相对比较轻量级&#xff0c;并且在全局上改变django的输入与输出。因为改变的是全局&…

每日一练 | 华为认证真题练习Day136

1、OSI参考模型从高层到低层分别是&#xff1f; A. 应用层、会话层、表示层、传输层、网络层、数据链路层、物理层 B. 应用层、传输层、网络层、数据链路层、物理层 C. 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 D. 应用层、表示层、会话层、网络层、传…

Android : ExpandableListView(折叠列表) +BaseExpandableListAdapter-简单应用

示例图&#xff1a; 实体类DemoData.java package com.example.myexpandablelistview.entity;public class DemoData {private String content;private int img;public DemoData(String content, int img) {this.content content;this.img img;}public String getContent()…

1999-2021年地级市城镇居民人均消费性支出数据

1999-2021年地级市城镇居民人均消费性支出数据 1、时间&#xff1a;1999-2021年 2、指标&#xff1a;城镇居民人均消费性支出 3、范围&#xff1a;290个地级市 4、来源&#xff1a;城市年鉴、地级市统计公报 5、指标解释&#xff1a; 城镇居民人均消费性支出&#xff1a;指…

SpringBoot 导入其他配置文件

默认情况下&#xff0c;springboot 初始的项目中都有一个 application.yml 或者 application.properties 文件&#xff0c;如果我们希望再定义一个独立的配置文件用来配置特定业务数据&#xff0c;而不希望把这些配置内容都堆积在 application 配置文件中&#xff0c;实现这个需…

微电子专业词汇汇总,芯片人必备!

在芯片行业&#xff0c;很多相关的技术术语都是用英文表述。在这里为大家整理了一些常用的微电子专业词汇&#xff0c;希望对大家有所帮助。&#xff08;文末可领全部文档&#xff09; Abrupt junction 突变结 Accelerated testing 加速实验 Acceptor 受主 Acceptor atom 受主…

PS 注释工具 基础使用方法讲解

好 上文PS 颜色取样器&标尺工具 基本使用讲解中 我们讲了 颜色取样器和标尺工具的基本用法 下面我们来看一下 注释工具 这个 主要是后面 比较大的作品 可能不是我们一个人取设计 团队作图 就需要用到它 选择 注释工具 后 我们随便点击图像任何一个位置 右侧就会出现一个输…

Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!

Django Rest Framework&#xff08;DRF&#xff09;是构建强大且灵活的Web API的优秀工具。它基于Django&#xff0c;提供了一套用于构建Web API的组件和工具&#xff0c;简化了API开发过程&#xff0c;同时保留了Django的优雅和强大。 一、Web应用模式 在开发Web应用时&…

边海防可视化智能视频监控与AI监管方案,助力边海防线建设

一、背景与需求 我国有3万多公里的边境线和海岸线&#xff0c;随着我国边海防基础设施建设的快速发展&#xff0c;边海安防也逐渐走向智能化。传统人工巡防的方式已经无法满足边海智能化监管的需求&#xff0c;在沿海、沿边地区进行边海智慧安防视频监控系统等边海防基础设施建…

深度学习卷积神经网络的花卉识别 计算机竞赛

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

手写promise(3)-- 实例方法 静态方法

目录 实例方法 catch finally 静态方法 reslove reject race all allSettled any 实例方法 提供给promise实例的方法 包括catch 与finally catch Promise 实例的 catch() 方法用于注册一个在 promise 被拒绝时调用的函数。它会立即返回一个等效的 Promise 对象&…

jjwt使用说明-笔记

jjwt官网链接&#xff1a;https://github.com/jwtk/jjwt POM 依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.3</version> </dependency> <dependency><grou…

会议动态 | 祝贺2023 中国商品混凝土年会在上海隆重召开!

2023年11月19日-21日&#xff0c;由&#xff08;国家&#xff09;建筑材料工业技术情报研究所、中国散装水泥推广发展协会混凝土专委会主办的"笃信固本 行稳致远"——2023 第十九届全国商品混凝土可持续发展论坛暨2023中国商品混凝土年会在上海隆重召开&#xff01; …