在随机森林回归中设置种子以产生最高精度是否“公平”?

机器算法验证 交叉验证 随机森林
2022-02-10 16:57:52

我有一个使用 skl 构建的随机森林回归,我注意到根据将随机种子设置为不同的值,我会产生不同的结果。

如果我使用 LOOCV 来确定哪种种子效果最好,这是一种有效的方法吗?

3个回答

答案是否定的。

您的模型为您使用的每个种子提供不同的结果。这是模型不确定性的结果。通过选择最大化验证集性能的特定种子意味着您选择了最适合该集的“排列”。但是,这并不能保证具有此种子的模型在单独的测试集上会表现得更好这仅仅意味着您在验证集上过度拟合了模型

这种影响是你看到许多在公共测试集上排名靠前的人(例如 kaggle)的原因,而在隐藏测试集上却远远落后。这种方法无论如何都不是正确的方法。


编辑(与答案没有直接关系,但我觉得很有趣)

您可以在此处找到一项有趣的研究,显示随机种子对计算机视觉的影响作者首先证明,当使用比其他更好的种子时,您可以获得更好的结果,并批评许多假定的 SOTA 解决方案可能只是比其他解决方案更好的种子选择。这是在与作弊相同的上下文中描述的,公平地说,有点 ...

对于某些算法,错误的初始化可能很重要,并且可能是由于特定的随机种子。在这种情况下,尝试找到一个良好的初始化(=良好的随机种子)然后导致良好的性能(或找到一种修改训练以减少此类影响的方法)可能是有意义的。然而,人们真的应该确信这正在发生,因为我们不想做的——正如其他人已经指出的那样——是通过找到一个恰好由于某些疾病而产生良好结果的种子来过度拟合我们的验证集。 - 了解训练过程的噪音和验证集(或交叉验证中的集)的特征的组合。

在随机森林算法的特殊情况下,我认为我们根本不需要优化种子。相反,我们可以做的是增加树的数量,直到结果不再以任何有意义的方式依赖于种子。更多的树不会导致对 RF 的过度拟合(与 XGBoost 不同,其相应的补救措施是多次拟合模型并对预测进行平均),更多的树只是从验证集性能中去除随机噪声(并在一定程度上提高性能)。对于 RF,我认为这种随机性只是“坏”,因为它用噪声掩盖了最佳超参数,并且可能是由于训练过程和验证集特征之间的一些偶然因素组合,但我们没有理由认为这些波动会可靠地出现在新数据(例如看不见的测试集)上。因此,尽可能多地消除它是有意义的(就我们用于训练和推理的计算预算而言,这是可能的程度)。

简短的回答是肯定的,它既公平又正确,与@Djib2011 在单独的答案中写的相反。

如果您遵循 ML 中的常规程序,那么在这种情况下设置种子不会导致过度拟合,与此处的其他答案相反,这是错误的建议。您可以称其为“种子优化”或“种子黑客”,但绝对不能过度拟合。

此外,YES,使用任何类型的交叉验证(包括LOOCV)都是可接受的、有效的和正确的。而且您应该实际使用模型验证(一种 CV 或其他类型)。

本质上,在这个特定的上下文中将种子视为超参数是完全正确的。

它实际上被工业界和学术界(以及竞赛)所接受。有已发表的同行评议论文描述了这一过程这里有两个很好的例子:

此外,在无监督学习中也很常见,例如使用 k-means++ 算法为 k-means 算法设置种子所以,我不明白@Djib2011 或其他人的困惑。

@jld 在一个单独的答案中更深入地解释了为什么这没有错,以及如果您选择执行 CV 作为模型验证,如何确保您遵循正确的程序。正如它所解释的,设置集合可能有用也可能没有用,但这是另一回事。

警告:

ML 中至少有六个随机源(可以使用种子设置)。你刚刚描述了其中之一。在其他一些情况下,播种是错误的。同样,这是另一个故事。其中六个来源如下所述: