【问题标题】:Random forest: OOB for k-fold cross-validation?随机森林:用于 k 折交叉验证的 OOB?
【发布时间】:2021-06-17 01:11:18
【问题描述】:

我对机器学习相当陌生,我目前正在尝试使用 R 中的 caret 和 randomForest 包实现随机森林分类。我正在使用带有重复交叉验证的 trainControl 函数。也许这是一个愚蠢的问题,但据我所知,随机森林通常使用 bagging 将训练数据拆分为不同的子集,并使用 1/3 作为计算 OOB 的验证集。但是,如果您指定要使用 k 折交叉验证会发生什么?从插入符号文档中,我假设它仅使用交叉验证进行重采样,但如果它仅使用交叉验证,为什么仍然会出现 OOB 错误?或者bagging仍然用于模型的创建和性能评估的交叉验证?

TrainingControl <- trainControl(method = "repeatedcv", number = 10, repeats = 3, savePredictions = TRUE, classProbs = TRUE, search = "grid")

train(x ~ ., data = training_set,
           method = "rf",
           metric = "Accuracy",            
           trControl = TrainingControl,
           ntree = 1000,  
           importance = TRUE              
          )

【问题讨论】:

    标签: r random-forest cross-validation r-caret


    【解决方案1】:

    尝试解决您的问题:

    随机森林通常使用 bagging 将训练数据拆分为 使用 1/3 作为基于验证集的替换子集 计算OOB的依据

    是的,caret 使用的是 randomForest 包中的 randomForest(),更具体地说,它引导训练数据,生成多个装袋的决策树,以减少过度拟合,来自 wiki

    这种引导过程可以提高模型性能,因为 它降低了模型的方差,而不增加偏差。 这意味着虽然单棵树的预测值很高 对其训练集中的噪声敏感,许多树的平均值为 不会,只要树不相关。

    因此,如果您从 caret 调用 k-fold 交叉验证,它只是在不同的训练集上运行 randomForest(),因此答案是:

    但是如果您指定要使用 k-fold 会发生什么 交叉验证?从插入符号文档中,我假设它使用 仅对重采样进行交叉验证,但如果仅使用 交叉验证,为什么还是出现OOB错误?

    将执行采样和装袋,因为它是randomforest 的一部分。 caret 只是在不同的训练集上重复此操作,并在各自的测试集上估计误差。从randomForest() 生成的OOB 错误仍然存​​在。不同之处在于您拥有真正“看不见”的数据,可用于评估您的模型。

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2019-08-19
      • 2018-09-03
      • 2014-04-16
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2021-07-30
      相关资源
      最近更新 更多