R - 使用插入符号时如何让 glmnet 选择 lambda 范围?

机器算法验证 r 插入符号 网络
2022-01-31 18:49:00

要使用 拟合套索模型glmnet,您只需执行以下操作,即可glmnet自动计算lambda适合数据集的合理值范围:

glmnet(x, y, alpha = 1)

我知道我也可以使用glmnet. 但是,我想使用这个caret包,这样我就可以以统一的方式训练和比较多个模型。问题是我不知道如何alpha在调用glmnetfrom时仅修复参数,caret因为caret想要同时调整alphalambda

train(y ~ ., data = train, method = 'glmnet', trControl = ctrl, tuneGrid = data.frame(alpha = 1))
Error in train.default(x, y, weights = w, ...) : 
  The tuning parameter grid should have columns alpha, lambda

一般有什么方法可以只指定一个参数并允许底层算法根据算法的默认方法处理未指定的参数?

编辑:

我想让glmnet选择的原因lambda是适当的范围lambda可以变化很大,并且glmnet可以很好地选择一个好的范围:

library(ElemStatLearn)
library(glmnet)

dat <- prostate

train   <- subset(dat,  train, select = -train)
train.x <- as.matrix(subset(train, select = -lpsa))
train.y <- train$lpsa

print(glmnet(train.x, train.y, alpha = 0)$lambda)
print(glmnet(train.x, train.y, alpha = 1)$lambda)

您可以看到 的范围lambda非常不同。要在 中使用自定义模型train,我考虑过glmnet先运行,然后将计算结果分配lambda给网格:

glmnetGrid <- function(x, y, len = NULL) {
  library(glmnet)
  lam <- glmnet(x, y, alpha)$lambda
  expand.grid(lambda = lam)
}

但后来我需要传递alpha给网格函数,我认为框架不允许这样做。此外,glmnet为了获得lambda. 有没有办法简单地让glmnet运行并将其分配lambda给网格,以便在后续分析caret中使用这些值?lambda

0个回答
没有发现任何回复~