机器学习分类问题评估指标(准确率、召回率、F1 ,P-R 曲线,

2020-09-15  本文已影响0人  Skye_kh

本文主要介绍二分类场景下的评估指标,包括准确率、召回率、F1 ,P-R 曲线,ROC 曲线 和 AUC。

一、混淆矩阵、准确率、精确率与召回率

1.1 混淆矩阵(Confusion Matrix)

image-20200811201754476

1.2 准确率(accuracy)

评估分类器的整体准确率,即预测正确的结果占总样本的比例,其中预测是否正确包括将正例预测为正例(TP)与将负例正确预测为负例(TN)。
accuracy=\frac{TP+TN}{TP+TN+FP+FN}

1.3 精确率(查准率)(Precision)

“所有挑出来的瓜,有多少是好瓜”,“推荐结果中有多少是用户真正感兴趣的”,在这类场景中,为了评估预测为正例的结果中,有多少真正是正例的评估指标为精确率,或者用查准率更好理解,计算方式如下:
Precision=\frac{TP}{TP+FP}

1.4 召回率(查全率)(Recall)

“所有好瓜有多少被挑出来了”,“用户感兴趣的内容有多少被推荐了”,在这类场景中,为了评估所有的正样本有多少被预测为正样本的评估指标为召回率,又称为查全率,计算方式如下:
Recall=\frac{TP}{TP+FN}

1.5 P-R 曲线

查全率与查准率是一对矛盾的度量,一般情况下,查准率高的时候,查全率往往偏低;查全率高的时候,查准率往往偏低。一般来说,我们以0.5作为分类的阈值,大于0.5认为是正例,小于0.5认为是负例。不断更改这个分类阈值可以画出查全率与查准率的关系,即 P-R 曲线。

1

上图展示了查全率和查准率随阈值变化的关系,曲线下的面积一定程度上代表了学习器在查准率和查全率上取得“双高”的比例,可以作为评估两个机器学习模型的性能优劣的标准。如果一个学习器的PR曲线被另一个包住,则说明后者优于前者。PR曲线有以下特点:

  1. 曲线是震荡的,不平滑的。假设分类阈值变低,那么正例被判断为正例的变化,同样负例被判断为正例的也可能变多,查全率变高,查准率可能变高也会变低,整体呈下降趋势。
  2. 曲线不会经过(1,0)点,查准率只可能趋向于0,比如负样本很多,正样本很少的情况下,正样本都被召回。

1.6 F1

F1 指标综合考虑查准率与查全率,是基于两者的调和平均定义的。
F1=\frac{1}{2}\times(\frac{1}{P}+\frac{1}{R})=\frac{2 \times P \times R}{P+R}

二、ROC、AUC

1.1 ROC

在实际场景中我们经常根据模型输出的概率值对结果进行排序,我们需要一个指标能够衡量学习器排序能力的好坏(正样本排在负样本前面的情况),这时候 ROC/AUC 就派上用场了。

ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于敌机检测的雷达信号分析技术,二十世纪六七十年代开始被用于一些心理学、医学检测应用中,后被引入机器学习领域。这里引入两个指标,分别为真正例率(True Positive Rate,TPR),假正例率(False Positive Rate, FPR)。
TPR=\frac{TP}{TP+FN}

FPR=\frac{FP}{TN+FP}

显然,TPR 越高越好,FPR 越低越好。

ROC 曲线的横坐标是 FPR,纵坐标为 TPR。每次选取不同的分类阈值,得到多组 TPR 和 FPR,即 ROC 曲线上的点,即可画出ROC曲线,真实情况下曲线更接近与下图 (b),非光滑。

image

1.2 AUC

AUC (Area Under Curve)为ROC 曲线下的面积。当 TPR 和 FPR 都相等,即满足 y=x 曲线,AUC = 0.5 说明学习器对正例和负例完全没有区分能力。我们希望 TPR 大于 FPR,所以曲线一般往左上角凸,AUC 越高越好,最大值为 1。

AUC 另一个解释:AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。

AUC 的计算方式:

方式一:

直接计算 ROC 曲线下面积,缺点是计算繁琐。

方式二:

计算正例大于负例的概率,即统计所有 M×N (M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少组正样本的预测值大于负样本的预测值。
\frac{\sum I\left(P_{\text {正样本 }}, P_{\text {负样本 }}\right)}{M^{*} N},

其中,I\left(P_{\text {正样本 }}, P_{\text {负样本 }}\right)=\left\{\begin{array}{l}1, P_{\text {正样本 }}>P_{\text {正样本 }} \\ 0.5, P_{\text {正祥本 }}=P_{\text {负祥本 }} \\ 0, P_{\text {正样本 }}<P_{\text {负样本 }}\end{array}\right.

比如以下样本

预测值(score) 真实标签
A 0.2 0
B 0.5 0
C 0.3 1
D 0.8 1

其中正例有2个,负例有2个,可以构成 2 * 2 = 4 个正负样本对([0.3,0.2],[0.8,0.2],[0.3,0.5],[0.8,0.5]),其中正例预测值大于负例的有 3 对 ([0.3,0.2],[0.8,0.2],[0.8,0.5]),因此 AUC 为 (1+1+1)/4 = 0.75。 如果上述例子中样本C的预测值为 0.5,即样本2与3预测score一样,则 AUC = (1+1+1+0.5) /4 = 0.875。这种计算方法复杂度较高,为 O(M*N)。

方式三:
AUC=\frac{\sum_{{i} \in \text {positiveclass}} \text {rank}_{i}-\frac{M \times(M+1)}{2}}{M \times N}

对所有预测值排序后 {rank}_{i} 可以表示当前位置和之前的位置能够构造出多少个样本对(其中包括自己),再减去正例-正例这种组合的个数 M*(M+1)/2 ,即为正例-负例这种组合的个数,再除以 M * N 即可得到 AUC 值。这种方式计算 AUC 的复杂度为排序复杂度,即O(n \log (n))

以下述例子为例:

预测值(score) 真实标签 rank
A 0.2 0 1
B 0.5 0 3
C 0.3 1 2
D 0.8 1 4

正例的排序索引为2和4,M和N都为2,因此 AUC=(2+4-2 * (2+1)/2) / (2 * 2)=0.75。

如果其中有相同的预测值,如下情况

ID 预测值(score) 真实标签 rank
A 0.3 0 1
B 0.5 1 2
C 0.5 1 3
D 0.5 0 4
E 0.5 0 5
F 0.7 1 6
G 0.8 1 7

则需要对相同预测值的 rank 取平均,生成新的rank值,auc 计算结果如下:
\frac{7+6+\frac{(5+4+3+2)}{4}+\frac{(5+4+3+2)}{4}-\frac{4 *(4+1)}{2}}{4 * 3}=\frac{10}{12}

上一篇下一篇

猜你喜欢

热点阅读