XGBoost二分类预测分数解读与多模型ROC曲线绘制问询
问题解答
1. 预测分数的类别解读
- 在XGBoost二分类任务中,
predict(model, as.matrix(test_set[,-1]), type = 'prob')返回的是样本属于正类的概率值。 - 正类的定义由训练时的设置决定:
- 若训练标签为0/1的二分类形式,默认正类为
1; - 可通过模型参数确认:原生XGBoost模型查看
model$params$objective(如binary:logistic对应正类为1);若用caret等框架包装,查看model$levels,第二个元素通常为正类。
- 若训练标签为0/1的二分类形式,默认正类为
- 以分数
0.460950464010239为例:若正类是1,该分数代表样本属于class 1的概率为46%,属于class 0的概率为54%,因此样本更可能属于class 0。
2. 绘制多模型ROC曲线(含AUC标注)
使用pROC包实现,步骤如下:
前提准备
- 确保测试数据框包含真实标签列(假设列名为
true_labels,取值为0/1); - 安装并加载依赖包:
install.packages("pROC") library(pROC)
完整代码示例
# 假设数据框名为pred_df,真实标签列为true_labels # 提取所有模型的预测列 model_cols <- c("model_meta", "model_x2", "model3", "model4") # 存储各模型的ROC对象 roc_list <- list() # 循环计算每个模型的ROC与AUC for (col in model_cols) { roc_obj <- roc(pred_df$true_labels, pred_df[[col]]) roc_list[[col]] <- roc_obj } # 绘制基础ROC曲线 plot(roc_list[[1]], col = "red", main = "多模型ROC曲线", xlab = "假阳性率(FPR)", ylab = "真阳性率(TPR)", lwd = 2) # 叠加其他模型的曲线 colors <- c("blue", "green", "purple") for (i in 2:length(roc_list)) { plot(roc_list[[i]], col = colors[i-1], add = TRUE, lwd = 2) } # 生成带AUC的图例文本 legend_text <- sapply(names(roc_list), function(x) { paste0(x, " (AUC = ", round(roc_list[[x]]$auc, 2), ")") }) # 添加图例 legend("bottomright", legend = legend_text, col = c("red", "blue", "green", "purple"), lwd = 2)
代码说明
roc()函数完成ROC曲线数据与AUC值的计算;plot(..., add=TRUE)实现多曲线在同一画布的叠加;- 通过
round(roc_obj$auc, 2)格式化AUC值,让图例更简洁直观。
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

