我正在训练一个Elastic Net模型,并发现以下几点 lambda.1se
远高于 lambda.min
,往往是选择零特征的最大lambda测试。我猜测这是因为我的标准差真的很大。
有什么方法可以使 cv.glmnet
选择一个介于 lambda.1se
和 lambda.min
?
x = matrix(rnorm(100 * 20), 100, 20) # not the actual data
y = gl(2, 50)
fit <- cv.glmnet(
x = x, y = y,
family = "binomial",
nfolds = nrow(x), grouped = F,
standardize = T,
alpha = 0.2
)
谢谢@Nutle,我能够利用你的建议实现一个类似于的选择函数。tolerance
作用于 caret
. 它选择最小误差百分之一差内的最大lambda值。
get_lambda <- function(fit, tol = 1.05) {
error <- fit$cvm[fit$lambda == fit$lambda.min]
tolerance <- error * tol
max(fit$lambda[fit$cvm <= tolerance])
}