点击“蓝字”关注我们吧

1 线性模型的局限性

在线性模型中,一个重要的条件便是响应变量 须服从正态分布。然而,实际问题往往更加复杂, 并不总是满足正态分布的假设。

不同参数的正态分布密度曲线

例如,在医学诊断中,我们希望通过病人的各项检查数据判断其是否患癌症。这里是否患癌症作为响应变量 只有两个可能的取值:患和不患。 显然, 不服从正态分布。

类似的例子还有很多。在气象领域中,通过观测到的气象数据判断是否会下雨;在金融领域中,根据当前的金融指标判断是否抛售股票;在图像领域,综合输入的人脸数据判断是否通过验证...

上述问题的共同点是, 的取值是离散的,我们关心的不再是预测具体数值而是变成判断分类。

为了讨论方便,我们以下考虑二分类问题。

机灵的同学可能想到,依然对数据建立线性模型,然后再设定一个阈值 ,当 时,预测数据归为一类;当 时,预测数据归为另一类。

用直线拟合二分类数据

这么做确实可以得到一个分类模型(上图红实线)。但是,如果我们在原有数据上额外得到一个新观测且远离原始数据时, 线性思路得到的新模型就会出现明显的变动(上图蓝虚线)。

2 逻辑回归

究竟哪里出现问题了呢?我们回忆所学的线性模型的形式:

对模型两边取期望和方差可得:

显然可以看出:(1)线性模型对y的估计,本质是对 期望的估计;(2)线性模型中 的期望和方差两者互相独立。

接着来看二分类问题,一般我们考虑 独立同分布于成功概率为 的伯努利分布(Bernouilli Distribution):

两边取期望和方差可得:

此时的期望和方差两者之间存在函数关系且期望取值在 之内。 因此,在二分类问题中完全套用线性模型的框架显然是有问题。

该怎么办呢?

试想 是一个随机变量,在不知道额外信息的前提下,用它的期望作为估计还是挺合理的。因此,我们可以继续采用期望估计的思路。 但是二分类问题中 的期望有0-1的约束,这就需要我们寻找一种满足该要求的函数。通常,这样的函数选取成Logistic函数:

很容易验证Logistic函数满足前面的条件。选取这种函数形式的深层原因,从统计的角度来看,源自于指数族分布。 有兴趣的朋友可以翻阅我关于广义线性模型相关理论的介绍以及其他参考资料。

于是,我们终于等到本次的主角——逻辑回归模型(Logistic Regression Model):

我们之所以称其为回归模型,是因为线性回归深入人心,在其之上生长发展的理论便继承了这个名称。事实上,逻辑回归更多的是面向分类问题。

3 逻辑回归的求解

3.1 极大似然法

最小二乘常被用来求解线性模型中的系数估计值,这在逻辑回归中失效了——我们无法得到逻辑回归的最小二乘损失函数的具体形式。

然而我们知道问题的概率分布信息,因此可以得到相应的似然函数:

再进而得到对数似然函数并进行优化即可。不过,与线性模型具有显示解不同,逻辑回归没有解析解,故而需要结合梯度下降法等算法进行求解,可参考广义线性模型中的相关方法。限于篇幅,不在赘述。

3.2 R求解逻辑回归模型

R中内置glm函数可以求解逻辑回归模型,它的使用方式如下所示。

logmodel predict.glm(logmodel, newdata)# 预测模型

与线性模型求解函数lm区别在于,glm需要添加link参数。我们使用该函数对前面的模型再次求解并做图,如下所示。

逻辑回归拟合二分类数据

可见,逻辑回归很好的刻画了模型的主要特征,且不会因为新数据的出现模型发生巨大变动。

4 案例分析

4.1 数据描述

我们从UCI机器学习数据库中获取到威斯康辛乳腺癌数据(Breast Cancer Wisconsin)共计569个观测,包含1个字符型分类变量,取值B表示良性肿瘤,取值M表示恶性肿瘤;30个数值型检测指标,如肿块厚度、大小、形态等。

4.2 建立逻辑回归模型

我们使用R读入数据并进行分析。由于数据没有特定顺序,我们选择前70%作为训练集,剩下的作为测试集。为了方便展示结果,我们仅选取前三个变量 进行模型拟合,对应的代码如下所示。

## 逻辑回归模型处理WDBC数据wdbc colnames(wdbc) wdbc$y # 划分训练集和测试集wdbc_train wdbc_test # 训练模型wdbc_fit 

4.3 评价模型

首先,我们使用summary()函数查看模型相关的统计指标,具体如下所示。

可见,三个系数都非常显著。

其次,我们使用predict.glm()查看模型的内预测效果,得到混淆矩阵(Confusion Matrix)如下

真实M 真实B 总计
预测M 215 18 233
预测B 12 155 167
总计 227 173 400

可以算出模型的预测准确率为(155+215)/400=0.925,仅三个变量就可以很好的预测病人肿瘤的状态。

不过分类问题中,大家比较关心模型的敏感性和特异性。 敏感性指真阳性率,而特异性指真阴性率。以本案例而言,模型的敏感性为0.947,特异性为0.896。这么看来,我们的模型假阳性率为0.104,还是不太好。

