Answers:
如果您对精度(又称正预测值PPV)和召回率(又称敏感度)的定义进行拼写,您会发现它们与一个类别相关,而与其他任何类别无关:
召回或敏感性是在真正属于c类的所有案例中正确标识为属于c类的案例的比例。
(鉴于我们有一个真正属于“ c ” 的案例,正确预测这一可能性是多少?)
精确度或正预测值PPV是正确分类为c类的案例在分类器声称属于c类的所有案例中所占的比例。
换句话说,在那些预计属于c类的情况下,哪个分数真正属于c类?(给定谓词“ c ”,正确的概率是多少?)
在那些预测不属于c类的情况下,负预测值NPV到底不属于c类?(给定谓词“ not c ”,正确的概率是多少?)
因此,您可以计算每个类的精度和召回率。对于多类混淆表,这是对角元素分别除以它们的行和列总和:
如果您只是想要结果,我的建议是不要考虑太多,而要使用您可以使用的工具。这是您可以在Python中完成的方法;
import pandas as pd
from sklearn.metrics import classification_report
results = pd.DataFrame(
[[1, 1],
[1, 2],
[1, 3],
[2, 1],
[2, 2],
[2, 3],
[3, 1],
[3, 2],
[3, 3]], columns=['Expected', 'Predicted'])
print(results)
print()
print(classification_report(results['Expected'], results['Predicted']))
获得以下输出
Expected Predicted
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
8 3 3
precision recall f1-score support
1 0.33 0.33 0.33 3
2 0.33 0.33 0.33 3
3 0.33 0.33 0.33 3
avg / total 0.33 0.33 0.33 9
以下是假设我们的类别标签为A,B和C的多类别混淆矩阵的示例
A / P A B C总和
A 10 3 4 17
B 2 12 6 20
C 6 3 9 18
总和18 18 19 55
现在,我们为Precision和Recall分别计算三个值,并将它们分别称为Pa,Pb和Pc。以及类似的Ra,Rb,Rc。
我们知道Precision = TP /(TP + FP),因此对于Pa来说,真实正值将被预测为A的实际A,即10,该列中两个单元格的其余部分(无论是B还是C)都设为False Positive。所以
Pa = 10/18 = 0.55 Ra = 10/17 = 0.59
现在,B类的精度和召回率分别为Pb和Rb。对于B类,真正的正数是将实际的B预测为B,即包含值12的单元格,该列中两个单元格的其余部分为False Positive,因此
Pb = 12/18 = 0.67 Rb = 12/20 = 0.6
类似地,Pc = 9/19 = 0.47 Rc = 9/18 = 0.5
分类器的整体性能将由平均精度和平均召回率决定。为此,我们将每个类的精度值与该类的实际实例数相乘,然后将它们相加并除以实例总数。喜欢 ,
平均精度=(0.55 * 17 + 0.67 * 20 + 0.47 * 18)/ 55 = 31.21 / 55 = 0.57平均召回率=(0.59 * 17 + 0.6 * 20 + 0.5 * 18)/ 55 = 31.03 / 55 = 0.56
希望对您有所帮助