随着树数量的增加,随机森林变得更糟

random forest gets worse as number of trees increases

在使用 randomForest(在 R 中)解决分类问题时,我 运行 遇到了困难。我的 R 代码、图像和数据在这里: http://www.psy.plymouth.ac.uk/research/Wsimpson/data.zip 在每次试验中,向观察者呈现的要么是隐藏在噪声中的微弱图像(对比度=con),要么只是噪声。他对面部存在的信心 (rating) 进行了评分。我把rating归类为yes/no判断(y)。在 100 次试验(一个文件)的每个块中,面部要么是倒置的(invert=1),要么不是。我使用对比度(预测矩阵的第一列 x)和像素(其余列)来预测 y

对我的应用程序来说至关重要的是,我在末尾有一个 "importance image",它显示了每个像素对决策 y 的贡献程度。我有 1000 次试验(y 的长度)和 4248 个像素+对比度=4249 个预测变量(x 的 ncol)。在这个问题上使用 glmnet(逻辑岭回归)效果很好

fit<-cv.glmnet(x,y,family="binomial",alpha=0)

然而randomForest根本不起作用,

fit <- randomForest(x=x, y=y, ntree=100)

随着树木数量的增加,情况会变得更糟。对于invert=1randomForest的分类误差是34.3%,对于glmnet是8.9%。

请告诉我我在 randomForest 上做错了什么,以及如何解决它。

岭回归的唯一参数 lambda 是通过 cv.glmnet 中的内部交叉验证选择的,正如 Hong Ooi 所指出的。并且您从 cv.glmnet 中得出的错误率与此相关。 randomForest 给你 OOB 错误,类似于专用测试集上的错误(这是你感兴趣的)。

randomForest 需要你手动校准它(即有一个专用的验证集来查看哪些参数最有效)并且有一些需要考虑:树的深度(通过固定示例的数量每个节点或节点数),在每次拆分时考虑的随机选择属性的数量和树的数量。您可以使用 tuneRF 来找到 mtry.

的最佳数量

在训练集上进行评估时,您添加的树越多,您的预测就越好。但是,您会看到在种植一定数量的树木后,测试集的预测能力开始减弱——这是由于过度拟合造成的。 randomForest 通过 OOB 误差估计或使用测试集(如果您提供)确定最佳树数。如果 rf.mod 是您拟合的 RF 模型,那么 plot(rf.mod) 将允许您大致查看它开始过度拟合的点。在合适的 RF 上使用 predict 函数时,它将使用最佳数量的树。

简而言之,您没有正确比较两个模型的性能(正如 Hong Ooi 所指出的那样),而且您的参数可能会关闭 and/or 您可能会过度拟合(尽管只有 100 棵树不太可能) .