如何用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
相关产品推荐
相关产品推荐

