五分钟秒懂机器学习混淆矩阵、ROC和AUC

本文始发于我的公众号:TechFlow,原创不易,求个关注web


今天是机器学习专题的第18篇文章,咱们来看看机器学习领域当中,很是重要的其余几个指标。网络

混淆矩阵

在上一篇文章当中,咱们在介绍召回率、准确率这些概念以前,先讲了TP、FP、FN、和FP这几个值。咱们再来简单地回顾一下,咱们不能死记硬背这几个指标,不然很容易搞错,而且还容易搞混。咱们须要从英文入手来理解,其中的T表示真,能够理解成预测正确,F表示假,也就是预测错误。而P和N表示positive和negative,也就是阴和阳,或者是0和1,也就是两个不一样的类别。机器学习

既然是两个类别,那么显然说明了咱们的这些指标针对的是二分类的场景,也是机器学习当中最多见的场景。编辑器

混淆矩阵其实本质上就是将这四个值展现在一个表格当中,这样方便咱们观察结果作出分析。学习

咱们举个例子:spa

假设某一个模型的预测结果的混淆矩阵是这样,咱们从上面展现的数据当中很容易就分析出,咱们预测的错误主要发生在49这一格,也就是假阴性这一格。也就是说模型将大量的阳性样本预测成了阴性,说明模型的阈值设置得太高,咱们能够尝试下降阈值来提高扩大召回。翻译

反之,若是假阳性的样本太多,则说明模型的阈值太低,将大量阴性的样本预测成了阳性。咱们想要提高模型的效果,能够考虑提高一下模型分类的阈值。3d

若是假阳和假阴都不少该怎么办?blog

这种状况也不少,通常状况下是因为模型没有彻底收敛,或者是模型不够强大。好比特征过多,特征当中不少隐藏的信息没有可以学习到。这个时候能够考虑使用更加复杂的模型,好比神经网络或者是XGboost这种较为强力的模型。若是模型自己已经足够复杂,那么多是训练的时候的样本数量不够多,致使模型的能力没法彻底发挥,这个时候能够考虑增长一些样本。排序

理解了混淆矩阵的概念和用途以后,咱们就能够进一步来看ROC了。

ROC

ROC的英文是receiver operating characteristic curve,翻译过来是接受者操做特征曲线,这是一个从信号系统学科当中迁移过来的一个概念。老实讲我不太了解信号系统,不太清楚它本来的含义,可是在机器学习当中,它是反应TPR和FPR的曲线。

标一下关键点,TPR和FPR以及曲线。这里的TRP就是True Positive Rate,也就是真阳率,这里的FPR是假阳率。

所谓的真阳率也就是召回率,也就是全部阳性样本当中被咱们预测成阳性的比例

FPR天然就是False Positive Rate,也就是假阳率,是全部阴性样本当中被预测成阳性的比例。分母显然是FP,分子是FP + TN。

建议你们不要把TPR理解成recall,虽然它的确就是recall可是若是你记成recall的话,会增长记忆成本。横轴和纵轴记成FPR和TPR比较好记。

因此ROC曲线就是横轴是FPR纵轴是TPR的曲线,大概是下面这个样子。

AUC

理解了ROC以后,AUC就容易了。由于AUC彻底源于ROC,它的英文是Area under curve,也就是ROC曲线当中曲形的面积。

那么,这个ROC是怎么算出来的呢?

咱们来举一个例子,假设咱们如今有一系列预测结果:

咱们列一下这个模型的混淆矩阵:

咱们代入算一下FPR和TPR,能够获得TPR是3 / (3 + 2) = 0.6,对应的FPR是1 / (1 + 4) = 0.2。

咱们把这个点代入ROC曲线,能够获得:

看起来像是那么回事了,但仍是有些怪怪的,这看起来也不像是一个曲线呀。这是由于咱们模型预测的结果直接拿的是01值,对于一些硬分类器,好比SVM和贝叶斯,0就是0,1就是1,咱们获得的就是这样一个折线图。但若是是一些根据阈值划分结果的软分类器,好比LR、GBDT等,咱们获得的就是一个浮点值,咱们调整阈值就会获得不一样的结果,就会更加像是曲线。

咱们还用刚才的样本举例:

此次的结果是一个浮点值,结果就不同了。因为预测结果是一个浮点值,咱们设置不一样的阈值就会获得不一样的混淆矩阵

好比,若是咱们设置阈值为0.5,获得的混淆矩阵以下:

