麦克内马尔检验(McNemar’s Test)

配对标称数据的麦克内马尔检验(McNemar’s Test)

from mlxtend.evaluate import mcnemar

概述

McNemar的检验[1](有时也称为“受试者内卡方检验”)是对配对名义数据的统计检验。在机器学习中,我们可以使用两种统计模型(NEMAR)来测试机器学习的准确性。麦克内马尔的测试是基于两个模型预测的2倍连续表。

McNemar’s Test Statistic

在麦克内马尔的检验中,我们提出了零假设,即概率 p(b)p(b)p(b) and p(c)p(c)p(c),或者用简化的术语来说:两个模型中没有一个比另一个更好。因此,另一种假设是,这两种模型的性能并不相同。

McNemar检验统计量(“卡方”)可计算如下:
χ2=(b−c)2(b+c),\chi^2 = \frac{(b - c)^2}{(b + c)}, χ2=(b+c)(b−c)2​,
如果单元格c和b的总和足够大,则 χ2\chi^2χ2 值遵循一个自由度的卡方分布。设置显著性阈值后,例如,α=0.05α=0.05α=0.05。我们可以计算 ppp 值——假设零假设为真,ppp 值是观察这个经验(或更大)卡方值的概率。如果 ppp 值低于我们选择的显著性水平,我们可以拒绝两个模型性能相等的无效假设。

连续性校正

在Quinn McNemar发表McNemar测试[1]大约一年后,Edwards[2]提出了一个连续性修正版本,这是当今更常用的变体:
χ2=(∣b−c∣−1)2(b+c).\chi^2 = \frac{( \mid b - c \mid - 1)^2}{(b + c)}. χ2=(b+c)(∣b−c∣−1)2​.

精确p值

如前所述,建议对小样本量(b+c<25b + c < 25b+c<25[3])进行精确二项检验,因为卡方分布可能无法很好地近似卡方值。精确的p值可计算如下:
p=2∑i=bn(ni)0.5i(1−0.5)n−i,p = 2 \sum^{n}_{i=b} \binom{n}{i} 0.5^i (1 - 0.5)^{n-i}, p=2i=b∑n​(in​)0.5i(1−0.5)n−i,
其中 n=b+cn = b + cn=b+c,系数2用于计算双边 ppp 值。

实例

例如,鉴于两个模型的精度分别为99.7%和99.6%,2x2连续性表可以为模型选择提供进一步的见解。

在子图A和B中,两个模型的预测精度如下所示:

  • model 1 accuracy: 9,960 / 10,000 = 99.6%
  • model 2 accuracy: 9,970 / 10,000 = 99.7%

现在,在子图A中,我们可以看到模型2得到了11个正确的预测,而模型1得到了错误的预测。反之亦然,模型2的预测是对的,模型2的预测是错的。因此,基于这一11:1的比例,我们可以得出结论,模型2的表现明显优于模型1。然而,在子图B中,比例为25:15,这对于选择哪种模型更好来说不太确定。

在下面的编码示例中,我们将使用这两种场景A和B来说明McNemar的测试。

References

  • [1] McNemar, Quinn, 1947. “Note on the sampling error of the difference between correlated proportions or percentages”. Psychometrika. 12 (2): 153–157.
  • [2] Edwards AL: Note on the “correction for continuity” in testing the significance of the difference between correlated proportions. Psychometrika. 1948, 13 (3): 185-187. 10.1007/BF02289261.
  • [3] https://en.wikipedia.org/wiki/McNemar%27s_test

示例1-创建2x2连续表

mcnemar功能需要2x2列联表作为NumPy数组,格式如下:

可以使用mlxtend的mcnemar_表函数创建这样的邻接矩阵。估计例如:

import numpy as np
from mlxtend.evaluate import mcnemar_table# The correct target (class) labels
y_target = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])# Class labels predicted by model 1
y_model1 = np.array([0, 1, 0, 0, 0, 1, 1, 0, 0, 0])# Class labels predicted by model 2
y_model2 = np.array([0, 0, 1, 1, 0, 1, 1, 0, 0, 0])tb = mcnemar_table(y_target=y_target, y_model1=y_model1, y_model2=y_model2)print(tb)
[[4 1][2 3]]

示例2——麦克内马尔对方案B的测试

不,让我们继续概述部分中提到的示例,并假设我们已经计算了2x2连续表:

import numpy as nptb_b = np.array([[9945, 25],[15, 15]])

