k折交叉验证中的方差估计

机器算法验证 机器学习 交叉验证
2022-01-30 04:22:52

K 折交叉验证可用于估计给定分类器的泛化能力。我可以(或者我应该)还计算所有验证运行的汇总方差,以便更好地估计其方差吗?

如果不是,为什么?

我发现确实使用跨交叉验证运行的汇总标准差的论文。我还发现论文明确指出验证方差没有通用估计器但是,我还发现论文显示了一些泛化错误的方差估计量(我仍在阅读并试图理解这一点)。人们在实践中真正做什么(或报告)了什么?

编辑:当使用 CV 来衡量粗略的分类错误(即样本已正确标记或未正确标记;例如真或假)时,谈论合并方差可能没有意义。但是,我说的是我们正在估计的统计数据确实定义了方差的情况。因此,对于给定的折叠,我们可以同时得到统计值和方差估计值。丢弃这些信息而只考虑平均统计数据似乎是不对的。虽然我知道我可以使用引导方法建立方差估计,(如果我不是很错的话)这样做仍然会忽略折叠方差并只考虑统计估计(加上需要更多的计算能力)。

2个回答

非常有趣的问题,我将不得不阅读您提供的论文......但这也许会让我们开始寻找答案:

我通常以非常务实的方式解决这个问题:我使用新的随机拆分迭代 k 折交叉验证,并像往常一样计算每次迭代的性能。每次迭代的整体测试样本都是相同的,差异来自数据的不同拆分。

我将此报告为例如观察到的性能的第 5 到第 95 个百分位。将最多样本交换为新样本,并将其作为模型不稳定性的衡量标准进行讨论。nk1

旁注:我无论如何都不能使用需要样本量的公式。由于我的数据在结构上是聚类或分层的(同一案例的许多相似但不重复的测量,通常是同一样本的几个 [数百] 不同位置),我不知道有效样本量。

与引导比较:

  • 迭代使用新的随机分割。

  • 主要区别在于使用 (bootstrap) 或不使用 (cv) 替换进行重采样。

  • 计算成本大致相同,因为我会选择 cv 的迭代次数没有引导迭代次数 / k,即计算相同的模型总数。

  • bootstrap 在某些统计属性方面比 cv 具有优势(渐近正确,可能您需要更少的迭代来获得良好的估计)

  • 但是,使用 cv 你有一个优势,你可以保证

    • 所有模型的不同训练样本的数量都相同(如果要计算学习曲线,这很重要)
    • 每个样本在每次迭代中只测试一次
  • 一些分类方法会丢弃重复的样本,所以 bootstrapping 没有意义

性能差异

简短回答:是的,在仅存在 {0,1} 结果的情况下谈论差异确实有意义。

看看二项分布(k = 成功,n = 测试,p = 成功的真实概率 = 平均 k / n):

σ2(k)=np(1p)

比例的方差(例如命中率、错误率、敏感度、TPR……,我从现在开始作为测试中的观察值)是一个充满整本书的主题。 .pp^

  • Fleiss:比率和比例的统计方法
  • Fororthofer 和 Lee:生物统计学有一个很好的介绍。

现在,,因此:p^=kn

σ2(p^)=p(1p)n

这意味着衡量分类器性能的不确定性仅取决于测试模型的真实性能 p 和测试样本的数量。

在交叉验证中,您假设

  1. k 个“代理”模型与您通常从所有样本构建的“真实”模型具有相同的真实性能。(这个假设的崩溃是众所周知的悲观偏见)。

  2. k 个“代理”模型具有相同的真实性能(等效,具有稳定的预测),因此您可以合并 k 个测试的结果。
    当然,不仅可以合并 cv 一次迭代的 k 个“代理”模型,还可以合并 k 倍 cv 的 i 次迭代的 ki 模型。

为什么要迭代?

迭代告诉您的主要内容是模型(预测)不稳定性,即同一样本的不同模型的预测方差。

您可以直接报告不稳定性,例如给定测试用例的预测方差,无论预测是否正确或更间接地报告为不同 cv 迭代p^

是的,这是重要的信息。

现在,如果您的模型完全稳定,所有将对给定样本产生完全相同的预测。换句话说,所有的迭代都会有相同的结果。迭代不会减少估计的方差(假设)。在这种情况下,满足上面的假设 2 并且您仅受制于,其中 n 是所有测试的样本总数cv 的 k 折。 在这种情况下,不需要迭代(除了证明稳定性)。nbootstrapkniter. cvn1nσ2(p^)=p(1p)n

然后,您可以根据在次测试中观察到的成功次数构建真实性能,则无需报告方差不确定性然而,在我的领域,没有多少人意识到这一点,甚至没有直观地掌握样本量的不确定性有多大。所以我还是建议举报。pknp^n

如果您观察到模型不稳定性,则汇总平均值是对真实性能的更好估计。迭代之间的方差是一个重要信息,您可以将其与大小为 n 的测试集的预期最小方差进行比较,并在所有迭代中具有真实的性能平均性能。

请记住,CV 只是一个估计值,永远不能代表“真正的”泛化误差。根据您的样本量(这将影响您的折叠数或折叠大小),您计算泛化误差分布的任何参数估计值的能力可能会受到严重限制。在我看来(我已经在各种教科书中看到它声称,“支持向量机的知识发现”-Lutz Hamel)你可以做一些 CV 的引导变体来估计泛化误差的分布,但是标准的 10- 1(例如)一旦关闭 CV 将无法为您提供足够的数据点来推断真正的 gen-error。Bootstrapping 要求您从训练/测试/验证中提取多个样本并有效地进行多次(比如 1000 个左右)10-1(或其他)CV 测试。然后,您将每个 CV 测试的平均值的样本分布作为对 CV 误差总体平均值的抽样分布的估计,并据此估计分布参数,即平均值、中位数、std min max Q1 Q3 等...这是一项工作,在我看来,只有当您的应用程序足够重要/风险足以保证额外的工作时才真正需要。即,也许在一个营销环境中,企业只是乐于比随机更好,那么可能不需要。但是,如果您正在尝试评估患者对高风险药物的反应或预测大型投资的收入预期,您可能会谨慎地执行它。