Last edited time
May 17, 2025 09:09 AM
password
AI summary
type
status
date
slug
summary
tags
category
icon
😀
前言: 由于论文中算法对比的需要,关于假设检验也做了很长时间的探索。为了后期便于回顾,本文主要介绍常用统计学知识,假设检验是什么,假设检验的局限性以及论文中是否需要假设检验,假设检验和显著性检验的区别等。 所有内容源自网络,这里只做汇总。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📝 主旨内容

机器学习论文里到底要不要做检验?

前不久PhD面试的时候,被问到论文里为什么没有做显著性检验?当时没有回答好,所以面试过后就有了好好琢磨一下这个问题的想法。显著性检验/假设检验是统计学里的工具,被广泛应用到社会科学,心理学,经济学等很多学科的研究中,当然也包括计算机科学,平常看论文偶尔也会遇到假设检验。
但必须承认的是,这几年,无论是CV、NLP还是数据挖掘,大部分论文里面都鲜有做假设检验的。绝大多数情况下,作者都只会给出对比实验的结果,根据研究的问题会涉及到3~10个数据集不等,如果在所有数据集上都能优于之前的SOTA,那就claim自己的算法/模型更优。顶会的oral甚至最佳论文亦是如此。
那为什么有人会觉得不做显著性检验不行呢?为什么有的审稿人会要求加上检验呢?很自然地,作为学术界的新人来说,内心会有极大的疑惑。假设检验/显著性检验在论文里到底担当着怎样的角色?什么时候我们该做或者不该做检验呢?在这篇笔记里,我尝试去剖析这个问题,看法未必都对,欢迎有不同见解的人留言交流。
本小节的大纲如下:
  1. 假设检验的基石 —— 中心极限定理
  1. 什么是假设检验 —— 简洁地把常见术语和流程梳理一下
  1. 假设检验的例子 —— 用一个例子把术语串起来,过一遍流程
  1. 机器学习中的假设检验
  1. 假设检验的局限

引子

统计学是一门系统的学科,建立在17世纪发展的概率论之上,可以分为数理统计学和应用统计学两大派系。其中应用统计学又可以细分为以描述数据为目的的描述统计学(descriptive statistics)和以从数据中获取结论为目的的推论统计学(inferential statistics)。机器学习最开始严格来说并不是一个学科,但在不断发展的过程中,从各个学科包括统计里吸纳了很多概念、工具和方法,集百家之长,逐渐形成了自己的体系。机器学习并不简单地是统计的延伸,但它用到了很多统计里的概念、方法和工具,假设检验就是其中一个重要工具。

中心极限定理

中心极限定理是概率论里很重要的一个定理,因为它使得很多建立在正态分布上的概率方法和统计方法可以被应用到涉及到别的分布形式的问题上。
经典中心极限定理描述的是:
如果我们从同一个总体分布中独立采样出一组数据,这组数据的均值是一个随机变量,它服从于一个以总体均值为均值,标准差等于总体标准差除以样本大小的平方根的正态分布。
也可以描述为:
notion image
变换一下其实是一样的。它的特别之处就在于我们并不要求总体分布必须是正态分布

什么是假设检验

假设检验,全称统计假设检验(statistical hypothesis testing)统计推断(statistical inference,通过分析观测数据推断出总体分布的性质)的一种方法。常常还会听到另一个说法——显著性检验,也即统计显著性检验(statistical significance test),严格来说两者并不等价,有一段充满争论的历史,但不幸的是,教科书里所提到的假设检验一般都是糅杂二者的产物。这个问题我不在文章里展开,只给出几个可供参考的材料:
  1. What is the difference between testing of hypothesis and test of significance?
  1. 假设检验和显著性检验的关系是什么?
  1. 统计假设检验-维基百科
下文如无例外,统一使用假设检验这个说法
假设检验的逻辑其实不难,简单来说就是:
要证明一个假设H1成立,等价于证明与它互不相容的假设H0不成立。根据小概率原理
在假设检验中,我们常会遇到以下术语:
  1. 零假设(null hypothesis),记作H0,是与待证明的假设互不相容的假设;
  1. 备择假设(alternative hypothesis),记作H1,是待证明的假设;
  1. 显著水平(significance level),记住α,它 是一个条件概率,表示我们错误拒绝了零假设的概率,也即 P(拒绝H0 | H0成立),也可以解释为我们能接受的最大假正例率;
  1. 置信水平(confidence level),记作γ,数值上等于1-α,一般跟置信区间(confidence interval, CI)一起出现。置信区间是指待估参数(比如高斯分布的均值)的可能取值范围,置信水平则是指真实的参数(总体分布的参数)落在置信区间上的频率或比例(注意不是概率)[17];
  1. 检验统计量(test statistic),记作T,它是概括试验中所有我们感兴趣因素的一个数值;
  1. 拒绝域(rejion of rejection),记作R,也叫临界区(critical region)。当被检验的统计量T落在拒绝域中,我们就会拒绝零假设H0。与拒绝域相对的概念就是接受域(acceptance region),注意接受域不一定等价于置信区间,置信区间是参数空间的一部分,接受域则是样本空间的一部分;
  1. 临界值(critical value),记作c,是拒绝域和接受域的阈值称为。确定了显著性水平α就确定了拒绝域、接受域和临界值;
  1. p值 是一个条件概率,在零假设成立的条件下,试验结果至少和观测值一样极端的概率。p值小于显著性水平α意味着观测值落在了拒绝域中;
  1. Ⅰ类错误(Type Ⅰ error) 是指零假设成立时拒绝了零假设的错误,α就是犯I类错误的概率;
  1. Ⅱ类错误(Type Ⅱ error)是指零假设不成立时接受了零假设的错误,犯II类错误的概率定义为β,并且定义1-β为检验力(Power of test),也即零假设不成立时正确地拒绝零假设的概率。
