如何找到分类结果的统计显着性差异?

机器算法验证 机器学习 分类 统计学意义
2022-03-24 19:22:19

我正在尝试比较“相同数据集”上的一些指标。因此,我计算了一些性能指标,并得到了每个指标的结果。

我只有一个数据集。我使用 KNN 构建了一个分类模型,但是使用 KNN(非参数方法)算法,我使用了 7 个距离度量,例如欧几里得距离等。

我的问题是如何知道结果之间是否存在显着差异。是否有任何统计检验可以帮助找出下表中每一行的统计显着性差异。做 t 检验和方差分析适用于此。

例如,在下表中。95.43、95.78、96.66 等其他性能指标(如灵敏度、F1 分数等)的准确度之间是否存在统计学上的显着差异。我也不熟悉分类结果中的 Kappa 和 Mcnemar 检验 p 值。

注意:我检查了其他相关问题,但没有找到有用的答案。此外,我的问题不仅与准确性有关,还与其他性能指标有关。

我将非常感谢应用程序提供的信息丰富的详细答案(如果可能,在 R 中)。

在此处输入图像描述

2个回答

我不认为您可以根据单个数据集上的不同距离度量来准确地完成您想要的 KNN模型集,但是您可以尝试根据不同的距离评估建模方法的相对性能指标。但是,您必须进行两项调整。

下面的大部分内容都来自本页的讨论

首先,您应该使用适当的评分规则(例如Brier 评分)而不是准确度、特异性、敏感性和 F1 评分来评估性能。众所周知,这些是用于比较模型的较差度量,它们对不同类型的分类错误之间的成本权衡做出了隐含的假设。* Brier 分数实际上是预测的类成员概率与实际成员概率之间的均方误差。您将不得不查看您的 KNN 软件如何提供对类概率的访问,但这通常可以在此sklearn函数中实现。

其次,不是简单地将模型一次拟合到您的数据中,您需要了解建模过程在重复应用到您的数据集时的效果如何。一种方法是使用多个引导样本,比如几百到一千个数据。对于作为训练集的每个 bootstrap 样本,使用每个距离指标构建 KNN 模型,然后在作为测试集的整个原始数据集上评估它们的性能。然后,每种类型的模型在几百到一千个引导程序中的 Brier 分数分布可以表明,在基于不同距离度量的模型之间,就适当的评分规则而言,存在显着差异。

然而,即使这种方法也有其局限性。请参阅cbeleities的此答案以进行进一步讨论。


*使用准确性(正确分配案例的比例)作为模型性能的衡量标准,隐含假设假阴性和假阳性具有相同的重要性。请参阅此页面以进行进一步讨论。在实际应用中,这种假设可能没有帮助。一个例子是前列腺癌的过度诊断和过度治疗常规诊断测试中的假阳性导致许多不太可能死于这种癌症的男性,但仍在接受改变生活的疗法,但往往会产生不良副作用。

F1 分数没有考虑真正的负例/比率,这在某些应用程序中可能很关键灵敏度和特异性值取决于它们之间的特定权衡选择有时,这种权衡是由软件默默进行的,例如将逻辑回归中的分类截止设置为预测值p>0.5. 所有这些措施背后的明确或隐藏的假设意味着它们可能会受到假设的微小变化的巨大影响。

最普遍有用的方法是生成一个良好的类成员概率模型,然后使用权衡成本的判断来告知预测类的最终分配(如果需要)。Brier 评分和其他适当的评分规则提供了概率模型质量的连续测量,当模型是真实模型时,这些测量得到优化。

免责声明:我认为这仅在一定程度上回答了 OP 的问题。

我见过在这些环境中使用弗里德曼事后检验。例如:让我们在特定的数据集 A 上说 - 算法 X 给出Ax% 准确率,算法 Y 给出Ay% 准确率和算法 Z 给出Az% 准确性。同样在数据集 B - 算法 X 给出Bx% 准确率,算法 Y 给出By% 准确率和算法 Z 给出Bz% 准确性。假设我们有 5 个这样的数据集(A、B、C、D 和 E)运行这些算法。

在这种情况下,弗里德曼事后检验可用于检查算法 X 的准确性是否与其他算法(Y 和 Z)有显着差异。弗里德曼检验类似于方差分析,但没有正态假设。幸运的是,在 R 中,实现这个测试相当简单。