ParBayesianOptimization 在记录纪元结果时突然失败
ParBayesianOptimization suddenly fails while logging epoch results
我目前正在使用 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)
使用这个例子,错误发生在第9个epoch。
谢谢!
It appears that the scoring function returned NA
s in place of accuracy measures 导致下游错误。库的创建者在
中对此进行了描述
https://github.com/AnotherSamWilson/ParBayesianOptimization/issues/33.
看起来 SVM 在第 9 次迭代期间正在尝试 cost
of 0
。考虑到 SVM 正在解决的问题陈述,cost
参数可能应该是正数。
根据 AnotherSamWilson,当评分函数“returns 出乎意料的事情”时,通常会出现此错误。
我目前正在使用 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)
使用这个例子,错误发生在第9个epoch。
谢谢!
It appears that the scoring function returned NA
s in place of accuracy measures 导致下游错误。库的创建者在
https://github.com/AnotherSamWilson/ParBayesianOptimization/issues/33.
看起来 SVM 在第 9 次迭代期间正在尝试 cost
of 0
。考虑到 SVM 正在解决的问题陈述,cost
参数可能应该是正数。
根据 AnotherSamWilson,当评分函数“returns 出乎意料的事情”时,通常会出现此错误。