3

我正在尝试使用引导重采样作为我在 mlr3 中的交叉验证,并且一直在追踪错误的原因:

as_data_backend.data.frame(backend, primary_key = row_ids) 中的错误:“primary_key”断言失败:包含重复值,位置 2。

位置发生变化(可能是第一个重复的行)。根据错误消息,我首先认为包含行名是一个问题,所以我将它们设置为 col_type$name,并尝试在创建任务之前从数据中删除行名(运气不好!)。

在尝试创建一个代表时,我将其范围缩小以将管道运算符(如“scale”和“pca”)转换为原因:

library("mlr3verse")

task <- tsk('sonar')

pipe = po('scale') %>>%
  po(lrn('classif.rpart'))

ps <- ParamSet$new(list(
  ParamDbl$new("classif.rpart.cp", lower = 0, upper = 0.05)
))

glrn <- GraphLearner$new(pipe) 

glrn$predict_type <- "prob"

bootstrap <- rsmp("bootstrap", ratio = 1, repeats = 5)

instance <- TuningInstanceSingleCrit$new(
  task = task,
  learner = glrn,
  resampling = bootstrap,
  measure = msr("classif.auc"),
  search_space = ps,
  terminator = trm("evals", n_evals = 100)
)

tuner <- tnr("random_search")
tuner$optimize(instance)

我也尝试过网格搜索而不是随机的不同学习者,包括 rsmp 中的标志“duplicated_ids = TRUE”,但没有运气。但是,更改为 CV 交叉验证确实可以解决问题。

作为参考,在完整的管道/图中,我正在尝试不同的特征过滤器和学习器来识别候选管道。

4

0 回答 0