二分类算法的评价指标:准确率、精准率、召回率、混淆矩阵、AUC

评价指标是针对一样的数据,输入不一样的算法,或者输入相同的算法但参数不一样而给出这个算法或者参数好坏的定量指标。算法

如下为了方便讲解,都以二分类问题为前提进行介绍,其实多分类问题下这些概念均可以获得推广。机器学习

准确率

准确率是最好理解的评价指标,它是一个比值:性能

\[准确率 = \cfrac{算法分类正确的数据个数}{输入算法的数据的个数} \]

可是使用准确率评价算法有一个问题,就是在数据的类别不均衡,特别是有极偏的数据存在的状况下,准确率这个评价指标是不能客观评价算法的优劣的。例以下面这个例子:学习

咱们检测对 1000 我的是否患有癌症进行检测,其实癌症是一个发病率很低的疾病,咱们就假定这 1000 我的里面只有 3 我的真正患病。网站

此时,咱们能够“无脑地”设计一个算法,就预测这 1000 我的所有健康。根据准确率的定义,除了那 3 个真正患病的病人咱们预测错了,其他健康的 997 人咱们的算法都预测正确了,此时设计

\[准确率 = \cfrac{算法分类正确的数据}{输入算法的数据的总数} = \cfrac{997}{1000} = 99.7\% \]

事实上,这样的算法没有任何的预测能力,真的用于医疗是极其不负责的,因而咱们就应该考虑是否是评价指标出了问题。这个时候就须要别的评价指标了。图片

精准率、召回率

要解释清楚精准率和召回率,得先解释混淆矩阵,二分类问题的混淆矩阵由 4 个数构成。首先咱们将二分类问题中,咱们关心的,少数的那一部分数据,咱们称之为正例(positive),就如同预测癌症,癌症患者就定义为正例。那么剩下的就定义为负例(negative)。

因而,咱们定义:


TN:算法预测为负例(N),实际上也是负例(N)的个数,即算法预测对了(True);

FP:算法预测为正例(P),其实是负例(N)的个数,即算法预测错了(False);

FN:算法预测为负例(N),其实是正例(P)的个数,即算法预测错了(False);

TP:算法预测为正例(P),实际上也是正例(P)的个数,即算法预测对了(True)。

这 4 个定义由两个字母组成,第 1 个字母表示算法预测正确或者错误,第 2 个字母表示算法预测的结果。
ci

混淆矩阵

混淆矩阵定义以下:
get

预测值 0 预测值 1
真实值 0 TN FP
真实值 1 FN TP



记忆方法:真实值更重要,因此真实值处在第一个维度,就是行。


精准率(precision)的定义:
it

\[{\rm precision} = \cfrac{TP}{TP+FP} \]


因此,精准率就是“预测为正例的那些数据里预测正确的数据个数”。

召回率(recall)的定义:

\[{\rm recall} = \cfrac{TP}{TP+FN} \]


因此,召回率就是“真实为正例的那些数据里预测正确的数据个数”。


在不一样的应用场景下,咱们的关注点不一样,例如,在预测股票的时候,咱们更关心精准率,即咱们预测升的那些股票里,真的升了有多少,由于那些咱们预测升的股票都是咱们投钱的。而在预测病患的场景下,咱们更关注召回率,即真的患病的那些人里咱们预测错了状况应该越少越好,由于真的患病若是没有检测出来,结果实际上是很严重的,以前那个无脑的算法,召回率就是 0。


精准率和召回率是此消彼长的,即精准率高了,召回率就降低,在一些场景下要兼顾精准率和召回率,就有 F1 score。

F1 score

F1 score 是精准率和召回率的兼顾指标,定义以下:

\[\frac{1}{F1} = \frac{1}{2}(\frac{1}{precision} + \frac{1}{recall}) \]

整理一下:

\[F1 = \frac{2 \cdot precision \cdot recall}{precision + recall} \]

其实 F1 score 是精准率和召回率的调和平均数,调和平均数的性质就是,只有当精准率和召回率两者都很是高的时候,它们的调和平均才会高。若是其中之一很低,调和平均就会被拉得接近于那个很低的数。

AUC(Area Under Curve)

AUC 是另外一种评价二分类算法的指标,被定义为 ROC 曲线下的面积,显然这个面积的数值不会大于 1。我我的以为和 F1 score 差很少,都是综合评价精准率和召回率的指标,只不过绘制 ROC 曲线使用了另外两个此消彼长的指标 。

横坐标:假正率(False positive rate, FPR),预测为正但实际为负的样本占全部负例样本的比例;

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

纵坐标:真正率(True positive rate, TPR),这个其实就是召回率,预测为正且实际为正的样本占全部正例样本的比例。

\[TPR = \frac{TP}{TP + FN} \]

诸如逻辑回归这样的分类算法而言,一般预测的都是一个几率值,咱们会认为设置一个阈值,超过这个阈值,就预测为其中一类,不超过这个阈值,定义为另一类。因而,不一样的阈值就对应了不一样的假正率和真正率,因而经过不一样的阈值就造成了假正率和真正率序列,它们就能够在直角坐标系上经过描点成为光滑曲线。这个曲线就是 ROC 曲线,ROC 曲线下的面积就是 AUC。

AUC 高的算法一般认为更好。

那么为何不用精准率和召回率画曲线求面积呢,实际上是彻底能够的。

精准率-召回率曲线也叫 pr 曲线,画出来是这样的。

而 roc 曲线画出来是这样的:

pr 曲线从左到右是降低的,roc 曲线从左到右是上升的,我我的以为两者都行,只不过最终人们都采用 roc 曲线(上面两张图片都来自 scikit-learn 官方网站)。

参考资料:
机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率
https://zhwhong.cn/2017/04/14/ROC-AUC-Precision-Recall-analysis/

相关文章
相关标签/搜索