notion image
假设检验的流程可以归纳如下:
STEP 0:进行试验,得到一组/两组数据。我们可能会对数据的均值/比例/方差感兴趣;
STEP 1:分析问题,建立零假设和备择假设。根据假设可确定要进行双尾检验(Two-tailed test)还是单尾检验(One-tailed test)。若检验目的是判断XX与XX是否不同,那就用双尾检验。若检验目的是判断XX是否优于/大于XX,那就用单尾检验;
STEP 2:根据数据的量和性质选择合适的检验方法以及合适的检验统计量,若检验目的是判断样本均值和某个特定值是否不同,那就是单样本检验;若检验目的是判断两个样本均值是否不同,则是双样本检验。对于双样本检验,若计算出两个样本均值的两组数据是成对(关联)的就用成对检验,否则就用独立检验。常见的检验方法如下:
notion image
特别地,非参数检验也很流行,这类检验方法不需要假设数据所服从的分布。
STEP 3:设定一个显著性水平α,一般取作5%或者1%;
STEP 4:计算(标准化)检验统计量T,分为 z-value 和 t-value 两种,计算方式一般都是:
notion image
当总体标准差σ已知时,计算 z-value;反之,用样本标准差s代替σ,计算出 t-value。检验比例/方差时会有一些不同,可以参考下表:
notion image
表1 各种检验方法的适用场景以及相应统计量的计算方式
STEP 5:有两种做法
  • 查表,不同的检验方法在查表时也有不同,比如 z-test 是查标准正态分布表,而其它 test 则一般是查临界值表。如果是临界值表,就可以直接判断出观测值是否落在拒绝域中;如果是标准正态分布表,那查表结果可以用来计算p值;
  • 计算 p-value,有些情况下可以直接根据观测值计算出 p-value;
STEP 6:得出结论
  • 如果观测值落在拒绝域上,拒绝零假设,接受备择假设。
  • 如果 p-value 小于设定的显著性水平 α,拒绝零假设,接受备择假设。
注意1:假设检验里的样本与机器学习里的样本是不同的概念,假设检验里的一个样本(sample)是指一组数据的均值/比例/方差,样本大小则是指这组数据的量(机器学习里的样本数);机器学习里一个样本是指一条数据。
注意2:计算标准化统计量时分母是σ/√(n)而不是σ,这是因为我们要标准化的是统计量T而不是数据X。比如要检验均值,那么统计量就是样本均值X bar,把它视作一个随机变量。μ0和σ是总体分布的参数,是针对随机变量X而言的。根据中心极限定理,可以得出X bar服从于一个正态分布,其均值等于总体分布的均值μ0,标准差则等于总体分布的标准差除以样本大小的平方根。直觉上,如果n→∞,那么样本均值也会趋向于总体均值,偏差就会越来越小了。除此之外,还可以直接利用均值和方差的性质去推导出这一结论。
参考:
  1. How to choose the right statistical test?
  1. 检验统计量-维基百科
  1. 假设检验中用到的检验统计量有哪些?
  1. Proof of Sample Mean and Sample Std. Dev. being normal if sample is from a Normally Distributed Population

举例说明

我们有一枚硬币,想要检验一下它是否均匀。
STEP 0:抛10次硬币,得到的结果是2次正面,8次反面。
STEP 1:进行双尾检验,建立假设:
H0:硬币均匀(正面的比例=0.5); H1:硬币不均匀(正面的比例≠0.5)
STEP 2:选择合适的检验方法。这里我们想检验的是比例,检验比例是否等于一个特定值0.5,属于单样本检验,不妨使用 z-test。这种情况下z-value的计算方式为:
notion image
其中,是样本比例,是总体比例,是样本大小。
STEP 3:设定显著性水平 α=0.05。
STEP 4:计算检验统计量。根据公式, z=(2/10-0.5)/√(0.5*0.5)*√(10) ≈ -1.8974.
STEP 5:查表,z-test 使用标准正态分布表,这里记录的值是正态分布的CDF。横坐标是z值的个位数和十分位数,纵坐标是z值得百分位数,因为标准正太分布是以z=0为对称轴左右对称的,所以这里只给出了z>0的部分。要得出p值还得自己再计算一下。
notion image
根据1.8和0.09定位到0.9706,这是z=1.89时的CDF,而z=-1.89时,CDF应该是在(-∞,-1.89)计算的,等于1-0.9706=0.0294。又因为我们要进行双尾检验,所以还要算上(+1.89,+∞)的部分,因此 p = 2*0.0294 = 0.0588。
STEP 6:得出结论。因为0.0588>α(0.05),所以我们没有足够的证据拒绝零假设。
注意:有的文章在使用抛硬币这个例子时,会直接用二项分布计算 p-value,这个做法不符合一般的假设检验流程,而且对于初学者来说很容易产生混淆。虽然我们知道正面朝上的次数符合二项分布,但要用假设检验的方式去判断的话就不该这样算。

机器学习中的假设检验

一般来说,假设检验最常见的用法有:
  • 分析线性回归的某个参数是否显著为0,若是就说明对应的输入特征对模型影响不大。比如用年龄、身高、体重、血压等特征预测是否会得糖尿病;
  • 分析引入某个因素后是否会改变事物的性质/结果。比如判断软件开发者在软件的试用期和正式发布后更新软件的频率是否有明显变化。
