在 R 中为多个弹性网络使用特定的 alpha 参数

问题描述

我正在尝试在 R 中同时执行多个弹性网络。我有一个 10x15 的矩阵,每列称为 Xi,例如X1,X2,...,X15 并执行弹性网络以获得最优的 alphalambda 参数。然后我将 alpha 值保存在我的环境中名为 alphas 的数据框中,如下所示

alpha
1  0.001
2  0.000
3  0.000
4  0.064
5  0.729
6  0.729
7  1.000
8  0.001
9  0.000
10 0.000
11  0.001
12  0.000
13  0.000
14  0.064
15  0.729

我的目标是使用我已经找到的相应 alpha 执行多个 cv.glmnet(每个 Xi 一个)。例如将 alpha=0.001 用于 Xi 等的 cv.glmnet 模型。如何替换以下代码中的 alpha 值以使用所有获得的 alpha 值?

data<-matrix(rnorm(36),nrow=10,ncol = 15)
colnames(data) <- c("X1","X2","X3","X4","X5","X6","X7","X8","X9","X10","X11","X12","X13","X14","X15")
data #random data
library(glmnet)
library(coefplot)

A <- as.matrix(data)
set.seed(1234)
results <- lapply(seq_len(ncol(A)),function(i) {
  list(
    cvfit = cv.glmnet(A[,-i],A[,i],standardize = TRUE,type.measure = "mse",nfolds = 10,alpha = 1)
  )
})

解决方法

如果我们想做多个集合,使用相同的列索引序列来对alpha进行子集,因为alphaset的lengthmatrix的列数相同 'A'

alphaset  <- c( 0.001,0.064,0.729,1.0,0.001,0.729)
lst_out <- lapply(seq_len(ncol(A)),function(i) {
  list(
     cvfit = cv.glmnet(A[,-i],A[,i],standardize = TRUE,type.measure = "mse",nfolds = 10,alpha = alphaset[i])
    )
        })
,

另一种选择是使用 for 循环。

alpha <- c(0.001,0.000,1.000,0.729)

cvfit <- vector("list",length(alpha))
names(cvfit) <- paste0("cvfit for alpha=",alpha)

for(k in 1:length(alpha))
  for(i in 1:ncol(A))
    cvfit[[k]][[i]] <- list(cv.glmnet(A[,alpha = alpha[k]))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...