mlr3聚类任务中graph转learner报错的解决方案问询
问题原因
as_learner()对Graph做学习器封装时,默认要求Graph的最终输出为对应任务类型的Prediction子类对象。你当前构建的Graph末尾是聚类学习器节点,输出的是kmeans模型实例而非标准聚类预测结果,触发类型校验失败报错。
解决方案
在Graph的末尾追加po("prediction_clust")节点,该节点会自动将聚类学习器的输出转换为符合要求的PredictionClust对象,封装后的学习器可正常用于训练、预测及benchmark操作。
修正后的可运行代码如下:
# metapackage library(mlr3verse) # task creation task = TaskClust$new( id = "cars", backend = subset( mtcars, select = c( mpg, cyl, hp ) ) ) # learner learner = lrn("clust.kmeans") # 新增prediction_clust节点处理输出,符合as_learner的类型要求 graph = po("scale") %>>% po("learner", learner) %>>% po("prediction_clust") # 转换graph为learner,不再报错 glrn = as_learner(graph) # 验证功能正常 glrn$train(task) print(glrn$predict(task)) # 可直接传入benchmark()执行基准测试
如果你后续需要封装其他任务类型的Graph,对应替换预测节点即可:分类任务用po("prediction_classif"),回归任务用po("prediction_regr")。
内容的提问来源于stack exchange,提问作者Alberson Miranda
相关产品推荐
相关产品推荐