这类假设检验都是以分析数据为目的的,只有1个固定的模型或者干脆就没有模型。
而在机器学习中,我们主要是以模型比较为目的。我们用假设检验是为了比较不同模型在数据集上的效果,比如模型A是否明显优于模型B。 因为两个模型在同一个测试集上进行评估,所以会得到两组成对的数据(选定超参后,分别以不同的random seed对两个模型都训练N次并测试,就得到了两组N对测试结果),此时做成对检验合适。根据表1,这种情况适合做 Paired t-test,这也是很多论文的选择。不过做 Paired t-test,其实我们是假设了样本大小足够大时,两个模型效果的差距服从正态分布。如果我们不想假设分布形式,可以用non-parametric的检验方法,比如:Wilcoxon signed-rank test。这种方式的检验结果一般会像下表这样汇报:
notion image
Improving Sequential Recommendation with Knowledge-Enhanced Memory Networks, SIGIR18
这种检验方式可以得出的结论是模型A是否在XXX数据集上优于模型B。而如果我们希望判断模型A是否(在所有数据集上)一致优于模型B,那又有点不一样。这时样本大小就不是重复实验的次数了,而是数据集的数量了。说实话,这种情况我没在论文里见过,只在回答里看到:
这种检验方式的结果会像下表这样汇报:
notion image
抛开假设检验,其实日常看到的大部分机器学习论文的实验部分都是这样一个套路:
在 XXX benchmark dataset 上,本文提出的方法比其它 baseline 超出了1个点or更多,达到了新的SOTA,证明了本文提出的 XXX 模型/算法/机制的有效性。
这个套路简单直接,只要能刷新 SOTA 就又能美滋滋地搞一篇论文。但如果投稿时遇上了统计出身的审稿人,很可能就会出现这种情况:
notion image
为什么做机器学习的很少使用假设检验? - 微调的回答 - 知乎https://www.zhihu.com/question/55420602/answer/394577531
为什么效果好还不够呢?这是因为预测结果有一定的随机性,它可能是集齐“天时地利人和”才得出来的(也即大家戏称的“炼丹”)。如果只给出一个实验结果,我们并不能完全信任提出的模型更好。一般来说,有好几种方法可以降低这个随机性的影响,或者给出一个定量的表述,比方说重复多次实验后给出实验结果的均值和标准差,也可以进行K折交叉验证然后做一个区间估计(参考:《Introduction to Data Mining》 1st Edition Chapter 4.7.3)。假设检验同样是一个很好的方法。
 

那为什么近年来很多机器学习的论文都没有用假设检验呢?

在这个知乎问题里很多人参与了讨论,但是神仙打架,各人有各人的见解,而且说的往往不是一件事情,看完了所有的回答还是会很疑惑。我个人觉得最主要的原因有二:
1)首先,这个圈子里有统计背景的研究者占比减少了,特别是近些年随着深度学习的兴起,以及圈子门槛降低,接触过传统的统计学习的研究者很少,CS背景的研究者如果没有接受过相关的训练,写论文时就不会有意识地使用统计里的工具了;
2)可用的数据越来越多,以往一个数据集是几百条数据,现在动辄上百万甚至千万。对一些复杂模型/算法而言,在大型数据集上训练的时间开销是非常高昂的,有的甚至需要好几天。假设我们跑5个不同的random seed,那就需要小半个月,还只是在一个数据集上跑单个模型,更别说其它的对比方法了,有时我们并没有那么多的计算资源;
那到底机器学习论文里要不要做假设检验呢?我的看法是:
  • 如果是做偏向理论的传统机器学习,那还是按传统的来,该做就做;
  • 如果是做偏向应用的,用的是大型公开数据集,那么我觉得不是一定要做。我们发论文做实验往往也不是只有对比实验,还会有消融实验、超参数敏感度分析、案例分析等等。这些实验同样提供了很多有价值的信息;
  • 如果模型和其它对比方法的效果直观上差异不大,只是微微好一些,那么最好做一下检验。一方面这种情况下投稿很有可能被要求做,另一方面做一下校验也是对自己的工作负责,避免虚假的提高。
当然,如果审稿人要求一定要做,那也不用跟审稿人对着干,做就行了。

假设检验的局限

假设检验本身的局限性我认为主要有五点:
  1. 假设检验本身不等价于决策,它只为我们进行决策提供一个额外的信息。假设检验建立在概率的基础上,本身也有不确定性,我们不能完全信任假设检验的结果;
  1. 假设检验只告诉我们差异是否显著,但无法告诉我们差异从何而来,原因是什么。
  1. 假设检验更侧重于避免Type Ⅰ error,但现实中很多场景下Type Ⅰ error和Type Ⅱ error是同等重要的。比如对比两种药治病的效果,我们当然不希望偏颇任意一种药;
  1. 假设检验只有两种结果,要么拒绝零假设,要么没有足够证据拒绝原假设(不等价于接受原假设),但现实中可能会有更多的结果分支;
  1. 假设检验仅基于手头上的数据,如果我们之前做过什么实验,或者有一些相关的证据,我们会希望能充分利用上,但假设检验没办法把这些信息结合起来;
总的来说,统计上显著不等价于实际上显著,严谨的论文除了给出p值之外,还会给出效应量,但在机器学习这个领域中,我们很少会看到有这么做的。
 

常见的假设检验比较

检验方法
假设前提
使用场景
是否参数检验
特点
t 检验(t-test)
数据服从正态分布
比较两组样本均值
参数检验
对正态数据敏感,结果精度高
Welch's t 检验
正态但方差不等
两组样本方差不齐
参数检验
更稳健的 t 检验
Mann–Whitney U 检验(Wilcoxon rank-sum)
无需正态性
两组独立样本排序差异
非参数检验
对非正态/小样本更可靠
Wilcoxon signed-rank 检验
配对样本/对称分布
比较同一组数据前后差异
非参数检验
适用于配对设计
ANOVA(单因子方差分析)
多组数据正态性,方差齐性
多组均值比较
参数检验
拓展性强,支持多算法对比
Kruskal–Wallis 检验
多组非正态数据
多算法或模型分布比较
非参数检验
非参数版 ANOVA
Kolmogorov–Smirnov 检验
检查分布是否一致
分布比较
非参数
分布形状对比,而非均值差

