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

R语言如何合并拆分数据集训练的两个RandomForest模型实现联合预测

问题描述

现有220万行记录的数据集,训练随机森林(RandomForest)模型时,训练集行数超过100万就会触发报错,因此将数据集拆分为两个子集分别训练模型,需要通过combine()方法合并两个子模型,融合二者的学习结果完成预测。
初始编写的实现代码如下:

rtask <- makeClassifTask(data=Originaldaten,target="geklaut")
set.seed(1)

ho = makeResampleInstance("CV",task=rtask, iters = 20)
rtask.train = subsetTask(rtask, subset = 1:1000000)
rtask.train2 = subsetTask(rtask, subset = 1000001:2000000)
rtask.test = subsetTask(rtask, subset = 2000000:2227502)

rlearn_lm <- makeWeightedClassesWrapper(makeLearner("classif.randomForest"), wcw.weight = 0.1209123724417812)

param_lm <- makeParamSet(
  makeIntegerParam("ntree", 500, 500),
  makeLogicalParam("norm.votes", FALSE, FALSE),
  makeLogicalParam("importance", TRUE, TRUE),
  makeIntegerParam("maxnodes" ,4,4)
)

tune_lm <- tuneParams(rlearn_lm,
                  rtask.train,
                  cv5,  # 5折交叉验证
                  mmce, # 误差计算指标
                  param_lm, 
                  makeTuneControlGrid(resolution=5)) # 参数搜索范围

rlearn_lm <- setHyperPars(rlearn_lm,par.vals = tune_lm$x)

model_lm <- train(rlearn_lm,rtask.train)
model_lm2 <- train(rlearn_lm,rtask.train2)
modelGesamt <- combine(model_lm$,model_lm2)

实现要点
  • 初始代码的combine()调用写法有误:mlr框架训练返回的是封装后的模型对象,randomForest::combine()仅支持传入原生randomForest类的模型对象,需要先用getLearnerModel()提取子模型内部的原生随机森林对象,再执行合并:
    # 提取mlr模型内嵌的原生随机森林对象
    rf_model1 <- getLearnerModel(model_lm)
    rf_model2 <- getLearnerModel(model_lm2)
    # 合并两个子模型的所有决策树
    combined_model <- randomForest::combine(rf_model1, rf_model2)
    
  • 手动按连续行号切分数据集容易造成训练集、测试集的样本分布偏移,甚至引入数据泄露问题,建议使用mlr内置的重采样方法完成数据集拆分。

补充参考代码

经调试可用的重采样拆分实现如下,供同类场景参考:

ho = makeResampleInstance("CV",task=rtask, iters = 20)  
rtask.train = subsetTask(rtask,ho$train.inds[[1]])
rtask.test = subsetTask(rtask,ho$test.inds[[1]] )

合并后的模型会整合两个子模型的全部决策树,预测时通过汇总所有树的投票结果输出最终预测值,效果等价于在全量数据集上训练得到的同参数随机森林。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:54:25