混淆矩阵,准确率,召回率,特异性,ROC曲线绘制
一、混淆矩阵
pos (预测的) | neg (预测的) | |
---|---|---|
pos (真正的) | TP | FN |
neg (真正的) | FP | TN |
TP : 正例预测成正例(预测正确)
TN : 负–>负(预测正确)
FP : 负–>正(预测错误)
FN : 正–>负(预测错误)
- 鉴于这四个东西容易混淆(矩阵混淆,我们可不能混淆。。),可以这样记忆:
- T,F分别表示预测正确或错误;P,N分别表示XXX预测成了正样本或负样本。
- 连起来就是“XXX被正确(错误)地预测成了正(负)样本”
- 例如:FP=被False(错误)地预测成了Positive(正样本)
二、评价指标
- 准确率 :所有样本中预测准确的比例。 Accuracy=(TP+TN)/(TP+FN+FP+TN)
- 召回率(敏感度):预测正确的正样本在所有正样本中的占比。 Recall=TP/(TP+FN)
- 特异性 :预测正确的负样本在所有负样本中的占比。 Specificity=TN/(TN+FP)
三、ROC曲线与AUC
- 话不多说,上代码!
from sklearn import metrics
import pylab as plt
pred= data_appended.y_pred_1
y = data_appended.y
fpr, tpr, threshold = metrics.roc_curve(y, pred)
roc_auc = metrics.auc(fpr, tpr)
plt.figure(figsize=(6,6))
plt.title('Test ROC')
plt.plot(fpr, tpr, 'b', label = 'Test AUC = %0.3f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
- x : FP
- y : TP
- AUC : ROC曲线包围的下方面积∈[0.5,1],越靠近红色虚线,模型的表现越差。如果<0.5,说明TP、TF搞反了,曲线在红色虚线下
- ROC曲线越接近左上角(AUC越大),模型越好
发表于:2019/10/14