大样本下常用检验方法对比

样本量级
推荐检验方法
是否参数检验
推荐理由
500+ 或更大
独立样本 t 检验(t-test)
✅ 是
适合大样本,测试均值是否显著不同
500+ 或不满足方差齐性
Welch's t 检验
✅ 是
更稳健,不要求方差齐性
任意样本量且担心非正态
Mann–Whitney U 检验
❌ 非参数
即使样本大,仍能稳健检验分布中位数差异
多组算法比较
ANOVA / Kruskal-Wallis
✅/❌
比较多个算法的差异

假设检验和显著性检验的关系是什么?

1. 显著性检验是费希尔提出的。目前使用的多种显著性检验方法都可以在其专著《研究工作者的统计方法》中找到。其中的核心概念是p值(判断显著性的概率),通过显著性检验可以获得三个结论:p小于通常0.01,宣布检验出一个影响因素;p大于通常0.2,影响因素即使存在也微小,不能通过当前实验检测出来;p介于两者之间,需进一步设计实验验证。当然,任何统计方法几乎都有不适用的情况。
2. 假设检验是内曼-皮尔逊提出的。内曼认为,要想让显著性检验有意义,至少要有两个可能的假设。被检验的假设为“零假设”,其他假设为“备择假设”。此处p用于检测零假设是否成立。
 
作者:橘丸姐姐
链接:https://www.zhihu.com/question/64061338/answer/253356452
来源:知乎
 

基本术语

术语:
  1. 零假设(null hypothesis),记作H0,是与待证明的假设互不相容的假设;
  1. 备择假设(alternative hypothesis),记作H1,是待证明的假设;
  1. 显著水平(significance level),记住α,它 是一个条件概率,表示我们错误拒绝了零假设的概率,也即 P(拒绝H0 | H0成立),也可以解释为我们能接受的最大假正例率;
  1. 置信水平(confidence level),记作γ,数值上等于1-α,一般跟置信区间(confidence interval, CI)一起出现。置信区间是指待估参数(比如高斯分布的均值)的可能取值范围,置信水平则是指真实的参数(总体分布的参数)落在置信区间上的频率或比例(注意不是概率)[17];
  1. 检验统计量(test statistic),记作T,它是概括试验中所有我们感兴趣因素的一个数值;
  1. 拒绝域(rejion of rejection),记作R,也叫临界区(critical region)。当被检验的统计量T落在拒绝域中,我们就会拒绝零假设H0。与拒绝域相对的概念就是接受域(acceptance region),注意接受域不一定等价于置信区间,置信区间是参数空间的一部分,接受域则是样本空间的一部分;
  1. 临界值(critical value),记作c,是拒绝域和接受域的阈值称为。确定了显著性水平α就确定了拒绝域、接受域和临界值;
  1. p值 是一个条件概率,在零假设成立的条件下,试验结果至少和观测值一样极端的概率。p值小于显著性水平α意味着观测值落在了拒绝域中;
  1. Ⅰ类错误(Type Ⅰ error) 是指零假设成立时拒绝了零假设的错误,α就是犯I类错误的概率;
  1. Ⅱ类错误(Type Ⅱ error)是指零假设不成立时接受了零假设的错误,犯II类错误的概率定义为β,并且定义1-β为检验力(Power of test),也即零假设不成立时正确地拒绝零假设的概率。
 

搞定统计学必知:P值、T检验、卡方检验、假设检验……

P值的统计学意义是什么

结果的统计学意义是结果真实程度(能够代表总体)的一种估计方法。专业上,p值为结果可信程度的一个递减指标,p值越大,我们越不能认为样本中变量的关联是总体中各变量关联的可靠指标。
p值是将观察结果认为有效即具有总体代表性的犯错概率。如p=0.05提示样本中变量关联有5%的可能是由于偶然性造成的。即假设总体中任意变量间均无关联。
我们重复类似实验,会发现约20个实验中有一个实验,我们所研究的变量关联将等于或强于我们的实验结果。(这并不是说如果变量间存在关联,我们可得到5%或95%次数的相同结果,当总体中的变量存在关联,重复研究和发现关联的可能性与设计的统计学效力有关。)
在许多研究领域,0.05的p值通常被认为是可接受错误的边界水平。

2 t检验的使用场景

t检验适用于两个变量均数间的差异检验,多于两个变量间的均数比较要用方差分析。
无论哪种类型的t检验,都必须在满足特定的前提条件下: 正态性和方差齐性,应用才是合理的。这是因为必须在这样的前提下所计算出的t统计量才服从t分布,而t检验正是以t分布作为其理论依据的检验方法。
t检验是目前医学研究中使用频率最高,医学论文中最常见到的处理定量资料的假设检验方法。

3 如何判定结果具有真实的显著性

在最后结论中判断什么样的显著性水平具有统计学意义,不可避免地带有武断性。换句话说,认为结果无效而被拒绝接受的水平的选择具有武断性。
实践中,最后的决定通常依赖于数据集比较分析过程中结果是先验性还是仅仅为均数之间的两两比较,依赖于总体数据集里结论一致的支持性证据的数量,依赖于以往该研究领域的惯例
通常,许多的科学领域中产生P值的结果≤0.05被认为是统计学意义的边界线,但是这显著性水平还包含了相当高的犯错可能性。结果 0.05≥P>0.01被认为是具有统计学意义,而0.01≥P≥0.001被认为具有高度统计学意义。但要注意这种分类仅仅是研究基础上非正规的判断常规。

4 假设检验的内涵及步骤

