在使用randomForest
(在R中)进行分类问题时,我遇到了困难。我的R代码,图像和数据在这里:
http://www.psy.plymouth.ac.uk/research/Wsimpson/data.zip
向观察者呈现隐藏在噪声中的微弱图像(对比度= con
)或每次试验中的噪声。他评价面部存在的信心(rating
)。我已将rating
归类为是/否判断(y
)。在100个试验的每个块(一个文件)中,面部要么倒置(invert=1
)要么不倒置。我使用对比度(预测变量矩阵的第1列x
)和像素(其余列)来预测y
。
对我的应用程序来说,最后我有一个“重要性图像”,这显示了每个像素对决策y
的贡献程度。我有1000次试验(长度y
)和4248像素+对比度= 4249个预测因子(x
的ncols)。在此问题上使用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
我做错了什么,以及如何解决。
答案 0 :(得分:1)
岭回归的唯一参数lambda是通过cv.glmnet
中的内部交叉验证来选择的。以及从cv.glmnet
个实际中获得的错误率。 randomForest
给出OOB错误,类似于专用测试集上的错误(这是您感兴趣的内容)。
randomForest
要求您手动校准它(即有一个专用的验证集来查看哪些参数效果最好)并且有一些需要考虑:树的深度(通过修复每个节点中的示例数量)或节点数),每次拆分时考虑的随机选择的属性数和树的数量。您可以使用tuneRF
查找mtry
的最佳数量。
在火车组上进行评估时,添加的树越多,预测得到的效果就越好。然而,在一定数量的树木生长之后,你会发现测试集上的预测能力开始减少 - 这是由于过度拟合。 randomForest
通过OOB错误估计确定最佳树数,或者,如果提供,则使用测试集确定树的最佳数量。如果rf.mod
是你拟合的射频模型,那么plot(rf.mod)
将允许你看到它大致开始过度拟合的点。当在适合的RF上使用predict
函数时,它将使用最佳树数。
简而言之,你没有正确地比较两个模型的表现(正如Hong Ooi所指出的那样),你的参数可能会关闭和/或你可能过度拟合(尽管不太可能只有100棵树)。