逻辑回归与其他模型的关系
来源:互联网 发布:java字符串截取到空格 编辑:程序博客网 时间:2024/05/16 15:35
【机器学习算法系列之二】浅析Logistic Regression
【转载请注明出处】https://chenrudan.github.io/blog/2016/01/09/logisticregression.html
本文是受rickjin老师的启发,谈谈关于logistic regression的一些内容,虽然已经有珠玉在前,但还是做一下自己的总结。在查找资料的过程中,越看越觉得lr实在是博大精深,囊括的内容太多太多了,本文只能浅显的提到某些方面。文章的内容如下:
- 1. 起源
- 2. 模型介绍与公式推导
- 2.1 Logistic Distribution
- 2.2 Binomial logistic regression model
- 3. 解法
- 3.1 梯度下降法
- 3.2 牛顿法
- 3.3 BFGS
- 4. 正则化
- 4.1 过拟合
- 4.2 正则化的两种方法
- 5. 逻辑回归与其他模型关系
- 5.1 逻辑回归与线性回归
- 5.2 逻辑回归与最大熵
- 5.3 逻辑回归与svm
- 5.4 逻辑回归与朴素贝叶斯
- 5.5 逻辑回归与能量函数
- 6. 并行化
- 7. 小结
- 8. 引用
1. 起源
logistic regression的起源主要分为几个阶段,从开始想到logistic这个词,到发现logistic function,再推导出logit function,最后才命名logistic regression。这些过程都是大量的研究者们共同努力发现的,只是在历史的长河中,很多人被渐渐遗忘了。
logistic起源于对人口数量增长情况的研究,最重要的工作是Pierre François Verhulst在1838年提出了对人口增长的公式描述(这人是个比利时人,写的文章是法语的,一个字都看不懂,下面的内容都是看了一篇将研究人口数量增长发展历程的书[1]才知道的…),他博士毕业于根特大学的数学系,是个数学教授和人口学家。在1835年Verhulst的同乡人Adolphe Quetelet发表了一篇关于讨论人口增长的文章,文中认为人口不可能一直是几何(指数)增长,而会被与增长速度平方成比例的一种阻力而影响,但是这篇论文只有猜想没有数学理论基础,却极大的启发了Verhulst。因此在1838年Verhulst发表了关于人口数量增长的论文,就是在这篇论文里面他推导出了logistic equation,文章中谈到一个重要观点,随着时间的增加,一个国家的大小(我理解为资源)和这个国家人们的生育能力限制了人口的增长,人口数量会渐渐趋近一个稳定值。厉害的是他将这个过程用公式给描述出来了,他从人口数量增长的速度公式入手,即人口数量
其中
他将法国英国等过十几年的人口实际数据拿来跟这个公式对比之后发现确实拟合的很不错。但他当时并没有那么多年的数据,下图1是在他过世以后人们总结的300年来的人口增长分布,可以看到非常漂亮的拟合了logisitc分布的累积分布函数走势。但是当时这个公式并没有名字,直到1845年他发表了另外一篇重要文章[2],他给这个公式起了一个名字——“logistic”,此外在这篇文章中,他发现在$P(t)K/2
然而在后来的几十年内人们都没有意识到这个工作的重要性,很多人都独立的研究出了这个增长现象,直到1922年一个叫做Raymond Pearl的人口学家注意到Verhulst在1838年就已经提出了这个现象和公式,并在他的文章中也使用了logistic function来称呼它,并且沿用至今。在1920年Pearl[3]在研究美国人口增长规律时提出了另外一种表示logistic function的方法。
基于这个表达式,Joseph Berkson在1944年提出了logit function,
后来,在1958年David Cox提出了logistic regression[4]。他的文章是为了解决这样一个问题,有一组取值为0,1的观测值,它们的取值
貌似Cox在这篇文章中并不是刻意提出logistic regression,但确实这个词第一次出现就是在这篇文章中,虽然Cox之前已经有很多人做过这方面的研究了,但是他们没给个名字,因此Cox成了提出logistic regression的人。这个故事告诉我们一个道理,无论是发文章还是写软件一定要取一个言简意赅又好听又好记的名字…
以上是逻辑回归的历史发展中比较有代表性的几件事(我认为的…还有好多论文没时间细看…),J.S Cramer[5]在他的文章中有更加详细的讨论。它是由数学家对人口发展规律研究得出,后来又被应用到了微生物生长情况的研究,后来又被应用解决经济学相关问题,直到发展到今天作为一个非常重要的算法而存在于各行各业。逻辑回归作为Regression Analysis的一个分支,它实际上还受到很多Regression Analysis相关技术的启发,例如Berkson就是基于probit function提出的logit function。光它的起源到应用就能写一本书出来了,难怪rickjin老师说lr其实非常非常复杂…
2.模型介绍与公式推导
上面说过了逻辑斯蒂回归的起源,下面讨论一下完整的模型,首先介绍一下何为逻辑斯蒂分布,再由逻辑斯蒂分布推出逻辑回归。
2.1 Logistic Distribution
随机变量X服从逻辑斯蒂分布,即X的累积分布函数为上文提到过的logistic function。对分布函数求导得到了概率密度函数。公式如下,参数影响参考图2(图来自维基百科,它的参数s就是统计学习方法上的
可以看到
2.2 Binomial logistic regression model
逻辑回归是为了解决分类问题,根据一些已知的训练集训练好模型,再对新的数据进行预测属于哪个类。如图3所示,有一些属于两个类的数据,目标是判断圆圈属于哪一类。也就是说逻辑回归的目标是找到一个有足够好区分度的决策边界,从而能够将两类很好的分开。假设已经存在这样一个边界,针对于图中这种线性可分的情况,这条边界是
输入特征向量的线性组合,假设输入的特征向量为
其中
在推导多分类的问题时,是假设
有了上面的分类概率,就可以建立似然函数,通过极大似然估计法来确定模型的参数。设
3.解法
优化逻辑回归的方法有非常多[7],有python的不同实现[8],这里只谈谈梯度下降,牛顿法和BFGS。优化的主要目标是找到一个方向,参数朝这个方向移动之后使得似然函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。逻辑回归的损失函数是
先把
这几种方法一般都是采用迭代的方式来逐步逼近极小值,需要给定参数
3.1 梯度下降法
梯度下降是通过
3.2 牛顿法
牛顿法的基本思路是,在现有极小点估计值的附近对f(x)做二阶泰勒展开,进而找到极小点的下一个估计值[9]。假设
然后令
此方法中也需要一个阈值
3.3 BFGS
由于牛顿法中需要求解二阶偏导,这个计算量会比较大,而且有时目标函数求出的海森矩阵无法保持正定,因此提出了拟牛顿法。拟牛顿法是一些算法的总称,它们的目标是通过某种方式来近似表示森海矩阵(或者它的逆矩阵)。例如BFGS就是一种拟牛顿法,它是由四个发明人的首字母组合命名,是求解无约束非线性优化问题最常用的方法之一。目标是用迭代的方式逼近海森矩阵
此处,直接令
这里还会对(10)进行变换,通过Sherman-Morrison公式直接求出
用BFGS来更新参数的流程如下:
- 确定改变量,
(Δw)k=−Dk⋅gk (Δw)k=−Dk⋅gk - 更新参数,
wk+1=wk+λ(Δw)k wk+1=wk+λ(Δw)k - 求出
Δg=gk+1−gk Δg=gk+1−gk - 由(11)求出
Dk+1 Dk+1
式子的系数
4.正则化
正则化不是只有逻辑回归存在,它是一个通用的算法和思想,所以会产生过拟合现象的算法都可以使用正则化来避免过拟合,在谈正则化之前先聊聊什么是过拟合。
4.1 过拟合
之前的模型介绍和算法求解可以通过训练数据集(图2中的三角形和星形)将分类模型训练好,从而可以预测一个新数据(例如图2中的粉色圆圈)的分类,这种对新数据进行预测的能力称为泛化能力。而对新数据预测的结果不好就是泛化能力差,一般来说泛化能力差都是由于发生了过拟合现象。过拟合现象是指对训练数据预测很好但是对未知数据预测不行的现象,通常都是因为模型过于复杂,或者训练数据太少。即当
在模型过于复杂的情况下,模型会学习到很多特征,从而导致可能把所有训练样本都拟合到,就像上图中一样,拟合的曲线将每一个点都正确的分类了。举个例子,假如要预测一个房子是贵还是便宜,房子的面积和所属的地区是有用的特征,但假如训练集中刚好所有贵的房子都是开发商A开发,便宜的都是开发商B开发,那么当模型变复杂能学习到的特征变多之后,房子是哪个开发商的会被模型认为是个有用特征,但是实际上这点不能成为判断的标准,这个现象就是过拟合。因此在这个例子中可以看到,解决的方法有两个,一个是减少学习的特征不让模型学到开发商的特征,一是增加训练集,让训练集有贵房子是B开发的样本。
从而,解决过拟合可以从两个方面入手,一是减少模型复杂度,一是增加训练集个数。而正则化就是减少模型复杂度的一个方法。
4.2 正则化的两种方法
由于模型的参数个数一般是由人为指定和调节的,所以正则化常常是用来限制模型参数值不要过大,也被称为惩罚项。一般是在目标函数(经验风险)中加上一个正则化项
而这个正则化项一般会采用L1范数或者L2范数。其形式分别为
首先针对L1范数
从而导致的参数
然后针对L2范数
需要注意的是,L1正则化会导致参数值变为0,但是L2却只会使得参数值减小,这是因为L1的导数是固定的,参数值每次的改变量是固定的,而L2会由于自己变小改变量也变小。而(12)式中的
此外,从贝叶斯的角度而言,正则化项实际上是给了模型一个先验知识,L2正则相当于添加了一个均值为0协方差为
5. 逻辑回归与其他模型的关系
5.1 逻辑回归与线性回归
在谈两者关系之前,需要讨论的是,逻辑回归中使用到的sigmoid函数到底起到了什么作用。下图的例子中,需要判断肿瘤是恶性还是良性,其中横轴是肿瘤大小,纵轴是线性函数
有了上面的分析基础,再来看看逻辑回归和线性回归的关系(线性回归我这里就不展开说了,不清楚的可以看看[11]),有的人觉得逻辑回归本质上就是线性回归,它们俩都要学习一个线性函数,逻辑回归无非是多加了一层函数映射,但是我对线性回归的理解是在拟合输入向量x的分布,而逻辑回归中的线性函数是在拟合决策边界,它们的目标是不一样的。所以我不觉得逻辑回归比线性回归好,它们俩要解决的问题不一样。但它们都可以用一个东西来概括,那就是广义线性模型GLM(Generalized linear models)[12]。先介绍何为指数簇(exponential family),当某个随机变量的概率分布可以表示为
GLM需要满足下面三个条件。
- 在给定观测值x和参数w情况下,输出y服从参数为
η η的指数簇分布 - 预测的值
hw(x)=E[y|x] hw(x)=E[y|x] η=wTx η=wTx
因此,选择合适的参数就能分析出线性回归和逻辑回归都是GLM的一种特例,有时会看到有的人会从GLM出发将逻辑回归的公式给推导出来。总之,线性回归和逻辑回归是属于同一种模型,但是它们要解决的问题不一样,前者解决的是regression问题,后者解决的是classification问题,前者的输出是连续值,后者的输出是离散值,而且前者的损失函数是输出y的高斯分布,后者损失函数是输出的伯努利分布。
5.2 逻辑回归与最大熵
最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。为了证明最大熵模型跟逻辑回归的关系,那么就要证明两者求出来的模型是一样的,即求出来的h(x)的形式应该是一致的。由于最大熵是通过将有约束条件的条件极值问题转变成拉格朗日对偶问题来求解,模型的熵为
并假设约束条件如下,其中
通过约束条件(15)可以直接推导出softmax的公式。基于这一点,再回过头来看《统计学习方法》上的约束条件,如果假设
因此,可以这样说,最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。此外,最大熵与逻辑回归都称为对数线性模型(log linear model)。
5.3 逻辑回归与svm
逻辑回归和svm作为经典的分类算法,被放在一起讨论的次数特别多,知乎和Quora上每种意见都非常有意思都从不同角度有分析,建议都可以看看[14][15][16]。这里只讨论一些我赞同的观点。要是不清楚svm的由来,建议看JerryLead的系列博客[17],我这里就不提了。
相同点:
- 都是分类算法
- 都是监督学习算法
- 都是判别模型
- 都能通过核函数方法针对非线性情况分类
- 目标都是找一个分类超平面
- 都能减少离群点的影响
不同点:
- 损失函数不同,逻辑回归是cross entropy loss,svm是hinge loss
- 逻辑回归在优化参数时所有样本点都参与了贡献,svm则只取离分离超平面最近的支持向量样本。这也是为什么逻辑回归不用核函数,它需要计算的样本太多。并且由于逻辑回归受所有样本的影响,当样本不均衡时需要平衡一下每一类的样本个数。
- 逻辑回归对概率建模,svm对分类超平面建模
- 逻辑回归是处理经验风险最小化,svm是结构风险最小化。这点体现在svm自带L2正则化项,逻辑回归并没有
- 逻辑回归通过非线性变换减弱分离平面较远的点的影响,svm则只取支持向量从而消去较远点的影响
- 逻辑回归是统计方法,svm是几何方法
5.4 逻辑回归与朴素贝叶斯
这两个算法有一些相似之处,并且在对比判别模型和生成模型,它们作为典型的分类算法经常被提及,因此这里也做一个小小的总结。
相同点是,它们都能解决分类问题和都是监督学习算法。此外,有意思的是,当假设朴素贝叶斯的条件概率
不同的地方在于,逻辑回归为判别模型求的是
5.5 逻辑回归与能量模型
(3月3日补充)
基于能量的模型不是一个具体的算法,而是一种框架思想,它认为输入输出变量之间的依赖关系用一个值表示
因此当给定了训练集S,能量模型的构造和训练由四部分组成[19]:
- 有合适的能量函数
E(W,Y,X) E(W,Y,X) - inference算法,针对一个给定的输入变量X和能量函数形式,找到一个Y值使得能量最小,即
Y∗=argminY∈yE(W,Y,X) Y∗=argminY∈yE(W,Y,X) - 有loss函数
L(W,S) L(W,S),用来衡量在训练集S下能量函数的好坏 - learning算法,用来找合适的参数W,在一系列能量函数中选择让损失函数最小化的能量函数。
可以看出13步通过选择不同的能量函数和损失函数来构造不同的模型,24步是如何训练这样的一个模型。
因此当我们假设要解决二分类问题时,y取值为-1和1,如果假设能量函数为
而此处,同样针对二分类问题,假如能量函数保持不变,损失函数采用hinge loss,并加上一个正则化项,那么就能够推导出SVM的损失函数表达式(SVM的核函数体现在能量函数中,这里为了方便解释没有具体展开说)。这也是为什么说逻辑回归与svm最本质的区别就是损失函数不同。
6. 并行化
由于找不到特别多的并行化资料,这里就分析一下博主冯扬给出的实现[20]。实际上逻辑回归的并行化最主要的目标就是计算梯度。将目标的label变为-1和1,那么梯度公式可以整合在一起变成
原文的标示我不太习惯,下面都改成了ij,并画出了矩阵运算的过程图。其中
第一步计算
第二步计算
第三步计算
第四步计算
从而,经过上面的分解步骤可以将逻辑回归来做并行化计算。
7. 总结
这篇文章写了好几天,有时候写着写着就把自己绕进去了,因为可以展开说的地方太多了,写完这些内容,我又找了一些面试题看了看,理论部分基本上都能覆盖到了,但是涉及到真正的应用还是要再花时间去了解,最后的并行化理解还不够透彻,矩阵乘法我用gpu实现过,但是并没有接触过海量的数据,也不知道真正的问题会发生在什么地方。逻辑回归可以从很多方面来解释来理解,确实是个很美丽的算法。
8. 引用
[1] Verhulst and the logistic equation (1838)
[2] Mathematical enquiries on the law of population growth
[3] Proceedings of the national academy of sciences
[4] The regression analysis of binary sequences
[5] The Origins of Logistic Regression
[6] 机器学习系列(2)用初等数学视角解读逻辑回归
[7] A comparison of numerical optimizers for logistic regression
[8] Numerical optimizers for Logistic Regression
[9] 牛顿法与拟牛顿法学习笔记(一)牛顿法
[10] 知乎:机器学习中使用「正则化来防止过拟合」到底是一个什么原理
[11] 多变量线性回归 Linear Regression with multiple variable
[12] CS229 Lecture notes
[13] The equivalence of logistic regression and maximum entropy models
[14] Linear SVM 和 LR 有什么异同?
[15] SVM和logistic回归分别在什么情况下使用?
[16] Support Vector Machines: What is the difference between Linear SVMs and Logistic Regression?
[17] 支持向量机svm
[18] GENERATIVE AND DISCRIMINATIVE CLASSIFIERS: NAIVE BAYES AND LOGISTIC REGRESSION
[19] A Tutorial on Energy-Based Models
[20] 并行逻辑回归
- 逻辑回归与其他模型的关系
- OCP与其他设计原则的关系
- 回归 ---- 线性回归,多元回归与逻辑回归的关系
- 回归模型-逻辑回归
- SOA 与其他技术的关系! --苏振兴
- Email营销与其他网络营销手段的关系
- Hadoop项目架构及与其他项目的结合关系
- SLF4j-----SLF4j与其他日志框架的关系
- 机器学习之与其他学科间的关系
- 逻辑回归模型的评估方法
- 逻辑回归模型
- 逻辑回归模型
- 逻辑回归模型
- 复习:逻辑回归模型
- 逻辑斯蒂回归模型
- 逻辑回归模型预测ctr
- 逻辑回归模型和算法
- 逻辑斯蒂回归模型
- 想想还是用自己的博客写东西比较好
- Leetcode64. Minimum Path Sum
- CSS揭秘 第二章 背景与边框
- 修改数据库连接方式
- 【链家笔试】摘苹果
- 逻辑回归与其他模型的关系
- iptables
- 重构-重构原则
- 学习笔记TF041:分布式并行
- spring-boot集成swagger( 提供封装的starter源码)
- ORACLE数据泵(expdp和impdp)
- 单例类的总结
- Hadoop-No.16之Kafka
- 复习css布局模型