在假设检验中,由于随机性我们可能在决策上犯两类错误,一类是假设正确,但我们拒绝了假设,这类错误是“弃真”错误,被称为第一类错误;一类是假设不正确,但我们没拒绝假设,这类错误是“取伪”错误,被称为第二类错误
一般来说,在样本确定的情况下,任何决策无法同时避免两类错误的发生,即在避免第一类错误发生机率的同时,会增大第二类错误发生的机率;或者在避免第二类错误发生机率的同时,会增大第一类错误发生的机率。人们往往根据需要选择对哪类错误进行控制,以减少发生这类错误的机率。大多数情况下,人们会控制第一类错误发生的概率。
发生第一类错误的概率被称作显著性水平,一般用α表示,在进行假设检验时,是通过事先给定显著性水平α的值而来控制第一类错误发生的概率。
在这个前提下,假设检验按下列步骤进行:
  • 确定假设
  • 进行抽样,得到一定的数据
  • 根据假设条件下,构造检验统计量,并根据抽样得到的数据计算检验统计量在这次抽样中的具体值
  • 依据所构造的检验统计量的抽样分布,和给定的显著性水平,确定拒绝域及其临界值
  • 比较这次抽样中检验统计量的值与临界值的大小,如果检验统计量的值在拒绝域内,则拒绝假设
到这一步,假设检验已经基本完成,但是由于检验是利用事先给定显著性水平的方法来控制犯错概率的,所以对于两个数据比较相近的假设检验,我们无法知道那一个假设更容易犯错,即我们通过这种方法只能知道根据这次抽样而犯第一类错误的最大概率(即给定的显著性水平),而无法知道具体在多大概率水平上犯错。
计算P值有效的解决了这个问题,P值其实就是按照抽样分布计算的一个概率值,这个值是根据检验统计量计算出来的。通过直接比较P值与给定的显著性水平α的大小就可以知道是否拒绝假设,显然这就代替了比较检验统计量的值与临界值的大小的方法。
而且通过这种方法,我们还可以知道在p值小于α的情况下犯第一类错误的实际概率是多少,p=0.03<α=0.05,那么拒绝假设,这一决策可能犯错的概率是0.03。需要指出的是,如果P>α,那么假设不被拒绝,在这种情况下,第一类错误并不会发生。

5 卡方检验的结果

值是越大越好,还是越小越好?
与其它检验一样,所计算出的统计量越大,在分布中越接近分布的尾端,所对应的概率值越小。如果试验设计合理、数据正确,显著或不显著都是客观反映没有什么好与不好

6 在比较两组数据的率是否相同时

二项分布和卡方检验有什么不同?
卡方分布主要用于多组多类的比较,是检验研究对象总数与某一类别组的观察频数和期望频数之间是否存在显著差异,要求每格中频数不小于5,如果小于5则合并相邻组。
二项分布则没有这个要求。如果分类中只有两类还是采用二项检验为好。如果是2*2表格可以用fisher精确检验,在小样本下效果更好。

7 如何比较两组数据之间的差异性

设计类型是完全随机设计两组数据比较,不知道数据是否是连续性变量?
比较方法:如果数据是连续性数据,且两组数据分别服从正态分布和方差齐性检验,则可以采用t检验如果不服从以上条件可以采用其他检验。
想知道两组数据是否有明显差异?不知道这个明显差异是什么意思?是问差别有无统计学意义(即差别的概率有多大)还是两总体均数差值在哪个范围波动?如果是前者则可以用第2步可以得到P值,如果是后者,则是用均数差值的置信区间来完成的。
 

机器学习中的假设检验

一般来说,假设检验最常见的用法有:
  • 分析线性回归的某个参数是否显著为0,若是就说明对应的输入特征对模型影响不大。比如用年龄、身高、体重、血压等特征预测是否会得糖尿病;
  • 分析引入某个因素后是否会改变事物的性质/结果。比如判断软件开发者在软件的试用期和正式发布后更新软件的频率是否有明显变化。
