0 | 1 | |
---|---|---|
0 | 预测negative正确 TN | 预测positive错误 FP |
1 | 预测negative错误 FN | 预测positive正确 TP |
其中行代表真实值,列代表预测值
举个列子,在下面表格中0代表健康人,1代表患有癌症的人。
预测\真实 | 0 | 1 |
---|---|---|
0 | 9978 | 12 |
1 | 2 | 8 |
这里面就可以看出有12个人没有患癌症,但是我们算法却错误的预测了他患了癌症。
精准率
p
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
precision = \tfrac{TP}{TP+FP}
precision=TP+FPTP
精准率是指预测positive准确的值。即预测为1的事件中,预测正确的值。
召回率
r
e
c
a
l
l
=
T
P
T
P
+
F
N
recall= \tfrac{TP}{TP+FN}
recall=TP+FNTP
关注的事件真实发了,但是我们又成功预测的准确率。
用以下的图来看
# 在sklearn中混淆举证的调用
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test,y_predict)
# 精准率
from sklearn.metrics import precision_score
precision_score(y_test,y_predict)
from sklearn.metrics import recall_score
recall_score(y_test,y_predict)
3、precision-recall的平衡
从上图可以看出,精准率和召回率是互相牵制的一组数据。
4、ROC曲线
TPR是召回率
FPR是预测为1,占真实值是0的预测正确或者预测错误的概率。说白了就是预测错误。
F
P
R
=
F
P
T
N
+
F
P
FPR= \tfrac{FP}{TN+FP}
FPR=TN+FPFP
from sklearn.metrics import roc_curve
fprs,tprs,thresholds = roc_curve(y_test,y_predict)
plt.plot(fprs,tprs)
plt.show()
图片中的积分面积要越大越好,也就是TPR被抬得越高越好。
from sklearn.metrics import roc_auc_score
roc_auc_score(y_test,y_predict)
最后值为0.9188311688311689
用于比较模型的优劣。
4、多分类的混淆矩阵
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test,y_predicts)
cfm = confusion_matrix(y_test,y_predicts)
plt.matshow(cfm,cmap = plt.cm.Purples)