我正在使用以下代码使用 R 实现弹性网络
model <- train(
Sales ~., data = train_data, method = "glmnet",
trControl = trainControl("cv", number = 10),
tuneLength = 10
)
我对曲调长度参数感到困惑。在克兰,我看到了这一点
要更改调整参数的候选值,可以使用以下任一方法: 可以使用tuneLength 或tuneGrid 参数。火车功能可以 生成一组候选参数值和tuneLength 参数控制评估的数量。在 PLS 的情况下, 函数使用从1到tuneLength的整数序列。如果我们想要 要计算 1 到 15 之间的所有整数,请设置tuneLength = 15 就能实现这个目标
但是火车函数正在从我的数据中获取因变量和自变量,那么它如何使用tuneLength参数呢?你能帮我理解一下吗?
在
caret
中,train()
函数具有许多参数,可帮助您为所选模型选择“最佳”调整参数。
模型调整在包文档中详细解释这里。
用户可以通过指定模型在训练模型时将使用的可能参数值网格来自定义调整过程。
对于某些模型,使用
tuneLength
是指定 tuneGrid
的替代方法。
例如,搜索“最佳”模型参数的一种方法是使用随机选择。在这种情况下,
tuneLength
参数用于控制随机调整参数搜索生成的组合数量。
要使用随机搜索,trainControl 中提供了另一个选项,称为搜索。该参数的可能值为“网格”和“随机”。插入符号中包含的内置模型包含生成随机调整参数组合的代码。唯一组合的总数由要训练的tuneLength选项指定。
这里有更详细的介绍: http://topepo.github.io/caret/random-hyperparameter-search.html
检查训练函数中使用的模型并查看该模型使用了哪些调整参数非常重要。这样就会更容易理解如何正确定制模型拟合过程。
对于使用
method = 'glmnet'
的示例,这里是使用 tuneGrid
和 tuneLength
的比较(取自 包测试):
cctrl1 <- trainControl(method = "cv", number = 3, returnResamp = "all",
classProbs = TRUE, summaryFunction = twoClassSummary)
test_class_cv_model <- train(trainX, trainY,
method = "glmnet",
trControl = cctrl1,
metric = "ROC",
preProc = c("center", "scale"),
tuneGrid = expand.grid(.alpha = seq(.05, 1, length = 15),
.lambda = c((1:5)/10)))
cctrlR <- trainControl(method = "cv", number = 3, returnResamp = "all", search = "random")
test_class_rand <- train(trainX, trainY,
method = "glmnet",
trControl = cctrlR,
tuneLength = 4)