R使用mlr库调用C50算法时makeResampleDesc传measures报错如何解决
问题原因
- 参数位置错误:
makeResampleDesc接口本身没有measures参数,评估指标需要传入到调优函数tuneParams中,你把评估指标的参数放错了函数导致报错。 - 指标适配问题:iris是三分类任务,默认的
f1是二分类专用指标,直接使用会出现维度不匹配问题,需要替换为多分类场景适用的F1指标,比如宏F1(f1_macro)、微F1(f1_micro)这类。
修复后的完整代码
library(mlr) library(C50) data(iris) # 构建分类任务 zooTask <- makeClassifTask(data = iris, target = "Species") # 定义C50学习器 forest <- makeLearner("classif.C50") # 定义参数搜索空间 forestParamSpace <- makeParamSet( makeIntegerParam("minCases", lower = 1, upper = 100) ) # 随机搜索配置 randSearch <- makeTuneControlRandom(maxit = 100) # 仅定义5折交叉验证的重采样策略,不传入评估指标 cvForTuning <- makeResampleDesc("CV", iters = 5) # 调优时传入评估指标,这里使用多分类宏F1 tunedForestPars <- tuneParams( learner = forest, task = zooTask, resampling = cvForTuning, par.set = forestParamSpace, control = randSearch, measures = f1_macro # 评估指标移到这里,使用多分类适用的F1 ) tunedForestPars
补充说明
如果需要自定义多分类F1的计算规则,可以在构造任务时指定正类,或者使用setAggregation对指标的聚合方式做调整,匹配你的评估需求即可。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

