马修斯相关系数 ( ) 是衡量二元分类质量的度量 ([Wikipedia][1])。公式用于使用真阳性( )、假阳性( )、假阴性( ) 和真阴性( ) 值进行二元分类,如下所示:
我有一个案例,我需要对三个不同的类、和进行分类。、、和值后,我可以应用上述公式计算多类情况的吗,如下所示?
马修斯相关系数 ( ) 是衡量二元分类质量的度量 ([Wikipedia][1])。公式用于使用真阳性( )、假阳性( )、假阴性( ) 和真阴性( ) 值进行二元分类,如下所示:
我有一个案例,我需要对三个不同的类、和进行分类。、、和值后,我可以应用上述公式计算多类情况的吗,如下所示?
是的,一般来说,你可以。您要使用的这种方法有时称为“微平均”:首先,将每个类的所有TN
s、FP
s 等相加,然后计算感兴趣的统计量。
组合单个类的统计数据的另一种方法是使用所谓的“宏观平均”:在这里您首先计算单个类的统计数据(A 与非 A、B 与非 B 等),然后计算他们。
你可以在这里查看一些额外的细节。该页面讨论了精确度和召回率,但我相信它适用于马修系数以及基于列联表的其他统计数据。
宏观平均技术适用于精度、灵敏度和特异性。但是当我为 MCC 尝试它时,它没有给出正确的结果。有关多类 MCC 计算的更多详细信息,请参阅:
以下代码对我有用:
% the confusion matrix at input is given by matrix cm_svm_array
mcc_numerator=0;count=1;
% limits klm=1 TO n SUM(ckk.cml - clk.ckm)
for k = 1:1:length(cm_svm_array)
for l=1:1:length(cm_svm_array)
for m=1:1:length(cm_svm_array)
mcc_numerator1(count) = (cm_svm_array(k,k) *cm_svm_array(m,l))-
(cm_svm_array(l,k)*cm_svm_array(k,m))
mcc_numerator=mcc_numerator+mcc_numerator1(count)
count=count+1;
end
end
end
mcc_denominator_1=0 ; count=1;
for k=1:1:length(cm_svm_array)
mcc_den_1_part1=0;
for l=1:1:length(cm_svm_array)
mcc_den_1_part1= mcc_den_1_part1+cm_svm_array(l,k);
end
mcc_den_1_part2=0;
for f=1:1:length(cm_svm_array)
if f ~=k
for g=1:1:length(cm_svm_array)
mcc_den_1_part2= mcc_den_1_part2+cm_svm_array(g,f);
end
end
end
mcc_denominator_1=(mcc_denominator_1+(mcc_den_1_part1*mcc_den_1_part2));
end
mcc_denominator_2=0; count=1;
for k=1:1:length(cm_svm_array)
mcc_den_2_part1=0;
for l=1:1:length(cm_svm_array)
mcc_den_2_part1= mcc_den_2_part1+cm_svm_array(k,l);
end
mcc_den_2_part2=0;
for f=1:1:length(cm_svm_array)
if f ~=k
for g=1:1:length(cm_svm_array)
mcc_den_2_part2= mcc_den_2_part2+cm_svm_array(f,g);
end
end
end
mcc_denominator_2=(mcc_denominator_2+(mcc_den_2_part1*mcc_den_2_part2));
end
mcc = (mcc_numerator)/((mcc_denominator_1^0.5)*(mcc_denominator_2^0.5))
MCC 可用于二进制和多类分类维基百科,它在sci-kit learn中实现,用于二进制和多类标签。
MCC 专为二进制分类而设计。
如果你想得到一个类似的分类器度量,你可以试试 Cohen's Kappa,它可以应用于多类混淆矩阵。