这类假设检验都是以分析数据为目的的,只有1个固定的模型或者干脆就没有模型。
而在机器学习中,我们主要是以模型比较为目的。我们用假设检验是为了比较不同模型在数据集上的效果,比如模型A是否明显优于模型B。 因为两个模型在同一个测试集上进行评估,所以会得到两组成对的数据(选定超参后,分别以不同的random seed对两个模型都训练N次并测试,就得到了两组N对测试结果),此时做成对检验合适。根据表1,这种情况适合做 Paired t-test,这也是很多论文的选择。不过做 Paired t-test,其实我们是假设了样本大小足够大时,两个模型效果的差距服从正态分布。如果我们不想假设分布形式,可以用non-parametric的检验方法,比如:Wilcoxon signed-rank test。这种方式的检验结果一般会像下表这样汇报:
notion image
Improving Sequential Recommendation with Knowledge-Enhanced Memory Networks, SIGIR18
这种检验方式可以得出的结论是模型A是否在XXX数据集上优于模型B。而如果我们希望判断模型A是否(在所有数据集上)一致优于模型B,那又有点不一样。这时样本大小就不是重复实验的次数了,而是数据集的数量了。说实话,这种情况我没在论文里见过,只在回答里看到:
这种检验方式的结果会像下表这样汇报:
notion image
抛开假设检验,其实日常看到的大部分机器学习论文的实验部分都是这样一个套路:
在 XXX benchmark dataset 上,本文提出的方法比其它 baseline 超出了1个点or更多,达到了新的SOTA,证明了本文提出的 XXX 模型/算法/机制的有效性。
这个套路简单直接,只要能刷新 SOTA 就又能美滋滋地搞一篇论文。但如果投稿时遇上了统计出身的审稿人,很可能就会出现这种情况:
notion image
为什么做机器学习的很少使用假设检验? - 微调的回答 - 知乎https://www.zhihu.com/question/55420602/answer/394577531
为什么效果好还不够呢?这是因为预测结果有一定的随机性,它可能是集齐“天时地利人和”才得出来的(也即大家戏称的“炼丹”)。如果只给出一个实验结果,我们并不能完全信任提出的模型更好。一般来说,有好几种方法可以降低这个随机性的影响,或者给出一个定量的表述,比方说重复多次实验后给出实验结果的均值和标准差,也可以进行K折交叉验证然后做一个区间估计(参考:《Introduction to Data Mining》 1st Edition Chapter 4.7.3)。假设检验同样是一个很好的方法。
那为什么近年来很多机器学习的论文都没有用假设检验呢?
在这个知乎问题里很多人参与了讨论,但是神仙打架,各人有各人的见解,而且说的往往不是一件事情,看完了所有的回答还是会很疑惑。我个人觉得最主要的原因有二:
1)首先,这个圈子里有统计背景的研究者占比减少了,特别是近些年随着深度学习的兴起,以及圈子门槛降低,接触过传统的统计学习的研究者很少,CS背景的研究者如果没有接受过相关的训练,写论文时就不会有意识地使用统计里的工具了;
2)可用的数据越来越多,以往一个数据集是几百条数据,现在动辄上百万甚至千万。对一些复杂模型/算法而言,在大型数据集上训练的时间开销是非常高昂的,有的甚至需要好几天。假设我们跑5个不同的random seed,那就需要小半个月,还只是在一个数据集上跑单个模型,更别说其它的对比方法了,有时我们并没有那么多的计算资源;
那到底机器学习论文里要不要做假设检验呢?我的看法是:
  • 如果是做偏向理论的传统机器学习,那还是按传统的来,该做就做;
  • 如果是做偏向应用的,用的是大型公开数据集,那么我觉得不是一定要做。我们发论文做实验往往也不是只有对比实验,还会有消融实验、超参数敏感度分析、案例分析等等。这些实验同样提供了很多有价值的信息;
  • 如果模型和其它对比方法的效果直观上差异不大,只是微微好一些,那么最好做一下检验。一方面这种情况下投稿很有可能被要求做,另一方面做一下校验也是对自己的工作负责,避免虚假的提高。
当然,如果审稿人要求一定要做,那也不用跟审稿人对着干,做就行了。

假设检验的局限

假设检验本身的局限性我认为主要有五点:
  1. 假设检验本身不等价于决策,它只为我们进行决策提供一个额外的信息。假设检验建立在概率的基础上,本身也有不确定性,我们不能完全信任假设检验的结果;
  1. 假设检验只告诉我们差异是否显著,但无法告诉我们差异从何而来,原因是什么。
  1. 假设检验更侧重于避免Type Ⅰ error,但现实中很多场景下Type Ⅰ error和Type Ⅱ error是同等重要的。比如对比两种药治病的效果,我们当然不希望偏颇任意一种药;
  1. 假设检验只有两种结果,要么拒绝零假设,要么没有足够证据拒绝原假设(不等价于接受原假设),但现实中可能会有更多的结果分支;
  1. 假设检验仅基于手头上的数据,如果我们之前做过什么实验,或者有一些相关的证据,我们会希望能充分利用上,但假设检验没办法把这些信息结合起来;
总的来说,统计上显著不等价于实际上显著,严谨的论文除了给出p值之外,还会给出效应量,但在机器学习这个领域中,我们很少会看到有这么做的。
 

如何通过“统计学检验”来对比机器学习算法性能

常用的机器学习算法比较?

授人以鱼不如授人以渔,这篇文章会介绍如何通过“统计学检验”来对比机器学习算法性能。掌握了这个方法后,我们就不需要再人云亦云,而可以自己分析算法性能。
首先结论如下,在对比两个算法多个数据集上的表现时:
  • 如果样本配对(paired)且符合正态分布,优先使用配对t检测(paired t test)。
  • 如果样本既不符合正态分布,也不符合配对,甚至样本量都不一样大,可以尝试Mann Whitney U test。值得注意的是,MW是用来处理独立测量(independent measures)数据,要分情况讨论,后文会深入分析。
在对比多个算法多个数据集上的表现时:
  • 如果样本符合ANOVA(repeated measure)的假设(如正态、等方差),优先使用ANOVA。
  • 如果样本量不一样,或因为特定原因不能使用Friedman-Nemenyi,可以尝试Kruskal Wallis配合Dunn&#39;s test。值得注意的是,这种方法是用来处理独立测量数据,要分情况讨论。
文章结构如下:(1-2) 算法对比的原因及陷阱 (3-4) 如何对比两个算法 (5-6)如何对比多个算法 (7)如何根据数据特性选择对比方法 (8)工具库介绍。

1. 为什么需要对比算法性能?

统计学家George Box说过:“All models are wrong, but some are useful”(所有模型都是错误,只不过其中一部分是有价值的)。通俗来说,任何算法都有局限性,所以不存在“通用最优算法”,只有在特定情境下某种算法可能是渐进最优的
因此,评估算法性能并选择最优算法是非常重要的。不幸的是,统计学评估还没有在机器学习领域普及,很多评估往往是在一个数据上的简单分析,因此证明效果有限。

2. 评估算法中的陷阱

