防止帕累托平滑重要性抽样 (PSIS-LOO) 失败

机器算法验证 机器学习 交叉验证 马尔可夫链蒙特卡罗 帕累托分布 重要性抽样
2022-03-24 23:36:11

我最近开始使用 Pareto 平滑重要性抽样留一法交叉验证 (PSIS-LOO),在这些论文中进行了描述:

  • Vehtari, A. 和 Gelman, A. (2015)。帕累托平滑重要性抽样。arXiv 预印本(链接)。
  • Vehtari, A.、Gelman, A. 和 Gabry, J. (2016)。使用留一法交叉验证和 WAIC 的实用贝叶斯模型评估。arXiv 预印本(链接

这代表了一种非常诱人的样本外模型评估方法,因为它允许通过单次 MCMC 运行来执行 LOO-CV,并且据称它比现有的信息标准(如 WAIC)更好。

PSIS-LOO 有一个诊断程序可以告诉您该近似值是否可靠,即由帕累托分布的估计指数给出,该指数拟合到重要性权重的经验分布的尾部(每个数据点一个权重)。简而言之,如果估计的权重,就会发生不好的事情。k^ik^i0.7

可悲的是,我发现在我将这种方法应用于我的问题时,对于大多数感兴趣的模型,我发现k^i0.7的很大一部分。不出所料,一些报告的 LOO 对数似然显然是荒谬的(与其他数据集相比)。作为复查,我进行了传统(且耗时)的 10 倍交叉验证,发现在上述情况下 PSIS-LOO 确实给出了非常错误的结果(从好的方面来说,结果与 10 -fold CV 对于所有k^i0.7的模型。作为记录,我正在使用Aki Vehtari 的 PSIS-LOO的MATLAB 实现。

也许我很不幸,因为我目前应用这种方法的第一个问题对于 PSIS-LOO 来说是“困难的”,但我怀疑这种情况可能相对常见。对于像我这样的案例,Vehtary, Gelman & Gabry 的论文简单地说:

即使 PSIS 估计具有有限方差,当k^>0.7时,用户应该考虑直接从p(θs|yi)中对有问题的i进行采样,使用k折交叉验证,或使用更稳健的模型。

这些是显而易见但不是真正理想的解决方案,因为它们都非常耗时或需要额外的摆弄(我很欣赏 MCMC模型评估都是摆弄,但越少越好)。

有没有我们可以事先应用的通用方法来尝试防止PSIS-LOO 失败?我有一些初步的想法,但我想知道是否已经存在人们一直在采用的经验解决方案。

1个回答

作为记录,我在Stan用户邮件列表中发布了一个类似的问题,您可以在此处找到。原始 PSIS-LOO 论文的一位作者和 Stan 的其他贡献者回答了我。以下是我的个人总结。

简短的回答是没有已知的通用方法来防止 PSIS-LOO 失败。如果 PSIS-LOO 失败,通常是因为模型有问题,修复它必然留给用户。

具体来说,PSIS-LOO 可能失败的原因通常是因为一个或多个 LOO 分布发生偏移和/或比完整后验分布更宽,可能是由于有影响的观察,并且重要性采样分布崩溃到一个或几个点。

我在想你可以尝试采用某种形式的平行后回火方法来解决这个问题。这个想法不一定是错误的,但有人向我指出:

  • 教科书的后回火仍然需要大量的逐案摆弄才能找到合适的温度水平,因为没有明显或已知的方法可以做到这一点(顺便说一下,出于这个原因,Stan 不包括平行回火);
  • 如果您使用两个以上的温度水平(因为可能需要采用稳健的方法),则最终计算成本接近 K 折交叉验证或在有问题的 LOO 分布上运行 MCMC 的成本。

简而言之,如果 PSIS-LOO 失败了,似乎很难得到一个像其他简单补丁一样健壮和通用的方法;这就是为什么 Vehtari、Gelman 和 Gabry 根据我在原始问题中发布的引用建议这些方法的原因。