R包方随机森林对随机数据的过度拟合

R包方随机森林对随机数据的过度拟合,r,random-forest,R,Random Forest,我正在进行随机森林分类 我发现“party”包中的cforest通常比“randomForest”性能更好。 然而,似乎森林很容易被过度利用 玩具的例子 这是一个随机数据集,包括二进制因子的响应和rnorm()生成的10个数值变量 #对不起,准备工作太多了。 data通过在训练集中研究分类器的性能,您无法了解分类器的真实性能。此外,由于没有真正的模式可以找到,你无法真正判断像cforest那样过度拟合是否更糟糕,或者像randomForest那样随机猜测是否更糟糕。你能说的就是这两种算法采用了不

我正在进行随机森林分类

我发现“party”包中的cforest通常比“randomForest”性能更好。
然而,似乎森林很容易被过度利用

玩具的例子 这是一个随机数据集,包括二进制因子的响应和rnorm()生成的10个数值变量

#对不起,准备工作太多了。

data通过在训练集中研究分类器的性能,您无法了解分类器的真实性能。此外,由于没有真正的模式可以找到,你无法真正判断像
cforest
那样过度拟合是否更糟糕,或者像
randomForest
那样随机猜测是否更糟糕。你能说的就是这两种算法采用了不同的策略,但是如果你在新的看不见的数据上测试它们,这两种算法都可能失败

评估分类器性能的唯一方法是在外部数据上测试它,而外部数据不是训练的一部分,在您知道有模式要查找的情况下

一些评论:

  • 如果没有包含任何有用信息,那么变量的数量应该无关紧要
  • 很高兴看到无意义数据的变量重要性低于有意义数据。这可以作为该方法的健全性检查,但可能不会更多
  • AUC(或任何其他性能度量)在训练集上都无关紧要,因为获得完美的分类结果非常简单

  • predict
    方法分别对
    cforest
    randomForest
    模型具有不同的默认值<代码>派对:::预测。随机森林

    function (object, OOB = FALSE, ...) 
        {
            RandomForest@predict(object, OOB = OOB, ...)
        }
    
    所以

    抓住我

            FALSE TRUE
      FALSE    45   13
      TRUE      7   35
    
            FALSE TRUE
      FALSE    31   24
      TRUE     21   24
    
    鉴于

    table(predict(cf, OOB=TRUE), data$response)
    
    抓住我

            FALSE TRUE
      FALSE    45   13
      TRUE      7   35
    
            FALSE TRUE
      FALSE    31   24
      TRUE     21   24
    

    这是一个令人沮丧的结果。

    为什么你要使用训练模型的数据来评估模型?请注意,对于常规的
    randomForest
    预测方法,它会返回现成的预测,虽然可能不如使用完全不同的测试集好,这也不像在实际的训练集中返回预测。我相信这不是cforest的预测方法的默认值,但我认为有一个OOB参数可以让你改变这一点。这是我应该知道的。遗憾的是,我认为cforest和randomForest一样处理OOB估计。请注意,尽管OOB错误可能会作为穷人的重复坚持测试,但最好是进行真实测试(因为真实测试中的模型将更类似于最终模型,您将继续对所有数据进行拟合)贝克林同意了。OOB不应该被用作良好实践的替代品。感谢我所忽略的东西(OOB arg)。然而,我认为OOB估计对于RF来说是很自然的,因为使用外部数据集会增加交叉验证的需要。在我的书中,拥有大型外部数据集是估计性能的最佳方法。如果你没有很多数据,你可以重复坚持或(重复)交叉验证,以更好地利用有限的数据。OOB错误是一个很好的想法,可能会给你类似于坚持或CV的结果,但我不完全确定它的行为,我更愿意坚持我所知道的工作。
    table(predict(cf, OOB=TRUE), data$response)
    
            FALSE TRUE
      FALSE    31   24
      TRUE     21   24