《Applied Machine Learning Using mlr3 in R》示例执行报错,请求排查原因
解决mlr3 stacking管道中ID重复的错误
这个错误不是系统配置问题,是mlr3pipelines版本更新后,默认节点ID命名规则变化导致的示例代码兼容性问题——重复调用ppl("robustify")会生成相同默认ID的管道节点,和stacking组件内部的节点ID冲突。
修复方法
给重复使用的robustify管道指定唯一ID,同时也可以给stacking中的学习器显式设置ID避免潜在冲突:
library(mlr3verse) tasks = tsks(c("breast_cancer", "sonar")) # 给第一个robustify指定唯一ID glrn_rf_tuned = as_learner(ppl("robustify", id = "robustify_rf") %>>% auto_tuner( tnr("grid_search", resolution = 5), lrn("classif.ranger", num.trees = to_tune(200, 500)), rsmp("holdout") )) glrn_rf_tuned$id = "RF" # 给第二个robustify指定不同的唯一ID,同时给stacking内的学习器设置ID glrn_stack = as_learner(ppl("robustify", id = "robustify_stack") %>>% ppl("stacking", lrns(c("classif.rpart", "classif.kknn"), ids = c("rpart_base", "kknn_base")), lrn("classif.log_reg", id = "stack_meta")))
补充说明
如果不需要在stacking前重复做robustify预处理(stacking内部的学习器可以通过各自的逻辑处理数据),也可以直接去掉stacking前的ppl("robustify"),同样能解决ID冲突问题:
glrn_stack = as_learner(ppl("stacking", lrns(c("classif.rpart", "classif.kknn")), lrn("classif.log_reg")))
内容的提问来源于stack exchange,提问作者Shahab Einabadi
相关产品推荐
相关产品推荐

