python小白之路:第十六章 逻辑回归模型(二)

分类模型的评估指标

在构建完模型后,还会存在着参数的设定、特征的选取或者算法的优劣等带来的问题,进而影响模型的效果。同时,由于我们构建模型的目的和需求不同,有时候不能简单的以一个方面去评估模型的好坏,因此,存在着评价模型的一系列指标,这些指标从不同方面评估模型。

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=Recall1w1+Precision1w2w1+w2=w1Recall+w2Precision(w1+w2)RecallPrecision
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+Precision2RecallPrecision

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)

版权声明:本文为Gnos96原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。