Я пытаюсь выполнить несколько эластичных сетей одновременно в R. У меня есть матрица 10x15, каждый столбец называется Xi, например. X1,X2,...,X15 и выполнить эластичную сетку, чтобы получить оптимальные alpha
и lambda
параметры. Затем я сохраняю значения 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
(по одному для каждого Xi) с соответствующей альфой, которую я уже нашел. например используйте alpha=0.001
для cv.glmnet
модели Xi и т. д. Как я могу заменить альфа-значение в приведенном ниже коде, чтобы использовать все полученные альфа-значения?
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)
)
})
Если мы хотим сделать несколько наборов, используйте одну и ту же последовательность индексов столбцов для подмножества альфа-каналов, поскольку length
alphaset совпадает с количеством столбцов matrix
'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])
)
})
Другой альтернативой является использование цикла for
.
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]))