机器学习中的交叉验证

17 Mar 2025 | 5 分钟阅读

交叉验证是一种通过在部分输入数据上训练模型,并在之前未见过的数据子集上进行测试来验证模型效率的技术。我们也可以说它是一种检查统计模型如何泛化到独立数据集的技术

机器学习中,总是需要测试模型的稳定性。这意味着仅仅根据训练数据集,我们无法在训练数据集上拟合模型。为此,我们保留了数据集中的一个特定样本,该样本不是训练数据集的一部分。之后,我们在部署前在该样本上测试模型,整个过程都属于交叉验证。这与通用的训练-测试分割不同。

因此,交叉验证的基本步骤是:

  • 将数据集的一个子集保留为验证集。
  • 使用训练数据集为模型提供训练。
  • 现在,使用验证集评估模型性能。如果模型在验证集上表现良好,则进行下一步,否则检查问题。

交叉验证中使用的方法

有一些常用的交叉验证方法。这些方法如下:

  1. 验证集方法
  2. 留P个样本交叉验证
  3. 留一法交叉验证
  4. K折交叉验证
  5. 分层K折交叉验证

验证集方法

在验证集方法中,我们将输入数据集分为训练集和测试集或验证集。两个子集各占数据集的50%。

但它有一个很大的缺点是,我们只使用50%的数据集来训练模型,因此模型可能会遗漏数据集中的重要信息。它也倾向于产生欠拟合模型。

留P个样本交叉验证

在此方法中,将P个数据集排除在训练数据之外。这意味着,如果原始输入数据集共有N个数据点,则将N-P个数据点用作训练数据集,P个数据点用作验证集。整个过程对所有样本重复进行,并计算平均误差以了解模型的有效性。

这项技术有一个缺点;对于较大的P,它可能在计算上很困难。

留一法交叉验证

此方法类似于留P个样本交叉验证,但不是留P个,而是需要从训练中留出1个数据集。这意味着,在此方法中,对于每个学习集,只保留一个数据点,其余数据集用于训练模型。此过程对每个数据点重复。因此,对于N个样本,我们得到N个不同的训练集和N个测试集。它具有以下特点:

  • 在此方法中,由于使用了所有数据点,偏差最小。
  • 该过程执行N次,因此执行时间很高。
  • 此方法在测试模型有效性时会导致高方差,因为我们迭代地针对一个数据点进行检查。

K折交叉验证

K折交叉验证方法将输入数据集分成K个大小相等的样本组。这些样本称为。对于每个学习集,预测函数使用k-1折,其余的折用作测试集。这种方法是一种非常流行的CV方法,因为它易于理解,并且输出比其他方法偏差小。

K折交叉验证的步骤是:

  • 将输入数据集分成K个组
  • 对于每个组:
    • 将一个组作为保留或测试数据集。
    • 使用其余组作为训练数据集
    • 在训练集上拟合模型,并使用测试集评估模型性能。

我们以5折交叉验证为例。因此,数据集被分成5折。在第1次迭代中,保留第一折来测试模型,其余用于训练模型。在第2次迭代中,第二折用于测试模型,其余用于训练模型。此过程将一直持续到每一折都被用作测试折。

请看下图:

Cross-Validation in Machine Learning

分层K折交叉验证

这项技术与K折交叉验证类似,只有一些小改动。这种方法基于分层概念,它是一种重新排列数据以确保每个折或组都能很好地代表整个数据集的过程。为了处理偏差和方差,这是最好的方法之一。

我们可以通过房屋价格的例子来理解这一点,例如一些房屋的价格可能远高于其他房屋。为了应对这种情况,分层K折交叉验证技术非常有用。

留出法

这是所有交叉验证技术中最简单的方法。在此方法中,我们需要移除训练数据的一个子集,并使用该子集通过在其余部分数据集上训练来获得预测结果。

此过程中发生的错误表明我们的模型在未知数据集上的表现如何。虽然这种方法简单易行,但它仍然面临高方差的问题,而且有时会产生误导性的结果。

机器学习中交叉验证与训练/测试分割的比较

  • 训练/测试分割:输入数据以70:30、80:20等比例分成两部分:训练集和测试集。它产生高方差,这是最大的缺点之一。
    • 训练数据:训练数据用于训练模型,并且因变量是已知的。
    • 测试数据:测试数据用于对已在训练数据上训练过的模型进行预测。它具有与训练数据相同的特征,但不是训练数据的一部分。
  • 交叉验证数据集:通过将数据集分成训练/测试分割组并平均结果,可以克服训练/测试分割的缺点。如果我们想优化已在训练数据集上训练过的模型以获得最佳性能,可以使用它。与训练/测试分割相比,它效率更高,因为每个观测值都用于训练和测试。

交叉验证的局限性

交叉验证技术有一些局限性,如下所示:

  • 在理想条件下,它会产生最佳输出。但对于不一致的数据,它可能会产生极差的结果。因此,这是交叉验证的一个大缺点,因为机器学习中数据的类型没有确定性。
  • 在预测建模中,数据会随着时间的推移而演变,因此可能面临训练集和验证集之间的差异。例如,如果我们创建一个模型来预测股票市场价值,并且数据是基于过去5年的股票价值进行训练的,但未来5年的实际价值可能会有很大差异,因此在这种情况下很难期望得到正确的结果。

交叉验证的应用

  • 此技术可用于比较不同预测建模方法的性能。
  • 它在医学研究领域有很大的应用前景。
  • 它也可用于荟萃分析,数据科学家在医学统计领域已经在使用它。