使用mlr3调优Cubist回归器超参数时持续出现“undefined columns selected”错误
问题:mlr3调优regr.cubist超参数时触发"undefined columns selected"错误
问题详情
在使用mlr3框架调优regr.cubist学习器超参数的过程中,反复遇到undefined columns selected错误。最初在自有数据集上触发该错误,随后使用Cubist官方示例的ames数据集复现代码,错误依旧发生。
复现代码
1. 数据加载与预处理
# load data library(modeldata) data(ames, package = "modeldata") ames$Sale_Price <- log10(ames$Sale_Price) predictors <- c("Lot_Area", "Alley", "Lot_Shape", "Neighborhood", "Bldg_Type", "Year_Built", "Total_Bsmt_SF", "Central_Air", "Gr_Liv_Area", "Bsmt_Full_Bath", "Bsmt_Half_Bath", "Full_Bath", "Half_Bath", "TotRms_AbvGrd", "Year_Sold", "Longitude", "Latitude") ames <- ames[, colnames(ames) %in% c("Sale_Price", predictors)]
2. 任务与数据集划分
# set up task task <- as_task_regr(ames, target = "Sale_Price") measure = msr('regr.rsq') train_set = sample(task$row_ids, 0.80 * task$nrow) test_set = setdiff(task$row_ids, train_set)
3. 调优设置与执行
# set up tuner learner_cub <- lrn("regr.cubist", rules = to_tune(1, 5), committees = to_tune(3, 6), neighbors = 0, extrapolation = 90 ) instance <- ti(task = task, learner = learner_cub, resampling = rsmp("cv", folds = 4), measures = measure , terminator = trm("run_time", secs = 600)) tuner = tnr("grid_search", resolution = 2, batch_size = 2) tuner$optimize(instance)
报错堆栈信息
Error in `[.data.frame`(x, i, j, drop) : undefined columns selected 30. stop(condition) 29. signalConditions(obj, exclude = getOption("future.relay.immediate", "immediateCondition"), resignal = resignal, ...) 28. signalConditionsASAP(obj, resignal = FALSE, pos = ii) 27. resolve.list(y, result = TRUE, stdout = stdout, signal = signal, force = TRUE) 26. resolve(y, result = TRUE, stdout = stdout, signal = signal, force = TRUE) 25. value.list(fs) 24. value(fs) 23. future_xapply(FUN = FUN, nX = nX, chunk_args = dots, MoreArgs = MoreArgs, get_chunk = function(X, chunk) lapply(X, FUN = `chunkWith[[`, chunk), expr = expr, envir = envir, future.envir = future.envir, future.globals = future.globals, future.packages = future.packages, ... 22. future.apply::future_mapply(FUN, ..., MoreArgs = MoreArgs, SIMPLIFY = FALSE, USE.NAMES = FALSE, future.globals = FALSE, future.packages = "mlr3", future.seed = TRUE, future.scheduling = scheduling, future.chunk.size = chunk_size, future.stdout = stdout) 21. future_map(n, workhorse, task = grid$task, learner = grid$learner, resampling = grid$resampling, iteration = grid$iteration, param_values = grid$param_values, mode = grid$mode, MoreArgs = list(store_models = store_models, lgr_threshold = lgr_threshold, pb = pb)) 20. benchmark(design = private$.design, store_models = self$store_models || self$allow_hotstart, allow_hotstart = self$allow_hotstart, clone = character(0)) 19. .__ObjectiveTuning__.eval_many(self = self, private = private, super = super, xss = xss, resampling = resampling) 18. private$.eval_many(xss, resampling = list(<environment>)) 17. eval(expr, p) 16. eval(expr, p) 15. eval.parent(expr, n = 1L) 14. invoke(private$.eval_many, xss, .args = self$constants$values) 13. .__Objective__eval_many(self = self, private = private, super = super, xss = xss) 12. self$objective$eval_many(xss_trafoed) 11. .__OptimInstance__eval_batch(self = self, private = private, super = super, xdt = xdt) 10. inst$eval_batch(data[inds]) 9. .__TunerGridSearch__.optimize(self = self, private = private, super = super, inst = inst) 8. private$.optimize(inst) 7. doTryCatch(return(expr), name, parentenv, handler) 6. tryCatchOne(expr, names, parentenv, handlers[[1L]]) 5. tryCatchList(expr, classes, parentenv, handlers) 4. tryCatch({ private$.optimize(inst) }, terminated_error = function(cond) { }) 3. optimize_default(inst, self, private) 2. .__Tuner__optimize(self = self, private = private, super = super, inst = inst) 1. tuner$optimize(instance)
注:该错误在自有数据集与ames示例数据集上均会重复出现。
内容的提问来源于stack exchange,提问作者Gang Zhao
相关产品推荐
相关产品推荐

