分类指标

作者: monster_mark | 来源:发表于2019-01-05 23:05 被阅读3次

    评估结果用于反应模型的好坏,必须设计合适的评估指标来测量该模型的好坏。模型的好坏是相对的,使用不同的评估指标对模型的判定会得到不一样的结果。
    评估指标根据任务类型可以分为:分类指标、回归指标、聚类指标和排序指标等,本文主要关注分类指标。
    分类的评价指标一般是分类准确率(accuracy):对于给定的数据集,分类正确的样本数与总的样本数之比。准确率在二分类与多分类都能应用。
    对于二分类常用的指标为精确率(precision)与召回率(recall)。


    混淆矩阵

    根据上图的混淆矩阵可以得出精确率与召回率的定义:
    TP—将正类预测为正类的样本数;
    FN—将正类预测为负类的样本数;
    FP—将负类预测为正类的样本数;
    TN—将负类预测为负类的样本数;
    精确率定义为:
    P = \frac{TP}{TP + FP}
    召回率定义为:
    R = \frac{TP}{TP + FN}
    精确率可以理解为在所有预测为正类这个事件的准确率有多高,召回率可以理解为真正的正类有多少被挑选了出来。理想情况下,精确率和召回率都是越高越好,但是事实一般相反,精确率高的时候,召回率低;召回率高的时候,精确率低。因此需要结合实际业务看更关注哪一个指标来判定模型好坏,为了达到更好效果,设计了一些综合考虑精确率与召回率的指标,如$F_1$值,$F_1$值是精确率和召回率的调和平均值:
    \frac{2}{F_1} = \frac{1}{P} + \frac{1}{R}
    精确率和召回率都高时,F_1值也会高。

    ROC与AUC

    [ROC曲线]作为常用的二分类评价指标,其全称为接收者操作特征曲线(Receiver Operating Characteristic)。该曲线纵坐标真正率(TPR),横坐标为假正率(FPR),其定义如下:
    TPR = \frac{TP}{TP + FN}
    FPR = \frac{FP}{FP + TN}
    则ROC曲线位于横纵坐标阈值都为0-1之间,因此首先考虑4个特殊点(0,0)、(1, 1)、(0, 1)、(1, 0)。(0, 0)点表示TPR=FPR=0,即TP=FP=0,表示该分类器将所有样本都分为负类。同理,(1, 1)表示分类器将所有样本都分类为正类。(0, 1)点表示:FPR=0,TPR=1;意味着FP=0,FN=0,这样就是一个完美的分类器,正负类都分类完全正确。(1, 0)点表示TP=0, TN=0,这就是最糟糕的一个分类器,完美错过所有正确答案。综上,ROC曲线上的点越靠近左上方,那么该分类器就越好。

    制作ROC曲线

    每一对TPR与FPR值可以描绘出一个点,为了得到一条ROC曲线,需要调整不同的预测概率,来得到不同TPR于FPR值对,这样就可以得到一条ROC曲线。AUC(Area under the Curve of ROC)即ROC曲线下的面积,取值越大说明正确率越高。

    sklearn包关于分类指标的API

    sklearn.metrics模块实现了一些loss, score以及一些工具函数来计算分类性能。
    一些二分类(binary classification)使用的case:

    • matthews_corrcoef(y_true, y_pred):Matthews相关系数,用于度量二分类的质量
    • precision_recall_curve(y_true, probas_pred):P-R曲线
    • roc_curve(y_true, y_score[, pos_label, …]):ROC曲线
      一些多分类(multiclass)使用的case:
    • confusion_matrix(y_true, y_pred[, labels]):混淆矩阵
    • hinge_loss(y_true, pred_decision[, labels, …])
      一些多标签(multilabel)的case:
    • accuracy_score(y_true, y_pred[, normalize, …]):准确率
    • classification_report(y_true, y_pred[, …]):分类报告,包含精确率、召回率等。
    • f1_score(y_true, y_pred[, labels, …]):F_1
    • fbeta_score(y_true, y_pred, beta[, labels, …])
    • hamming_loss(y_true, y_pred[, classes])
    • jaccard_similarity_score(y_true, y_pred[, …])
    • log_loss(y_true, y_pred[, eps, normalize, …]):logistic回归loss,或者交叉熵loss(cross-entropy loss),用于概率估计。
    • precision_recall_fscore_support(y_true, y_pred)
    • precision_score(y_true, y_pred[, labels, …])
    • recall_score(y_true, y_pred[, labels, …])
    • zero_one_loss(y_true, y_pred[, normalize, …])
      还有一些可以同时用于二标签和多标签(不是多分类)问题:
    • average_precision_score(y_true, y_score[, …])
    • roc_auc_score(y_true, y_score[, average, …])

    相关文章

      网友评论

        本文标题:分类指标

        本文链接:https://www.haomeiwen.com/subject/ywcjrqtx.html