我正在使用以下代码使用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参数?你能帮我理解吗?
答案 0 :(得分:1)
在caret
中,train()
函数具有许多参数,可帮助您为所选模型选择“最佳”调整参数。
模型调整在软件包文档here中有详细说明。
用户可以通过指定网格在训练模型时将使用的可能参数值的网格来自定义调整过程。
对于某些模型,使用tuneLength
可以代替指定tuneGird
。
例如,搜索“最佳”模型参数的一种方法是使用随机选择。在这种情况下,tuneLength
自变量用于控制此随机调整参数搜索生成的组合的数量。
要使用随机搜索,trainControl中提供了另一个选项“搜索”。该参数的可能值为“ grid”和“ random”。插入符号中包含的内置模型包含用于生成随机调整参数组合的代码。唯一组合的总数由tuneLength选项指定以进行训练。
这里有更详细的介绍: http://topepo.github.io/caret/random-hyperparameter-search.html
检查火车功能中使用的模型并查看用于该模型的调整参数非常重要。这样,您将更容易理解如何正确自定义模型拟合过程。
对于使用method = 'glmnet'
的示例,这里是使用tuneGrid
和tuneLength
(取自package tests)的比较:
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)