如何从交叉验证中获得最佳数据拆分

数据挖掘 Python 随机森林 交叉验证
2022-03-08 13:55:47

我训练了一个随机森林回归器,它的 rmse 得分为 70.72。但是当我在 cv 为 10 的 cross_val_score 中尝试相同的模型时,它给了我一个看起来像这样的数组。

array([63.96728974, 60.43972474, 63.98455253, 61.69770344, 94.24656396,
       59.93552448, 60.77507132, 54.20247545, 59.20367786, 61.59208032])
# min
54.20247545

这表明,如果数据以某种方式拆分,该模型具有更好的模型潜力。

所以,我的问题是,有什么方法可以找到最佳分割,以实现我们在交叉验证中看到的最佳损失。

有时我使用 for 循环来找出最佳分割的 random_state 的最佳值,但这不是内存效率,有时也不起作用。因此,如果有另一种选择,那就太好了!

2个回答

我完全同意@Erwan 的观点,即这是一个非常糟糕的主意。

基于有限数据样本的所有性能估计都会因从基础人口中抽样而产生一定程度的变化,但这只是“噪音”。

在测试训练分割方面,如果一个测试训练分割给你的结果比另一个更好,这可能意味着偶然地大多数“容易”分类的例子碰巧最终出现在测试集中,而大部分难以分类的例子最终进入训练集。因此,它将对模型的真实性能给出一个乐观的估计。如果您收集一个新的测试集(或观察操作使用中的分类器),随着时间的推移,容易和难以分类的模式的比例将与“最佳”分区中的比例不同,并给出较低(偏差较小)的准确度。

这是一个简单的思想实验,以证明这将产生一个带有乐观偏差的性能估计。考虑一个完全随机的学习任务,我们试图预测掷硬币的结果(目标变量),我们有(比如说)十个随机输入属性,这些属性也是通过掷硬币产生的。现在在这种情况下,您在训练分区上构建的分类器可能无法预测测试分区中的目标,因为它们是完全随机的,并且与任何输入都没有因果关系。假设我们的数据集有十个模式,其中目标是头部,十个目标是尾部。然后我们随机划分数据,比如 100 次,每次训练和测试一个分类器,每个分类器包含一半的数据。现在测试分区的错误率平均为 0.5(因为它预测随机抛硬币),但每个分区的错误率不会是 0.5 - 在某些情况下,随机概率会高于 0.5在某些情况下会更低。这是一个随机过程,因此在某些情况下,在训练分区上学习的随机分类器的输出与测试标签的相关性要好于在其他分区中的相关性。然而这种变化只是随机噪声,所以如果你选择准确率最高的分区,这表明分类器在预测随机硬币翻转方面有一定的实际技能,但我们知道不可能是这样。明显的技能是虚假的,是由使用有偏差的性能估计造成的。但是每个分区的错误率不会是 0.5 - 在某些情况下,它会随机高于 0.5,在某些情况下会更低。这是一个随机过程,因此在某些情况下,在训练分区上学习的随机分类器的输出与测试标签的相关性要好于在其他分区中的相关性。然而这种变化只是随机噪声,所以如果你选择准确率最高的分区,这表明分类器在预测随机硬币翻转方面有一定的实际技能,但我们知道不可能是这样。明显的技能是虚假的,是由使用有偏差的性能估计造成的。但是每个分区的错误率不会是 0.5 - 在某些情况下,它会随机高于 0.5,在某些情况下会更低。这是一个随机过程,因此在某些情况下,在训练分区上学习的随机分类器的输出与测试标签的相关性要好于在其他分区中的相关性。然而这种变化只是随机噪声,所以如果你选择准确率最高的分区,这表明分类器在预测随机硬币翻转方面有一定的实际技能,但我们知道不可能是这样。明显的技能是虚假的,是由使用有偏差的性能估计造成的。因此在某些情况下,在训练分区上学习到的随机分类器的输出与测试标签的相关性要好于在其他分区中的相关性。然而这种变化只是随机噪声,所以如果你选择准确率最高的分区,这表明分类器在预测随机硬币翻转方面有一定的实际技能,但我们知道不可能是这样。明显的技能是虚假的,是由使用有偏差的性能估计造成的。因此在某些情况下,在训练分区上学习到的随机分类器的输出与测试标签的相关性要好于在其他分区中的相关性。然而这种变化只是随机噪声,所以如果你选择准确率最高的分区,这表明分类器在预测随机硬币翻转方面有一定的实际技能,但我们知道不可能是这样。明显的技能是虚假的,是由使用有偏差的性能估计造成的。

我在此处的统计信息 SE 上使用了一个类似的示例(带有代码)来解释为什么如果我们执行基于交叉验证的特征选择,然后尝试使用该交叉验证作为性能估计(它会有很大的偏见)。先读一读可能会有所帮助。

本质上,如果我们想要一个无偏的性能估计,我们不应该在查看测试数据对模型或其评估做出任何选择。前段时间我写了一篇关于这个的论文,因为这是模型选择的一个非常常见的错误(例如优化超参数):

Gavin C. Cawley 和 Nicola LC Talbot,“论模型选择中的过度拟合和性能评估中的后续选择偏差”,机器学习研究杂志,11(70):2079−2107, 2010 ( www )

选择“最佳分割”将是一个非常糟糕的主意。

交叉验证的目标是通过最小化由于分裂导致的机会影响来更准确地评估模型。选择“最佳分割”与可靠估计性能的想法背道而驰,实际上这会故意高估模型。

重要的是要认识到评估模型的目标不是最大化性能,而是可靠地估计模型在任何随机测试集上的性能。