我想使用 MLR3 中的 Ranger 分类器设置 class.weights 参数。在基本 Ranger 包中,class.weights 参数采用向量。尝试在 MLR3 中设置相同的参数时,出现错误。
# create a dummy dataset and try it with ranger
library(ranger)
dt <- data.frame(x = runif(100), y = factor(sample(0:1, 100, replace = TRUE)))
rr <- ranger(y ~ x, data = dt, class.weights = c(0.5, 0.95))
这运行良好。现在尝试使用 MLR3:
library(mlr3)
library(mlr3learners)
library(mlr3misc)
task = TaskClassif$new(id = "imbalanced", backend = dt ,target="y")
learner = lrn("classif.ranger")
learner$param_set$values = insert_named(
learner$param_set$values, list("class.weights" = c(0.05, 0.95))
)
这会返回一个错误
self$assert(xs) 中的错误:“xs”上的断言失败:class.weights:必须长度为 1
检查 learner$param_set 表明 MLR3 期望 class.weight 的 ParamDBL,而不是列表,因此出现错误。
learner$param_set$class
但是,如果你给它一个参数值,Ranger 会抛出一个错误
learner$param_set$values = insert_named(
learner$param_set$values, list("class.weights" = 0.05)
)
rr = resample(task, learner, rsmp("cv"), store_models = TRUE)
返回的错误如下:
ranger::ranger(dependent.variable.name = task$target_names, data = task$data(), 中的错误:错误:类权重的数量不等于类的数量
如何在 MLR3 中设置这个 class.weights 参数?