随着树数量的增加,随机森林变得更糟
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=1
,randomForest
的分类误差是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 棵树不太可能) .
在使用 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=1
,randomForest
的分类误差是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 棵树不太可能) .