最近又返回去刷西瓜书了,重新看了一下混淆矩阵,性能度量最常用的就是混淆矩阵了吧?有错误的地方大佬们多多指正
1.混淆矩阵
真的字如其名,初次认识他我真的很容易被混淆,贴上图看一下:
(1)查准率(precision):
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
代表的是预测为正例里面,正确的比例
(2)查全率(召回率)(recall):
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
代表的是真实值为正例里面被正确预测出来的比例
(3)F1分数
综合考量了查准率和查全率,一般很多模型都是用这个来评价,公式:
F
1
=
2
∗
P
∗
R
P
+
R
=
2
∗
T
P
样
例
总
数
+
T
P
−
T
N
F1=\frac{2*P*R}{P+R}=\frac{2*TP}{样例总数+TP-TN}
F1=P+R2∗P∗R=样例总数+TP−TN2∗TP
2.代码实现
sklearn里面封装好了完整的混淆矩阵库,可以直接调用:
from sklearn.metrics import f1_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
precision_score=precision_score(labels_test,y_pred,pos_label=1,average='binary')
accuracy=accuracy_score(labels_test,y_pred)
recall_score=recall_score(labels_test,y_pred,pos_label=1,average='binary')
F1=f1_score(labels_test,y_pred,pos_label=1,average='binary')
print('precision_score=',precision_score)
print('recall_score=',recall_score)
print('accuracy_score=',accuracy)
print('f1_score=',F1)
out:precision_score= 0.866738894907909
recall_score= 0.70298769771529
accuracy_score= 0.711875
f1_score= 0.7763221737020863
代码直接调用非常简单,需要注意的一点是,在计算的过程中,计算机其实并不知道0和1哪个是正例哪个是反例,需要我们人为的去标定它,在查全率、召回率、F1分数都用到了混淆矩阵,那么就需要区分正反例,函数中pos_label=1是用于认人为标记样本正例的。