r - 同时弹性净回归
问题描述
我正在尝试在 R 中同时为多个变量执行 Elastic Net。我有 15 个 Xi,我想找到使用每个变量作为回归量的弹性网络模型。对于一个 Xi 我可以执行以下操作并获得最佳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 执行此过程,并能够创建 2 个包含 a. 都是最优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)
我们使用 x,y 输入glmnet
代替公式接口,并使用data[,i]
anddata[,-i]
将每一列子集化。
推荐阅读
- angular - Angular Http拦截器无法使用localStorage获取用户令牌以添加到标头
- python - 在 macOS Sierra 上使用 git-review 的 RequestsDependencyWarning
- .htaccess - htaccess
影响子目录的指令 - html - 使用 Ruby,从 JSON 响应中的 HTML 字符串中获取值
- excel - 取决于相应单元格中是否存在数据的可变图表轴
- r - 提取R中某个逻辑值对应的所有行?
- c# - C# WinScard.SCardListReaders 应该只列出连接的阅读器(但它列出了所有过去安装的现在未连接的阅读器名称)
- python - .after 方法 Python 似乎可以立即调用
- r - 在不使用循环的情况下将多个子项添加到 xml 对象
- python - 如何使用带有 allennlp==0.3.0 的 JupyterLab?