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之间。一般采用近似计算得出,调包计算就行,计算原理可以不懂,明白概念就行。
这些概念是针对二分类的,但都可以拓展到多分类。
理解这些分类统计指标的关键:弄清楚其代表的本质是什么,不要被高大上的命名给吓到!!!
参考: