mcnemar_tables: McNemar检验和Cochran's Q检验的列联表

计算McNemar检验和Cochran Q检验的2x2列联表的函数

> `from mlxtend.evaluate import mcnemar_tables`

概述

应急表

一个 2x2 列联表在 McNemar 检验中被使用(mlxtend.evaluate.mcnemar),它是比较两个不同模型的有用工具。与典型的混淆矩阵不同,这个表比较两个模型之间的表现,而不是显示单个模型预测的假阳性、真阳性、假阴性和真阴性的数量:

例如,考虑到两个模型的准确率分别为99.7%和99.6%,一个2x2列联表可以为模型选择提供进一步的见解。

在子图A和B中,两个模型的预测准确率如下:

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

参考文献

示例 1 - 单个 2x2 列联表

import numpy as np
from mlxtend.evaluate import mcnemar_tables

y_true = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])

y_mod0 = np.array([0, 1, 0, 0, 0, 1, 1, 0, 0, 0])
y_mod1 = np.array([0, 0, 1, 1, 0, 1, 1, 0, 0, 0])

tb = mcnemar_tables(y_true, 
                    y_mod0, 
                    y_mod1)

tb

{'model_0 vs model_1': array([[ 4.,  1.],
        [ 2.,  3.]])}

为了通过matplotlib可视化(并更好地解释)列联表,我们可以使用checkerboard_plot函数:

from mlxtend.plotting import checkerboard_plot
import matplotlib.pyplot as plt

brd = checkerboard_plot(tb['model_0 vs model_1'],
                        figsize=(3, 3),
                        fmt='%d',
                        col_labels=['model 2 wrong', 'model 2 right'],
                        row_labels=['model 1 wrong', 'model 1 right'])
plt.show()

png

示例 2 - 多个 2x2 列联表

如果向 mcnemar_tables 函数提供了超过两个模型,则将为每对模型创建一个 2x2 交叉表:

import numpy as np
from mlxtend.evaluate import mcnemar_tables

y_true = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])

y_mod0 = np.array([0, 1, 0, 0, 0, 1, 1, 0, 0, 0])
y_mod1 = np.array([0, 0, 1, 1, 0, 1, 1, 0, 0, 0])
y_mod2 = np.array([0, 0, 1, 1, 0, 1, 1, 0, 1, 0])

tb = mcnemar_tables(y_true, 
                    y_mod0, 
                    y_mod1,
                    y_mod2)

for key, value in tb.items():
    print(key, '\n', value, '\n')

model_0 vs model_1 
 [[ 4.  1.]
 [ 2.  3.]]

model_0 vs model_2 
 [[ 4.  2.]
 [ 2.  2.]]

model_1 vs model_2 
 [[ 5.  1.]
 [ 0.  4.]]

API

mcnemar_tables(y_target, y_model_predictions)*

Compute multiple 2x2 contigency tables for McNemar's test or Cochran's Q test.

Parameters

Returns

Examples

For usage examples, please see
https://rasbt.github.io/mlxtend/user_guide/evaluate/mcnemar_tables/

ython