我想知道在进行 K 折交叉验证后如何选择预测模型。
这可能会让人尴尬,所以让我更详细地解释一下:每当我运行 K 折交叉验证时,我都会使用 K 个训练数据的子集,并最终得到 K 个不同的模型。
我想知道如何从 K 个模型中挑选一个,以便我可以将它展示给某人并说“这是我们可以生产的最好的模型”。
可以选择 K 模型中的任何一个吗?或者是否涉及某种最佳实践,例如选择实现中值测试误差的模型?
我想知道在进行 K 折交叉验证后如何选择预测模型。
这可能会让人尴尬,所以让我更详细地解释一下:每当我运行 K 折交叉验证时,我都会使用 K 个训练数据的子集,并最终得到 K 个不同的模型。
我想知道如何从 K 个模型中挑选一个,以便我可以将它展示给某人并说“这是我们可以生产的最好的模型”。
可以选择 K 模型中的任何一个吗?或者是否涉及某种最佳实践,例如选择实现中值测试误差的模型?
我认为您在理解交叉验证的目的时仍然遗漏了一些东西。
让我们直接了解一些术语,通常当我们说“模型”时,我们指的是一种特定的方法,用于描述一些输入数据与我们试图预测的内容之间的关系。我们通常不将该方法的特定实例称为不同的模型。因此,您可能会说“我有一个线性回归模型”,但您不会将两组不同的训练系数称为不同的模型。至少不是在模型选择的背景下。
因此,当您进行 K 折交叉验证时,您正在测试您的模型能够如何通过某些数据进行训练,然后预测它没有看到的数据。我们为此使用交叉验证,因为如果您使用您拥有的所有数据进行训练,那么您将没有任何数据可供测试。您可以这样做一次,例如使用 80% 的数据进行训练和 20% 的数据进行测试,但是如果您碰巧选择测试的 20% 恰好包含一堆特别容易(或特别难)的点怎么办预测?我们不会对模型的学习和预测能力做出最好的估计。
我们想使用所有的数据。因此,为了继续上述 80/20 拆分的示例,我们将通过对 80% 的数据训练模型 5 次并在 20% 的数据上进行测试来进行 5 倍交叉验证。我们确保每个数据点在 20% 的测试集中恰好出现一次。因此,我们使用了我们必须的每个数据点,以帮助了解我们的模型在从一些数据中学习和预测一些新数据的任务方面表现如何。
但交叉验证的目的不是想出我们的最终模型。我们不使用我们训练模型的这 5 个实例来进行任何真正的预测。为此,我们希望使用我们必须提出的所有数据来提出可能的最佳模型。交叉验证的目的是模型检查,而不是模型构建。
现在,假设我们有两个模型,一个线性回归模型和一个神经网络。我们怎么能说哪个模型更好?我们可以进行 K 折交叉验证,看看哪一个在预测测试集点方面表现更好。但是,一旦我们使用交叉验证来选择性能更好的模型,我们就会在所有数据上训练该模型(无论是线性回归还是神经网络)。我们不会将在交叉验证期间训练的实际模型实例用于我们的最终预测模型。
请注意,有一种称为引导聚合(通常缩写为“装袋”)的技术,它使用以类似于交叉验证的方式生成的模型实例来构建集成模型,但这是一种超出范围的高级技术你的问题在这里。
除了博格丹诺夫的回答,让我补充几点
正如你所说,你训练个不同的模型。它们的不同之处在于 1/(k-1)th 的训练数据与其他情况交换。这些模型有时被称为代理模型,因为为这些模型测量的(平均)性能被视为在所有情况下训练的模型的性能的代理。
现在,在这个过程中有一些假设。
假设1:代理模型等价于“全数据”模型。
这种假设失效是很常见的,其症状是众所周知的折交叉验证(或其他基于重采样的验证方案)的悲观偏差。如果学习曲线仍然具有正斜率(即较少的训练样本导致更差的模型),则代理模型的性能平均比“整体数据”模型的性能差。
假设 2 是假设 1 的弱版本:即使代理模型平均比整个数据模型差,我们假设它们彼此等价。这允许将个代理模型的测试结果总结为一种平均性能。
模型的不稳定性导致了这个假设的崩溃:在个训练案例上训练的模型的真实性能差异很大。折交叉验证(对个子集的新随机分配)进行迭代/重复并查看同一案例的不同代理模型的预测之间的方差(随机差异)来衡量这一点。
有限数量的用例意味着由于测试用例的数量有限,性能测量将受到随机误差(方差)的影响。这种方差来源不同于(并因此增加了)模型的不稳定方差。
观察到的性能差异是由于这两个方差来源造成的。
您考虑的“选择”是数据集选择:选择其中一个代理模型意味着选择训练样本的子集并声称该训练样本子集会导致更好的模型。虽然情况可能确实如此,但“优越性”通常是虚假的。在任何情况下,由于选择“最好的”代理模型是数据驱动的优化,您需要使用新的未知数据验证(测量性能)这个选择的模型。此交叉验证中的测试集不是独立的,因为它用于选择代理模型。
你可能想看看我们的论文,它是关于分类的,通常情况比回归更糟糕。但是,它显示了这些方差和偏差的来源是如何叠加的。
Beleites, C. 和 Neugebauer, U. 和 Bocklitz, T. 和 Krafft, C. 和 Popp, J.:分类模型的样本量规划。Anal Chim Acta, 2013, 760, 25-33。
DOI: 10.1016/j.aca.2012.11.007
arXiv 上接受的手稿: 1211.1323
我发现这篇优秀的文章如何训练最终的机器学习模型非常有助于消除我对在机器学习中使用 CV 的所有困惑。
基本上,我们使用 CV(例如 80/20 拆分、k-fold 等)来估计您的整个过程(包括数据工程、模型选择(即算法)和超参数等)在未来看不见的情况下的表现如何数据。一旦您选择了获胜的“程序”,来自 CV 的拟合模型就达到了它们的目的,现在可以丢弃。然后,您使用相同的获胜“程序”并使用整个数据集训练您的最终模型。
为什么我们使用 k 折交叉验证?
交叉验证是一种评估方法对未见数据的技能的方法。就像使用训练测试拆分一样。
交叉验证系统地在数据集的多个子集上创建和评估多个模型。 这反过来又提供了一组性能度量。
当您尝试选择要使用的算法和数据准备过程时,这也有助于提供一个过程与另一个过程的更细微的比较。
此外,此信息非常宝贵,因为您可以使用平均值和散布来给出机器学习过程在实践中的预期性能的置信区间。