使用generatePartialDependenceData生成多分类模型部分依赖数据时报错
mlr中XGBoost多分类模型生成部分依赖数据报错的解决方案
错误详情
Error in melt.data.table(as.data.table(out), measure.vars = target, variable.name = if (td$type == : One or more values in 'measure.vars' is invalid.
问题场景
用mlr搭建XGBoost多分类模型,调用generatePartialDependenceData()生成特征部分依赖数据时触发上述错误。已核对Task对象的task.desc与WrappedModel对象的factor.levels,二者无差异;且同一函数在XGBoost回归模型上可正常运行。
复现代码
# 加载包 library(tidyverse) library(caret) library(mlr) peng <- palmerpenguins::penguins # 划分数据集 set.seed(1234) inTrain <- createDataPartition( y = peng$species, p = 0.7, list = F ) # 创建任务 train_class <- peng[inTrain,] %>% select(-sex, -year) %>% createDummyFeatures(target = "species", cols = "island") %>% makeClassifTask(data = ., target = "species") # 定义学习器 xgb_class_learner <- makeLearner( "classif.xgboost", predict.type = "response" ) # 训练模型 xgb_class <- train(xgb_class_learner, train_class) # 生成部分依赖数据(报错行) generatePartialDependenceData(xgb_class, train_class)
原因及解决方法
这是mlr处理多分类模型部分依赖数据时的兼容性问题:当模型的predict.type设为"response"时,函数只能处理单类别输出,无法解析多分类的目标变量结构。
解决步骤:
- 定义学习器时,将
predict.type改为"prob",让模型输出每个类别的概率值:
xgb_class_learner <- makeLearner( "classif.xgboost", predict.type = "prob" # 修改为prob )
- 重新训练模型后,再次调用
generatePartialDependenceData()即可正常生成数据。
可选优化:若只需针对特定特征生成数据,可通过features参数指定,减少计算开销:
generatePartialDependenceData(xgb_class, train_class, features = c("bill_length_mm", "bill_depth_mm"))
内容的提问来源于stack exchange,提问作者ChickenTartR
相关产品推荐
相关产品推荐

