首页 > 解决方案 > 在 MLR3 Ranger 设置 class.weights 中,错误“'xs' 上的断言失败:class.weights:必须长度为 1”

问题描述

我想使用 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 参数?

标签: mlr3r-ranger

解决方案


推荐阅读