library(pROC)roclong                     percent=TRUE,ci=TRUE,col="red",                    print.auc = T,print.auc.cex = 0.8,print.auc.x = 60,print.auc.y = 50,                    main = "逻辑回归的ROC曲线和AUC值")

进一步分析敏感性和特异性,可以利用ROC曲线AUC值 来刻画。我们在R中使用pROC包画出ROC曲线以及进行AUC的计算和检验,结果参见下图。

ROC曲线

AUC达到了92.2%, 说明模型能够很好的刻画我们的数据。

最后,我们对剩下的测试集进行验证,得到预测准确率为88.76%,还是挺理想的——毕竟我们仅使用三个变量进行建模。关于逻辑回归更多的内容,还请读者自己了解。

参考文献

Myers, Raymond H., et al. Generalized linear models: with applications in engineering and the sciences. 2012.

扫码关注我们小Q统计专注统计学习知识分享

逻辑回归模型_逻辑回归模型相关推荐

  1. 逻辑回归阈值_逻辑回归or线性回归,傻傻分不清楚

    欢迎关注"生信修炼手册"! 线性回归作为一种常用的关联分析工具,其功能强大,解释度高,但是其缺点也是很明显的.其只适用于处理连续型的变量,无法处理离散型的变量,比如对于case/c ...

  2. 逻辑回归阈值_逻辑回归算法

    (一)逻辑回归原理 1.整体概括 逻辑回归假设数据服从伯努利分布(0-1分布),通过极大似然函数的方法,运用梯度下降法来求解参数,来达到将数据二分类的目的. 2.灵感过程(来自B站UP主:文小刀是也) ...

  3. logit回归模型_常见机器学习模型的假设

    > Photo by Thought Catalog on Unsplash 暂时忘记深度学习和神经网络. 随着越来越多的人开始进入数据科学领域,我认为重要的是不要忘记这一切的基础. 统计. 如 ...

  4. 逻辑回归画图_逻辑回归

    逻辑回归画图 申请流程 (Application Flow) Logistic Regression is one of the most fundamental algorithms for cla ...

  5. 选择模型 _ 审查回归算法

    1 线性算法 1.1 线性回归算法 from pandas import read_csv from sklearn.model_selection import KFold from sklearn ...

  6. 决策树模型 朴素贝叶斯模型_有关决策树模型的概述

    决策树模型 朴素贝叶斯模型 Decision Trees are one of the highly interpretable models and can perform both classif ...

  7. 人口预测和阻尼-增长模型_使用分类模型预测利率-第3部分

    人口预测和阻尼-增长模型 This is the final article of the series " Predicting Interest Rate with Classifica ...

  8. 人口预测和阻尼-增长模型_使用分类模型预测利率-第2部分

    人口预测和阻尼-增长模型 We are back! This post is a continuation of the series "Predicting Interest Rate w ...

  9. reactor多线程模型_网络编程模型的演进之路

    在没有IO多路复用的模型的情况下,为了支持高并发采取以下网络模型 一:阻塞IO+多线程 client连接服务器,服务器有一个线程阻塞的调用accept,accept接收到连接后,创建一个线程来读写读写 ...

  10. 机器学习 训练较快的模型_通过心理模型更快地学习软件,第1部分

    机器学习 训练较快的模型 什么是心理模型? (What Are Mental Models?) The easiest way to describe them is that they're pat ...

最新文章

  1. JAVA如何实现发送短信
  2. STL set multiset
  3. R语言ggplot2可视化:使用scale_y_continous函数自定义指定Y轴的坐标范围以及对应的数值、将坐标轴的数值设置为需要的数据类型(整型、浮点型)
  4. 电脑进入pe时蓝屏_电脑进入PE会蓝屏是怎么回事?
  5. [2013.9.27][cpp]一个简单的链接栈模型
  6. 自媒体玩到最后玩的是一种意识
  7. linux搜索命令有哪些,linux五大搜索命令学习
  8. USB接口类型及引脚定义-usb1.0,usb2.0,usb3.0,Type-c
  9. 网页关注微信服务号登录
  10. IIS发布网站后网页样式丢失
  11. [有人@你] BIM建模助手顺手搞了个活动
  12. java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署
  13. Excel日期加斜杠,日期时间戳互转
  14. STM32使能/屏蔽外部中断
  15. 使用cookie进行模拟登陆
  16. 张艺谋说高仓健:一位古代君子
  17. Linux开机流程Systemdgrub
  18. 电脑CPU占用率100%如何处理 电脑CPU占用率100%解决方法
  19. feign.RetryableException: 连接超时 (Connection timed out) executing xxx FeignException.java:249
  20. 贝塞尔曲线移动 应用

热门文章

  1. Java中的枚举(Enumeration)
  2. java 获取项目下的webapp_Spring Boot2 系列教程(一)纯 Java 搭建 SSM 项目
  3. linux 重启oracle_学习Linux前需要知道的事
  4. MATLAB模拟声压分布,基于Matlab仿真软件构建圆形压电晶体三维模型
  5. python tcl 控件_在Python中解析TCL列表
  6. Android开发笔记(一百三十四)协调布局CoordinatorLayout
  7. 定积分在计算机中的应用,计算机模拟定积分的定义
  8. 每次获取不同的图片按顺序从1-xxx
  9. [CF452E]Three strings
  10. python is 与 == 的区别