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 # 调整小方块的高度
         )
相关推荐
丁浩6663 小时前
Python机器学习---2.算法:逻辑回归
python·算法·机器学习
B站_计算机毕业设计之家3 小时前
计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食数据 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅
大数据·爬虫·python·机器学习·信息可视化·课程设计·农业
伏小白白白3 小时前
【论文精度-2】求解车辆路径问题的神经组合优化算法:综合展望(Yubin Xiao,2025)
人工智能·算法·机器学习
Cathy Bryant5 小时前
大模型损失函数(二):KL散度(Kullback-Leibler divergence)
笔记·神经网络·机器学习·数学建模·transformer
叶凡要飞5 小时前
RTX5060Ti安装双系统ubuntu22.04各种踩坑点(黑屏,引导区修复、装驱动、server版本安装)
人工智能·python·yolo·ubuntu·机器学习·操作系统
罗西的思考6 小时前
[Agent] ACE(Agentic Context Engineering)和Dynamic Cheatsheet学习笔记
人工智能·机器学习
逐云者1236 小时前
自动驾驶强化学习的价值对齐:奖励函数设计的艺术与科学
人工智能·机器学习·自动驾驶·自动驾驶奖励函数·奖励函数黑客防范·智能驾驶价值对齐
CLubiy11 小时前
【研究生随笔】Pytorch中的线性代数
pytorch·python·深度学习·线性代数·机器学习
孤狼灬笑12 小时前
机器学习十大经典算法解析与对比
人工智能·算法·机器学习
星际棋手12 小时前
【AI】一文说清楚神经网络、机器学习、专家系统
人工智能·神经网络·机器学习