为了检验两个模型的预测性能相等的零假设(使用显著性水平 α=0.05α=0.05α=0.05 ),我们可以进行修正的麦克内马尔检验,以计算卡方( chi-squared )和 p值(p-value),如下所示:

from mlxtend.evaluate import mcnemarchi2, p = mcnemar(ary=tb_b, corrected=True)
print('chi-squared:', chi2)
print('p-value:', p)
chi-squared: 2.025
p-value: 0.154728923485

由于 ppp 值大于我们假设的显著性阈值(α=0.05α=0.05α=0.05),我们不能拒绝我们的零假设,并假设两个预测模型之间没有显著差异。

示例3——麦克内马尔对场景A的测试

与方案B(例2)相比,方案A中的样本量相对较小(b+c=11+1=12b+c=11+1=12b+c=11+1=12),且小于建议的25[3],以通过卡方分布井近似计算出的卡方值。

在这种情况下,我们需要根据二项分布计算精确的p值:

from mlxtend.evaluate import mcnemar
import numpy as nptb_a = np.array([[9959, 11],[1, 29]])chi2, p = mcnemar(ary=tb_a, exact=True)print('chi-squared:', chi2)
print('p-value:', p)
chi-squared: None
p-value: 0.005859375

假设我们在显著性水平 α=0.05α=0.05α=0.05 的情况下进行了该测试,我们可以拒绝两个模型在该数据集上表现相同的无效假设,因为 ppp 值(p≈0.006)小于 ααα。

API

mcnemar(ary, corrected=True, exact=False)

配对标称数据的McNemar检验

参数

  • ary : array-like, shape=[2, 2]

    2 x 2 contigency table (as returned by evaluate.mcnemar_table), where a: ary[0, 0]: # of samples that both models predicted correctly b: ary[0, 1]: # of samples that model 1 got right and model 2 got wrong c: ary[1, 0]: # of samples that model 2 got right and model 1 got wrong d: aryCell [1, 1]: # of samples that both models predicted incorrectly

    2 x 2 contigency table(由evaluate.mcnemar_table返回),

    ​ 其中

    • a:ary[0,0]:# 两个模型正确预测的样本
    • b:ary[0,1]:#模型1正确预测的样本和模型2错误预测的样本
    • c:ary[1,0]:#模型2正确预测的样本和模型1错误预测的样本
    • d:aryCell[1,1]:#两个模型都预测错误的样本数量
  • corrected : array-like, shape=[n_samples] (default: True)

    如果True,则使用Edward的连续性校正进行卡方检验

  • exact : bool, (default: False)

    If True, uses an exact binomial test comparing b to a binomial distribution with n = b + c and p = 0.5. It is highly recommended to use exact=True for sample sizes < 25 since chi-squared is not well-approximated by the chi-squared distribution!

    如果 True,则使用精确的二项检验,将 b 与 n=b+c 且 p=0.5 的二项分布进行比较。对于小于25的样本量,强烈建议使用’exact=True’,因为卡方分布不能很好地近似卡方分布!

