【发布时间】:2021-07-28 18:35:50
【问题描述】:
我目前正在使用 R 包 ParBayesianOptimization 来调整 ML 方法的参数。在为svmLinear2 模型(包含在caret 中)搜索最佳cost 参数时,优化在成功完成15 次迭代后突然停止。
这是错误回溯:
Error in rbindlist(l, use.names, fill, idcol) :
Item 2 has 9 columns, inconsistent with item 1 which has 10 columns. To fill missing columns use fill=TRUE.
7.
rbindlist(l, use.names, fill, idcol)
6.
rbind(deparse.level, ...)
5.
rbind(scoreSummary, data.table(Epoch = rep(Epoch, nrow(NewResults)),
Iteration = 1:nrow(NewResults) + nrow(scoreSummary), inBounds = rep(TRUE,
nrow(NewResults)), NewResults))
4.
addIterations(optObj, otherHalting = otherHalting, iters.n = iters.n,
iters.k = iters.k, parallel = parallel, plotProgress = plotProgress,
errorHandling = errorHandling, saveFile = saveFile, verbose = verbose,
...)
3.
ParBayesianOptimization::bayesOpt(FUN = ...
因此,不知何故,每次迭代存储摘要信息的数据表在存在的列数上突然不同。这是ParBayesianOptimization 包的常见错误吗?有没有其他人遇到过类似的问题?除了重写 addIterations 函数来填充缺失的列之外,您找到解决方法了吗?
编辑:我没有解释为什么在多次成功迭代后会突然发生错误。但是,使用svmLinear 和svmRadial 时再次出现此问题。我能够在iris 数据集上重建一个具有相同错误的类似案例:
library(data.table)
library(caret)
library(ParBayesianOptimization)
set.seed(1234)
bayes.opt.bounds = list()
bayes.opt.bounds[["svmRadial"]] = list(C = c(0,1000),
sigma = c(0,500))
svmRadScore = function(...){
grid = data.frame(...)
mod = caret::train(Species~., data=iris, method = "svmRadial",
trControl = trainControl(method = "repeatedcv",
number = 7, repeats = 5),
tuneGrid = grid)
return(list(Score = caret::getTrainPerf(mod)[, "TrainAccuracy"], Pred = 0))
}
bayes.create.grid.par = function(bounds, n = 10){
grid = data.table()
params = names(bounds)
grid[, c(params) := lapply(bounds, FUN = function(minMax){
return(runif(n, minMax[1], minMax[2]))}
)]
return(grid)
}
prior.grid.rad = bayes.create.grid.par(bayes.opt.bounds[["svmRadial"]])
svmRadOpt = ParBayesianOptimization::bayesOpt(FUN = svmRadScore,
bounds = bayes.opt.bounds[["svmRadial"]],
initGrid = prior.grid.rad,
iters.n = 100,
acq = "ucb", kappa = 1, parallel = FALSE,plotProgress = TRUE)
谢谢!
【问题讨论】:
-
您能否提供使用的数据,作为可重复的示例?只看回溯真的很难说。另外,提供给 PBO 的电话,这也会有所帮助。
-
@eduardokapp 遗憾的是,我无法分享我的原始数据,但我能够在
iris数据集上使用svmRadial重现错误。 -
太棒了!我稍后会研究它。
标签: r optimization hyperparameters