赞
踩
首先可以用sklearn包直接计算。
from sklearn.metrics import recall_score,f1_score,accuracy_score
y_true = [1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4]
y_pred = [1, 1, 1, 0, 0, 2, 2, 3, 3, 3, 4, 3, 4, 3]
print(f1_score(y_true,y_pred,labels=[1,2,3,4],average='micro'))
print(f1_score(y_true,y_pred,labels=[1,2,3,4],average='macro'))
print(recall_score(y_true,y_pred,labels=[1,2,3,4],average='micro'))
print(recall_score(y_true,y_pred,labels=[1,2,3,4],average='macro'))
F1-score: 2*(P*R)/(P+R)
首先计算出每一类的TP ;FP;FN
1类 2类 3类 4类 总数
TP 3 2 2 1 8
FP 0 0 3 1 4
FN 2 2 1 1 6
micro的 精确度P 为 TP/(TP+FP)=8/(8+4)=0.666 召回率R TP/(TP+FN)=8/(8+6)=0.571 所以F1-micro的值为:0.6153
macro先要计算每一个类的F1,有了上面那个表,计算各个类的F1就很容易了,比如1类,它的精确率P=3/(3+0)=1 召回率R=3/(3+2)=0.6 F1=2*(1*0.5)/1.5=0.75,然后再求平均。
所以可以有两种计算方式,得出的结构也不相相同,根据需求自行选择。
参考:https://www.cnblogs.com/techengin/p/8962024.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。