在 k-fold-cross-validation 中,为什么我们要计算每个折叠的度量的平均值

数据挖掘 交叉验证 评估
2021-09-19 00:43:44

在 k-fold-cross-validation 中,“正确”方案似乎计算了每个折叠的度量(比如准确度),然后返回平均值作为最终度量。

来源:https ://scikit-learn.org/stable/modules/cross_validation.html

但是,为什么我们不能直接在所有预测上计算度量,因为我们对所有数据都有估计。

谢谢

3个回答

在运行交叉验证过程后,可以计算所有 K 折叠的预测连接的全局性能,这取决于目标和指标(例如,折叠的平均准确度与全局准确性,但并非每个评估措施都是如此)。

但很多时候,目标不仅包括准确地测量性能,还包括测量跨折叠的性能方差,以检测不稳定性。这不能从预测的串联中完成,因此将折叠结果分开通常更方便。

(这是我的解释,可能还有其他原因)

我不是 100% 确定你的意思。在 k-fold CV 中,您将训练集划分为ķ大小相等的子集。一次伸出其中一个折叠,您可以在剩余的折叠上训练模型ķ-1folds 以预测保留的折叠。因此,最后,您对训练数据中的每个观察结果都有一个预测。

现在,您可以用两种等效的方式计算平均准确度:对于每一折,计算平均准确度,然后平均 k 个平均值。或者,您对每一次观察的平均准确度。这两个值是相同的(直到舍入误差),因为您所做的只是采取中间步骤来计算每个折叠的平均值。好处是你节省了内存,因为你只需要保留ķ值(每次折叠的平均准确度)而不是ñ值(训练集中每个观察值一个值)。

结果可能会有所不同(即使在实践中,它并不真正重要,但仅适用于某些指标!)

假设您对具有 11 个观察值的集合执行 2 折交叉验证。因此,您将有一个包含 5 个元素的测试集的迭代,然后是另一个包含 6 个元素的测试集。

如果您在全局范围内计算计算精度,这要归功于全局混淆矩阵(它将有 5+6=11 个元素),这可能与计算两个折叠的平均值不同。因为,使用平均程序,您将对每个折叠赋予相同的权重(此处 = 0.5),即使它们没有完全相同数量的观察值。同时,通过全局程序,您将对每个观察值赋予不同的权重。

当然,当您的观察数超过 11 (...) 时,差异是微不足道的(但仍然存在)。如果您在每个折叠中具有(完全相同)相同数量的观察值,则平均过程给出的结果等于全局结果(例如,对于具有 10 个和 11 个元素的 2 折叠 CV)。

但是对于其他指标,例如给定类的精度,这提出了一个更基本的问题,即使在实践中仍然很少见。

假设您为分类任务执行 5 倍 CV,但其中一个目标类不存在。有时,对于 5 倍的某个迭代但不是全部,该模型可以学会根本不预测该类。因此,从数学上讲,您无法计算该给定模态的精度,因为您的模型不会将任何测试观察结果预测为属于该类。

例如,对于 5 次折叠中的 3 次,模型会这样做,而对于另外 2 次则不会。如果您计算一个全局混淆矩阵,然后从中计算出该类的精度,那么您可以在数学上做到这一点。但是,如果您执行“平均/平均程序”,则不能,因为对于某些(2)折叠,您无法(在数学上)计算它。

所以,这可能是另一个问题:),我们应该选择哪一个(全局或平均值)来计算有时无法计算的指标。当然,您可以定义,因此决定,每次无法计算指标时允许的值(假设为 0),但这并不是真正的争论......)

是讨论您的问题的某篇文章(不是唯一一篇)的链接(如果链接断开,则文章名称为 Forman 和 Scholz 的“Apples-to-Apples in Cross-Validation Studies: Pitfalls in Classifier Performance Measurement”) .