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

如何用caret包实现与示例for循环等效的Random Forest分类建模?

caret实现100次蒙特卡洛交叉验证方案

你原来的for循环逻辑可以直接通过caret的LGOCV(留组交叉验证,即蒙特卡洛式重复训练测试拆分)实现,和你的原有逻辑完全对齐:每次8:2拆分数据集、训练随机森林、计算测试集准确率,最终自动输出100次的准确率均值。

完整实现代码

# 加载依赖包
library(caret)
library(randomForest)

# 预处理(和原代码逻辑一致)
dataset$ID <- factor(dataset$ID)

# 配置交叉验证规则
train_ctrl <- trainControl(
  method = "LGOCV", # 指定蒙特卡洛交叉验证模式
  number = 100, # 迭代100次
  p = 0.8, # 每次训练集占比80%
  verboseIter = FALSE # 可改为TRUE查看实时迭代进度
)

# 固定随机森林mtry参数,和原randomForest默认逻辑保持一致
# 分类任务默认mtry为特征数的平方根
feature_count <- ncol(dataset) - 1 # 排除标签列ID
rf_tunegrid <- data.frame(mtry = floor(sqrt(feature_count)))

# 训练模型
rf_model <- train(
  ID ~ .,
  data = dataset,
  method = "rf", # 指定用随机森林算法
  trControl = train_ctrl,
  tuneGrid = rf_tunegrid, # 固定mtry避免caret自动调参,和原代码逻辑对齐
  importance = TRUE, # 和原代码参数一致
  metric = "Accuracy" # 评估指标用准确率
)

# 输出100次准确率的均值
cat("100次蒙特卡洛交叉验证准确率均值:", rf_model$results$Accuracy, "\n")

# 如需获取每次迭代的准确率(对应原代码的acc_vec),取以下字段
each_acc <- rf_model$resample$Accuracy

补充说明

  • 如果你不需要固定随机森林的mtry参数,删掉tuneGrid配置项即可,caret会自动尝试多个mtry取值选择最优效果的参数
  • 如果需要查看每次迭代的混淆矩阵等详细结果,可以在trainControl中添加savePredictions = "final"配置,所有迭代的预测结果会存在rf_model$pred中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:18:04