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

使用caret训练模型(以ROC调参)后如何提取交叉验证准确率?

获取Caret交叉验证模型的准确率(以ROC为调参指标时)

嗨,我来帮你搞定这个问题!你现在用Caret训练随机森林模型,把ROC作为超参数调优的核心指标,想要拿到交叉验证的准确率,其实有两种实用的方法:

方法1:提前自定义汇总函数,训练时直接输出准确率

你当前用的twoClassSummary默认只计算ROC、灵敏度(Sens)和特异性(Spec)。如果想在调参过程中同时得到准确率,可以自定义一个汇总函数,把准确率也加入评估指标里:

# 自定义同时计算ROC、Sens、Spec和准确率的汇总函数
customSummary <- function(data, lev = NULL, model = NULL) {
  # 先调用原有twoClassSummary获取ROC相关指标
  twoClassMetrics <- twoClassSummary(data, lev, model)
  # 计算当前折的准确率
  acc <- confusionMatrix(data$pred, data$obs)$overall["Accuracy"]
  # 合并所有指标返回
  c(twoClassMetrics, Accuracy = acc)
}

# 更新训练控制参数,使用自定义汇总函数
train_control <- trainControl(
  method = "cv", 
  number = 10, 
  classProbs = TRUE, 
  summaryFunction = customSummary
)

# 重新训练模型(保持你的原有参数)
grid = expand.grid(mtry = c(1,2,3))
output <- train(
  Class~., 
  data = segmentationData, 
  trControl = train_control, 
  tuneGrid = grid, 
  method = "rf", 
  metric = 'ROC', 
  verbose = FALSE
)

# 查看结果,现在results里会包含每个mtry对应的平均准确率
print(output$results)

运行后,output$results里会新增Accuracy列,直接显示每个调参组合的10折交叉验证平均准确率。

方法2:从已训练好的模型中提取结果计算准确率

如果你已经用原来的代码完成了模型训练,不想重新跑一遍,可以直接从训练好的output对象里提取交叉验证的预测数据来计算准确率:

# 提取交叉验证的真实标签和预测结果
pred_data <- output$pred[, c("obs", "pred", "Resample")]

# 计算整体的交叉验证准确率
overall_accuracy <- mean(pred_data$obs == pred_data$pred)
cat("整体交叉验证准确率:", round(overall_accuracy, 4), "\n")

# 要是想看看每个折的准确率,可以用dplyr分组计算(需要先加载dplyr)
library(dplyr)
fold_accuracies <- pred_data %>%
  group_by(Resample) %>%
  summarise(Accuracy = round(mean(obs == pred), 4))

print(fold_accuracies)

这里的output$pred包含了交叉验证每一轮所有样本的预测细节,Resample列标记了样本属于哪个折,所以不管是整体还是单折的准确率都能轻松计算出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:13:02