优秀的编程知识分享平台

网站首页 > 技术文章 正文

交叉验证(Cross-Validation)

nanyue 2024-12-05 15:06:33 技术文章 6 ℃

1.介绍

机器学习是一个迭代过程。

你会遇到一些问题,例如使用什么预测变量、使用什么类型的模型、使用什么参数等。到目前为止,都是以数据驱动的方式做出了这些选择,使用验证(或保持)集测量模型质量。

但这种方法也有一些缺点。假设有一个包含5000行的数据集。通常,将保留大约20%的数据作为验证数据集,即1000行。但这给确定模型分数留下了一些随机的机会。也就是说,一个模型可能在一组1000行上做得很好,然而在不同的1000行上是不准确的。

在极端情况下,可以想象验证集中只有一行数据。如果你比较不同的模型,哪一个能在单个数据点上做出最好的预测将主要取决于运气!

一般来说,验证集越大,模型质量度量中的随机性(也称为“噪声”)就越小,也就越可靠。不幸的是,我们只能通过从训练数据中删除行来获得一个大的验证集,而较小的训练数据集意味着更糟糕的模型!

2.交叉验证是什么

在交叉验证中,我们在不同的数据子集上运行我们的建模过程,以获得模型质量的多种度量。

例如,我们可以首先将数据分成5个部分,每个部分占整个数据集的20%。在这种情况下,我们说我们已经将数据分成5个“折叠”。


然后,我们对每个折叠进行一个实验:

  • 在实验1中,我们使用第一个折叠作为验证集,其他的都作为训练数据。这为我们提供了一个基于20%验证集的模型质量度量。
  • 在实验2中,我们从第二次折叠中取出数据(除了第二次折叠外,其他的都用来训练模型)。然后使用训练集得到模型质量的第二个估计。

我们重复这个过程,每叠一次作为支撑物。把这些放在一起,100%的数据在某个点上被用作支撑,我们最终得到一个基于数据集中所有行的模型质量度量(即使我们不同时使用所有行)。

3.什么时候使用交叉验证

交叉验证提供了对模型质量的更精确的度量,这在大量建模决策时尤为重要。然而,它可能需要更长的时间来运行,因为它估计了多个模型(每个折叠一个)。

因此,考虑到这些权衡,应该在什么时候使用每种方法?

  • 对于小数据集,额外的计算负担不是什么大问题,应该运行交叉验证。
  • 对于较大的数据集,一个验证集就足够了。代码将运行得更快,而且可能拥有足够的数据,因此不需要重新使用其中的一些数据来进行维护。

对于大数据集和小数据集的构成没有简单的界限。但是,如果你的模型只需几分钟或更少的时间就可以运行,那么切换到交叉验证可能是值得的。

或者,你可以进行交叉验证,看看每个实验的分数是否接近。如果每个实验产生相同的结果,一个单一的验证集可能就足够了。

4.例子




最近发表
标签列表