Logistic Regression (LR) 详解

Logistic Regression (LR) 详解

最近忙着准备面试,偶然发现同学Q君在很认真地看LR(Logistics Regression),不由得心生蔑视,这么简单的模型有什么好研究的?结果Q君扔出几个问题给我,一时竟回答不出,殊不知LR也有那么深的学问,本不想深究,直到我看到了这个:

这里写图片描述

LR跟最大熵模型还有关系的吗?LR比线性回归好不是理所当然吗?LR还能并行?看完这些问题,一脸懵逼的窝,还想着去腾讯呢,碰到rickjin面试我不是死定了?感觉自己弱爆了,不得已四处搜刮资料,最终整理了这么一份关于LR的资料,有自己的见解和推导,也有别人的成果(我会在最后给出链接),作为机器学习从业者(伪)的自我修养。


目录


一、Logistic 分布

1.1 逻辑斯蒂分布

F(x)=P(Xx)=11+e(xμ)/γ F ( x ) = P ( X ⩽ x ) = 1 1 + e − ( x − μ ) / γ

f(x)=1γe(xμ)/γ(1+e(xμ)/γ)2 f ( x ) = 1 γ e − ( x − μ ) / γ ( 1 + e − ( x − μ ) / γ ) 2


二、LR 原理

2.1 二项逻辑斯蒂回归

P(y=0|x)=11+ewx P ( y = 0 | x ) = 1 1 + e w ⋅ x

P(y=1|x)=ewx1+ewx P ( y = 1 | x ) = e w ⋅ x 1 + e w ⋅ x

2.2 多项逻辑斯蒂回归

P(y=k|x)=ewkx1+K1k=1ewkx P ( y = k | x ) = e w k ⋅ x 1 + ∑ k = 1 K − 1 e w k ⋅ x

P(y=K|x)=11+K1k=1ewkx P ( y = K | x ) = 1 1 + ∑ k = 1 K − 1 e w k ⋅ x


三、LR loss函数求解

3.1 基于对数似然损失函数

对数似然损失函数为 L(Y,P(Y|X))=logP(Y|X) L ( Y , P ( Y | X ) ) = − log ⁡ P ( Y | X )
对于LR来说,单个样本的对数似然损失函数可以写成如下形式:

