如果一小部分样本既是假阳性又是真阳性,那么精度和召回指标是否可以?

数据挖掘 准确性 混淆矩阵 f1score 二元分类
2022-02-26 11:30:42

我正在使用基因组数据研究多标签分类 NN。每个样本有 10 个样本和 2 个真实标签(年龄和性别)。我在最后一层使用了 sigmoid 激活,因为样本不再受限于跨类的概率分布,所以我得到的样本对于多个年龄可能具有 0.5 或更高的概率 - 例如 age1 和 age2。由于这是基因组数据,这并不奇怪,尤其是年龄分布。

我正在使用 sklearn 生成混淆矩阵以及精度和召回报告

from sklearn.metrics import classification_report, multilabel_confusion_matrix

preds_train = model.predict(X_train)
preds_test = model.predict(X_test)

preds_train = preds_train > 0.5
preds_test = preds_test > 0.5

preds_train = tf.cast(preds_train, tf.float32)#one-hot predictions
preds_test = tf.cast(preds_test, tf.float32)

print(classification_report(y_true_train, preds_train))
print(classification_report(y_true_test, preds_test))

multilabel_confusion_matrix(targets_train, np.array(preds_train))

如前所述,我遇到了这样一种情况,其中一些样本的正确概率和“不正确”类的概率超过 0.5,产生一个包含该样本的三个 1 而不是两个 1 的单热向量。这意味着这些样本在评估该类的精确召回和 F1 时会变成真阳性,而对于不正确的类则是假阳性。

我的问题是,原则上这是可以和有效的吗?除了提高门槛还有什么可以做的吗?

我倾向于说准确率、召回率和 F1仍然是正确的,因为如果样本是 TP 和 FP 如果这只是存在的模式并代表未来预测可能显示的内容,那么这并不重要!

我很感激任何意见。谢谢!

1个回答

如果我在这个特定情况下理解正确,我同意你的看法,将这样的样本同时计算为 TP 和 FP 是合理的。但是,当您描述评估方法时,必须清楚地解释这一点,因为它不是精确/召回的标准行为。

另一种更标准的版本是应用真正的多标签评估,即独立评估每个标签的精度和召回率。在此设置中,您将获得每个标签的精度/召回/f 分数值,例如 age1 和 age2。这对于按标签观察详细性能很有用,您仍然可以将它们组合成具有微观和/或宏观 f-score 的全局性能度量。我希望它与您的变体不会有太大不同,但我不确定。如果它们不同,可能值得提供两种评估方法。


[编辑] 最后我应该提到一个中间选项,它包括将每个标签计算为实例的一部分:如果有n标签,每个标签计数1/n其分类状态。例如,一个实例可以是 1/3 TP、1/3 FP 和 1/3 TN。