关于sklearn.metrics.classification的说明,不少博客都是列几行代码再说一下precision,recall,F1-score定义就完事儿,实在是难以理解其用法,本文将用例子与算式结合的方式说明
例子
import numpy as np
from sklearn.metrics import classification_report
y_true =np.array([0,1,2,2,2,1])
y_pred = np.array([0,0,1,2,2,1])
print(classification_report(y_true,y_pred))
结果
precision recall f1-score support
0 0.50 1.00 0.67 1
1 0.50 0.50 0.50 2
2 1.00 0.67 0.80 3
micro avg 0.67 0.67 0.67 6
macro avg 0.67 0.72 0.66 6
weighted avg 0.75 0.67 0.68 6
我们一共拥有0,1,2三个类别,所以输出结果中有0,1,2三行
True Positive (真正, TP)被模型预测为正的正样本;
True Negative(真负 , TN)被模型预测为负的负样本 ;
False Positive (假正, FP)被模型预测为正的负样本;
False Negative(假负 , FN)被模型预测为负的正样本;
precision:TP/(TP+FP)
recall:TP/(TP+FN)
f1-score:2*precision*recall/(precision+recall)
行0:
precison:y_pred中有两个0,对应真实标签一个0一个1,所以TP=1,FP=1,1/(1+2)=0.5
recall:y_true中有1个在预测中被预测为0,并且没有出现本来是0但在预测中被预测为别的值的情况出现,所以TP为1FN为0, 1/(1+0)=1
行1:
precision:y_pred中有两个1,对应真实标签一个2一个1,所以TP=1,FP=1,1/(1+2)=0.5
recall:y_true中有1个在预测中被预测为0,并且没有出现本来是0但在预测中被预测为别的值的情况出现,所以TP为1FN为0, 1/(1+0)=1
recall:y_true中有2个在预测中被预测为1,对应真实标签一个2一个1,所以TP为1FN为1, 1/(1+1)=0.5
行2可以由读者作为练习进行参考