classification metrics in sklearn

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report


y_pred = ["a", "b", "c", "a", "b", 'a', 'c', 'b']
y_act = ["a", "b", "c", "c", "a", 'a', 'c', 'b']
confusion_matrix(y_act, y_pred, labels=['a', 'b', 'c'])
image.png

可以看出,confusion matrix 实际上是对所有测试样本,分类结果的统计,是一个大小为类别个数的方阵,row表示actual label, column表示predicted label。
从行看:

  • 第一行:表示 类别a 被分对了2次,一次错分为b
  • 第一行:表示 类别b 被分对了2次,0次错分
  • 第一行:表示 类别a 被分对了2次,一次错分为a

从列看:

  • 第1列: 一共有三个样本被预测为类别a,两个真的是类别a,一个是类别c,被错分为类别a
  • 第2列: 一共有三个样本被预测为类别b,两个真的是类别b,一个是类别a,被错分为类别b
  • 第3列: 一共有2个样本被预测为类别c,真实类别也都是类别c


    image.png

    image.png

关于 precision 、 f1-score的定义这里不赘述,特别说下false-positive-rate、true-positive-rate及sklearn中support、 macro avg、micro avg、weighted avg的含义。

  • true-positive-rate 也就是recall,以看病为例,就是把实际患病的给诊断出来的比例,当然越高越好
  • false-positive-rate 以看病为例,就是把没病的错诊为有病的比例,当然越低越好
  • support 表示支撑统计结果的样本个数
  • macro avg 表示每个类别的得分和除以类别个数,即不加权地平均
  • weighted avg 表示按照support的占比进行加权平均,support多的类别,话语权更高
  • micro avg 稍微难理解一点,是对每个类别,从one-vs-all角度统计 TP、FN、FP,这就是所谓的micro,总的TP、FN、FP等于各个类别对应TP、FN、FP的加和,再按照 F1 = 2TP/(2TP+FN+FP) 计算出总统的micro_avg_F1, 这是针对F1, precision, recall 是同样的思路。

ROC曲线:是以 true-positive-rate 为纵轴,false-positive-rate 为横轴,通过对测试样本(越多越好,越多画出来的roc曲线越平滑),设置不同的分类器分类阈值画出的,设置一个阈值,可以在测试集上计算出一组(false-positive-rate, true-positive-rate),即一个坐标点。
AUC 是分类器ROC曲线的线下面积,取值0.5~1之间。一般采用近似计算得出,调包计算就行,计算原理可以不懂,明白概念就行。

这些概念是针对二分类的,但都可以拓展到多分类。

理解这些分类统计指标的关键:弄清楚其代表的本质是什么,不要被高大上的命名给吓到!!!

参考:

  1. https://www.jianshu.com/p/c61ae11cc5f6
  2. https://blog.csdn.net/YE1215172385/article/details/79443552
  3. https://blog.csdn.net/qq_38410428/article/details/88106395

你可能感兴趣的:(classification metrics in sklearn)