mlr包的classif.rpart模型能否在makeParamSet中添加cutoff参数?
关于classif.rpart学习器纳入cutoff参数搜索的解答
结论
完全可以采用和randomForest参数集构造类似的逻辑实现cutoff阈值的遍历校验,仅需要做少量适配即可。
适配说明
rpart分类模型本身没有训练阶段的内置cutoff参数,cutoff是预测阶段将输出的概率结果转换为分类标签的后处理阈值,你可以直接将它作为自定义参数加入参数搜索空间,和rpart的原生模型参数同步调优。
代码示例
你可以参考如下写法构造rpart的参数集:
makeParamSet( # rpart原生模型参数 makeDiscreteParam('cp', values = seq(0.001, 0.01, by = 0.001)), makeDiscreteParam('minsplit', values = c(1,2,3,5,7,10)), makeDiscreteParam('maxdepth', values = c(3,4,5,6,8,10)), # cutoff阈值参数,写法和你之前randomForest的配置完全一致 makeDiscreteParam("cutoff", values = list( a=c(.1,.9), b=c(.2,.8), c=c(.3,.7), d = c(.4, .6), e = c(.5,.5), f = c(.6,.4), g = c(.7,.3), h = c(.8,.2), i = c(.9,.1) )) )
注意事项
- 你需要在自定义的评价计算逻辑中加入阈值转换步骤:先获取rpart输出的概率结果,再用当前遍历到的cutoff值将概率转换为分类标签,再计算对应评价指标即可
- 如果你使用的是mlr3框架,逻辑完全一致,仅需要将参数集构造函数替换为对应框架的语法即可
内容的提问来源于stack exchange,提问作者S J
相关产品推荐
相关产品推荐

