You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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"时,函数只能处理单类别输出,无法解析多分类的目标变量结构。

解决步骤:

  1. 定义学习器时,将predict.type改为"prob",让模型输出每个类别的概率值:
xgb_class_learner <- makeLearner(
  "classif.xgboost",
  predict.type = "prob"  # 修改为prob
)
  1. 重新训练模型后,再次调用generatePartialDependenceData()即可正常生成数据。

可选优化:若只需针对特定特征生成数据,可通过features参数指定,减少计算开销:

generatePartialDependenceData(xgb_class, train_class, features = c("bill_length_mm", "bill_depth_mm"))

内容的提问来源于stack exchange,提问作者ChickenTartR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:02:01