使用p值的多个分类器的统计显着性
这是一种常见的做法,但在统计学家中颇具争议(Dietterich 1998) (Kohavi 1995)
对于 t 检验,如果您不能假设正态分布(您确实不能),则需要 30 个或更多样本。常见的方法是对 10 倍 CV 进行 3 次重复。折叠应该由随机生成器打乱,但每个算法都应该使用相同的随机折叠。对性能差异使用一个样本 t 检验。
T 检验还假设 iid 样本。CV 中没有给出样本的独立性。这个问题可以通过使用非常不同的非参数测试来避免。或者,您可以使用经过校正的重采样 t 检验,在重复交叉验证设置中精确校正这种非独立性。它们不如正常的 t 检验强大,但可以说比上面链接的非参数检验更强大。例如, Weka默认使用这些测试。
PS。如果你成对比较 7 种算法,你还需要一个 Bonferroni 调整或类似于你的 p 值的东西。
我同意 Ramalho 的观点,即使用统计假设检验来解释模型比较是一个好主意。
这里有一些要点,应该让你开始:
您可以并且应该设置性能测量,以便所有算法都使用完全相同的拆分。这为您提供了配对测试设置。配对测试比非配对测试更强大。
是的,您还应该对交叉验证进行迭代/重复,因为这使您可以比较算法之间观察到的差异以建模(不)稳定性。
但是,请记住,您的测试样本量保持您可用的不同案例的数量,并且不会随着重复交叉验证而增加。
您还应该知道,从统计的角度来看,0/1 损失和相关的品质因数(例如准确性)表现得非常糟糕:它们具有高方差,因此需要大样本量才能变得精确。所谓的正确评分规则会是一个更好的选择,但你必须权衡你的观众是否会接受这一点。
为您提供一个起点:损失为 0/1 时,可以使用 McNemar 检验进行(单)配对比较。正如@user7019377 所说,对于多重比较,您需要进行适当的更正。
更好的是,虽然会限制您实际进行的比较次数。因此,在设置测试时,请认真思考如何制定假设。您可能想证明您的分层假人与 50 % 没有显着差异,而随机假人与 1/nclasses 没有显着差异(如果我猜对了情况)。此外,看看你为真正的分类器得到的结果,你可能不需要在那里进行多次测试,但一个测试表明没有算法预测与任何其他算法有显着差异可能就足够了。不幸的是,我不知道二项式数据是否有类似方差分析的东西。但是,我会选择一个适当的评分规则,看看 ANOVA 是否是一个合适的选择。
- 但是,这里有一些东西可以为您提供一条捷径,为您提供解释所需的一切:
- 虚拟分类器的测试是非常简单的教科书内容。
对于真正的分类器,二项式置信区间的快速计算表明,您为 675 个测试用例报告的准确度的两侧 95% 置信区间包含所有其他分类器(例如 675 中的 610 => ci 从大约 87.9% 到 92.4 %)
使用 McNemar 在 KNN 与 599 正确和 SVM 与 610 正确之间的测试查看“最佳”可能结果 => 如果 SVN 得到所有这些案例正确,那么 KNN 也正确,再加上额外的 11 个案例。这得到(未校正的)p 值为 0.0025。即,在您喜欢的任何多次测试校正之后,它在 p = 0.05 水平上并不显着。此外,KNN 正确但 SVM 没有将 SVM 和 kNN 之间的 McNemar 检验的 p 值弹射到 p = 0.05 值之上的一个案例。
即使 McNemar 测试的 ANOVA 模拟发现并非所有 5 个真实分类器都是等价的,您也没有足够的测试用例来断定哪个更好!
=>出于所有实际目的,我认为您在此处使用的 5 个分类器的结果之间没有任何显着差异(尤其是在日常意义上!)(这是基于假设结果是在配对设置中获得的——如果实验没有如上所述配对,它远非显着,但配对实验的情况可能看起来不同)
除了二项式检验,还使用了基于等级的检验。
@air 提到了交叉验证代理模型之间的相关性。这是问题还是优势取决于您实际想要比较的内容。如果您从应用程序的角度来看,并且想要回答使用训练算法在此特定数据集上训练的模型的预期性能的问题- 那么高相关性就是您想要的。实际上,您假设平等!如果您想将重新采样的数据集视为为该应用程序绘制新的训练数据集的近似值,则相关性是有问题的(即,想要比较类似任务上不同训练算法的可实现性能)。
在 Dietterich1998 的论文中,该论文对应于您是分析分类器还是算法的问题。
您可能会考虑添加您能想到的最佳朴素分类器,根据一些简单的历史平均值分配类别,或根据预期分布随机分配。(也许这就是“随机假人”。)
然后对每个测试与朴素分类器的混淆矩阵进行卡方检验,以确定改进的可能性是由于偶然性。
是的,您可以应用统计假设检验。
您使用交叉验证评估每个分类器(就像您所做的那样),而是在每次折叠期间存储该分类器的(准确性/其他指标)。完成此操作后,您可以使用假设检验来测试该分类器的均值 acc 是否明显优于或最差第二个分类器的均值 acc。您甚至可以通过这种方式对它们进行排名。
关于这是一个好主意还是坏主意..我发现在使用不同的特征或转换集时比较相同的分类器是个好主意..但是比较不同的模型?我不知道。您最好通过一个集成来组合分类器。
如果您追求我描述的方法,重复交叉验证也是一个好主意。特别是如果您想获得更精确/稳定的结果(交叉验证通常具有高方差)。
是的,我以前做过……在 python 上。这真的很简单。
