我正在尝试使用随机网格搜索通过caret::train
调整模型,但是在设置要使用的网格点数方面存在问题。
caret
文档说要设置采样的随机网格点的数量,请使用tuneLength
函数中的train
参数,但是从试验中我似乎认为火车始终对所有网格点执行操作,而与tuneLength
的值无关。 事实上,其结果与进行完全扫描搜索完全相同。
以下是一个工作示例。
使用Class
目标2因子列创建综合数据集。
require(caret)
require(xgboost)
set.seed(1234)
dt <- twoClassSim(n = 1000)
为xgboost
模型调整构建网格
grid <- expand.grid(
nrounds = seq(10, 100, by = 10),
max_depth = c(1, 5, 10),
gamma = c(0, 1, 2),
eta = .01,
subsample = 1,
colsample_bytree = 1,
min_child_weight = 1
)
这是一个90点网格。
设置交叉验证重采样并放置随机网格搜索选项
tc <- trainControl(
method = 'cv',
number = 5,
search = 'random'
)
然后使用tuneLength
选项等于2的模型进行拟合。
fit <- train(x = dt[, setdiff(names(dt),'Class')], y = dt$Class,
method = 'xgbTree',
trControl = tc,
tuneGrid = grid, tuneLength = 2)
我希望仅获得2个网格点评估结果,但是我得到了90个网格点评估,即,对所有网格点进行了调整,就像对整个网格进行扫描一样。< / p>
这不是xgboost
的问题,因为同一件事发生了,例如svmRadial
。