如果每个主题仅包含一个类别,那么在 Leave-One-Subject-Out 二元分类中精度如何小于 1

数据挖掘 机器学习 分类 scikit-学习 机器学习模型 交叉验证
2021-10-01 12:37:47

假设我正在尝试对医疗状况进行分类。

只有两个类别:生病和健康。

我建立了一个模型,但我无法拆分数据,因为我不希望来自同一患者的数据在训练和测试集中。所以我选择使用 Leave-One-Subject-Out,在除一个以外的所有主题上训练模型,并在剩下的主题上进行测试。

因此,对于每个测试集,我都有一个主题,他们要么健康,要么生病。因此,混淆矩阵只包含一个类别,其中精度在技术上每次都是一个,并且召回等于准确度。

我一直在阅读一些论文,这些论文声称在患者有健康状况或没有健康状况的情况下使用离开主题训练和测试拆分。我看过报告准确性、召回率和精确度的论文,但我不明白如果每个主题只包含一个类,那么精确度怎么可能小于 1。我怀疑这些论文是在撒谎,因为我不止一次看到过这种情况。

我只想知道这里发生了什么让他们获得小于一的精度值。他们是在做某种平均,还是我错过了一些东西并以错误的方式思考这个问题?也没有任何论文解释这一点。

1个回答

您的推理是正确的,即黄金标准类对于单个留一法测试集中的所有实例都是相同的(假设测试患者在某个时间点不会生病,因此同时具有健康和生病状态)。

您缺少的是跨多个测试集的聚合:一个完整​​的留一法实验对每个患者重复此过程,即如果有 N 个患者,则有 N 个唯一的对(训练集、测试集)。这是一个伪代码,可以清楚地显示这一点:

correct,incorrect=0    
for every patient p:
    training_set = all the patients except p
    test set = patient p
    model = train(training_set)
    // to simplify I count the patient as one instance, it's easy to count instances instead
    if model.predict(test_set) == gold_standard(p):
       correct += 1
    else:
       incorrect += 1 
accuracy = correct / (correct + incorrect)

所有患者的计算可能导致一些预测正确而另一些预测不正确,这就是为什么准确度、精确度或召回率可以是 0 到 1 之间的任何值。