使用mlr包运行XGBoost多标签分类报错:object与newdata特征名不一致
错误原因
- 目标函数不匹配:你当前为XGBoost设置的
multi:softprob是单标签多分类任务的目标函数,而多标签分类器链的每个基学习器只需要处理单个标签的二分类任务,任务类型不匹配导致底层数据处理逻辑异常。 - 特征名校验冲突:XGBoost默认会严格比对训练和预测阶段的特征名完全一致,而mlr的分类器链包装器在迭代预测时会动态将前序标签的预测结果作为特征加入测试集,该过程生成的特征名和训练阶段的特征名存在细微差异,触发了XGBoost的校验报错。
修复方案
仅需要修改创建学习器部分的代码即可,调整目标函数并关闭XGBoost的特征名校验:
learner <- "classif.xgboost" # 修正目标函数为二分类逻辑回归,同时关闭预测时的特征名校验 lrn <- makeLearner(learner, objective = "binary:logistic", predict.args = list(use.names = FALSE)) lrn <- makeMultilabelClassifierChainsWrapper(lrn, order = NULL) lrn <- setPredictType(lrn,"prob")
修改完成后再运行后续的调参、训练代码即可正常执行,不会再抛出特征名不一致的错误。
内容的提问来源于stack exchange,提问作者agnesg2g
相关产品推荐
相关产品推荐

