随机森林过拟合 R

机器算法验证 r 随机森林 过拟合
2022-04-12 08:16:05

我在模型中使用了两步 cforest。训练集的准确率为 87%,而测试集的准确率为 57%。这表明模型严重过拟合。如何解决这个问题呢?我应该减少树的节点还是将数据分成 k 折?如何确定应该保留多少个节点?

这是第 1 步的代码。

   fit1 <- cforest((b == 'three')~ posemo + social + family
            +friend + home + humans + money + they
            + social+article+certain+insight+affect+ negemo+ future+swear+sad
            +negate+ppron+sexual+death + filler+leisure, data = trainset1, 
            controls=cforest_unbiased(ntree=3000, mtry= 3))
3个回答

在随机森林中,过度拟合通常是由过度生长的树木引起的

如其他答案之一所述是完全错误的。根据定义,RF 算法需要完全生长的未修剪树。之所以如此,是因为 RF 只能减少方差,而不是偏差(其中)。由于整个森林的偏差大致等于单棵树的偏差,因此使用的基本模型必须是一棵非常深的树,以保证低偏差。随后通过生长许多深层、不相关的树并对它们的预测进行平均来减少方差。error=bias+variance

我不一定会说 87% 的训练准确率和 57% 的测试准确率表明严重的过拟合。您的训练集上的表现将始终高于您的测试集。现在,如果您希望 CV 用户能够诊断出潜在过拟合问题的根源,您需要提供更多信息。

  • 你是如何调整随机森林模型的参数的?你使用了交叉验证还是独立的测试集?你的训练/测试集的大小是多少?您是否正确使用随机化来构成这些集合?
  • 你的目标是分类的还是连续的?如果前者是,你有什么阶级不平衡的问题吗?
  • 你是如何测量误差的?如果适用,您的分类问题是二分类的还是多分类的?

在实践中,随机森林很少过拟合。但是倾向于过度拟合的原因是森林中有太多的树。在某些时候,没有必要继续添加树(它不再减少方差,但可以稍微增加它)。这就是为什么应该像任何其他超参数一样优化树的最佳数量(或者至少,不应该粗心地将数字设置得太高。它应该是实现最低错误所需的最小树数。你可以看看OOB 误差 VS 树数曲线中的一个平台)。

除了过度拟合之外,您观察到的训练和测试之间的准确性差异可以通过集合之间的差异来解释。两个集合中是否存在相同的概念?如果不是这样,即使是最好的分类器也无法很好地执行。如果您甚至没有了解某事的某些方面,您就无法推断出某事。

我还建议您阅读《统计学习的形成要素》中有关 RF 的部分。特别是,请参阅第 15.3.4 节(第 596 页)关于 RF 和过拟合。

随机森林可能过度拟合的一个原因可能是因为您有很多冗余特征或者您的特征高度相关。

如果你的很多特征是多余的,那么当你在树的节点中执行分割时,算法通常可能只会选择非常差的特征,这使得你的模型只是在你的数据中追逐一些噪音。

查看森林的可变重要性以尝试确定您是否具有可能不相关的特征是明智的。

您还可以尝试对特征进行一些降维/聚合。

在随机森林中,过度拟合通常是由过度生长的树木引起的。

修剪树木也会有所帮助。

因此,您可以在参数中优化的一些参数cForestntreemtry

mtry是算法为构建每棵树而绘制的变量数。 ntree是森林中树木的总数。

话虽如此,交叉验证总是有帮助的。考虑进行 k 折交叉验证。这个关于 Kaggle 的论坛将有助于理解在随机森林中进行交叉验证。