You need to enable JavaScript to run this app. 如何使用MLeval基于测试数据集绘制ROC曲线及解决名称属性报错
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MLeval基于测试数据集绘制ROC曲线及解决名称属性报错

报错根源

names属性长度不匹配的报错,完全是传入evalm的输入格式不符合MLeval的硬性校验规则触发:
MLeval要求输入数据框必须满足两个结构要求:

  • 最后一列是固定命名为obs的真实标签列,不允许使用其他任意列名
  • 其余列每列对应一个模型的预测概率,列名即为可视化时展示的模型名称

当前代码中data.frame(pred, test$class)生成的数据框,第二列是系统自动命名的test.class,并非要求的obs,函数内部尝试重命名列时,就会出现命名长度与实际列数不匹配的错误。

修正实现代码
# 加载数据
train <- readRDS(paste0("Data/train.rds"))
test <- readRDS(paste0("Data/test.rds"))

# 构建类别因子,训练集和测试集标签格式统一对齐
train$class <- factor(ifelse(train$class == 1, 'yes', 'no'), levels = c('no', 'yes'))
test$class <- factor(ifelse(test$class == 1, 'yes', 'no'), levels = c('no', 'yes'))

# 设置训练控制参数
ctrl <- trainControl(method = "cv",
                     number = 5, 
                     returnResamp = 'none',
                     summaryFunction = twoClassSummary(),
                     classProbs = T,
                     savePredictions = T,
                     verboseIter = F)

gbmGrid <-  expand.grid(interaction.depth = 10,
                        n.trees = 18000,                                          
                        shrinkage = 0.01,                                         
                        n.minobsinnode = 4) 

# 训练梯度提升机模型
set.seed(5627)
gbm <- train(class ~ .,
             data = train,
             method = "gbm",
             metric = "ROC",
             tuneGrid = gbmGrid,
             verbose = FALSE,
             trControl = ctrl) 

# 预测测试集正类概率
pred <- predict(gbm, newdata = test, type = "prob")[,"yes"]

# 构造符合MLeval规范的输入数据框
eval_input <- data.frame(
  GBM_test = pred,
  obs = test$class
)

# 生成测试集ROC曲线
roc <- evalm(eval_input)
关键注意事项
  • 禁止将未手动指定列名的向量直接拼入输入数据框,系统自动生成的test.xxx格式列名一定会触发MLeval的内部校验错误
  • obs列必须为双水平因子类型,不能是原始数值标签、无水平对齐的字符串标签,否则函数会无法识别正负类,导致AUC计算失败
  • 若需在同一张图中叠加多个模型的测试集ROC曲线,仅需在数据框中依次新增对应模型的预测概率列,保持最后一列为obs即可,无需调整其他参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 13:36:11