首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时弹性网回归

同时弹性网回归
EN

Stack Overflow用户
提问于 2020-12-22 19:47:44
回答 1查看 156关注 0票数 1

我试图在R中同时对多个变量执行弹性网。我有15个Xi和我想要找到弹性网络模型,并使用每个变量作为回归。对于一个Xi,我可以执行以下操作并使用以下方法获得最优的alphalambda

代码语言:javascript
运行
复制
A<-matrix(rnorm(36),nrow=10,ncol = 15)
colnames(A) <- c("X1", "X2", "X3", "X4", "X5", "X6","X7","X8","X9","X10","X11","X12","X13","X14","X15")
A #random data

library(glmnetUtils)
library(glmnet)
library(coefplot)
set.seed(1234)    
 
# Train model.
fit <- cva.glmnet(X1 ~ ., data=A)

# Get alpha.
get_alpha <- function(fit) {
  alpha <- fit$alpha
  error <- sapply(fit$modlist, function(mod) {min(mod$cvm)})
  alpha[which.min(error)]
}


# Get all parameters.
get_model_params <- function(fit) {
  alpha <- fit$alpha
  lambdaMin <- sapply(fit$modlist, `[[`, "lambda.min")
  error <- sapply(fit$modlist, function(mod) {min(mod$cvm)})
  best <- which.min(error)
  data.frame(alpha = alpha[best], lambdaMin = lambdaMin[best])
}

get_model_params(fit) 

我希望为所有Xi同时执行此过程,并能够创建包含a. all最优min.lambda、b.所有最优alpha以及使用最优alphamin.lambda生成的系数的列表。有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-22 20:14:40

您需要对所有的行组合循环该函数:

代码语言:javascript
运行
复制
loop <- function(data) {
  #make an output dataframe
  output <- as.data.frame(matrix(NA, nrow = ncol(data), ncol = 2))
  colnames(output) <- c('alpha', 'lambdaMin')
  #loop over each column
  for(i in 1:ncol(data)) {
    fit <-  cva.glmnet(data[,-i],data[,i])
    #set the ith row to be the output
    output[i,] = get_model_params(fit)
  }
  output
}

loop(A)

我们使用glmnet的x,y输入而不是公式接口,并使用data[,i]data[,-i]将每个列进行子集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65414966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档