用于比较机器学习算法的统计显著性检验

在应用机器学习中,比较机器学习方法并选择最终模型是一项常见的操作。

模型通常使用像k折交叉验证这样的重采样方法进行评估,从中计算出平均技能分数并直接进行比较。虽然简单,但这种方法可能会产生误导,因为很难知道平均技能分数之间的差异是真实的,还是统计上的偶然结果。

统计显著性检验旨在解决这个问题,并在假设技能分数样本来自同一分布的情况下,量化观察到这些样本的可能性。如果这个假设(即零假设)被拒绝,则表明技能分数的差异在统计上是显著的。

尽管并非万无一失,统计假设检验可以在模型选择过程中提高您对结果解释和呈现的信心。

在本教程中,您将发现为比较机器学习模型选择统计假设检验的重要性和挑战。

完成本教程后,您将了解:

  • 统计假设检验可以帮助比较机器学习模型和选择最终模型。
  • 不加思考地应用统计假设检验可能会导致误导性结果。
  • 正确使用统计检验具有挑战性,目前的一些共识是使用麦克尼马尔检验(McNemar's test)或5x2交叉验证与修正的配对学生t检验。

通过我的新书《机器学习统计学》来启动您的项目,书中包含所有示例的分步教程Python源代码文件

让我们开始吧。

Statistical Significance Tests for Comparing Machine Learning Algorithms

用于比较机器学习算法的统计显著性检验
照片由 Fotografías de Javier 拍摄,保留部分权利。

教程概述

本教程分为5个部分,它们是:

  1. 模型选择的问题
  2. 统计假设检验
  3. 选择假设检验的问题
  4. 一些研究结果总结
  5. 建议

需要机器学习统计学方面的帮助吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

模型选择的问题

应用机器学习的一个重要部分是模型选择。

我们可以用最简单的形式来描述它

在对数据集上的两种机器学习方法进行评估后,您会选择哪种模型?

您会选择技能最好的模型。

也就是说,该模型在对未见数据进行预测时,其估计的技能是最好的。对于分类和回归问题,这可能分别是最大准确率或最小误差。

选择技能最佳模型的挑战在于确定您对每个模型估计的技能有多大的信任度。更普遍地说

两种机器学习模型之间的技能差异是真实的,还是由于统计上的偶然性?

我们可以使用统计假设检验来解决这个问题。

统计假设检验

通常,用于比较样本的统计假设检验量化了在假设两个数据样本具有相同分布的情况下,观察到它们的可能性有多大。

统计检验的假设被称为零假设,我们可以计算统计度量并解释它们,以决定是接受还是拒绝零假设。

在根据估计技能选择模型的情况下,我们想知道两个模型之间是否存在真实或统计上显著的差异。

  • 如果检验结果表明没有足够的证据拒绝零假设,那么观察到的模型技能差异很可能是由于统计上的偶然性。
  • 如果检验结果表明有足够的证据拒绝零假设,那么观察到的模型技能差异很可能是由于模型本身的不同。

检验结果是概率性的,这意味着,即使正确解释了结果,结果也可能因为I型或II型错误而出错。简而言之,就是假阳性或假阴性的发现。

通过统计显著性检验比较机器学习模型会带来一些期望,这些期望反过来会影响可以使用的统计检验类型;例如

  • 技能估计。必须选择一个特定的模型技能度量。这可以是分类准确率(一个比例)或平均绝对误差(一个摘要统计量),这将限制可以使用的检验类型。
  • 重复估计。为了计算统计数据,需要一个技能分数的样本。在相同或不同数据上重复训练和测试给定模型会影响可以使用的检验类型。
  • 估计值的分布。技能分数估计的样本会有一个分布,可能是高斯分布,也可能不是。这将决定是使用参数检验还是非参数检验。
  • 中心趋势。模型技能通常会使用摘要统计量(如平均值或中位数)来描述和比较,具体取决于技能分数的分布。检验可能会也可能不会直接考虑这一点。

统计检验的结果通常是一个检验统计量和一个p值,两者都可以被解释并用于结果的呈现中,以量化模型间差异的置信水平或显著性。与不使用统计假设检验相比,这使得在模型选择时可以提出更有力的主张。

鉴于在模型选择中使用统计假设检验似乎是可取的,那么您如何选择一个适合您特定用例的检验呢?

选择假设检验的问题

让我们看一个评估和比较平衡二元分类问题分类器的常见例子。

通常的做法是使用分类准确率来评估分类方法,使用10折交叉验证来评估每个模型,假设10个模型技能估计的样本服从高斯分布,并使用样本的均值作为模型技能的总结。

我们可以要求每个使用此程序评估的分类器都在完全相同的数据集分割上通过10折交叉验证进行评估。这将得到两个分类器之间匹配的配对度量样本,之所以匹配,是因为每个分类器都在相同的10个测试集上进行了评估。

然后我们可以选择并使用配对学生t检验来检查两个模型平均准确率之间的差异是否具有统计显著性,例如,拒绝假设两个样本具有相同分布的零假设。

事实上,这是一种比较分类器的常用方法,可能有数百篇已发表的论文使用这种方法。

问题是,配对学生t检验的一个关键假设被违反了。

即,每个样本中的观察值不是独立的。在k折交叉验证过程中,一个给定的观察值将在训练数据集中使用(k-1)次。这意味着估计的技能分数是相关的,而不是独立的,这反过来又会导致检验中t统计量的计算会产生误导性的错误,以及对该统计量和p值的任何解释也会出错。

这一观察要求对所使用的重采样方法(此处为k折交叉验证)和所选假设检验的期望(此处为配对学生t检验)都有深入的理解。如果没有这些背景知识,该检验看起来是合适的,会计算出一个结果并进行解释,一切看起来都很好。

不幸的是,在应用机器学习中为模型选择选择一个合适的统计假设检验比最初看起来更具挑战性。幸运的是,越来越多的研究指出了这种天真方法的缺陷,并提出了修正和替代方法。

一些研究结果总结

在本节中,让我们看一些关于在机器学习中为模型选择选择合适的统计显著性检验的研究。

使用麦克尼马尔检验或5x2交叉验证

关于这个主题的开创性工作可能是Thomas Dietterich在1998年发表的论文《用于比较监督分类学习算法的近似统计检验》。

这是关于这个主题的一篇优秀论文,推荐阅读。它首先涵盖了一个很好的框架,用于思考在机器学习项目中可能需要进行统计假设检验的各个节点,讨论了与比较分类器机器学习方法相关的常见统计检验违规的期望,并以方法的实证评估来证实其发现。

本文回顾了五种近似统计检验,用于确定一种学习算法在特定学习任务上是否优于另一种。

该论文中统计假设检验的选择和实证评估的重点是校准I型错误或假阳性。也就是说,选择一个能最小化在不存在显著差异时却指出存在显著差异的情况的检验。

这篇论文中有许多重要的发现。

第一个发现是,永远不应该对通过训练数据集的随机重采样估计的技能结果使用配对学生t检验。

… 我们可以自信地得出结论,重采样t检验永远不应该被使用。

在随机重采样和k折交叉验证的情况下(如上所述),配对t检验的假设被违反了。然而,在k折交叉验证的情况下,t检验会过于乐观,导致较高的I型错误,但只有中等的II型错误。这意味着,在避免II型错误比屈服于I型错误更重要的情况下,可以使用这种组合。

10折交叉验证的t检验具有较高的I型错误率。然而,它也具有较高的功效,因此,在II型错误(未能检测到算法之间的真实差异)更为重要的情况下,可以推荐使用它。

Dietterich建议在数据量有限且每个算法只能评估一次的情况下使用麦克尼马尔统计假设检验

麦克尼马尔检验类似于卡方检验,在这种情况下,它用于确定算法列联表中观察到的比例差异是否与预期比例有显著不同。这对于训练可能需要数天或数周的大型深度学习神经网络来说是一个有用的发现。

我们的实验使我们推荐 […] 在学习算法只能运行一次的情况下使用麦克尼马尔检验。

Dietterich还推荐了一种他自己设计的重采样方法,称为5x2交叉验证,它涉及5次2折交叉验证的重复。

选择两折是为了确保每个观察值在单个模型技能估计中只出现在训练集或测试集中。在结果上使用配对学生t检验,并进行了更新,以更好地反映由于估计技能分数之间的依赖性而导致的有限自由度。

我们的实验使我们推荐 […] 5x2cv t检验,适用于学习算法足够高效,可以运行十次的情况。

对5x2交叉验证的改进

自从该论文发表以来的20年里,使用麦克尼马尔检验或5x2交叉验证已成为一项主要的建议。

尽管如此,为了更好地修正因重复k折交叉验证违反独立性假设而导致的配对学生t检验,已经做出了进一步的改进。

众多论文中,两篇重要的论文包括

Claude Nadeau和Yoshua Bengio在他们2003年的论文《泛化误差的推断》中提出了进一步的修正。这是一篇内容密集的论文,不建议胆小者阅读。

这项分析使我们能够构建两个方差估计,这两个估计同时考虑了训练集选择和测试样本选择所带来的变异性。其中一个提议的估计量看起来类似于cv方法(Dietterich, 1998),并且专门设计用于高估方差,以产生保守的推断。

Remco Bouckaert和Eibe Frank在他们2004年的论文《评估比较学习算法的显著性检验的可复制性》中采取了不同的视角,认为结果的可复制性比I型或II型错误更重要。

在本文中,我们认为检验的可复制性也同样重要。我们说一个检验的可复制性低,如果它的结果强烈依赖于用于执行它的数据的特定随机分区。

令人惊讶的是,他们建议使用100次随机重采样或10x10折交叉验证,并对配对学生t检验进行Nadeau和Bengio的修正,以实现良好的可复制性。

后一种方法在Ian Witten和Eibe Frank的书中以及他们的开源数据挖掘平台Weka中被推荐,他们将Nadeau和Bengio的修正称为“修正的重采样t检验”。

为了规避这个问题,人们提出了对标准t检验的各种修改,但所有这些都是启发式的,缺乏坚实的理论依据。其中一个在实践中效果很好的方法是修正的重采样t检验。[...] 同样修正的统计量可以用于重复交叉验证,这只是重复留出法的一个特例,即一次交叉验证中的各个测试集不重叠。

— 第159页,第5章,可信度:评估所学知识,《数据挖掘:实用的机器学习工具与技术》,第三版,2011年。

建议

在应用机器学习的模型选择中,选择统计显著性检验时没有万能的解决方案。

让我们看看在您的机器学习项目中可能用来比较分类器的五种方法。

1. 独立数据样本

如果您有近乎无限的数据,可以收集k个独立的训练和测试数据集,为每个方法计算出10个真正独立的技能分数。

然后您可以正确地应用配对学生t检验。这种情况极不可能发生,因为我们通常处理的是小数据样本。

… 假设有几乎无限的数据,因此可以使用几个大小合适的独立数据集。实际上,通常只有一个大小有限的数据集。那该怎么办呢?

— 第158页,第5章,可信度:评估所学知识,《数据挖掘:实用的机器学习工具与技术》,第三版,2011年。

2. 接受10折交叉验证的问题

可以使用未经修改的配对学生t检验进行朴素的10折交叉验证。

相对于其他方法,它具有良好的可重复性和中等的II型错误,但已知具有较高的I型错误。

实验结果也提示,在解释10折交叉验证t检验的结果时应保持谨慎。该检验的I型错误概率偏高(高达目标水平的两倍),尽管这远没有重采样t检验的问题严重。

用于比较监督分类学习算法的近似统计检验,1998年。

这是一个选项,但非常不推荐。

3. 使用麦克尼马尔检验或5x2交叉验证

对于单次运行的分类准确率结果,使用麦克尼马尔检验,以及在一般情况下使用5x2折交叉验证和修正的配对学生t检验,这两项长达二十年的建议依然有效。

此外,根据Weka开发者的推荐,Nadeau和Bengio对检验统计量的进一步修正可以与5x2折交叉验证或10x10折交叉验证一起使用。

使用修正t统计量的一个挑战是,没有现成的实现(例如,在SciPy中),这需要使用第三方代码,并承担由此带来的风险。您可能需要自己实现它。

Gitte Vanwinckelen和Hendrik Blockeel在他们2012年的论文《关于用重复交叉验证估计模型准确度》中很好地说明了所选统计方法的可用性和复杂性是一个重要的考虑因素。

虽然这些方法经过精心设计,并且在多个方面显示出对先前方法的改进,但它们也面临着与先前方法相同的风险,即方法越复杂,研究人员错误使用它或错误解释结果的风险就越高。

我在这里有一个使用麦克尼马尔检验的例子

4. 使用非参数配对检验

我们可以使用非参数检验,它作出的假设较少,例如不假设技能分数的分布是高斯分布。

一个例子是威尔科克森符号秩检验,它是配对学生t检验的非参数版本。这个检验的统计功效比配对t检验低,但在t检验的期望(如独立性)被违反时,其功效更高。

Janez Demsar在他2006年的论文《在多个数据集上对分类器进行统计比较》中,推荐使用这种统计假设检验来比较不同数据集上的算法。

因此,我们建议使用威尔科克森检验,除非t检验的假设得到满足,这可能是因为我们有很多数据集,或者因为我们有理由相信跨数据集的性能度量是正态分布的。

尽管该检验是非参数的,但它仍然假设每个样本内的观察值是独立的(例如,独立同分布),而使用k折交叉验证会产生依赖的样本,从而违反了这一假设。

5. 改用估计统计学

除了统计假设检验,还可以计算估计统计量,例如置信区间。鉴于模型评估所使用的重采样方法违反了独立性假设,这些方法也会遇到类似的问题。

Tom Mitchell在他1997年的书中提出了类似的建议,建议将统计假设检验的结果视为启发式估计,并寻求模型技能估计的置信区间。

总而言之,没有单一的程序可以在有限数据的基础上比较学习方法,并满足我们想要的所有约束。明智的做法是牢记,当可用数据有限时,统计模型很少能完美地适应测试学习算法的实际限制。尽管如此,它们确实提供了近似的置信区间,这在解释学习方法的实验比较时非常有帮助。

— 第150页,第5章,评估假设,《机器学习》,1997年。

像自助法(bootstrap)这样的统计方法可以用来计算可靠的非参数置信区间,这些置信区间既可以用来呈现结果,也可以用来比较分类器。这是一个简单而有效的方法,你可以随时依赖它,而且我通常也推荐它。

事实上,置信区间是自助法领域中理论研究最多的主题。

— 第321页,《自助法导论》,1994年。

扩展

本节列出了一些您可能希望探索的扩展本教程的想法。

  • 查找并列出三篇错误使用未修正的配对学生t检验来比较和选择机器学习模型的研究论文。
  • 总结Thomas Dietterich 1998年论文中提出的在机器学习项目中使用统计假设检验的框架。
  • 查找并列出三篇正确使用麦克尼马尔检验或5x2交叉验证来比较和选择机器学习模型的研究论文。

如果您探索了这些扩展中的任何一个,我很想知道。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

论文

书籍

文章

讨论

总结

在本教程中,您了解了为比较机器学习模型选择统计假设检验的重要性和挑战。

具体来说,你学到了:

  • 统计假设检验可以帮助比较机器学习模型和选择最终模型。
  • 不加思考地应用统计假设检验可能会导致误导性结果。
  • 正确使用统计检验具有挑战性,目前的一些共识是使用麦克尼马尔检验(McNemar's test)或5x2交叉验证与修正的配对学生t检验。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握机器学习统计学!

Statistical Methods for Machine Learning

培养对统计学的实用理解

...通过在 python 中编写代码

在我的新电子书中探索如何实现
机器学习的统计方法

它提供关于以下主题的自学教程
假设检验、相关性、非参数统计、重采样,以及更多...

探索如何将数据转化为知识

跳过学术理论。只看结果。

查看内容

用于比较机器学习算法的统计显著性检验的160条回应

  1. Raj 2018年6月23日下午7:33 #

    再次感谢这篇很棒的文章,并将其简化以便更好地理解。

  2. Eli 2018年6月24日下午12:24 #

    这篇文章似乎建议我们应该在训练集上比较模型。但我们不应该关注在测试集上性能的差异吗?

    • Jason Brownlee 2018年6月25日上午6:17 #

      是的,模型在训练集上训练,其技能在一个留出的测试集上进行评估和比较。

  3. Mark 2018年8月24日上午4:56 #

    是否可以对同一模型的重复测量进行统计检验?比如说,我们在特定数据集上运行了10次同一个神经网络,但初始化不同。这有意义吗?应该使用哪种检验?

    • Jason Brownlee 2018年8月24日上午6:16 #

      是的,这正是上述文章中针对5x2交叉验证所描述的情况。

  4. Sargun 2018年11月18日上午3:20 #

    直接使用配对样本T检验是否可以,其基本假设是样本是相关的?

  5. David 2018年11月29日上午12:31 #

    如果你有一个高度不平衡的数据集,并且你正在预测少数类。即使你做了下采样,并且不介意有更多的假阳性,因为你正在预测一个罕见事件。那么,t检验可能没有那么糟糕,不是吗?

    (顺便说一下,这是对该主题的一个很好的总结)

  6. Yuexian 2019年1月5日上午5:45 #

    麦克尼马尔检验或5x2交叉验证可以用来比较不同的机器学习回归器吗?

    • Jason Brownlee 2019年1月5日上午7:01 #

      5x2交叉验证可用于回归,麦克尼马尔检验仅适用于分类。

  7. Sachin Date 2019年3月6日晚上9:59 #

    嗨,Jason,
    一如既往的好文章!我渴望在真实世界的数据集上尝试5x2交叉验证。

    关于下面这行:“除了统计假设检验,还可以计算估计统计量,例如置信区间”
    我想知道如何为神经网络模型计算置信区间。我通常会先计算模型预测的标准误差,然后乘以我感兴趣的置信水平对应的t值,从而得到+/-置信区间范围。但是,预测的标准误差恰好是模型标准误差加上模型每个参数标准误差的均方根(RMS),前者我或许可以通过对模型在训练集上的RMS损失进行平方来轻松得到。但如何得到参数误差呢?获取该值需要我知道最终训练模型中每个参数的值——而AI库通常不会轻易暴露这些信息。我也不能忽略参数误差,因为它在神经网络模型中可能占预测误差的很大一部分,因为涉及的参数数量巨大。

    如果我的思路有什么问题,请您帮我指正。或者说,这是否是神经网络的一个真正问题,即无法使用传统的统计技术来得出模型预测的置信区间?

    谢谢

  8. Raz 2019年3月13日下午4:29 #

    嗨,Jason,

    本教程为选择合适的检验提供了很好的理解。但是,在单个数据集上比较多个分类器时,哪种非参数检验最合适?
    在这种情况下,我们能否应用威尔科克森符号秩检验?

    • Raz 2019年3月14日上午12:04 #

      ... 并运行10折交叉验证

    • Jason Brownlee 2019年3月14日上午9:17 #

      对分类器进行成对检验,可能使用修正的t检验或威尔科克森检验。

  9. Álvaro Lozano 2019年3月22日上午12:16 #

    你好 Jason,

    一如既往的好文章!

    我正面临一个问题,即在获得几种回归算法(如SVR等)的交叉验证结果后,如何选择最佳的回归算法。

    读完您的文章后,我想知道我应该采用什么方法,以便在一个函数中将其通用化。该函数接收每种算法的多个结果(例如,来自cross_val_score函数的结果),然后基于统计检验(或其他方法)返回哪个更好。

    感谢您的帮助,并祝贺您的博客。

    诚挚的问候

    • Jason Brownlee 2019年3月22日上午8:30 #

      我推荐使用带有修正学生t检验的2x5交叉验证方法。

  10. Faisal 2019年4月5日上午5:47 #

    嗨,Jason,

    在一篇研究论文中,一个数据集的分类准确率报告为78.34 +/- 1.3,共运行25次。(这里的1.3可以是95%置信区间或标准差)。

    我也在同一个数据集上运行了我的算法25次,并使用学生t值计算出95%置信区间为74.9 +/- 1.05。

    现在,仅仅通过绘制图表和观察重叠部分,我们就能判断是否有显著性吗?我想知道他们的结果和我的结果之间是否存在显著差异。

    关于做方差分析(ANOVA)怎么样?我们该怎么做,因为我没有那篇论文里的25次运行数据。我可以用他们的均值和标准差生成假的随机数据,然后再做方差分析吗?

    如果他们报告的是+/-标准差而不是95%置信区间,会有什么不同(或者如何处理)?

    谢谢。

    • Jason Brownlee 2019年4月5日上午6:23 #

      也许可以联系作者,询问这个分数代表什么?
      或许您可以自己复现这个发现?
      或许做一个合理的假设然后继续。

  11. Faisal 2019年4月5日上午6:34 #

    我之前写的,生成随机数据以复现具有相似均值和标准差的结果,然后使用方差分析,这有意义吗?所有25次运行的测试数据集都将不同,所以我认为这不能是配对检验。谢谢。

    • Jason Brownlee 2019年4月5日下午1:56 #

      所描述的方法让我非常紧张。

      也许可以和统计学家谈谈?

      • Faisal 2019年4月6日上午1:28 #

        我不知道该表现出什么样的心情,是高兴还是难过!

        现在已经确认,在一篇论文中,作者在+/-后面使用的是标准差。所以我用他们的均值和sigma从正态分布中生成了25个随机数。然后我制作了ANOVA表并用箱形图表示它们。当然,由于随机数的缘故,每次不同的运行都会有一些差异。我不确定这是否可以作为显著性的合理解释?

        再次感谢。

  12. YH 2019年4月5日上午7:12 #

    嗨!

    这篇文章主要讨论了比较算法时使用交叉验证的情况,对于使用单个训练/测试集划分,其中每个训练样本的误差差异成为单个样本的情况,是否有使用配对统计检验的指导?

    这里的独立性假设是否因为预测都来自同一个模型而被违反了?

    谢谢!

  13. Leah 2019年4月17日晚上9:01 #

    嗨,Jason,

    我让参与者学习9个对话,然后使用一个NPC分类器观察2个大脑区域,看分类器是否能够准确区分每个对话。
    我应该使用配对学生t检验(也称相关样本t检验)还是威尔科克森符号秩检验?

    谢谢!

    • Jason Brownlee 2019年4月18日上午8:43 #

      可能是学生t检验,但要检查数据分布以确认其为高斯分布。

  14. Wong 2019年4月18日晚上7:34 #

    你好,布朗利博士

    我有三种分类算法,我想将它们堆叠起来,而不是选择其中性能最好的一个。我已经对我的子算法进行了模型相关性分析,并将弱相关的算法堆叠起来。我不感兴趣检查三种算法中哪一个性能最好,而是想将它们堆叠以获得更好的结果。

    我的问题是;在这种情况下,我需要对我的子模型之间或元分类器和子分类器之间进行显著性检验吗?在我的场景中,统计显著性检验是否是必需的?……我和我的导师意见不一。

    我做了5个实验。在所有实验中,我都使用不同的预测变量组合来预测/分类同一事物,第5个实验产生了最好的结果。在所有5种情况下,堆叠模型的性能都优于3个子分类器。

    我有必要在这些模型之间进行显著性检验吗?如果需要,我应该在哪个层面上进行检验,为什么?

    非常感谢,您的网站非常有帮助。

    如果您在评论后能附上一篇科学论文的链接,我将不胜感激。

    • Jason Brownlee 2019年4月19日上午6:07 #

      干得漂亮!

      不,不需要进行显著性检验。

  15. Ankush Chandna 2019年5月1日上午12:13 #

    嗨,Jason,

    我运行了10个Xgboost模型,每个模型预测客户打开每种产品邮件的概率。
    例如:模型1输出:概率(客户打开产品1的邮件)
    模型2输出:概率(客户打开产品2的邮件)

    所有这些模型都是基于相同的特征构建的,但底层的人群不同(训练数据由过去收到过邮件的人组成)。然而,这些模型是在全体客户人群上进行评分的。

    我可以直接比较这些概率,然后说客户1最有可能打开产品5的邮件,因为他对产品5的概率最高吗?

    如果不行,能否请您指点一下将这些概率转化为可比较的方法?

    • Jason Brownlee 2019年5月1日上午7:06 #

      如果模型有共同点,例如相同的训练数据/模型/目标等,它们就可以进行比较。

      或许可以退一步,考虑一下实验的输入和输出,以及正在比较的是什么。

  16. Jan Brauner 2019年5月24日上午6:25 #

    嘿,感谢这篇非常有用的文章。

    关于对深度学习模型使用麦克尼马尔检验
    Dietterich关于麦克尼马尔检验写道:“它不直接测量由训练集的选择或学习算法的内部随机性引起的变化。选择一个单一的训练集R,然后仅使用该训练集比较算法。因此,只有当我们认为这些变化来源很小时,才应使用麦克尼马尔检验。”

    深度学习分类器的内部随机性很高,因为随机种子非常重要。然而,您写道麦克尼马尔检验是深度学习的一个好选择。为什么?仅仅是因为我们没有更好的替代方案吗 🙂?

    • Jason Brownlee 2019年5月24日上午8:00 #

      正确。您是在权衡多次运行模型的能力(成本高)与检验在方差下的不稳定性(存在一些误差)。

  17. Jan Brauner 2019年5月24日上午6:55 #

    嘿,又是我 🙂

    那么对于典型的深度学习情境,您会推荐哪种测试呢?
    – 我们的数据集被分成两个不重叠的数据集:训练集和测试集。
    – 我们在训练集上训练了每个模型的几个(比如5个)随机种子,并计算了测试集性能。

    我找不到一个合适的方法来做这件事
    – 麦克尼马尔检验似乎不合适,因为我们有多次运行/随机种子。
    – 5x2交叉验证似乎不合适,因为我们没有做交叉验证(我们只在一个集上训练,在另一个集上测试,反之则不然)。(因此,我们每个模型只有5个性能度量,而不是10个)
    – 简单地用例如非配对t检验来比较模型之间的5个性能度量(每个来自一次运行,例如平均测试集准确率)似乎效率很低。这种方法没有利用 a) 每个度量实际上是由可能成千上万个样本计算出来的(取决于测试集的大小),以及 b) 这些样本是“配对的”这一事实。

    最后,这可能是一个全新的问题:您建议的方法都假定我们知道测试数据点是如何被我们的模型分类的。如果我们没有这些知识怎么办?例如,我现在的情况是,我只有每个数据点的类别分数(我的神经网络分类器最终sigmoid/softmax层的输出),但我还没有确定分类的阈值。我看不出有任何其他理由来确定这些阈值,因为我可以在不这样做的情况下报告模型的AUC-ROC。有没有什么统计检验可以用来比较模型,而不需要每个数据点的实际类别?

    我完全知道解决我的统计问题不是您的工作,但如果您碰巧觉得我的问题有趣,或者认为未来的读者也能从您的回答中受益,我将非常感激 🙂

    • Jason Brownlee 2019年5月24日上午8:06 #

      大多数人什么都不做,只是进行单次运行并报告结果,或者多次运行并将模型集成。

      这就是您希望改进的基准,一个很低的门槛。

      如果可能,创建一个数据集,并在几个EC2实例上进行5x2交叉验证。

      交叉熵可以捕捉真实/预测分布之间的平均差异,而不是一个明确的分类结果。这就是为什么我们用它作为损失函数。更多信息在这里
      https://machinelearning.org.cn/how-to-score-probability-predictions-in-python/

      请尽管提问。我创建这个网站就是为了进行这些讨论!

      • Jan Brauner 2019年5月25日上午6:10 #

        非常感谢您的回答,您的响应速度真是惊人!

        对于5x2交叉验证,我需要创建5个不同的、随机的50/50数据集划分。我在学术界,所以——您可能知道——由于多种原因,这似乎是不可行的。
        – 基准数据集通常有固定的训练集和测试集,我无法重新分配它们。
        – 如果我想要达到最先进的性能,只在50%的数据集上训练会非常糟糕。
        – 也许最重要的是,这种做法在学术深度学习研究中似乎闻所未闻。所以审稿人会认为这是一种很奇怪的做法,我可能在发表时遇到麻烦。

        有没有什么有用的方法,既能更好地适应学术深度学习研究的“常规方式”(即,在给定情况下可以进行的测试:每个模型在固定测试集上评估多次运行)?

        到目前为止,我能想到的最好的方法是,将每个模型的多次运行结果集成起来,然后对这些集成结果使用麦克尼马尔检验或者简单的二项检验。但这也有明显的问题(没有考虑深度学习的内部随机性)。

        (旁注:我来自一个不同的领域(生物医学研究),我对深度学习研究中缺乏统计假设检验感到非常惊讶。我昨天看了大约10篇著名论文:没有一篇做任何检验,而且绝大多数甚至没有报告任何标准差或使用多次运行……这背后可能有一个我还不理解的好理由)

        • Jason Brownlee 2019年5月25日上午8:00 #

          是的。使用该主题所有其他论文中使用的协议,或者它们的平均水平。遵守游戏规则,即使以牺牲现实为代价。

          跳过显著性检验。原因是——在数据和计算方面成本太高。真正的原因,可能是缺乏对良好统计学的了解。此外,还有一个科学界普遍的趋势,即转向“估计统计学”(例如效应量、区间等),而远离假设检验。

          是的,集成多次运行的结果,这在大多数DL+CV论文中是默认做法,甚至现在的GAN论文也是如此。

          • Jan Brauner 2019年5月26日上午5:53 #

            好的,再次感谢。既感谢您的回答,也感谢这篇博客文章,这是我在网上能找到的关于这个主题最容易理解的论述。

          • Jason Brownlee 2019年5月26日上午6:52 #

            谢谢。

  18. riadh ayachi 2019年6月29日上午12:04 #

    是否可以使用配对t检验来比较基于深度学习方法(卷积神经网络)的多目标检测(包括回归和分类)算法?

  19. riadh ayachi 2019年6月29日上午8:39 #

    我想将我的算法与其他多目标检测算法进行比较。多目标检测算法的性能是使用平均精度均值(mAP)指标来定义的,因为多目标检测算法将回归和分类结合在同一个流程中。如何使用配对t检验来评估我的算法相对于基准算法的鲁棒性。

    • Jason Brownlee 2019年6月30日上午9:33 #

      也许一个好的起点是比较两种方法的mAP分数样本?

  20. zeinab 2019年8月15日上午10:52 #

    嗨,Jason,
    我想比较4个keras回归模型,每个模型都进行了5折交叉验证,我可以使用哪种检验方法?

  21. zeinab 2019年8月17日晚上10:05 #

    有没有一个例子可以展示如何选择模型?

  22. zeinab 2019年8月20日晚上8:56 #

    我可以使用统计检验来比较两个深度学习模型吗?

  23. zeinab 2019年8月20日晚上8:57 #

    我该如何比较一个深度学习模型和一个试图解决相同问题的基于规则的模型?

    • Jason Brownlee 2019年8月21日上午6:41 #

      基于它们在留出数据集上的技能。

      • zeinab 2019年8月21日上午8:22 #

        那么,如果基于规则的模型使用相关系数在数据集上进行测试,而深度学习模型使用相关系数在5折交叉验证上进行测试。
        那么要比较这两个模型,我必须
        1- 计算深度学习模型的性能,即其在5折上的相关系数的平均值。
        2- 比较模型的相关系数,相关系数较高的模型将比另一个更有效。

        这是您的意思吗?

        • Jason Brownlee 2019年8月21日下午2:02 #

          这听起来是合理的,尽管选择相关系数作为度量标准可能有点奇怪。通常我们使用预测误差来进行模型选择。

  24. zeinab 2019年8月20日晚上9:01 #

    如果有一个机器学习回归模型,它使用训练/测试集划分的方法来训练。

    还有一个回归深度学习模型,它使用5折交叉验证的方法来训练。

    我可以比较这两个模型吗?

    如果可以,我该如何比较它们?

    • Jason Brownlee 2019年8月21日上午6:41 #

      是的。基于它们的性能。

      • zeinab 2019年8月21日下午2:25 #

        怎么比较呢?它们是使用两种不同的方法训练的,一个使用(训练/测试集划分),另一个使用(k折交叉验证)?

  25. zeinab 2019年8月21日上午8:44 #

    据我理解,为了比较机器学习或深度学习模型,我必须
    1- 在两个模型之间进行统计检验。
    2- 根据p值,我们可以确定两个模型是性能相同还是不同。

    在这种情况下,两个模型是使用两种不同的方法进行测试的(一个使用训练/测试集划分,另一个使用5折交叉验证)。

    那么,我该如何在这两个模型之间进行统计检验呢?

    • zeinab 2019年8月21日上午8:45 #

      我不确定,但我是否可以假设这两个模型的性能不同,然后直接根据它们的相关程度进行比较?

      • Jason Brownlee 2019年8月21日下午2:05 #

        我们反过来做,假设没有差异,然后检查是否存在差异,如果存在,则选择平均得分最好的那个。

        • zeinab 2019年8月21日下午2:42 #

          是的,您指的是零假设。

          但是,我谈论的是比较两个应用不同测试方法的机器学习模型的性能。

          既然我不能对它们进行统计检验,那么先假设它们的性能不同,然后选择得分最好的那个,这样做正确吗?

          如果不正确,我该如何比较两个应用不同测试方法的模型?

    • Jason Brownlee 2019年8月21日下午2:04 #

      不,必须对两种算法使用相同的测试方法,例如k折交叉验证。

  26. zeinab 2019年8月21日下午2:34 #

    所以,即使两个机器学习模型使用两种不同的测试方法,我也可以对它们进行测量。

    但是,我不能在它们之间进行任何统计检验?

    如果以上两个陈述是正确的,
    请告诉我如何比较两个使用不同测试方法的机器学习模型?

    • Jason Brownlee 2019年8月22日上午6:18 #

      通常,您必须对两者使用相同的测试方法,否则比较将没有意义。

  27. zeinab 2019年8月22日下午4:34 #

    非常感谢你,Jason。

  28. zeinab 2019年8月23日上午10:26 #

    有一个用于文档分类的深度学习模型。

    这个模型的工作方式如下
    1- 使用嵌入层
    2- 然后使用双向GRU作为高层文档表示,这些表示可以作为特征通过softmax进行文档分类。

    我可以说嵌入层和GRU的组合是用于文档表示的吗?

    • Jason Brownlee 2019年8月23日下午2:08 #

      也许可以。这取决于您的受众以及您所说的“表示”是什么意思。

      更准确的说法可能是描述输入格式以及在模型处理前所执行的转换。

  29. zeinab 2019年8月25日上午12:56 #

    有没有办法比较两种采用不同测试方法的机器学习算法?

    如果有,能告诉我怎么做吗?

  30. Fabijan 2020年1月20日晚上9:05 #

    非常感谢您的所有努力。我有一个问题。配对学生t检验不应该用于通过k折交叉验证生成的分数,因为这些分数不是独立的(一个观测值被使用了k-1次)。一个替代方法是使用自助法(bootstrapping)来生成训练集和测试集,然后在其上训练和评估您的模型。然后呢,对这些数字使用配对学生t检验吗?它们不也是相关的吗,因为一个观测值很可能被使用了k次(如果过程重复了k次)?

    • Jason Brownlee 2020年1月21日上午7:11 #

      来自自助法(bootstrap)的分数也不是独立的,因为抽取的样本之间存在重叠。

      或许可以重读上面的教程,并注意t检验的修正版本。

      • Fabijan 2020年1月21日上午7:50 #

        好的,所以这个修正的t检验就像普通的t检验,但是使用不同的公式?现在关于自助法——如果我要通过使用比如10次自助法迭代来比较两个模型,作为10折交叉验证的替代方案,那么我该如何处理这两组各10个数字呢?我需要采取什么数学程序来判断模型之间是否存在显著差异?

        • Jason Brownlee 2020年1月21日下午2:51 #

          正确。

          您或许可以使用相同修正版本的学生t检验。

          • Fabijan 2020年1月21日晚上8:32 #

            谢谢您的回答。

          • Jason Brownlee 2020年1月22日上午6:21 #

            不客气。

  31. Richa Jain 2020年1月24日上午7:45 #

    你好 Jason,我关注你的博客文章已经有一段时间了,它们总是简洁明了,切中要害。我很感谢你花精力写这些文章。我想请求一篇关于这个主题的后续文章,你可以在其中演示一个如何使用 Python 实现这些技术的例子。

  32. Nitin Pasumarthy 2020年3月10日 早上8:23 #

    嗨,Jason,一如既往,这是一篇非常切题的文章,我计划在工作中使用它。我们计划绘制多个模型在同一个大型数据集(例如超过10万个样本)上计算出的AUC趋势图。如果模型2在过去n天内一直比模型1表现得更好,这难道不足以说明模型2相对优于模型1吗?我觉得这是个愚蠢的问题,但同时,我不明白为什么我们需要t检验或类似的方法来理解模型的“相对”性能。

    • Jason Brownlee 2020年3月10日 下午1:38 #

      你可以直接比较两个样本的均值。

      假设检验可以让你判断均值之间的差异是真实的,还是统计上的偶然现象。

  33. Pankhuri Jain 2020年5月22日 晚上7:36 #

    这篇博客非常有用。你能给我建议一下,如何应用t检验来比较在多个数据集上评估的两种或三种算法吗?

    • Jason Brownlee 2020年5月23日 早上6:17 #

      可以,请使用上面教程中描述的步骤。

  34. asad khan 2020年6月22日 晚上9:53 #

    亲爱的Jason,在二元分类问题中,我们如何使用t检验进行特征选择?

  35. Chi 2020年7月23日 早上8:05 #

    嗨,Jason,

    我正在尝试评估几个分类模型的结果。这些模型的应用场景要求它们产生0%的假阳性(false positive)。我该如何检验我的假阳性率是否真的为0?

  36. Ross 2020年8月21日 早上7:02 #

    为什么我们必须使用相同的数据划分?为什么我们不能在不同的划分上进行模型预测,然后执行t检验?

    • Jason Brownlee 2020年8月21日 早上7:53 #

      如果我们使用相同的数据划分,我们就可以使用配对检验,这种检验具有更强的统计功效。

  37. Talha Mahboob Alam 2020年8月27日 晚上8:03 #

    如何进行一些假设检验,来证明使用不同机器学习技术开发的模型是显著相同还是不同。

  38. Manuel Gonçalves 2020年10月5日 晚上11:26 #

    这个5×2交叉验证的修正t检验和Alpaydin提出的组合F检验5×2交叉验证是同一个东西吗?
    参考文献: https://www.cmpe.boun.edu.tr/~ethem/files/papers/NC110804.PDF

    • Jason Brownlee 2020年10月6日 早上6:53 #

      我不知道,也许可以检查一下数学原理或者问作者。

  39. Shirina Samreen 2021年2月7日 凌晨12:41 #

    我想知道,即使我对数据集使用了重复分层k折交叉验证,是否还需要进行统计显著性检验?

    • Jason Brownlee 2021年2月7日 早上5:20 #

      在比较算法之间的结果时,它可以有所帮助(例如,上述教程的内容)。

  40. Shirina samreen 2021年2月7日 晚上7:05 #

    但在博客的另一篇文章中提到

    在Thomas Dietterich于1998年发表的关于使用统计假设检验比较分类器的重要且被广泛引用的论文《比较监督分类学习算法的近似统计检验》中,他推荐使用麦克尼马尔检验(McNemar's test)。

    具体来说,该检验被推荐用于那些待比较的算法只能评估一次的情况,例如在一个测试集上评估,而不是通过像k折交叉验证这样的重采样技术进行重复评估。
    ————————–
    所以,如果我使用了重复K折交叉验证,麦克尼马尔检验就不合适了,而且我听说根据以下文献,重复k折交叉验证足以显示稳定性。

    Beleites, C. & Salzer, R.: Assessing and improving the stability of chemometric models in small sample size situations Anal Bioanal Chem, 2008, 390, 1261-1271.
    DOI: 10.1007/s00216-007-1818-6

    • Shirina samreen 2021年2月7日 晚上8:34 #

      如果我的问题能得到澄清,我将不胜感激,因为我需要相应地将其纳入我的研究论文中。提前感谢。

    • Jason Brownlee 2021年2月8日 早上6:59 #

      没错,如果你使用k折交叉验证,那么麦克尼马尔检验是不合适的。

      你应该使用修正的配对学生t检验。

      我们在上面的教程中恰好讨论了这一点。

      • Shirina samreen 2021年2月13日 晚上10:17 #

        非常感谢您的回复。我想问一下,我是否可以根据以下研究论文,声称如果使用重复分层k折交叉验证作为评估方法,则不需要进行统计显著性检验。

        Beleites, C. & Salzer, R.: Assessing and improving the stability of chemometric models in small sample size situations Anal Bioanal Chem, 2008, 390, 1261-1271.
        DOI: 10.1007/s00216-007-1818-6

        • Jason Brownlee 2021年2月14日 早上5:07 #

          你可以用任何你喜欢的支持/证据来提出任何你喜欢的观点——这是你的研究。

          你的主张是否基于证据得到证明,这取决于你的审稿人。

  41. Aya 2021年2月23日 凌晨1:29 #

    嗨,Jason,

    我想在一个高度不平衡的数据集上,基于一个二元分类问题,比较一个深度人工神经网络模型和一些传统的机器学习算法,如逻辑回归、支持向量机、k最近邻和决策树。
    我已经使用了一些重采样方法,如SMOTE、ADASYN、ROS和SMOTE-ENN来处理不平衡数据集的问题。我使用了各种评估方法
    例如预测准确率、召回率、精确率和F1分数。

    此外,还使用了随机留出法和分层5折交叉验证作为模型验证技术。

    我可以使用哪种统计检验方法?

    提前感谢!

    • Jason Brownlee 2021年2月23日 早上6:22 #

      上面的教程正好回答了这个问题!

      然后你必须做出选择。

  42. Ayah 2021年5月31日 早上5:41 #

    嗨,Jason,

    如果数据集不平衡并运行10折交叉验证,我可以使用Wilcoxon符号秩检验来比较两个模型吗?尽管它违反了样本独立性的约束?

    • Jason Brownlee 2021年5月31日 早上5:52 #

      你可以在你的项目中使用任何你想用的方法。

      上面的教程建议在比较k折交叉验证的结果时使用修正的学生t检验。

  43. Anne Freire 2021年6月6日 早上7:36 #

    嗨,Jason,

    首先,让我祝贺并感谢您精彩的文章。
    我阅读了这篇文章和 https://machinelearning.org.cn/hypothesis-test-for-comparing-machine-learning-algorithms/,以及几篇关于这个主题的文章。然而,我对我正在使用的程序仍然感到困惑。
    我有一个医学数据集和12个模型。这些模型使用5次重复的2折交叉验证进行评估,我是否可以使用弗里德曼检验(以及事后检验)来比较模型的性能,而不是执行66次配对修正学生t检验(paired_ttest_5x2cv)?我猜弗里德曼检验可能会有乐观偏差(因为模型的每次评估不是独立的),或者也许我理解错了……

    理想的做法是从我的数据集中抽取几个训练/测试集,以确保每次模型评估的独立性,但我的样本有限。此外,我有很多来自同一患者的样本,这会带来额外的限制吗?
    提前感谢,祝好

    • Jason Brownlee 2021年6月7日 早上5:16 #

      谢谢。

      如果你使用了5x2cv程序,你可以使用如上所述的配对学生t检验的修正版本。

      也许我没理解问题所在?

      • Anne Freire 2021年6月8日 早上7:04 #

        亲爱的 Jason,

        谢谢!我就是这么想的……但在这种情况下,我需要进行66次paired_ttest_5x2cv……嗯,可能更多!:)
        或者有什么选项可以一次性比较多个模型,而不是一对一地比较?

        此致,

        • Jason Brownlee 2021年6月8日 早上7:19 #

          是的。

          有太多结果要比较可能会让你重新考虑你的模型选择过程。

          • Anne Freire 2021年6月9日 凌晨2:21 #

            亲爱的Jason,谢谢。

            为了确定一下,弗里德曼检验是不考虑的,对吗?
            作为66次paired_ttest_5x2cv的替代方案,我正在考虑展示模型的平均值 +/- 标准误。
            这是一个可行的选择吗,还是你推荐其他方法?

            谢谢,

          • Jason Brownlee 2021年6月9日 早上5:45 #

            不,你可以使用任何你想要的检验,上面的教程只是一般性建议。如果你不确定,也许可以咨询统计学家。

  44. Anne Freire 2021年6月9日 早上9:39 #

    嗨 Jason

    谢谢你的帮助和建议!

  45. Clara 2021年6月15日 晚上11:07 #

    嗨,Jason,
    真是一篇很棒的文章!我想知道您是否了解Quade检验,以及在什么情况下您会倾向于使用它而不是McNemar检验?
    祝好,
    Clara

  46. Book 2021年7月23日 下午12:59 #

    嗨,Jason,

    感谢您内容丰富的文章,真的学到了很多。

    我正在比较两个模型,但这两个模型是在不同的数据集上训练的,却在相同的数据上进行测试。我还能使用非参数配对检验来评估它们吗?

    • Jason Brownlee 2021年7月24日 早上5:10 #

      一般来说,如果模型是在不同的数据集上训练的,它们不能直接比较。

  47. Graci 2021年9月18日 下午4:55 #

    感谢您的文章。它直截了当,易于理解。
    与深度学习领域的一些研究人员观察到的情况相同,大多数论文不使用统计分析,而是直接比较准确率、F1分数、训练/预测时间和top-1错误率。因此,我也这么做了(每个模型和每个参数设置只进行1到2次训练/验证/测试运行,并直接比较它们的性能指标),直到一位审稿人告诉我需要进行显著性检验。于是我来到了这里。
    我的数据集只有4000张高维图像(超过3个通道),并且由于是真实数据,所以它们是不平衡的。
    我对一个Keras深度学习模型进行了超参数设置实验(7个设置,每个运行1次),并选择了一个最佳设置用于我将要与我的提议模型进行比较的其他Keras模型。
    (1) 在这种设置下,如果我理解正确的话,我可以对所有参数设置的组合使用5×2 CV配对t检验(https://mlxtend.cn/mlxtend/user_guide/evaluate/paired_ttest_5x2cv/),对吗?
    (2) 在选择最佳参数/模型时,5×2 CV配对t检验后是否可以采用事后检验(post hoc test)?根据这个演示文稿(https://ecs.wgtn.ac.nz/foswiki/pub/Groups/ECRG/StatsGuide/Significance%20Testing%20for%20Classification.pdf)在第35张幻灯片(总结)中,似乎事后检验不是必需的。

    任何帮助都将不胜感激。
    致以最诚挚的问候。

    • Adrian Tam
      Adrian Tam 2021年9月19日 早上6:32 #

      (1)似乎是正确的。(2)t检验告诉你你的零假设模型是否与你的备择模型不同。所以你在检验后已经确认了是否存在一个“更好”的模型。事后检验的目的是什么?我不太确定它是否非必需,但如果你能说明理由,那么它可能是有用的。

  48. zxcheergo 2021年11月20日 晚上7:39 #

    你好,感谢您精彩的文章!我有一个关于统计检验和模型性能指标计算关系的新问题。例如,我有两种算法和一个数据集。我进行了McNemar检验和5x2CV来比较这两种算法之间的差异是否具有统计显著性。然后,我想报告结果。如果McNemar检验显示存在显著差异,我是否可以对每种算法使用5折交叉验证来计算性能指标,并通过结合McNemar检验(提供显著差异的p值)和性能指标(使用5折交叉验证)来报告结果?换句话说,统计比较与模型性能指标计算是分开的吗?提前感谢。

    • Adrian Tam
      Adrian Tam 2021年11月21日 早上7:52 #

      我认为如何关联这两个指标取决于你的解释。统计检验并不总是一致的,这时候就需要用户来解释或调和结果。

  49. zxcheergo 2021年11月22日 下午1:30 #

    感谢您的回复。此外,我想问一个更具体的问题。我是否可以先使用McNemar检验或5x2CV进行统计比较,然后再用5折交叉验证计算性能指标(例如,准确率)?我认为5折交叉验证可以得到模型性能的良好估计,因为它考虑了数据划分,这与McNemar检验不同。或者我必须使用与统计检验完全相同的方法来计算性能指标(即,使用McNemar检验得出的准确率结果)?非常感谢!

    • Adrian Tam
      Adrian Tam 2021年11月23日 下午1:24 #

      我认为为了公平起见,用相同的方法计算性能指标会更好。

  50. GF 2021年12月17日 凌晨1:55 #

    你好,
    感谢你所有的工作。我有一个关于深度学习中常见设置的问题

    一个无监督算法用(几乎)无限量的数据进行训练,但只有一个很小的标记集用于评估。我可以毫无问题地将训练集分成n个不相交的集合(除了训练时间长,所以n可能不应该远大于10),但是分割测试集是不可能的。当然,测试集的选择很重要,但如果我理解正确,所有描述的测试程序都假设我可以将测试集分割成独立或轻微重叠的集合(Bengio的交叉验证方法)。

    您有关于这种特殊情况的任何资源吗?有适用于这种情况的统计检验吗?谢谢!

  51. Max 2022年1月5日 早上4:08 #

    感谢这篇文章。

    只是想澄清一下,在5×2配对t检验中,我们是只训练5次并验证5次(在每个分割上一次)吗?还是对于5次重复中的每一次,我们都得到2个结果(交换测试集和训练集)?如果是后者(即总共训练10次),那么这些配对不就是相关的吗?

  52. Brian 2022年3月3日 晚上8:31 #

    感谢这篇很棒的文章!

    这是我试图比较的:使用相同算法的数据集

    我有数据集A和数据集B,我有一个KPI(我们称之为准确率),还有一个模型
    我想知道模型在数据集B上的表现是否比在数据集A上更好

    两个数据集都相当小,并且不能合并,因为它们使用不同的度量单位。我总是可以在每个数据集的一部分上训练模型,并在剩余部分上进行测试。

    在这种情况下
    – 我的数据集是相互独立的
    – 在每个数据集上评估模型会产生一个响应,我可以通过重采样产生多个响应

    所以我有由不独立的响应组成的独立样本

    哪种测试最适合这种情况?

  53. Eko Putra 2022年3月10日 早上4:12 #

    感谢这篇很棒的文章!

    上面描述的统计检验可以用来比较时间序列案例的LSTM模型吗?

    我有3个LSTM模型。模型1使用变量x1训练,模型2使用变量x1和x2训练,模型3使用变量x1、x2和x3训练。这三个模型也有不同的超参数。但是,所有三个模型都预测相同的Y值。这三个模型也都应用了10折的滚动预测验证(walk forward validation)。我的目标是看增加一个变量是否会提高预测的准确性(降低RMSE)。使用哪种统计检验是合适的?

    • James Carmichael 2022年3月10日 早上10:28 #

      嗨 Eko…你可能会发现以下内容很有帮助。它提供了一些理论知识,但同时也包含了比较多个模型的示例代码。

      https://par.nsf.gov/servlets/purl/10186554

      • Eko Putra 2022年3月10日 下午1:07 #

        感谢您的回复和参考论文。

        我读过了。在这篇论文中,他们使用相同的特征,即“调整后收盘价”,然后比较ARIMA、BiLSTM和LSTM模型。但在我的案例中,我为每个模型使用了不同的特征。具体来说,LSTM1使用“调整后收盘价”,LSTM2使用“调整后收盘价”和“开盘价”,LSTM3使用“调整后收盘价”、“开盘价”和“最高价”。LSTM1、LSTM2和LSTM3有不同的超参数。我使用论文中的方法来比较我的三个模型有意义吗?

  54. Nelly 2022年3月29日 晚上10:20 #

    嗨,Jason,非常感谢这篇很棒的文章,真的很有帮助!
    一个澄清的问题:就像在Dietterich 1998年的文章中一样,您的文章警告不要使用“10折交叉验证[...]与未修正的配对学生t检验”。我明白这一点。文章还说“Nadeau和Bengio对检验统计量的进一步修正可以与5×2折交叉验证一起使用...”。

    那么,将Nadeau和Bengio修正的配对t检验与(非重复的)k折交叉验证结合使用怎么样?还是说修正的t检验仍然只推荐与5x2cv设置结合使用?

    我一直在一个相当小的数据集上进行5折交叉验证。如果可能的话,我想避免使用5x2cv,因为那样我将只在我的已经很小的数据集的50%上进行训练。我可以合理地将Nadeau和Bengio的修正配对t检验与5折交叉验证一起使用吗?
    再次非常感谢!

    • James Carmichael 2022年3月30日 凌晨3:43 #

      嗨 Nelly…我认为你的想法没有理由不能实现。试试看,让我们知道你的发现!

  55. Nelly 2022年3月31日 晚上8:28 #

    好的,谢谢回复!

  56. AV 2022年4月26日 早上4:09 #

    你好,我有一个非常大的数据集,用于一个需要很长时间训练的深度学习医学图像分析项目。我正在测试不同的架构、预处理方法等组合。目前我使用5折交叉验证。然而,我最近在相同的训练/测试数据上运行了一个模型5次,它给出了不同的结果(我认为是由于模型的内在随机性)。我想知道,5次重复的2折交叉验证背后的原理是为了解释模型的随机性吗?在大多数其他情况下,我只听说过N折交叉验证,而不是5次重复。

  57. Neha 2022年4月26日 早上9:10 #

    你好!我正在处理一个机器学习问题,试图评估一个特定的分类算法是否显著优于随机分类器。我既有二元分类模型,也有多类分类模型。我无法使用交叉验证,因为我的数据集已经被分成了训练集和测试集。对于二元分类模型,我从这篇文章中猜测McNemar检验是最好的!对于多类分类算法,您会如何建议我测试分类算法是否显著优于随机分类器?非常感谢这篇文章和您的帮助!:)

  58. Silvia 2022年8月6日 下午12:37 #

    不错的文章。假设我有两个随机模型A和B,我用不同的种子各运行N次。在这种情况下,合适的统计检验是什么?

  59. Silvia 2022年8月6日 下午12:39 #

    这些模型在每次运行时都在完全相同的数据集上运行。

    • James Carmichael 2022年8月7日 早上7:13 #

      感谢您的反馈,Silvia!如果您有任何其他问题,请告诉我们。

  60. Jim Cardwell 2022年8月9日 下午1:28 #

    嗨,Jason – 感谢这个很棒的网站。这篇教程已经有几年了,但希望你偶尔还会看看问题。我的情况如下
    我正在研究一个分类问题,以预测客户发票的逾期付款,并且每周都会重新生成一个稍大的数据集,包括旧数据和期间获得的任何新数据。在进行训练-测试分割后,我训练了5种算法——随机森林、梯度提升、轻量梯度提升、XGBoost和Catboost。它们的准确率都在78%到81%之间,我倾向于对未见数据(尚未逾期且我们不知道是否会按时付款的新发票)取平均预测。然而,当我应用训练好的模型来预测新的、未逾期的发票是否会逾期付款时,我注意到4个提升模型预测几乎100%会逾期,而随机森林预测的正/负结果混合比例与已知数据中的混合比例更为接近——大约59%。我是不是在取平均预测而不是取最高准确率模型(通常是Catboost)或随机森林的预测(它似乎“符合”一般数据集中逾期付款的比例)方面犯了错误,或者我应该大胆相信提升模型的预测,即最近的数据集中的几乎所有发票都会逾期付款?有什么建议可以解决这个问题吗?

    • James Carmichael 2022年8月10日 早上5:42 #

      嗨 Jim…请将你的问题缩小到一个问题,以便我们更好地帮助你。

  61. Sara 2022年8月29日 早上7:28 #

    嗨,Jason,

    非常感谢这篇教程,

    我有以下问题,如果我们想比较同一个模型在两个数据集上的性能怎么办?McNemar检验是我的选择,因为我正在训练一个深度学习模型(训练/划分方法,评估一次),然而,根据我现在的理解,它并不能衡量由训练集选择引起的可变性。

  62. aj 2023年3月4日 凌晨2:00 #

    嗨,你的教程很棒,但我对这种情况下的统计显著性有一个疑问——如果我在Lang0语言上训练数据并生成一个模型。之后使用Lang0模型,我在其他语言如Lang1, Lan2...Lang5上进行测试,使用了不同的算法如AlgoA, AlgoB和AlgoC,并得到了准确率。那么在这种情况下,是否可以进行统计显著性检验?训练时没有进行交叉验证。

    比如说我有

    语言 算法1 算法2 算法3 算法4 算法5
    语言1 80 32 95 93 96.67
    语言2 88 11 98 97 92.51
    语言3 49 12 76 80 72.75
    语言4 81 2 95 94 77.7
    语言5 81 43 95 96 94.95

  63. Eve 2023年3月5日 早上8:40 #

    你好!感谢这篇精彩的文章!
    只是一个问题.. 我假设修正的配对t检验与配对t检验有相同的假设。对于比较模型的修正版本,是否存在非参数的等价方法?
    提前感谢!

    • James Carmichael 2023年3月5日 早上9:31 #

      嗨 Eve…你可能会对以下资源感兴趣

      https://machinelearning.org.cn/parametric-and-nonparametric-machine-learning-algorithms/

      • Eve 2023年3月5日 早上10:28 #

        你好,非常感谢你这么快的回复!我的意思是,如果模型之间误差对的差异不服从正态分布,那么我们就需要使用Wilcoxon符号秩检验(作为配对t检验的非参数等价方法)。然而,Wilcoxon符号秩检验同样假设观测值是独立的。在这种情况下,我们该如何比较模型呢?

  64. Nico 2023年7月6日 晚上6:08 #

    你好!感谢这篇精彩的文章和指导。我也有一个关于使用显著性检验来比较两个分类器的问题。在我的案例中,我有十个不同的数据集,对于每个数据集,我分别训练了每个分类器三次。

    如果对每个数据集进行显著性检验,我担心观测值可能不足,因为只有三对准确率值。我很希望能听听您对此的看法。

    除此之外,我也在考虑是否可以在所有这十个数据集上对两个分类器进行检验。这样我就可以得到每个分类器在每个数据集上的平均准确率,最终我们有十对准确率值。我正在考虑使用Wilcoxon符号秩检验。我想知道这在您看来是否可行?

    提前感谢!

  65. Ahmad 2023年9月19日 晚上10:04 #

    你好!感谢这篇精彩的文章和指导。

    我进行了一项实验,使用了10个堆叠集成模型进行分类,并使用7个性能指标(准确率、精确率、召回率、f1分数、精确匹配率、汉明损失和零一损失)对它们进行了评估。提出的模型表现最好。为了确定这个结果的显著性,我被建议使用像t检验这样的统计显著性度量。我应该使用t检验进行这种比较,还是有其他更适合评估这些模型之间性能显著性的替代方法?

    具体来说,我想回答这个问题:“在结果部分,比较不同模型时,你需要采用t检验等统计显著性度量来确保性能的显著性。”

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。