从零开始学Python27-Logistic回归

前言

基于上一期的理论知识,我们本期跟大家分享一下如何通过Python和R语言完成Logistic回归分类器的构建。大家都知道,Logistic模型主要是用来解决二元分类问题,通过构建分类器,计算每一个样本为目标分类的概率,一般而言,我们会将概率值0.5作为分类的阈值,即概率值P大于等于0.5时判别为目标分类,否则为另一种分类。

本次分享的数据是基于用户信息(年龄、性别和年收入)来判断其是否发生购买,数据来源于GitHub(文末有数据链接可供下载)。接下来,让我们看看Logistic模型是如何完成二分类问题的落地。本次分享会涉及模型的构建、测试集的预测及模型的验证三个方面。

数据查阅

从上图结果可知,除Gender变量,其余变量均为数值型变量,那么待会再构建入模变量时,需要对Gender变量创建哑变量;一般在做数据探索时,需要检查各变量是否存在缺失的情况(如果缺失需要借助于删除法、替换法、插值法等完成缺失值的处理,具体可以参考文章【如何使用R语言解决可恶的脏数据】),很显然上面的结果并没有显示数据中含有缺失值。

变量处理

上面所做的处理无非是构建哑变量,然后从哑变量中再剔除一个水平变量(这个非常重要,为了防止多重共线性);同时还要剔除没有意义的变量User ID和不再使用的Gender变量(因为已经拆分为哑变量了)。OK,整理之后的数据集就如上图所示,接下来我们要基于这个数据集进行Logistic模型的创建。

Logistic模型

经过7次迭代后,模型系数的计算实现收敛,完成了Logistic分类器的创建。从上图的结果看,除Male这个哑变量不显著(说明性别这个变量并不能构成用户是否购买的因素)外,其余的偏回归系数均为显著。下面,我们不妨将Male变量剔除,再做一次Logistic模型。

很明显,通过变量的剔除,在保证了所有变量显著的情况下,也降低了模型的AIC,说明,Male哑变量的删除是合理的。

接下来,再来看看模型的系数解释(优势比),在其他变量不变的情况下,用户年龄每增加一个单位(岁),用户购买的概率是不够买概率的1.25倍;用户的年收入每增加一个单位(元),用户购买的概率与不够买概率几乎相等(因为这里只是计算年收入增加1元的概率比,如果对收入变量压缩10000倍,那这个概率比肯定就会上升了,因为此时收入上升一个单位就是一万元了)。

模型预测与验证

应用分类器对测试数据集进行预测,这里将概率值设为0.5,如果概率大于等于0.5则判用户会购买,否则不会发生购买。通过这个概率值的设定,我们发现模型的准确率还是非常高的(混淆矩阵对角线代表预测正确的数量)。可是单看混淆矩阵还不够,因为当数据不平衡时,计算的准确率也同样会高,并不代表模型就会好,所以我们进一步的借助于ROC曲线下的面积来衡量模型时候合理。

是不是很激动,对于熟悉R语言的你,Python中也有ggplot2的绘图语法!从上面的ROC曲线结果可知,AUC的值超过了0.85,这进一步说明模型的预测效果是非常不错的(一般AUC>0.8就比较好了)。

到此,关于使用Python构建Logistic分类器的实战我们就介绍到这里,接下来将使用R语言重新复现一遍,希望对R语言熟悉的朋友有一点的帮助。如下是R语言的复现脚本:

结语

OK,关于使用Python和R语言完成Logistic回归的实战我们就分享到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

关注“每天进步一点点2015”,与小编同进步!

数据链接:

链接: https://pan.baidu.com/s/1eSo3Y2Q 密码: cd7f

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

扫码关注云+社区

领取腾讯云代金券