您将数据拆分为 k 个子样本。在 k-1 个子样本上训练它,在第 k 个子样本上对其进行测试,用一些错误来记录性能。
对 k 个子样本中的每一个做 k 次,每次记录误差。那么选择误差最小的模型呢?和合奏技术一样吗?
您将数据拆分为 k 个子样本。在 k-1 个子样本上训练它,在第 k 个子样本上对其进行测试,用一些错误来记录性能。
对 k 个子样本中的每一个做 k 次,每次记录误差。那么选择误差最小的模型呢?和合奏技术一样吗?
假设您有 1500 个标记的数据点,并且您想估计某个分类器对新数据的处理效果。一种(天真的)方法是用所有 1500 个数据点训练一个模型,然后检查 1500 个数据点中有多少被正确分类。这不太可能很好地估计新数据的性能,因为新数据没有用于测试模型。决策树和神经网络等一些模型通常能够在训练数据上获得 100% 的准确率,但在新数据上的表现要差得多。
所以你自己想你会将数据分成两组——一个用于构建模型的训练集,一个用于评估模型的测试集。假设您决定使用 1000 个示例来训练模型,并使用 500 个进行评估。这应该可以合理估计您的模型在新数据上的表现,但似乎有点有限;毕竟,你三分之一的数据根本没有用于训练!我们只有对 500 个测试样本的预测——如果这些随机样本碰巧平均更容易正确分类,那么我们的性能估计就过于乐观了。
交叉验证是解决这个问题的一种方法。让我们设置,因此数据分为三组,每组 500 个点(A、B 和 C)。使用 A & B 训练模型,并使用此模型获得 C 的预测。使用 B 和 C 训练模型,得到 A 的预测。最后,使用 A 和 C 训练模型,得到 B 的预测。现在我们对来自训练模型的标记数据中的每个点都有一个预测在不同的数据上。通过平均每个模型的性能,我们可以更好地估计模型在新数据上的表现。
请注意,如果要将模型应用于新数据,则应使用所有 1500 个标记点重新训练模型。交叉验证仅用于估计这个新模型的性能。此外,如果您的数据足够大,则可能不需要交叉验证,您可以只进行一次训练/测试或训练/有效/测试拆分。