R 使cv.glmnet在lambda.min和lambda.1se之间选择某个值
我正在训练一个弹性网络模型,发现R 使cv.glmnet在lambda.min和lambda.1se之间选择某个值,r,r-caret,glmnet,R,R Caret,Glmnet,我正在训练一个弹性网络模型,发现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 = "bin
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
)
x=矩阵(rnorm(100*20),100,20)#不是实际数据
y=gl(2,50)
fit谢谢@Nutle,我能够使用您的建议实现一个选择功能,类似于插入符号中的公差
功能。它选择最小误差百分比差内的最大λ值
get_lambda <- function(fit, tol = 1.05) {
error <- fit$cvm[fit$lambda == fit$lambda.min]
tolerance <- error * tol
max(fit$lambda[fit$cvm <= tolerance])
}
get_lambda谢谢@Nutle,我能够利用您的建议实现一个选择函数,该函数类似于caret
中的tolerance
函数。它选择最小误差百分比差内的最大λ值
get_lambda <- function(fit, tol = 1.05) {
error <- fit$cvm[fit$lambda == fit$lambda.min]
tolerance <- error * tol
max(fit$lambda[fit$cvm <= tolerance])
}
get\u lambda有一组lambda
值,可以在fit$lambda
中使用。如果lambda.1se
太稀疏,您可能需要基于fit$nzero
选择lambda。您可以在fit$lambda
中使用一组lambda
值。如果lambda.1se
太稀疏,您可能需要基于fit$nzero
选择lambda。