mlr3 - 在 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 参数?
解决方案
推荐阅读
- javascript - HTML 和 JavaScript:不同的值取决于单选按钮
- java - 如何通过 liquibase 从 MSSQL 表中删除“自动增量”
- amazon-ec2 - ioremap 返回异常的虚拟地址
- kubernetes - 检查初始化容器中批处理作业的状态
- php - Laravel 自引用范围
- python - 如何提高组合递归函数的性能?
- javascript - 用户离开网站时如何重置计时器
- python - 如果不确定,sklearn 的随机森林分类器可以选择“默认”分类吗?
- google-cloud-platform - 授权谷歌云平台服务账号只访问一个谷歌云存储桶
- leaflet - 传单 - 稍后按属性单击添加删除 GeoJSON 多边形?