R mlr3分类任务报错'termlabels' must be a character vector问题
mlr3管道流程报错解决方案
错误根因
- 你的测试数据集仅包含1个输入特征
pred,该特征所有取值分布在0.05~0.11区间,方差约为0.0002,远低于你设置的方差过滤阈值0.05,因此FilterVariance步骤将唯一的输入特征完全过滤,下游随机森林分类器接收不到任何有效输入特征,触发公式构建报错。
可选解决方案
方案1:调低方差过滤阈值
将方差过滤的cutoff参数调整到低于特征实际方差的数值,即可保留唯一输入特征:
# 仅修改过滤步骤的阈值参数即可 filter1 = mlr_pipeops$get("filter", filter = mlr3filters::FilterVariance$new(),param_vals = list(filter.cutoff = 0.0001))
方案2:更换分类任务适配的过滤方法
方差过滤属于无监督特征选择方法,对分类任务的特征区分度判断没有针对性,你可以替换为分类任务专用的过滤方法,比如互信息过滤:
# 替换为互信息过滤,适配分类任务场景 filter1 = mlr_pipeops$get("filter", filter = mlr3filters::FilterMutualInformation$new(), param_vals = list(filter.cutoff = 0))
方案3:移除不必要的特征过滤步骤
如果你的业务场景中特征数量极少,特征过滤步骤本身没有必要,可直接去掉过滤节点,简化管道:
# 直接构建仅含学习器的管道即可 graph = PipeOpLearner$new(lrn("classif.randomForest", predict_type = "prob"), id = "randF")
修改后重新运行训练代码即可正常完成模型训练。
内容的提问来源于stack exchange,提问作者Pizza-Fan
相关产品推荐
相关产品推荐