这样算出来的TPR和FPR分别是0.8,0.4。若是咱们进一步放宽阈值,能够提高召回,也就是提高TPR,但与此同时FPR也会提高。好比若是咱们把阈值放宽到0.2,咱们能够识别出全部的正例,可是一样的,FPR也会上升:

根据上面这个混淆矩阵计算得出的结果TPR是1.0,FPR是0.6。也就是说咱们选择不一样的阈值会获得不一样的TPR,和FPR。若是样本较少的话,画出来的ROC多是锯齿形

当样本的数量足够多以后,锯齿会变得愈来愈光滑,咱们能够再用上一些平滑的方法,能够获得一个相对光滑的曲线,就变成了上面那张图:

深度理解

如今咱们搞清楚了AUC的概念,AUC就是ROC曲线围成的图形面积。而ROC曲线上每个点都是经过不一样的阈值计算获得的点。

咱们结合一下AUC的图像以及上面的例子来深度理解一下这个概念,对于AUC曲线而言,咱们发现它是单调递增的。也就是说FPR越大,对应的TPR也就越大。这个是比较直观的,由于FPR越大,说明咱们把更多的样本预测成了正例,那么显然TPR也就越大。也就是说咱们召回的正样本变多了,比例也就变多了。

当FPR=1的时候TPR也等于1,这个点代表咱们把全部的样本都预测成了正例。显然在这种状况下,全部的正例都被预测对了,TPR天然就是1。咱们再来看另一个极值点,也就是FPR等于0的点。

FPR等于0代表了假阴率为0,也就是说没有一个负样本被预测错,也就对应着模型预测为正例的样本数很是少。因此FPR这个点对应的TPR越高,每每说明模型的效果越好。

咱们理解了AUC的概念以后,免不了问一个问题,AUC这个值究竟表明了什么呢,可以反映什么结果呢?

咱们来看下面这张图:

下面这张图中的绿线围成的面积明显大于粉线,也就是AUC1 > AUC2。从这张图咱们能够看出,AUC越大,说明曲线围成的面积越大,若是咱们选择0-1当中去一个点作垂线,能够获得相同FPR下,一般AUC越大的,对应的TPR也越大(有反例,见下图)。

TPR越大说明模型能够在分错一样数量负样本的状况下预测正确更多的正样本,这表明了模型区分正负样本的能力

为何要比较AUC而不是设定一个阈值比较TPR呢?

由于有些时候模型的状况比较复杂,好比下面这张图:

在p点之前紫色模型的效果明显更好,可是p点以后就是粉红色的模型更好了。若是只凭单个点的状况,咱们很难反应模型总体的能力。因此用AUC能够衡量模型总体上区分正负样本的能力。

最后咱们来思考一个问题,AUC最坏的状况是多少?会是0吗?

错了,AUC最坏的状况是0.5。由于若是是随机猜想正负例,那么咱们猜想正确的正例数量应该永远占当前猜想数量的0.5,在这种状况下TPR和FPR一直相等,也就是咱们画出来的是一条直线,好比下图:

若是算出来的AUC小于0.5怎么办?说明模型可能学习到了样本和特征之间负相关的关系,咱们能够试着调换一下0和1两个类别,算出来的AUC应该能变成0.5以上。

总结

在前面的文章当中咱们曾经说过,在机器学习的使用场景当中,咱们每每更加看重正例。好比广告的点击率预测、搜索排序、推荐等等这些场景下,咱们更加关注用户点击行为的发生和预测准确状况,而不太关心没有点击是否预测准确。在这些场景当中,咱们衡量精确度或者是召回其实不是特别重要,尤为这种涉及排序、摆放位置调整的场景,咱们更加在乎模型是否可以把高质量的内容给出一个高的预测分,让它可以排在前面,让用户优先看到。这个时候每每AUC更加可以说明模型的能力。

也所以,相比于精确度、准确度和召回率,在实际的工业应用场景当中,咱们可能使用AUC更多一些。固然这并不是是说其余概念不重要,这主要仍是应用场景决定的。既然应用场景决定了使用AUC的范围很广,那么当咱们去应聘岗位的时候,问到AUC的可能性就很高,尤为是考察候选人基础能力的时候。若是被问到,光理解它是什么意思是不够的,咱们还须要掌握它的应用场景,它的来龙去脉,甚至可以进行发散思考一些以前没有想过的问题。

但愿你们都能有所收获,原创不易,厚颜求个赞和转发,让咱们为了成为更优秀的本身而努力。

相关文章
相关标签/搜索