随机森林由R包方对随机数据进行过度拟合

我正在研究随机森林分类.

我发现“party”包中的cforest通常比“randomForest”表现更好.
然而,似乎cforest容易过度装配.

一个玩具的例子

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

# Sorry for redundant preparation.
data <- data.frame(response=rnorm(100))
data$response <- factor(data$response < 0)
data <- cbind(data, matrix(rnorm(1000), ncol=10))
colnames(data)[-1] <- paste("V",1:10,sep="")

执行cforest,使用无偏的参数集(可能推荐).

cf <- cforest(response ~ ., data=data, controls=cforest_unbiased())
table(predict(cf), data$response)
#       FALSE TRUE
# FALSE    45    7
# TRUE      6   42

对无意义数据的预测性能相当好.

另一方面,randomForest诚实地说.

rf <- randomForest(response ~., data=data)
table(predict(rf),data$response)
#       FALSE TRUE
# FALSE    25   27
# TRUE     26   22

这些差异来自哪里?
我担心我会以错误的方式使用cforest.

让我在cforest中加入一些额外的观察:

>变量的数量对结果影响不大.
>与使用一些现实解释变量的那些相比,变量重要性值(由varimp(cf)计算)相当低.
> ROC曲线的AUC接近1.

我很感激你的意见.

附加说明

有些人想知道为什么训练数据集应用于predict().
我没有准备任何测试数据集,因为预测是针对OOB样本进行的,而cforest则不然.
C.F. http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

最佳答案
通过研究分类器在训练集上的表现,您无法了解分类器的真实性能.此外,由于没有真正的模式可以找到你无法确定是否像cforest那样过度装配,或像randomForest那样随机猜测.你可以说的是,这两种算法遵循不同的策略,但是如果你在新的看不见的数据上测试它们,那么两者都可能会失败.

估计分类器性能的唯一方法是在外部数据上测试它,这不是训练的一部分,在你知道有一种模式可以找到的情况下.

一些评论:

>如果没有包含任何有用信息,变量的数量应该无关紧要.
>很高兴看到无意义数据的变量重要性低于有意义的数据.这可以作为方法的健全性检查,但可能不多.
> AUC(或任何其他表现指标)对训练集无关紧要,因为获得完美的分类结果是微不足道的.

转载注明原文:随机森林由R包方对随机数据进行过度拟合 - 代码日志