首先我们常说的是要选择一个正确的评估标准,常见的有:准确率(accuracy)、召回率(recall)、精准率(precision)、ROC、Precision-Recall Curve、F1等。
选择评估标准取决于目的和数据集特性。在较为平衡的数据集上(各类数据近似相等的情况下),这些评估标准性能差别不大。而在数据严重倾斜的情况下,选择不适合的评估标准,如准确率,就会导致看起来很好,但实际无意义的结果。举个例子,假设某稀有血型的比例(2%),模型只需要预测全部样本为“非稀有血型”,那么准确率就高达98%,但毫无意义。在这种情况下,选择ROC或者精准率可能就更加适当。这方面的知识比较容易理解,很多科普书都有介绍,我们就不赘述了。
其次我们要正确理解测量方法,常见的有
  • 独立测量(independent measures):不同样本的观测对象是独立的,不存在关联
  • 重复测量(repeated measures):样本中使用的观测对象是相同的,仅仅是独立变量在上面的作用结果不同
  • 以及成对测量(matched pair):不同样本中采用不同的观测对象,但尽量使得样本间的观测对象成对相似
举个例子,我们想要分析刷知乎时间(每天3小时 vs. 每天10小时)对于大学生成绩的影响。如果我们使用相同的20个学生,观察他们每天3小时和10小时的区别,那就是重复测量。如果我们选择40个学生,分成两组每组20人,再分别观察那就是独立测量。如果我们先找20个学生,再找20个和他们非常相似的大学生,并配对观察,就是成对相似。
我们发现,当错误的理解测量方式时,就无法使用正确的统计学手段进行分析
在这篇文章中我们默认:评估不同算法在多个相同数据集上的表现属于重复测量,而特例将会在第七部分讨论。同时,本文介绍的方法可以用于对比任何评估标准,如准确度、精准度等,本文中默认讨论准确度。

3. 两种算法间的比较:不恰当方法

图1. 两种算法在14个数据集上的准确率 [1]
图1. 两种算法在14个数据集上的准确率 [1]
图1展示了两种决策树方法(C4.5,C4.5+m)在14个数据集上的准确率。那么该如何对比两种算法呢?先说几种错误(不恰当)的方法:
不恰当方法1:求每个算法在所有数据集上的均值,并比较大小。错误原因:我们对于算法在不同数据集上错误的期望不是相同的,因此求平均没有意义。换句话说,数据不符合相称性(commensurate)。
不恰当方法2进行配对样本t检测(Paired t test)。显然,t test是统计学方法,可以用来查看两种方法在每个数据上的平均差值是否不等于0。但这个方法不合适原因有几点:
  • 和平均一样,不同数据集上的错误不符合相称性
  • t-test要求样本符合正态分布,显然我们无法保证不同数据集上的准确率符合正态分布
  • t-test对样本的大小有一定的要求,一般最低需要>30个样本。在这个例子中我们只有14个,且大部分情况下我们没有30个数据来做实验。
  • 因为缺乏相称性,统计结果易受到异常值影响(outliers)
不恰当方法3:符号检验(sign test)是一种无参数(non-parametric)的检验,优点是对于样本分布没有要求,不要求正态性。比较方法很简单,就是在每个数据集上看哪个算法更好,之后统计每个算法占优的数据集总数。以这个例子为例,C4.5在2个数据集上最优,2个平手,10个最差。如果我们对这个结果计算置信区间,发现p<0.05需要至少在11个数据集上表现最优。因此这个方法的缺点有:
  • 符号检验是一种非常弱的检验方法,仅对比优劣损失了大量信息,失去了定量信息(quantitative),比如 0.1<0.9 和 0.1<0.11 的意义是一样的。正因为如此,临界值(critical value)一般都需要很大,比如这个例子中的 α=0.05 的临界值是11(图2)。
  • 另一个问题是,因为缺乏定量信息,很多时候很难确定“优胜”是否来自随机性。举个例子,0.99<0.991是否真的代表算法A更好?一种看法是需要定义一个阈值,仅当差别大于阈值才能说明更好。然而这种看法的问题在于,假设算法A在1000个数据集上都以“微弱优势”胜过了B,那么我们是否需要怀疑显著性?因此,根本问题还是,符号检验需要大样本量才能得出显著性
图2. 符号检验的临界值表
图2. 符号检验的临界值表

4. 两种算法间的比较:推荐方法

考虑到通用性,我们需要使用非参数检验。换句话说,我们需要保证对样本的分布不做任何假设,这样更加通用。
方法1:Wilcoxon Signed Ranks Test(WS)配对t检验的无参数版本,同样是分析成对数据的差值是否等于0,只不过是通过排名(rank)而已。换个角度看,我们也可以理解为符号检验的定量版本。优点如下:
  • 无参数,不要求样本符合正态分布
  • 符合数据相称性,虽然是定性的(与配对t检验相比)
  • 有一定的定量特性,即较大的差别对于最终结果影响更大(与符号检验相比)
图3. 两种算法在14个数据集上的准确率与排序[1]
图3. 两种算法在14个数据集上的准确率与排序[1]
方法2(详见第七部分):Mann Whitney U test(MW)和WS一样,都是无参数的且研究排名的检验方法。MW有以下特性:
  • 可以用来检测不同的大小的样本,举例A算法在8个数据集上的表现 vs B算法在10个数据集上的表现。
  • 不存在配对性要求,参看上一点
  • 对比的是两个样本的分布,因此不同数据集的错误应该符合特定分布,可能不满足相称性
  • 对于测量方法的假设是:独立测量,这与我们的实际情况不符
换句话说,MW是当样本量不同时才建议勉强一试,因为不符合独立测量的假设。不同数据集的错误(准确率)不一定符合特定分布,很可能不符合相称性,但在特定情况下有用,详见第七部分。
总结:如果样本配对且符合正态分布,优先使用配对t检测。如果样本不符合正态分布,但符合配对,使用WS。如果样本既不符合正态分布,也不符合配对,可以尝试MW。

5. 多种算法间的比较:不恰当的方法

