分类模型的评估指标
在构建完模型后,还会存在着参数的设定、特征的选取或者算法的优劣等带来的问题,进而影响模型的效果。同时,由于我们构建模型的目的和需求不同,有时候不能简单的以一个方面去评估模型的好坏,因此,存在着评价模型的一系列指标,这些指标从不同方面评估模型。
1 混淆矩阵(Confusion Matrix)
混淆矩阵能够比较全面的反映模型的性能,由它能够得到一些指标。
二分类结果混淆矩阵如下所示:
| 右测为真实情况,下面为预测结果 | 正例(Positive) | 反例(Negative) |
|---|---|---|
| 正例 | TP(真正例) | FP(假正例) |
| 反例 | FN(假反例) | TN(真反例) |
T:True
F:False
TP代表预测结果为正例,实际也为正例。其他以此类推。
1.1 查准率(精准率 Precision)
定义:
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP}Precision=TP+FPTP
预测对的正例占所有预测的正例的百分比。
1.2 查全率(召回率 Recall)
定义:
R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN}Recall=TP+FNTP
预测对的正例占真实正例的百分比,即预测的覆盖到多少。
一般来说,recall和precision很难兼得,覆盖越多的例子,recall会更高,但也越有可能犯错,precision就会变低。
1.3 正确率(准确率 Accuracy)
定义:
A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy = \frac{TP+TN}{TP+TN+FP+FN}Accuracy=TP+TN+FP+FNTP+TN
预测对的例子占所有预测例子的百分比。
2 F1-score
定义:
F - s c o r e = w 1 + w 2 1 R e c a l l ∗ w 1 + 1 P r e c i s i o n ∗ w 2 = ( w 1 + w 2 ) R e c a l l ∗ P r e c i s i o n w 1 R e c a l l + w 2 P r e c i s i o n F\operatorname{-}score = \frac{w_1+w_2}{\frac{1}{Recall}*{w_1}+\frac{1}{Precision}*{w_2}}\\ = \frac{(w_1+w_2)Recall*Precision}{w_1Recall+w_2Precision}F-score=Recall1∗w1+Precision1∗w2w1+w2=w1Recall+w2Precision(w1+w2)Recall∗Precision
Precision和Recall的加权调和平均数,假设两者一样重要时,上式有:
F 1 - s c o r e = 2 R e c a l l ∗ P r e c i s i o n R e c a l l + P r e c i s i o n F1\operatorname{-}score = \frac{2Recall*Precision}{Recall+Precision}F1-score=Recall+Precision2Recall∗Precision
F1-score能够同时反映recall和precision,比均值更能反应模型的好坏,能均衡recall和precision。
2.1 代码
from sklearn import metrics # 导入指标集
metrics.f1_score(y_test,y_pred) # 调用f1-score函数
metrics.f1_score(y_test,y_pred,average='micro') # 对于多分类多标签,超参数average为micro时,使用总体的TP、FN、FP来计算f1-score
metrics.f1_score(y_test,y_pred,average='macro') # 对于多分类多标签,超参数average为macro时,分别计算各个类别的F1-score,再计算这些类别的f1-score的不加权平均值作为总体样本的f1-score
3 PR曲线
以Precision为横坐标,Recall为纵坐标,绘制的一条曲线。
对于同一个模型,通过调整阈值,可以得到不同的P-R值,进而得到曲线。通常随着阈值减小(大于阈值认为是P),P减小,R增加。对于不同的P-R曲线,越靠外的曲线性能越好。
4 ROC曲线和AUC(Area Under the ROC Curve)
4.1 真正例率(灵敏度\敏感性 True Positive Rate\Sensitive )
T P R = T P T P + F N TPR = \frac{TP}{TP+FN}TPR=TP+FNTP
4.2 假正例率(False Positive Rate)
F P R = F P T N + F P FPR = \frac{FP}{TN+FP}FPR=TN+FPFP
4.3 特异度(特效性 Specificity)
N P V = T N T N + F P NPV = \frac{TN}{TN+FP}NPV=TN+FPTN
4.4 ROC曲线和AUC
以TPR为纵轴,以FPR为横轴,得到的曲线为ROC曲线,曲线下的面积为AUC。其中,A U C ∈ [ 0.5 , 1 ] AUC\in [0.5,1]AUC∈[0.5,1] ,AUC越大越好。
选用TPR和FPR是因为它们都是在各自的实际样本中来观察概率问题,具有鲁棒性,在类不平衡时,也能客观识别出较好的分类器。
# api
fpr,tpr,thresholds = metrics.roc_curve(y_test,y_pred)
metrics.roc_auc_score(y_test,y_pred)