打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
临床预测模型必会的知识点,学会了再给你的SCI加1分的工作量!

一文学会随机森林模型构建方法

大家好,我是阿琛。在之前的内容中,我们介绍了LASSO模型的构建方法(高分生信秘籍!手把手叫你构建LASSO Cox回归模型)。然而,在临床模型,以及机器学习中,除了常用的LASSO模型,还有许多经典的模型方法。作为其好朋友,随机森林首当其冲,更是一种大家耳熟能详的模型构建方法。

所谓随机森林,Random Forest,是一个包含多个决策树的分类器。分析时,该分析方法在划分属性时引入了随机因素。同时,其输出结果的类型是由所有决策树输出类别的众数所决定的;换句话说,就是通过所有单一的决策树模型投票来决定最终的输出结果。随机森林因其算法简单、容易实现以及计算开销小等优点而在机器学习中受到大家的喜爱。

下面,我们一起来看下如何进行随机森林分析及其后续结果的验证。

1.R包的安装与读取

rm(list = ls())   #清空环境变量 options(stringsAsFactors = F) ###1. R包的安装与读取 if(!require(randomForest))install.packages("randomForest") if(!require(tidyverse))install.packages("tidyverse") if(!require(ggpubr))install.packages("ggpubr") if(!require(ROCR))install.packages("ROCR") library(randomForest) library(tidyverse) library(ggpubr) library(ROCR)

首先,是R包的选择与安装过程。对于随机森林算法,存在其专用的R包,randomForest包,并储存在CRAN网站中。同时,安装后续绘图以及ROC分析所需要的相关R包。

2.数据读取与预处理

#读取表达数据 rt <- read.table("exp.txt", header=T, sep="  ", check.names=F, row.names = 1) exp <- t(log2(rt+1)) str(exp)

读取患者的表达数据,并通过标准化处理与转置,生成最终的表达谱,其中行名为患者编号,列名为不同的基因名称。str()函数结果显示,这是一个共包含80名肿瘤患者的基因表达矩阵。


#读取临床数据 cli <- read.table("cliData.txt",header=T,sep="  ",check.names=F, row.names = 1) head(cli)

与此同时,准备这80名患者的临床信息。在此次讲解中,我们的结局变量是患者的生存状态(fustat),即通过随机森林模型,构建预测患者预后的模型。


str(cli)

使用str()函数可以观看临床信息的数据类型。


#将数据切分为训练集和测试集 set.seed(123) index <- sample(nrow(cli), round(nrow(cli) * 0.7)) trainee <- exp[index,] traineeCli <- cli[index,] testee <- exp[-index,] testeeCli <- cli[-index,]

随后,使用随机函数,按7:3将整个数据集分成两组,分别为训练组和验证组,用于随机森林模型的构建和验证。

3.使用trainee数据集建立随机森林模型

#构建模型 rf_output=randomForest(x = trainee,                       y = traineeCli$fustat,                       importance = TRUE,                       ntree = 500,                       proximity=TRUE)

使用randomForest()函数建立随机森林模型,其中参数ntree=500表示使用500棵决策树模型用于随机森林的分类。

plot(rf_output, type = "l")   #对训练误差进行可视化

在得到随机森林分类器rf_output后,使用plot()函数获取随机森林的训练过程,随着决策树数量的增加,模型训练误差也随之变化。结果显示,随着使用树数量的增加,误差逐渐趋于稳定。


#top20的基因 varImpPlot(rf_output, type=2, n.var=20, scale=FALSE,            main="Importance of Variables for top 20 gens",cex =.7)

在随机森林模型的构建过程中,模型还会计算出数据中每个特征的重要程度,而该重要程度可以使用varImpPlot()函数将其可视化。结果显示了其中最重要的20个基因,其中KLHDC9基因的重要性最高。


#提取前20基因名 rf_importances=importance(rf_output, scale=FALSE) top20_gene=rownames(tail(rf_importances[order(rf_importances[,2]),],20)) top20_gene

随后,按重要性进行排序,并提取重要性最高的20个基因的名称。

4.模型验证及其可视化

当模型构建完毕,下一步自然是模型的验证,其中包括自身验证和外部验证两种情况。

1

使用trainee数据集进行验证

rf_train <- predict(rf_output, trainee) result_train <- cbind(traineeCli , rf_train) head(result_train)

将训练组的数据纳入构建好的随机森林模型中,最终得到了预测值。


ggboxplot(result_train,          x = "fustat", y = "rf_train",          color = "fustat", palette = "jco",          add = "jitter") +  stat_compare_means()

使用箱线图将预测结果进行可视化。结果显示,在生存和死亡两组中,患者的预测评分存在显著性差异。


2

使用testee数据集进行验证

rf_test <- predict(rf_output, testee) result_test <- cbind(testeeCli , rf_test) ggboxplot(result_test,          x = "fustat", y = "rf_test",          color = "fustat", palette = "jco",          add = "jitter") +  stat_compare_means()

同样的,将验证组的病人信息纳入模型,最终的结果显示,该随机森林模型可以在一定程度上预测患者的生存和死亡状态,但无显著性差异,进一步表明该模型还有待进一步的改正与修改。


3

训练组的ROC曲线

pred_train <- prediction(result_train[,3], result_train[,2]) ROC_train <- performance(pred_train,"tpr","fpr") auc_train <-  performance(pred_train,"auc")@y.values[[1]] auc_train #[1] 1 plot(ROC_train,     col="red",   #曲线的颜色     xlab="False positive rate", ylab="True positive rate",   #x轴和y轴的名称     lty=1,lwd=3,     main=paste("AUC=", auc_train)) abline(0, 1, lty=2, lwd=3)   #绘制对角线

除此之外,我们还可以借用之前讲解的内容,使用ROC曲线和曲线下面积(AUC值)来进一步评价预测模型的准确性。关于ROC曲线的绘制,大家可以参考之前的两篇内容,分别是“临床生信SCI加分必备!ROC可视化较差看这篇就够了!你一定要试试!”和“进阶版ROC曲线来了!教你优雅地给ROC“添油加醋”!你一定会爱上!(附代码)”。


4

验证组的ROC曲线

pred_test <- prediction(result_test[,3], result_test[,2]) ROC_test <- performance(pred_test,"tpr","fpr") auc_test <-  performance(pred_test,"auc")@y.values[[1]] auc_test #[1] 0.7222222 plot(ROC_test,     col="blue",   #曲线的颜色     xlab="False positive rate", ylab="True positive rate",   #x轴和y轴的名称     lty=1,lwd=3,     main=paste("AUC=", auc_test)) abline(0, 1, lty=2, lwd=3)   #绘制对角线

结果显示,在训练组中,模型的AUC值为1,而在验证组中模型的AUC值为0.722。


好啦,本次的分享内容就到此结束了~让随机森林有迹可循,大家也可以在今后尝试着使用随机森林模型,为自己的文章内容增添色彩~~~


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
随机森林调参实战(信用卡欺诈预测)
R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
机器学习分类算法
决策树与随机森林(8)—— 随机生存森林实战
一文读懂随机森林的解释和实现(附python代码)
理解随机森林:基于Python的实现和解释
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服