여러 변수에 대해 R에서 Elastic Net을 동시에 수행하려고합니다. 저는 15 Xi를 가지고 있고 각 변수를 회귀 자로 사용하여 Elastic net 모델을 찾고 싶습니다. 하나 사이 I는 다음을 수행하는 최적를 얻을 수 내용 alpha
과 lambda
다음에
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를 포함하는 2 개의 데이터 프레임을 만들 수 있기를 원합니다. 모두 최적 min.lambda
, b. 모든 최적화 alpha
및 최적화를 이용하여 생성 된 계수리스트 alpha
와 min.lambda
. 누군가 나를 도울 수 있습니까?
모든 행 조합에 대해 함수를 반복해야합니다.
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]
하여 각 열을 부분 집합으로 만듭니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다