【发布时间】: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