当前位置: 首页 > news >正文

R语言生存分析(机器学习)(2)——Enet(弹性网络)

弹性网络(Elastic Net):是一种用于回归分析的统计方法,它是岭回归(Ridge Regression)和lasso回归(Lasso Regression)的结合,旨在克服它们各自的一些限制。弹性网络能够同时考虑L1正则化(lasso)和L2正则化(岭回归),从而在特定情况下对于高维数据集具有更好的性能。

#清空
rm(list=ls())
gc()#导入包
library(glmnet)
help(package="glmnet")
library(survival)
library(caret)
library(tibble)
library(magrittr)#原始数据处理
data(cancer)
data<-na.omit(lung) %>% data.frame
dim(lung)
#K折交叉验证
folds<-createMultiFolds(y=lung$status,k=3,time=1)
val<-list(train=data,test1=data[folds$Fold1.Rep1,],test2=data[folds$Fold2.Rep1,],test3=data[folds$Fold3.Rep1,])#构建模型
x1 <- as.matrix(data[,!(colnames(data) %in% c("time","status"))])
x2 <- as.matrix(Surv(data$time,data$status))
result <- data.frame()
#使用循环,使得alpha参数从0到1
for (alpha in seq(0,1,0.1)) {set.seed(123)fit = cv.glmnet(x1, x2,family = "cox",alpha=alpha,nfolds = 10)rs <- lapply(val,function(x){cbind(x[,c("time","status")],RS=as.numeric(predict(fit,type='link',newx=as.matrix(x[,!(colnames(data) %in% c("time","status"))]),s=fit$lambda.min)))})cc <- data.frame(Cindex=sapply(rs,function(x){as.numeric(summary(coxph(Surv(time,status)~RS,x))$concordance[1])}))%>%rownames_to_column('ID')cc$Model <- paste0('Enet','[α=',alpha,']')result <- rbind(result,cc)
}
#得到每个alpha下C指数的平均值
library(dplyr)
mean_result<-result %>% group_by(Model) %>% summarise(Cindex=mean(Cindex))#绘图
plot(fit)

mean_result %>%ggplot(aes(Cindex,reorder(Model,Cindex)))+geom_bar(width=0.7,stat = 'identity',fill='green')+geom_text(aes(label = round(Cindex, 2)), hjust=1,vjust =0.5,color = 'black') +  # 在条形柱顶端添加数值theme_void()+scale_x_break(c(0.05,0.53),scales = 20)mean_result <- pivot_wider(result,names_from = 'ID',values_from = 'Cindex')%>%as.data.frame()
mean_result[,-1] <- apply(mean_result[,-1],2,as.numeric)
heatdata <- as.matrix(mean_result2[, 2:5])
rownames(heatdata) <- mean_result2$Model
args(pheatmap)
pheatmap(heatdata,name = "Cindex",cluster_cols = FALSE,#不进行行聚类cluster_rows = T,  #进行行聚类show_colnames = FALSE,show_rownames = T, # 显示行名display_numbers=T,annotation_col=data.frame(Type=c("train","test1","test2","test3")),annotation_colors = list(Type=c(train="red",test1="yellow",test2="blue",test3="green")),cellwidth = 30,  # 调整小方块的宽度cellheight = 20 # 调整小方块的高度)

 

 

http://www.lryc.cn/news/124270.html

相关文章:

  • 【Docker】使用 Docker Registry 搭建自己的 Docker 镜像仓库
  • Spring 是什么框架?
  • Azure添加网络接口
  • Linux 内核第一版 (v0.01) 开源代码解读
  • tp6 v3微信退款
  • 使用 AndroidX 增强 WebView 的能力
  • Maven基础之仓库、命令、插件机制
  • 【ArcGIS】经纬度数据转化成平面坐标数据
  • 使用自己的数据利用pytorch搭建全连接神经网络进行回归预测
  • 103.216.154.X服务器出现漏洞了有什么办法?
  • 数据结构:堆的实现(C实现)
  • 数据分析两件套ClickHouse+Metabase(一)
  • urllib爬虫模块
  • TCP消息传输可靠性保证
  • Visual Studio 与QT ui文件
  • 竞赛项目 深度学习验证码识别 - 机器视觉 python opencv
  • ORA-00845: MEMORY_TARGET not supported on this system
  • wps设置一键标题字体和大小
  • TIA博途WINCC_如何在IO域中保证输入数值只能为正数?
  • 《Linux从练气到飞升》No.13 Linux进程状态
  • 安卓快速开发
  • SpringCloud微服务之间如何进行用户信息传递(涉及:Gateway、OpenFeign组件)
  • RabbitMQ之TTL+死信队列实现延迟队列
  • GrapeCity Documents for PDF (GcPdf) 6.2 Crack
  • 【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据)
  • 问AI一个严肃的问题
  • Flowable流程的挂起与激活详解
  • 探索前端动画之CSS魔法
  • Oracle数据库登录遇到密码临期问题
  • LVGL学习笔记 30 - List(列表)