分类指标

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


分类指标_第1张图片
混淆矩阵

根据上图的混淆矩阵可以得出精确率与召回率的定义:
TP—将正类预测为正类的样本数;
FN—将正类预测为负类的样本数;
FP—将负类预测为正类的样本数;
TN—将负类预测为负类的样本数;
精确率定义为:

召回率定义为:

精确率可以理解为在所有预测为正类这个事件的准确率有多高,召回率可以理解为真正的正类有多少被挑选了出来。理想情况下,精确率和召回率都是越高越好,但是事实一般相反,精确率高的时候,召回率低;召回率高的时候,精确率低。因此需要结合实际业务看更关注哪一个指标来判定模型好坏,为了达到更好效果,设计了一些综合考虑精确率与召回率的指标,如$F_1$值,$F_1$值是精确率和召回率的调和平均值:

精确率和召回率都高时,值也会高。

ROC与AUC

[ROC曲线]作为常用的二分类评价指标,其全称为接收者操作特征曲线(Receiver Operating Characteristic)。该曲线纵坐标真正率(TPR),横坐标为假正率(FPR),其定义如下:


则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曲线上的点越靠近左上方,那么该分类器就越好。

分类指标_第2张图片
制作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, …]):值
  • 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, …])

你可能感兴趣的:(分类指标)