图4. 四种算法在14个数据集上的准确率与排序[1]
图4. 四种算法在14个数据集上的准确率与排序[1]
图4提供了四种算法(C4.5,C4.5+m,C4.5+cf,C4.5+m+cf)在14个数据集上的准确率。
不恰当方法1:一种看法是,我们是否可以把两个算法的对比推广到多个算法上。假设有k个算法,我们是否可以对它们进行两两比较,经过 (1+(k−1))×(k−1)2=k2−k2 次计算得到一个矩阵。这个是经典的多元假设检验问题,这种穷举法一般都假设了不同对比之间的独立性,一般都不符合现实,需要进行校正,因此就不赘述了。
不恰当方法2Repeated measures ANOVA是经典的统计学方法,用来进行多样本间的比较是,可以看做是t检验的多元推广。ANOVA不适合对比算法表现的原因如下:
  • 对样本分布有正态假设,然而不同数据集上的准确度往往不符合这个假设
  • 不同的样本有相同的总体方差(population variance)
不幸的是,我们想要对比的算法表现不符合这个情况,因此ANOVA不适合。

6. 多种算法间的比较:推荐的方法

我们需要找到一种方法同时解决第5部分中提到的问题,这个方法需要:
  • 非参数,不对数据的分布做出假设
  • 不需要,或者尽量不依赖,或者可以自动修正两两对比所带来的误差
Demšar [1]推荐了非参数的多元假设检验Friedman test。Friedman也是一种建立在排名(rank)上的检验,它假设所有样本的排序均值相等。具体来讲,我们首先给不同算法在每个数据集上排序,并最终计算算法A在所有数据集上排名的均值。如果所有算法都没有性能差别,那么它们的性能的平均排名应该是相等的,这样我们就可以选择特定的置信区间来判断差异是否显著了。
假设我们通过Friedman test发现有统计学显著(p<0.05),那么我们还需要继续做事后分析(post-hoc)。换句话说,Friedman test只能告诉我们算法间是否有显著差异,而不能告诉我们到底是哪些算法间有性能差异。想要定位具体的差异算法,还需要进行post-hoc分析。
Friedman test一般配套的post-hoc是Nemenyi test,Nemenyi test可以指出两两之间是否存在显著差异。我们一般还会对Nemenyi的结果可视化,比如下图。
图5. Nemenyi对10种算法的对比结果,NS代表不显著
图5. Nemenyi对10种算法的对比结果,NS代表不显著
另一个值得提的是,即使Friedman证明算法性能有显著不同,Nemenyi不一定会说明到底是哪些算法间不同,原因是Nemenyi比Friedman要弱(weak),实在不行可以对必须分析的算法成对分析。
方法2(详见第七部分):和两两对比一样,在多个样本对比时也有一些特定情况导致我们不能使用Friedman-Nemenyi。另一个或许可以值得一试的无参数方法是Kruskal Wallis test搭配Dunn's test(作为post-hoc)。 这种方法的特点是:
  • 可以用来检验不同的大小的样本,举例A算法在8个数据集上的表现 vs B算法在10个数据集上的表现 vs C算法在20个数据集上的表现。
  • 对于测量方法的假设是:独立测量,这与我们的实际情况不符。

7. 再看重复测量和独立测量

我们在第二部分分析了重复测量与独立测量,而且假设机器学习性能的对比应该是建立在“重复测量”上的,也就是说所有的算法都在相同的数据集上进行评估
在这种假设下,我们推荐了无参数的:Wilcoxon对两个算法进行比较, Friedman-Nemenyi对多个算法进行对比。
然而,“重复测量”的假设不一定为真。举个例子,如果我们只有一个数据,并从数据中采样(sample)得到了很多相关的测试集1, 2,3...n,并用于测试不同的算法。
  • 算法A:测试集1,2
  • 算法B:测试集3, 4,5,6
  • 算法N...
在这种情况下,我们就可以用Mann Whitney U test对比两种算法,Kruskal-Dunn对比多种算法。而且值得注意的是,这种情况常见于人工合成的数据,比如从高斯分布中采样得到数据。因此,要特别分析数据的测量方式,再决定如何评估。

8. 工具库与实现

我们知道R上面有所有这些检验,着重谈谈Python上的工具库。幸运的是,上文提到所有检验方法在Python上都有工具库
Scipy Statistical functions :Wilcoxon,Friedman,Mann Whitney
scikit-posthocs:Nemenyi,Dunn's test

🤗 总结归纳

文章的配图来自于[1] 以及我的一篇paper [2],接收后会补上reference。文章的思路和脉络基于[1],建议阅读。[2]主要着力于特定情况,当重复测量失效时的检验。
[1] Demšar, J., 2006. Statistical comparisons of classifiers over multiple data sets. Journal of Machine learning research7(Jan), pp.1-30.
[2] To complete.

📎 参考文章

 
💡
有关假设检验和统计方面的内容,欢迎您在底部评论区留言,一起交流~
 
520对心爱的Ta说解决Win11中你的电脑不能投影到其他屏幕。请尝试更新驱动程序或使用其他视频卡
Loading...
迷途
迷途
OR的博客,用知识和技术创造未来!!!
Latest posts
腾讯(EdgeOne)CDN加速
2025-7-26
Cloud Mail 部署教程
2025-7-24
免费.com域名和.site域名
2025-7-20
免费二级域名pp.ua
2025-7-20
giffgaff申请、开卡与常见问题攻略(合集)
2025-6-26
节点转换常用链接汇总
2025-6-24
Announcement
🎉OR科技,用心服务🎉
-- 分享知识,点亮生活 ---
保持热爱追逐远方
路虽远行则将至
事虽难不为不成
为之则易不为则难
👏欢迎您的来访👏
距离2024年春节已过去
-- 免责声明 ---
⚠️ 本站内容仅代表个人观点,可以转载,但请注明出处。 ⚠️ 本人分享内容仅供学习参考使用,请勿用于其他用途。