Returns

  • chi2, p : float or None, float

    返回卡方值和p值;如果’exact=True’(默认值为’False’),‘chi2’是’None’`

Examples

For usage examples, please see
[http://rasbt.github.io/mlxtend/user_guide/evaluate/mcnemar/](http://rasbt.github.io/mlxtend/user_guide/evaluate/mcnemar/)

reference

@online{Raschka2021Sep,
author = {Raschka, S.},
title = {{McNemar’s Test - mlxtend}},
year = {2021},
month = {9},
date = {2021-09-03},
urldate = {2022-03-10},
language = {english},
hyphenation = {english},
note = {[Online; accessed 10. Mar. 2022]},
url = {http://rasbt.github.io/mlxtend/user_guide/evaluate/mcnemar},
abstract = {{A library consisting of useful tools and extensions for the day-to-day data science tasks.}}
}

麦克内马尔检验(McNemar‘s Test)相关推荐

  1. 麦克尼马尔检验(McNemar test)

    麦克尼马尔检验(McNemar test) 前言 在统计学中,McNemar 检验是用于配对 名义数据的统计检验.它应用于具有二分特征的2 × 2列联表,具有匹配的主题对,以确定行和列的边际频率是否相 ...

  2. McNemar test麦克尼马尔检验

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  3. 联合会杯-内马尔破门锋霸2球 巴西3-0西班牙3连冠

    北京时间7月1日6时(巴西当地时间6月30日19时),联合会杯决赛在里约热内卢马拉卡纳球场打响,巴西3比0完胜西班牙,成为联合会杯首支3连冠球队,终结西班牙26场不败和29场正式比赛不败.开场93秒, ...

  4. 为梅老二送行将是内马尔的终极任务

    克鲁伊夫断言内马尔和梅西一山不容二虎 接着就是例行公事一样的公关节目:巴萨主帅比拉诺瓦和核心球星梅西齐表欢迎,加泰罗尼亚媒体预言内马尔将提升球队,星途光明.内马尔本人则全方位讨好新东家,形容转会巴萨是 ...

  5. 【正一专栏】梅西、内马尔分开明天会更好

    梅西.内马尔分开明天会更好 原创 2017-10-20 九天 九天时空 虽然对于内马尔离开巴萨一直心存芥蒂,但是看到内马尔离开巴萨后,巴萨依然在联赛和欧冠中表现出强劲的实力,更为重要的是梅西再也不用去 ...

  6. 【正一专栏】内马尔请不要把球迷的爱当做你交易的筹码

    内马尔请不要把球迷的爱当做你交易的筹码 内马尔转会大巴黎已经基本尘埃落定,埃菲尔铁塔都打出了欢迎内马尔的字样.虽然在西甲联盟还在扣押着内马尔的资料,让他不能在法甲首轮中登场,但那也只是一时面子上过不去 ...

  7. 【正一专栏】内马尔要走快走、走好不送!

    内马尔要走快走.走好不送! 内马尔转化大巴黎看来已经是板上钉钉的事情,为何内马尔还有他的经纪人父亲一直都对此保持沉默,就是因为只要在8月份后转化,贪婪的内马尔父亲就可以获得一笔2600万美元的签字费. ...

  8. 【正一专栏】内马尔留不留下都已经是伤痕累累

    内马尔留不留下都已经是伤痕累累 这个夏天欧洲转会市场很热闹,大手笔交易不断,但是谁也没想到最重磅的八卦居然是大巴黎愿意支付2.2亿欧元的违约金买断内马尔,而这一切似乎变得越来越有可能,内马尔真的要离开 ...

  9. oracle 48小时内_近了近了,内马尔正大步向巴萨走来,西媒称有望48小时内敲定转会...

    "即将完成!"8月28日的西班牙<每日体育报>给巴萨球迷送上了好消息,称在巴萨高层与大巴黎高层进行最新一轮谈判后,内马尔已经非常接近巴萨了. 按照<每日体育报&g ...

最新文章

  1. 2022-2028年中国塑料绳的制造行业市场现状调查及投资商机预测报告
  2. linux boa服务器访问 404,Linux上boa服务器的配置和使用
  3. versa max_如何从Mac(和Vice Versa)打开或关闭iPhone的Safari选项卡
  4. Python中int(input(请输入一个数))报错:ValueError: invalid literal for int() with base 10: '2.7'
  5. Spring中使用集成MongoDB Client启动时报错:rc: 48
  6. Java 学习 day09
  7. zone watermark水位控制
  8. GAN变种介绍 - DCGAN、InfoGAN、CycleGAN、WGAN、Self-Attention GAN、BigGAN
  9. eplan 培训中心ppt_Eplan从入门到精通.doc
  10. Java一个简单的Employee类
  11. 80004005 mysql_数据库报错80004005
  12. 在 V2EX 的开发环境里尝试了一下 OneAPM @livid
  13. 微信开发者工具运行报错‘app.json 未找到’
  14. RGB 真彩色图像,CMYK 出版图像,YCbCr,L灰度图像
  15. python基础学海拾遗
  16. 2023轩辕奖出炉,怿星科技共创荣誉
  17. Mavenir融合分组核心解决方案将为德国电信在德国的5G独立组网(SA)网络提供支持
  18. 学习日记day38 字体设计排版
  19. HCIA---day02
  20. 收银怎样挂单和取单_收银机如何取消挂单

热门文章

  1. DBMS的完整性违约处理机制
  2. SLAM学习笔记(二十)LIO-SAM流程及代码详解(最全)
  3. M1忘记mysql密码
  4. zigbee 安全通信加密链接密钥
  5. qt widget 最大_Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)
  6. 深信服上网行为管理开启snmp_深信服上网行为管理部署方式及功能实现配置说明...
  7. 玩聚SD:感谢ECVIP、盗盗、网贝、和菜头的博客推荐
  8. 怎样禁止“Windows - 没有软盘”的提示?
  9. Photoshop CS2/CS5/CS6/CC2015/CC2018/CC2017/CC2019软件安装及按照包
  10. matlab ilu函数,不完全 LU 分解