首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

逻辑回归的评价:我们在预测规律,还是拟合误差?

一、预测与评价

1.评价原理说明

与线性回归不同,由于逻辑回归因变量是二分类的,所以无法像线性回归一样,通过残差的分布及R方等来对模型进行评价。一般来说,我们通过预测(或拟合)来对逻辑回归模型的好坏进行判断:首先将预测的结果和真实的结果进行比对,进而判断这个逻辑回归模型是否契合数据,如果模型较好,那么预测(或拟合)的结果自然会和真实结果重合程度高。这就是对逻辑回归评价的基本原理。

这里我们可以为大家揭晓为什么有训练集和测试集了,训练集就是为了给大家提供能够进行逻辑回归的基础数据,我们在训练集的基础上做出来了逻辑回归的模型;接下来,我们需要将测试集的自变量带入到回归模型中,并且比对我们模型所计算出来的结果和测试集真实的结果,由此就可以判断出模型的好坏情况啦。

给定一条新数据,我们可以通过逻辑回归的表达式计算出来对应的预测值的概率。只是计算出这个概率不行,我们还得明确的预测出来到底是不是等于1。但是,这里有个问题,这个概率到底多大才算大呢?张三说0.5就算大,李四说不行不行,必须要大于0.7才算大呢!简单来说,此时我们需要规定一个阈值,当预测结果大于阈值时,我们认为它就是1,反之则为0。

在R中,这个预测又是一行代码就可以搞定:利用predict()函数,直接就可以对测试集进行预测:

object是指我们所需的回归模型,而newdata则是我们所用于测试的数据集,type是选择预测的类型,由于我们是二分类变量,所以我们选择”reponse”,表示输出结果预测响应变量为1的概率。在预测完成后我们便可以设定阈值,查看我们计算出的结果和真实情况的差别,具体代码如下图所示:

但小伙伴又会有问题了,我们这样手动设定阈值只能一点一点地设定,能不能系统自动设定阈值呢?当然是有方法的,我们甚至还可以绘制成曲线输出。不过在这之前,我们需要先弄清楚设定不同阈值为我们带来了什么。我们来看看以下这个错判矩阵:

我们如何理解这张表格呢?接下来我们将0看成是好人,1看成是坏蛋,解读一下通过逻辑回归抓坏蛋的过程。我们希望我们预测的好人里真实是好人的概率尽量高,也希望预测的坏蛋里的确是坏蛋的概率也尽量高。而衡量二者高不高的基本指标,就是总体准确率,即(a+d)/(a+b+c+d)。

此外,我们还有两个非常重要的指标:第一个是真正率——TPR(True Positive Rate),即d/(b+d),这个指标描述的是在所有坏蛋中,我们抓住了多少个。第二个指标则是假正率——FPR(False Positive Rate),即c/(a+c),这个指标告诉我们有多少好人被我们误判为了坏蛋。

2.ROC曲线的绘制

TPR和FPR看上去好高端,但他们能用来干什么呢?显然,当TPR高而FPR低时,证明这个模型是比较好的。你会发现,如果我们只是想把TPR单纯的提高,那么我们可以粗暴地把阈值设置成0,这样就会把所有坏蛋都抓获归案。但这时候我们会尴尬地发现,FPR同时也会达到最高,也就是说我们将所有的好人都误判为了坏蛋……看来TPR与FPR要想一个高一个低,都是此事古难全。因此我们可以以横轴代表1-FPR、纵轴代表TPR画出ROC曲线。这时大家又该询问了,ROC曲线是个神马东东?ROC曲线全称为受试者工作特征曲线(receiver operating characteristic curve),就是当阈值从0慢慢变化到1时,将阈值所对应的一对TPR和FPR化为图中一个点的坐标,所连成的曲线。设想一下,如果这条曲线形状非常凸,就代表每一个阈值评价效果都不错。

在R中,绘制ROC曲线首先需要加载一个叫做pROC的包,接下来利用这个包中的plot.roc()函数进行绘制,需要注意的是我们要给函数的数据集包括预测结果以及真实结果两列数据,这个函数其他图形参数就与plot类似了,具体代码及结果如下图:

尽管曲线有了,但是还是没落实到具体的数值上,光看曲线可能还不能看出个所以然来,这里我们就介绍一个超常用的指标——AUC(Area Under Curve)。

3.AUC指标的计算

当给定任何一个TPR时,我们希望得到尽量小的FPR。试想,如果两个模型得到的TPR一样,但是第一个模型的FPR更小,那么我们基本可以判定FPR更小的模型更优。但是以上TPR和FPR是给定一个阈值计算出来的,那么是不是对于几乎所有的阈值来说,第一个模型的FPR都更小呢?如果是的话,那我们更加有理由说第一个模型更优。

那这种“更优”在图形上如何表现呢?我们分别绘制出它们的ROC曲线的话,可以发现第一个模型的ROC曲线应该是更“凸”的,在上图中也就是红色的那条线。那么这种“凸”的程度能否用数值衡量呢?我猜你已经想到了,用ROC曲线下面的面积就好了!面积大的模型应该表现更好!这就是AUC(Area Under Curve)指标的由来。这个面积如何计算呢?在R中利用auc()函数就可以直接搞定啦:

4.成本收益曲线的绘制

相信大家现在应该能够理解ROC曲线和AUC啦。这个指标有点“学院派”,并没有那么容易理解。在实际中,我们还经常用成本收益曲线来度量抓坏蛋的成本和收益。这里我们也介绍一下这个曲线的绘制,它关乎两个度量成本和收益的指标——覆盖率和捕获率。那这两个新名词又是什么含义呢?

覆盖率是指预测为坏蛋的人与总人数的比值,即(c+d)/(a+b+c+d),我们把它当成一个衡量成本的指标(抓坏蛋是需要成本的啊);而捕获率则是指预测为坏蛋的人中实际的确是坏蛋的人和总坏蛋的比值,即d/(c+d),可以作为衡量收益的指标。显然我们希望成本越低、收益越高越好,但现实总会和梦想有差距,当我们将所有用户都预测为坏蛋时,我们就相当于把捕获率调到了100%,但因此所有的好人也都被预测成了坏蛋,成本也会变得非常高。有小伙伴发现了,捕获率和覆盖率的关系跟ROC曲线中的TPR和FPR的关系很类似呀!看来捕获率和覆盖率也是不能两全,因此我们只能希望在控制覆盖率在合理水平范围内的条件下,对应的捕获率尽量高一些。

根据不同的阈值,就可以计算出对应的覆盖率和捕获率,我们以覆盖率为横轴,捕获率为纵轴就可以绘制出成本收益曲线啦!但遗憾的是,R中没有对应的函数,我们需要手动计算覆盖率和捕获率。由此我们先设定几组阈值,再计算出其对应的覆盖率和捕获率,接下来再用plot()函数绘制图像,就可以画出成本收益曲线啦。

5.总结

经历了逻辑回归原理和代码的轰炸,不知道大家是否还能坚持住?在逻辑回归的这三部分中,我们分别介绍了使用逻辑回归的背景、逻辑回归是个神马东西以及如何根据逻辑回归模型进行评价和预测,小伙伴们可以好好回味一下。

纸上得来终觉浅,绝知此事要躬行,大家不妨也找一找适合使用逻辑回归的数据,自己操刀试一下,说不定也会有一些意想不到的结论哦。

来源|狗熊会

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180212B0URCT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券