真阳性和真阴性,F1分数:多类分类

数据挖掘 分类 多类分类 混淆矩阵
2021-10-14 01:42:39

我有 4 个类用于动物界分类的应用:1 --> 无脊椎动物;2 --> 脊椎动物;3--> 哺乳动物;4 ---> 两栖动物。给定混合图像,目标是正确识别哺乳动物。在此示例的混淆矩阵中,TP 是否表示第 3 类(哺乳动物)?

Q1:所以,一般TP是最重要的class类别吗?如果所有的类都同等重要,那么如何表示 TP 和 TN?

Q2:F1成绩如何计算?应该为每个班级单独完成吗?如果那么每个班级都会有多个TN!

有人可以帮助消除这些困惑吗?谢谢你。

2个回答

在多类问题中,每个类都有一个分数,将任何其他类计为负数。

例如对于第 1 类:

  • TP 实例是黄金标准 1 类,预测为 1 类
  • FN 实例是黄金标准 1 类,预测为 2,3 或 4 类
  • FP 实例是黄金标准 2,3 或 4 类,预测为 1 类
  • TN 实例是 2,3 或 4 类的黄金标准,预测为 2,3 或 4 类(这里错误无关紧要,只要不涉及 1 类)

换句话说,该问题被评估为就好像它是每个类别的二元分类问题一样。对每个类独立地执行相同的过程(因为实例的状态取决于目标类),每个类获得不同的 F1 分数。

之后,通常计算宏观 F1 分数或微观 F1 分数(或两者)以获得整体性能统计数据。

如果给定混合图像,目标是正确识别哺乳动物,那么这是一个二元分类问题,哺乳动物与非哺乳动物

混淆矩阵将是 2 乘 2。像这样的东西,想象这里的欺诈哺乳动物

CM 二进制

如果所有类都同样重要,那么这是一个多分类问题。混淆矩阵将是 n × n。

下面是一个 3 x 3 的示例,您的情况类似,但 4 x 4。

CM为多

至于多分类的 F1 分数,您可以使用classification_report()from scikit-learn

from sklearn.metrics import classification_report
print(classification_report(new_y_test,new_y_test_pred))

再次,输出将是这样的,对于您的情况,假设有一个 3 类

              precision    recall  f1-score   support

           0       0.98      0.98      0.98    563729
           1       0.47      0.39      0.42     22439
           2       0.70      0.86      0.77      3822

    accuracy                           0.96    589990
   macro avg       0.71      0.74      0.72    589990
weighted avg       0.95      0.96      0.96    589990