如何计算多类分类的不同指标

数据挖掘 多类分类 matlab 混淆矩阵
2022-02-23 13:23:09

我的混淆矩阵具有以下结构:

                (Predicted)

C=   ( actual)    [TN FP
                 FN TP]

如何计算多类的 Mathews 相关系数 (MCC) 值,表示为 MCC = (TP .* TN - FP .* FN) ./ ... sqrt( (TP + FP) .* (TP + FN) .* (TN + FP) .* (TN + FN) );

另外,我对多级以下措施的计算有一些疑问。请纠正我哪里错了。

for i=1:nClasses
   TN(i)=C(i,i);
    FP(i)=sum(C(i,:))-C(i,i);
    FN(i)=sum(C(:,i))-C(i,i);
    TP(i)=sum(C(:))-TP(i)-FP(i)-FN(i);
end
1个回答

如您所见,此 MCC 公式是用于二进制分类的,因此您只能通过将问题视为二进制来计算其结果。

[编辑以澄清 OP 的困惑]什么是混淆矩阵?它显示了每个真正的课程X作为一行和每个预测的类作为一列有多少实例具有真正的类X并预测为. 如果只有两个类(二元分类),唯一的可能性是

  • X积极和正面 -> TP
  • X积极和负-> FP
  • X消极和正-> FN
  • X消极和负-> TN

但是,当有两个以上的类(多类分类)时,不可能直接使用这种区分正/负,因此没有一般的 TP、FP、FN、TN 情况。

对于多个类,可以计算每个类的二元分类指标。这是通过将目标类视为正类而将所有其他类视为负类来完成的(就好像它们被合并到一个大的负类中一样)。

示例:假设我们有 A、B、C 类。如果我们关注 A 类,混淆矩阵是这样的:

    A   B   C
A   TP  FN  FN
B   FP  TN  TN
C   FP  TN  TN

以另一种方式呈现:

         A    B or C
A        TP    FN 
B or C   FP    TN  

现在,如果我们关注 B 类,混淆矩阵变为:

    A   B   C
A   TN  FP  TN
B   FN  TP  FN
C   TN  FP  TN

在您的代码中,交换了 TP 和 TN 类别:

TP(i)=C(i,i);
...
TN(i)=sum(C(:))-TP(i)-FP(i)-FN(i);