L(yi,p(yi|xi))=logexp(wx)1+exp(wx)=log(1+ewx)=log(1+ey^i),log11+exp(wx)=log(1+ewx)=log(1+ey^i),yi=1yi=0 L ( y i , p ( y i | x i ) ) = { − log ⁡ exp ⁡ ( w ⋅ x ) 1 + exp ⁡ ( w ⋅ x ) = log ⁡ ( 1 + e − w ⋅ x ) = log ⁡ ( 1 + e − y ^ i ) , y i = 1 − log ⁡ 1 1 + exp ⁡ ( w ⋅ x ) = log ⁡ ( 1 + e w ⋅ x ) = log ⁡ ( 1 + e y ^ i ) , y i = 0

综合起来,写成同一个式子:
L(yi,p(yi|xi))=yilog(1+ewx)+(1yi)log(1+ewx) L ( y i , p ( y i | x i ) ) = y i log ⁡ ( 1 + e − w ⋅ x ) + ( 1 − y i ) log ⁡ ( 1 + e w ⋅ x )

于是对整个训练样本集而言,对数似然损失函数是:
J(w)=1Ni=1N{yilog(1+ewx)+(1yi)log(1+ewx)} J ( w ) = 1 N ∑ i = 1 N { y i log ⁡ ( 1 + e − w ⋅ x ) + ( 1 − y i ) log ⁡ ( 1 + e w ⋅ x ) }

除此以外,还有下面这种形式,它也是logloss,只不过 y y {1,1}。分析一下它的构成,对于 (xi,yi=1) ( x i , y i = 1 ) ,若预测 f(xi)1 f ( x i ) ≈ 1 ,则loss接近于0,对于 (xi,yi=1) ( x i , y i = − 1 ) ,若 f(xi)1 f ( x i ) ≈ − 1 ,loss也接近于0。
J(w)=1Ni=1Nlog(1+eyif(xi)) J ( w ) = 1 N ∑ i = 1 N log ⁡ ( 1 + e − y i ⋅ f ( x i ) )

3.2 基于极大似然估计

p(y=1|x)=p(x) p ( y = 1 | x ) = p ( x ) , p(y=0|x)=1p(x) p ( y = 0 | x ) = 1 − p ( x ) ,假设样本是独立同分布生成的,它们的似然函数就是各样本后验概率连乘:

L(w)=P(y|w,x)=i=1Np(xi)yi[1p(xi)]1yi L ( w ) = P ( y | w , x ) = ∏ i = 1 N p ( x i ) y i [ 1 − p ( x i ) ] 1 − y i

为了防止数据下溢,写成对数似然函数形式:
logL(w)=i=1N[yilogp(xi)+(1yi)log(1p(xi)] log ⁡ L ( w ) = ∑ i = 1 N [ y i log ⁡ p ( x i ) + ( 1 − y i ) log ⁡ ( 1 − p ( x i ) ]

logL(w)=i=1N[yi(wxi)log(1+ewx)] − log ⁡ L ( w ) = − ∑ i = 1 N [ y i ( w ⋅ x i ) − l o g ( 1 + e w ⋅ x ) ]

可以看出实际上 J(w)=1NlogL(w) J ( w ) = − 1 N log ⁡ L ( w ) J(w) J ( w ) 要最小化,而 logL(w) log ⁡ L ( w ) 要最大化,实际上是等价的。
在梯度下降系列的算法中,需要用到一阶导数和二阶导数(牛顿法):
g=(logL(w))w=i=1Nxi(yip(xi)) g = ∂ ( − log ⁡ L ( w ) ) ∂ w = ∑ i = 1 N x i ( y i − p ( x i ) )

h=gw=i=1Nx2ip(xi)(1p(xi)) h = ∂ g ∂ w = − ∑ i = 1 N x i 2 p ( x i ) ( 1 − p ( x i ) )


四、LR 正则化

4.1 L1 正则化

LASSO 回归,相当于为模型添加了这样一个先验知识: w w 服从零均值拉普拉斯分布。
首先看看拉普拉斯分布长什么样子:

f(w|μ,b)=12bexp(|wμ|b)

下面证明这一点,由于引入了先验知识,所以似然函数这样写:

L(w)=P(y|w,x)P(w)=i=1Np(xi)yi(1p(xi))1yij=1d12bexp(|wj|b) L ( w ) = P ( y | w , x ) P ( w ) = ∏ i = 1 N p ( x i ) y i ( 1 − p ( x i ) ) 1 − y i ∏ j = 1 d 1 2 b exp ⁡ ( − | w j | b )

取log再取负,得到目标函数:
logL(w)=i[yilogp(xi)+(1yi)log(1p(xi))]+12b2j|wj| − log ⁡ L ( w ) = − ∑ i [ y i log ⁡ p ( x i ) + ( 1 − y i ) l o g ( 1 − p ( x i ) ) ] + 1 2 b 2 ∑ j | w j |

等价于原始的 crossentropy c r o s s − e n t r o p y 后面加上了L1正则,因此L1正则的本质其实是为模型增加了“ 模型参数服从零均值拉普拉斯分布”这一先验知识。

4.2 L2 正则化

Ridge 回归,相当于为模型添加了这样一个先验知识: w w 服从零均值正态分布。
首先看看正态分布长什么样子:

f(w|μ,σ)=12πσexp((wμ)22σ2)

下面证明这一点,由于引入了先验知识,所以似然函数这样写:

L(w)=P(y|w,x)P(w)=i=1Np(xi)yi(1p(xi))1yij=1d12πσexp(w2j2σ2)=i=1Np(xi)yi(1p(xi))1yi12πσexp(wTw2σ2) L ( w ) = P ( y | w , x ) P ( w ) = ∏ i = 1 N p ( x i ) y i ( 1 − p ( x i ) ) 1 − y i ∏ j = 1 d 1 2 π σ exp ⁡ ( − w j 2 2 σ 2 ) = ∏ i = 1 N p ( x i ) y i ( 1 − p ( x i ) ) 1 − y i 1 2 π σ exp ⁡ ( − w T w 2 σ 2 )

取log再取负,得到目标函数:
logL(w)=i[yilogp(xi)+(1yi)log(1p(xi))]+12σ2wTw+const − log ⁡ L ( w ) = − ∑ i [ y i log ⁡ p ( x i ) + ( 1 − y i ) l o g ( 1 − p ( x i ) ) ] + 1 2 σ 2 w T w + c o n s t

等价于原始的 crossentropy c r o s s − e n t r o p y 后面加上了L2正则,因此L2正则的本质其实是为模型增加了“ 模型参数服从零均值正态分布”这一先验知识。

4.3 L1正则化和L2正则化的区别

  1. 如上面所讲,两者引入的关于模型参数的先验知识不一样。
  2. L1偏向于使模型参数变得稀疏(但实际上并不那么容易),L2偏向于使模型每一个参数都很小,但是更加稠密,从而防止过拟合。

为什么L1偏向于稀疏,L2偏向于稠密呢?看下面两张图,每一个圆表示loss的等高线,即在该圆上loss都是相同的,可以看到L1更容易在坐标轴上达到,而L2则容易在象限里达到。

这里写图片描述

这里写图片描述


五、LR 并行化

本部分暂时没有时间做。
就我的理解,LR的梯度下降求解,最耗时的就是计算梯度。
看梯度公式,核心的运算只有加法、乘法和内积。由 Ni=1 ∑ i = 1 N 看出样本之间的计算相互独立,这里可以做样本并行;由 wx=(w1,w2,,wn)(x1,x2,,xn)=iwixi w ⋅ x = ( w 1 , w 2 , ⋯ , w n ) ⋅ ( x 1 , x 2 , ⋯ , x n ) = ∑ i w i ⋅ x i 看出,特征上也可以并行。不同的结点负责不同的样本和不同的特征,同时计算梯度后合并即可。
以上是基本思路,具体实现还要看代码。

g=i=1Nxi(yip(xi))=i=1Nxi(yi11+ewxi) g = ∑ i = 1 N x i ( y i − p ( x i ) ) = ∑ i = 1 N x i ( y i − 1 1 + e − w ⋅ x i )


六、LR 在线学习

    企业中的CTR预估常会用到LR,因为LR简单、可解释性强,又好做并行。然而传统的批量算法无法有效地处理超大规模的数据集和在线数据流,数据每天都在更新,有必要每次更新模型都要重新遍历一次百亿级别的数据集吗?google从理论研究到实际工程化实现的FTRL(Follow-the-regularized-Leader),在处理带L1正则的LR的凸优化问题上表现出色。这里以批量算法、TG,FOBOS、RDA、FTRL的顺序介绍。

6.1 批量算法

   批量算法,每次迭代(epoch)对整个训练数据集计算梯度,优点在于准确性、精度和收敛程度,缺点在于无法有效处理大数据集(计算全局梯度时间消耗巨大),不能应用于数据流做在线学习。梯度下降法计算一阶导数,牛顿法还需要计算Hesse矩阵的逆,逆牛顿法用不含二阶导数的矩阵拟合Hesse矩阵的逆,其中L-BFGS利用迭代的方式拟合,同时节省了存储空间,所以用得比较多。牛顿法也是批量算法,也有无法处理大数据的硬伤。还有一个问题在于,L1正则常用于模型稀疏化,但L1正则项不处处可导,要想牛顿法能用L1正则还需要做理论修改(比如OWL-QN算法)。
   更多关于牛顿法和拟牛顿法的知识可以参考这里

梯度下降法

xt+1=xtηf(xt) x t + 1 = x t − η ⋅ ▽ f ( x t )

牛顿法 / 拟牛顿法

xt+1=xtH1tf(xt) x t + 1 = x t − H t − 1 ⋅ ▽ f ( x t )

6.2 在线学习

随机梯度下降

(补全中)


七、LR与线性回归的关系

7.1 线性回归

线性回归(Linear Regression)模型

f(x)=wx+b f ( x ) = w ⋅ x + b

7.2 LR 与线性回归的区别

  1. 线性回归要求输入x服从正态分布,LR没有要求
    线性回归的目标函数是MSE,用最小二乘法训练参数,原因正是它假设了误差服从正态分布,而误差与输入直接线性相关,因此即要求输入服从正态分布。下面证明这一点。
    假设误差服从零均值正态分布(省略掉常数 b b ):
    p(ϵi)=12πσexp(ϵi22σ2)p(yi|xi,w)=12πσexp((yiwxi)22σ2)

    似然函数:
    L(w)=iN12πσexp((yiwxi)22σ2) L ( w ) = ∏ i N 1 2 π σ exp ⁡ ( − ( y i − w ⋅ x i ) 2 2 σ 2 )

    取对数:
    logL(w)=Nlog12πσ12σ2i(yiwxi)2 log ⁡ L ( w ) = N log ⁡ 1 2 π σ − 1 2 σ 2 ∑ i ( y i − w ⋅ x i ) 2

    相当于最小二乘:
    mini(yiwxi)2 min ∑ i ( y i − w ⋅ x i ) 2
  2. 线性回归要求输入x和输出y是连续型数值,LR要求y是分类型变量
  3. 线性回归要求x和y呈线性关系,LR没有要求
    线性回归和LR都是线性模型,线性回归本质是回归不是判别,它要做的就是拟合样本构成的直线,LR是判别模型,要求x线性可分,但x和y并非是线性关系。
  4. 线性回归直接分析x和y的关系,LR分析y取某个值的概率和x的关系

7.3 为什么LR比线性回归效果好?

我不太明白这个问题想问什么。如果是“为什么LR做分类比线性回归好?”,那是理所当然的,因为线性回归根本就不是做分类的。


八、LR与最大熵模型的关系

先说结论,LR与最大熵模型是等价的,下面证明这一点。

假设我们想要训练的概率模型是 P(y|x) P ( y | x ) ,我们不知道它长什么样,但是可以给他设定一些符合我们认知的限定条件。

  1. 概率非负性
    p(y=k|x)0 p ( y = k | x ) ⩾ 0
  2. 概率求和为1
    k=1Kp(y=k|x)=1 ∑ k = 1 K p ( y = k | x ) = 1
  3. 对于所有样本 (xi,yi) ( x i , y i ) ,要求 p(y=yi|xi) p ( y = y i | x i ) 尽量大
    设指示函数 A(u,v) A ( u , v ) ,当 u=v u = v A(u,v)=1 A ( u , v ) = 1 ,其他情况下 A(u,v)=0 A ( u , v ) = 0 。那么上面这个条件可以转化为:希望 p(y=k|xi) p ( y = k | x i ) 只在 yi=k y i = k 时最大,其他情况最小(最好是0),那么它的作用和 A(k,yi) A ( k , y i ) 是一致的。现在用期望来描述这个性质作用于整个数据集的效果:
    E(k)p(x)=E(k)A(x) E p ( k ) ( x ) = E A ( k ) ( x )

Ni=1p(y=k|xi)xi=Ni=1A(k,yi)xik=1,2,,K ∑ i = 1 N p ( y = k | x i ) ⋅ x i = ∑ i = 1 N A ( k , y i ) ⋅ x i ∀ k = 1 , 2 , ⋯ , K

最大熵模型的目标是最大化条件熵:

H(p)=k=1Ki=1Np(yi=k|xi)logp(yi=k|xi) H ( p ) = − ∑ k = 1 K ∑ i = 1 N p ( y i = k | x i ) log ⁡ p ( y i = k | x i )

结合上面假设的3个条件,可以将最大熵模型写成约束问题:
minp(y|x)s.t.H(p)=Kk=1Ni=1p(yi=k|xi)logp(yi=k|xi)E(k)p(x)=E(k)A(x)Kk=1p(k|xi)=1k=1,2,,Ki=1,2,,N min p ( y | x ) − H ( p ) = ∑ k = 1 K ∑ i = 1 N p ( y i = k | x i ) log ⁡ p ( y i = k | x i ) s . t . E p ( k ) ( x ) = E A ( k ) ( x ) k = 1 , 2 , ⋯ , K ∑ k = 1 K p ( k | x i ) = 1 i = 1 , 2 , ⋯ , N

为每个等式约束引入拉格朗日橙子(o´ω`o) λk0 λ k ⩾ 0 βi0 β i ⩾ 0 ,写成拉格朗日函数:
L(p,λ,β)=k=1Ki=1Np(k|xi)logp(k|xi)+k=1Kλki=1N(p(k|xi)xiA(k,yi)xi)+i=1Nβi(k=1Kp(k|xi)1) L ( p , λ , β ) = ∑ k = 1 K ∑ i = 1 N p ( k | x i ) log ⁡ p ( k | x i ) + ∑ k = 1 K λ k ∑ i = 1 N ( p ( k | x i ) ⋅ x i − A ( k , y i ) ⋅ x i ) + ∑ i = 1 N β i ( ∑ k = 1 K p ( k | x i ) − 1 )

将原问题转化为对偶问题,即:
minpmaxλ,βL(p,λ,β)maxλ,βminpL(p,λ,β) min p max λ , β L ( p , λ , β ) → max λ , β min p L ( p , λ , β )

先求 minpL(p,λ,β) min p L ( p , λ , β ) ,对 p(yi=k|xi) p ( y i = k | x i ) 求导:
L(p,λ,β)p(yi=k|xi)=logp(yi=k|xi)+1+λkxi+βi ∂ L ( p , λ , β ) ∂ p ( y i = k | x i ) = log ⁡ p ( y i = k | x i ) + 1 + λ k ⋅ x i + β i

让导数为0,得到:
p(yi=k|xi)=eλkxiβi1 p ( y i = k | x i ) = e − λ k ⋅ x i − β i − 1

代入等式约束条件得到(这里假设所有的 β β 相同):
k=1Keλkxiβi1=1 ∑ k = 1 K e − λ k ⋅ x i − β i − 1 = 1

eβ=1Kk=1eλkxi1 e β = 1 ∑ k = 1 K e − λ k ⋅ x i − 1

重新代入 p(yi=k|xi) p ( y i = k | x i ) 得到:
p(yi=k|xi)=eλkxKj=1eλjx p ( y i = k | x i ) = e λ k ⋅ x ∑ j = 1 K e λ j ⋅ x

这正是softmax,当 K=2 K = 2 时退化为sigmoid。
后面的对偶函数求解最优 λk λ k βi β i 的过程就不写了,实际上那就已经在训练LR了,但是写到这里应该已经能明白,如果希望目标概率分布 p(y|x) p ( y | x ) 满足最大熵性,则它一定是sigmoid或者softmax的形式。

因此,结论是:LR与最大熵模型是等价的


九、LR与SVM的关系

相同

  1. 都是有监督分类方法,判别模型(直接估计 y=f(x) y = f ( x ) p(y|x) p ( y | x )
  2. 都是线性分类方法(指不用核函数的情况)

不同

  1. loss不同。LR是交叉熵,SVM是Hinge loss,最大化函数间隔
  2. LR决策考虑所有样本点,SVM决策仅仅取决于支持向量
  3. LR受数据分布影响,尤其是样本不均衡时影响大,要先做平衡,SVM不直接依赖于分布
  4. LR可以产生概率,SVM不能
  5. LR不依赖样本之间的距离,SVM是基于距离的
  6. LR是经验风险最小化,需要另外加正则,SVM自带结构风险最小化不需要加正则项
  7. LR一般不用核函数,因为每两个点之间都要做内积,而SVM只需要计算样本和支持向量的内积,计算量更小
  8. 小数据集SVM比LR好,大数据SVM计算复杂,LR简单且能够在线并行训练,因此更多用LR

十、为什么LR要用sigmoid函数?

10.1 从广义线性模型和指数分布族的角度

指数分布族

p(y|ξ)=b(y)exp(ξTT(y)a(ξ)) p ( y | ξ ) = b ( y ) exp ⁡ ( ξ T T ( y ) − a ( ξ ) )

这里 ξ ξ 是参数, T(y) T ( y ) 常常就是 y y 本身,exp(a(ξ))起归一化作用。

指数分布族中的伯努利分布

B(ϕ)$$p(y;ϕ)=ϕy(1ϕ)1y B ( ϕ ) $ : $ p ( y ; ϕ ) = ϕ y ( 1 − ϕ ) 1 − y

对应指数分布族,其中 T(y)=y T ( y ) = y ξ=logϕ1ϕϕ=11+eξ ξ = l o g ϕ 1 − ϕ → ϕ = 1 1 + e − ξ

广义线性模型(GLM)三个假设

  1. 后验概率 p(y|x,w) p ( y | x , w ) 服从指数分布族
  2. 目的是预测在输入 x x 的条件下输出y的条件期望 E[y|x] E [ y | x ]
  3. 指数分布族参数 ξ ξ 与输入 x x 呈现线性相关:ξ=wx

下面推导LR的sigmoid
考虑二分类问题,假设 p(y|x,w) p ( y | x , w ) 是服从伯努利分布 B(ϕ) B ( ϕ ) 的广义线性模型,计算期望:

p(y=1|x)=E[y|x,w]=ϕ=11+eξ p ( y = 1 | x ) = E [ y | x , w ] = ϕ = 1 1 + e − ξ

根据GLM假设三, ξ=wx ξ = w ⋅ x ,于是得到:
p(y=1|x)=11+ewx p ( y = 1 | x ) = 1 1 + e − w ⋅ x

10.2 从最大熵模型的角度

第七节中已经分析过了,sigmoid或softmax函数具有最大熵性。


十一、为什么LR适合离散特征?

问题也可以是“为什么LR的输入要先离散化/Onehot?”。以下答案参考自其它博客。

  1. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展。

  2. 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。

  3. 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。

  4. 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。

  5. 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。


十二、为什么LR不适合用MSE?

假设目标函数是MSE而不是交叉熵,即:

L=(yy^)22 L = ( y − y ^ ) 2 2

Lw=(y^y)σ(wx)x ∂ L ∂ w = ( y ^ − y ) σ ′ ( w ⋅ x ) x

这里sigmoid的导数项:
σ(wx)=wx(1wx) σ ′ ( w ⋅ x ) = w ⋅ x ( 1 − w ⋅ x )

根据 w w 的初始化,导数值可能很小(想象一下sigmoid函数在输入较大时的梯度)而导致收敛变慢,而训练途中也可能因为该值过小而提早终止训练(参考梯度消失)。
另一方面,logloss的梯度如下,当模型输出概率偏离于真实概率时,梯度较大,加快训练速度,当拟合值接近于真实概率时训练速度变缓慢,没有MSE的问题。
g=i=1Nxi(yip(xi))


总结


参考

《统计学习方法》- 李航
《机器学习》- 周志华
【博客】逻辑回归LR的特征为什么要先离散化 - yysunlife
【博客】Logistic Regression 的前世今生
【博客】机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)
【博客】各大公司广泛使用的在线学习算法FTRL详解 - EE_NovRain
【博客】为什么LR不能用平方误差
【知乎】LR正则化与数据先验的关系
【论文】LR和熵最大的等价性

  • 15
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值