对R中的多重弹性网使用特定的alpha参数



我试图在R中同时执行多个弹性网。我有一个10x15矩阵,每列称为Xi,例如X1,X2,。。。,X15并进行弹性网以获得最优的CCD_ 1和CCD_参数。然后,我将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

我的目标是执行多个cv.glmnet(每个Xineneneea一个(,其中已经找到了相应的alpha i。例如,Xi的cv.glmnet模型使用alpha=0.001等。我如何替换下面代码中的阿尔法值,以便使用所有获得的阿尔法值?

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)
)
})

如果我们想要进行多个集合,请使用相同的列索引序列来对字母进行子集设置,因为字母集合的lengthmatrix'A'的列数相同

alphaset  <- c( 0.001, 0, 0, 0.064, 0.729, 0.729, 1.0, 
0.001, 0, 0, 0.001, 0, 0,  0.064, 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])
)
})

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

alpha <- c(0.001, 0.000, 0.000, 0.064, 0.729, 0.729, 1.000, 0.001, 0.000, 0.000, 0.001, 0.000, 0.000, 0.064, 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[, -i] , A[, i] , standardize = TRUE , type.measure = "mse" , nfolds = 10 , alpha = alpha[k]))

相关内容

  • 没有找到相关文章

最新更新