【问题标题】:why bootstrap result in overfitting for randomForest prediction?为什么 bootstrap 会导致 randomForest 预测的过度拟合?
【发布时间】:2015-07-31 03:29:52
【问题描述】:

我正在使用 R 包 randomForest 处理不平衡的数据集。有人建议,在对稀有类进行过采样和对典型类进行欠采样的同时引导您的数据。但是我发现随着重采样大小的增加,OOB误差减小到零,这表明严重的过拟合,不知道为什么?
树模型(rpart)也会发生这种情况。

这里是一个例子,虽然数据是平衡的,只是为了测试重采样大小的效果:

require(randomForest)
set.seed(0)
iris500=iris[sample(1:nrow(iris),size=500,replace=TRUE),]
iris2000=iris[sample(1:nrow(iris),size=2000,replace=TRUE),]
formula="Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width"
(rf0=randomForest(as.formula(formula),data=iris)) #OOB estimate of  error rate: 4%
(rf1=randomForest(as.formula(formula),data=iris500)) #OOB estimate of  error rate: 0.4%
(rf2=randomForest(as.formula(formula),data=iris2000)) #OOB estimate of  error rate: 0%

table(iris[["Species"]]) 
#setosa versicolor virginica 
#  50       50        50

【问题讨论】:

  • 你能展示你用来重采样(增加)稀有类的代码吗?我想说的是,一般来说你不应该过多地改变你的数据集,假设它反映了现实。
  • iris 中有多少个实例?由于重采样,训练和测试集中是否可能存在相同的实例?
  • 每个类有 50 个实例,这可能是一个原因,但它确实导致了 100% 的准确率。如果是这样,我应该如何通过 Bootstrap 重采样平衡我的数据?
  • 您基本上将拥有每个样品,包括内袋和外袋。而是在训练期间使用 sampsize= 和 strata= 参数来形成正确的引导程序。避免过度采样。
  • 这个例子展示了如何正确下采样:stats.stackexchange.com/questions/157714/…

标签: r bootstrap random-forest


【解决方案1】:

我假设,您在第一步通过替换抽样来引入偏差。许多观察结果可能不会包含在您的训练集中。

每个类有 50 个实例(3 个类 $\rightarrow$ 150 个样本)。让我们将样本数定义为 $n = 150$。让我们将引导获得的“新样本”的数量定义为$k$。

一个样本被包含到您的新集合中的概率将等于(根据与替换的组合): $$ \frac{{{n+k-2} \选择 {k-1}}}{{{n+k-1} \选择 {k}}} = \frac{k}{n+k-1} $$

对于 $k = 500$,此概率等于 $\frac{500}{649} = 0.77$。

对于 $k = 2000$,此概率等于 $\frac{2000}{2149} = 0.93$。

看起来很酷。但是,我认为我们希望将所有样本都包含在新创建的集合中。

但是这种情况的可能性非常低:

对于 $k = 500$,此概率为 $0.77^n = 0.77^{150} = 9.4e-18$。

对于 $k = 2000$,这个概率将为 $0.93^n = 0.93^{150} = 1.87e-5$。

我想你可以增加 $k$ 的值,直到新创建的集合中包含所有样本的概率接近 1。但是,一些点的权重会更大,因为它们会被采样更多次.因此,它们将决定分类器的性能。

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 2020-02-17
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多