概述
逻辑回归是一个假设样本服从伯努利分布,利用极大似然估计和梯度下降求解的二分类模型,在分类、CTR预估领域有着广泛的应用。
公式推导
逻辑回归是用来解决分类问题用的,与线性回归不同的是,逻辑回归输出的不是具体的值,而是一个概率。除去了sigmoid函数的逻辑归回和线性回归几乎是一样的。
有人说逻辑回归不是回归,因为输出的不是回归值。
也可理解为逻辑回归是先求回归函数,再将结果通过逻辑函数转化一下得到最终的结果。
基本步骤:
- 构造hypothesis
- 构造损失函数
- 通过损失函数最小化求目标函数的各个参数
一 、构造hypothesis
逻辑回归的H可以看做是一个线性回归方程的结果经过一个sigmoid函数得到的结果,线性回归方程可以用如下的式子表示。
θ 0 + θ 1 x 1 + , … , + θ n x n = ∑ i = 1 n θ i x i = θ T x ( 1 ) \theta_{0}+\theta_{1} x_{1}+, \ldots,+\theta_{n} x_{n}=\sum_{i=1}^{n} \theta_{i} x_{i}=\theta^{T} x (1) θ0+θ1x1+,…,+θnxn=i=1∑nθixi=θTx(1)
Sigmoid 函数如下,该函数又称为逻辑函数
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1
将式子(1)通过逻辑函数转化得到的概率即使我们的hypothesis,
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x)=g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}}
hθ(x)=g(θTx)=1+e−θTx1
函数
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 表示样本被预测为正例1的概率,我们很容易的得到样本被预测为正例和负例的概率如下;
P
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
P
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
\begin{array}{l}{P(y=1 | x ; \theta)=h_{\theta}(x)} \\ {P(y=0 | x ; \theta)=1-h_{\theta}(x)}\end{array}
P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1−hθ(x)
上式可以合并为一个式子
P
(
y
∣
x
;
θ
)
=
(
h
θ
(
x
)
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
(
2
)
P(y | x ; \theta)=\left(h_{\theta}(x)\right)^{y}\left(1-h_{\theta}(x)\right)^{1-y} (2)
P(y∣x;θ)=(hθ(x))y(1−hθ(x))1−y(2)
二、构造损失函数
我们对预测结果的概率表示(式子(2)) 取似然函数,取似然函数就是将模型对样本的概率预测值累乘起来。得到如下的似然函数
L
(
θ
)
=
∏
i
=
1
m
P
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∏
i
=
1
m
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
L(\theta)=\prod_{i=1}^{m} P\left(y^{(i)} | x^{(i)} ; \theta\right)=\prod_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)\right)^{y^{(i)}}\left(1-h_{\theta}\left(x^{(i)}\right)\right)^{1-y^{(i)}}
L(θ)=i=1∏mP(y(i)∣x(i);θ)=i=1∏m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
由于该式比较麻烦涉及连乘法,所以我们对其去对数操作得到对数似然函数。
l
(
θ
)
=
log
L
(
θ
)
=
∑
i
=
1
m
(
y
(
i
)
log
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
)
l(\theta)=\log L(\theta)=\sum_{i=1}^{m}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right)
l(θ)=logL(θ)=i=1∑m(y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))))
上述利用的是最大似然估计原理:极大似然估计就是就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大。
当似然函数求得最大值时,模型能够最大可能的满足当前的样本,求最大值使用梯度向上法,我们可以对似然函数加个负号,通过求等价问题的最小值来求原问题的最大值,这样我们就可以使用极大似然估计法。
令:
J
(
θ
)
=
−
1
m
l
(
θ
)
J(\theta)=-\frac{1}{m} l(\theta)
J(θ)=−m1l(θ)
这样我们就能得到损失函数的最终形式
J
(
θ
)
=
−
1
m
∑
i
=
1
n
(
y
(
i
)
log
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
)
(
3
)
J(\theta)=-\frac{1}{m} \sum_{i=1}^{n}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right) (3)
J(θ)=−m1i=1∑n(y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))))(3)
即等价于
Cost
(
h
θ
(
x
)
,
y
)
=
{
−
log
(
h
θ
(
x
)
)
if
y
=
1
−
log
(
1
−
h
θ
(
x
)
)
if
y
=
0
\operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{array}{ll}{-\log \left(h_{\theta}(x)\right)} & {\text { if } y=1} \\ {-\log \left(1-h_{\theta}(x)\right)} & {\text { if } y=0}\end{array}\right.
Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0
三、通过梯度下降法求参数 θ \theta θ的更新式
我们下图为推倒式,面试推倒的时候可以不写下标(假设我们使用随机梯度下降法),这样可以使推导式更简洁。
求梯度:
这里需要提一下的是,sigmoid函数有如下性质,在上述推倒的第三行中可以看到:
S
′
(
x
)
=
e
−
x
(
1
+
e
−
x
)
2
=
S
(
x
)
(
1
−
S
(
x
)
)
S^{\prime}(x)=\frac{e^{-x}}{\left(1+e^{-x}\right)^{2}}=S(x)(1-S(x))
S′(x)=(1+e−x)2e−x=S(x)(1−S(x))
θ
\theta
θ更新式:
α
\alpha
α为学习率
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_{j} :=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
四、小结
LR在确定了模型的形式后,通过最大似然估计法来实现最小散度从而求出模型参数。
为什么LR模型使用Sigmoid函数
首先要说明的是,Sigmoid不是被选择出来的,而是被推导出来后给它署名Sigmoid.
逻辑回归模型是一种广义线性模型,而逻辑回归满足伯努利分布,伯努利分布是指数分布族的一种,而指数族分布有如下的形式:
p
(
y
;
η
)
=
b
(
y
)
exp
(
η
T
T
(
y
)
−
a
(
η
)
)
p(y ; \eta)=b(y) \exp \left(\eta^{T} T(y)-a(\eta)\right)\\
p(y;η)=b(y)exp(ηTT(y)−a(η))
- η \eta η 是参数
- T ( y ) T(y) T(y)是充分统计量(充分统计量就是可以确定一个分布的统计量,比如平均值和方差这两个充分统计量可以确定一个正态分布), (一般情况下 T ( y ) = y T(y)=y T(y)=y)
- a ( η ) a(\eta) a(η),是个归一化的常量,保证 ∑ p ( y ; η ) = 1 \sum p(y ; \eta)=1 ∑p(y;η)=1
伯努利分布形式如下:
p
(
y
=
1
;
ϕ
)
=
ϕ
;
p
(
y
=
0
;
ϕ
˙
)
=
1
−
ϕ
p(y=1 ; \phi)=\phi ; p(y=0 ; \dot{\phi})=1-\phi
p(y=1;ϕ)=ϕ;p(y=0;ϕ˙)=1−ϕ
根据伯努利分布的结果,逻辑回归的广义线性模型的形式可写为:
p
(
y
;
ϕ
)
=
ϕ
y
(
1
−
ϕ
)
1
−
y
p(y ; \phi)=\phi^{y}(1-\phi)^{1-y}
p(y;ϕ)=ϕy(1−ϕ)1−y
我们现在的目标就是求
η
\eta
η的表达式:
写成如下的形式
p
(
y
;
ϕ
)
=
ϕ
y
(
1
−
ϕ
)
1
−
y
=
exp
(
y
log
ϕ
+
(
1
−
y
)
log
(
1
−
ϕ
)
)
=
exp
(
(
log
(
ϕ
1
−
ϕ
)
)
y
+
log
(
1
−
ϕ
)
)
\begin{aligned} p(y ; \phi) &=\phi^{y}(1-\phi)^{1-y} \\ &=\exp (y \log \phi+(1-y) \log (1-\phi)) \\ &=\exp \left(\left(\log \left(\frac{\phi}{1-\phi}\right)\right) y+\log (1-\phi)\right) \end{aligned}
p(y;ϕ)=ϕy(1−ϕ)1−y=exp(ylogϕ+(1−y)log(1−ϕ))=exp((log(1−ϕϕ))y+log(1−ϕ))
让逻辑回归的表达式满足伯努利分布的指数分布族表达式,即(1)式子,即让:
b
(
y
)
exp
(
η
T
T
(
y
)
−
a
(
η
)
)
=
=
exp
(
(
log
(
ϕ
1
−
ϕ
)
)
y
+
log
(
1
−
ϕ
)
)
b(y) \exp \left(\eta^{T} T(y)-a(\eta)\right) ==\exp \left(\left(\log \left(\frac{\phi}{1-\phi}\right)\right) y+\log (1-\phi)\right)
b(y)exp(ηTT(y)−a(η))==exp((log(1−ϕϕ))y+log(1−ϕ))
那么:
- b ( y ) = 1 b(y)=1 b(y)=1
- T ( y ) = y T(y)=y T(y)=y
- η = log ( ϕ 1 − ϕ ) \eta=\log \left(\frac{\phi}{1-\phi}\right) η=log(1−ϕϕ) (1)
- a ( η ) = − log ( 1 − ϕ ) \begin{aligned} a(\eta) &=-\log (1-\phi) \end{aligned} a(η)=−log(1−ϕ)
从(1)式子可以推出
ϕ
=
1
(
1
+
e
−
η
)
\phi=\frac{1}{ \left(1+e^{-\eta}\right)}
ϕ=(1+e−η)1
即Sigmoid函数的形式。
所以,LR是用Sigmoid 函数不是因为,LR选择了它当作越阶函数,而是根据线性模型和直属分布族的性质推导出了它。
为什么LR模型损失函数使用交叉熵不用均方差
LR的基本形式如下
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x)=g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}}
hθ(x)=g(θTx)=1+e−θTx1
假如一元逻辑回归, 那么预测值
y
^
\hat{y}
y^
y
^
=
σ
(
w
⋅
x
+
b
)
\hat{y}=\sigma(w \cdot x+b)
y^=σ(w⋅x+b)
其中
σ
\sigma
σ 是sigmoid 函数
如果使用均方差作为损失函数
C
=
(
y
−
y
^
)
2
2
C=\frac{(y-\hat{y})^{2}}{2}
C=2(y−y^)2
其中
y
^
\hat{y}
y^是模型的预测值,
y
^
=
σ
(
z
)
,
z
=
w
⋅
x
+
b
\hat{y}=\sigma(z), z=w \cdot x+b
y^=σ(z),z=w⋅x+b, 采用梯度下降的方法对
w
w
w和
b
b
b进行更新,那么就需要将损失函数对这两个参数进行求导:
∂
C
∂
w
=
(
y
^
−
y
)
σ
′
(
z
)
x
=
(
y
^
−
y
)
σ
′
(
z
)
x
\frac{\partial C}{\partial w}=(\hat{y}-y) \sigma^{\prime}(z) x=(\hat{y}-y) \sigma^{\prime}(z) x
∂w∂C=(y^−y)σ′(z)x=(y^−y)σ′(z)x
∂
C
∂
b
=
(
y
^
−
y
)
σ
′
(
z
)
x
=
(
y
^
−
y
)
σ
′
(
z
)
\frac{\partial C}{\partial b}=(\hat{y}-y) \sigma^{\prime}(z) x=(\hat{y}-y) \sigma^{\prime}(z)
∂b∂C=(y^−y)σ′(z)x=(y^−y)σ′(z)
可以看到
w
,
b
w,b
w,b的更新速率与当前的预测值sigmoid函数的导数有关,sigmoid的图像如下
所以,如果当前模型的输出接近0或者1时,
σ
′
(
z
)
\sigma^{\prime}(z)
σ′(z)就会非常小,接近0,使得求得的梯度很小,损失函数收敛的很慢。
如果使用交叉熵作为损失函数
对于二分类问题,交叉熵的形式是由极大似然估计下概率的连乘然后求对数得到的:
C
=
−
1
n
∑
[
y
In
y
^
+
(
1
−
y
)
In
(
1
−
y
^
)
]
C=-\frac{1}{n} \sum_{}[y \operatorname{In} \hat{y}+(1-y) \operatorname{In}(1- \hat{y})]
C=−n1∑[yIny^+(1−y)In(1−y^)]
对w求导得
∂
C
∂
w
=
1
n
∑
x
(
σ
(
z
)
−
y
)
\frac{\partial C}{\partial w}=\frac{1}{n} \sum_{} x(\sigma(z)-y)
∂w∂C=n1∑x(σ(z)−y)
可以看到,
w
w
w的梯度是和当前的预测值与实际值的差有关的,没有受到sigmoid函数导数的影响,且真实值与预测值差别越大,梯度越大,更新的速度也就越快,这正是我们想要的。
如果用的是均方差作为损失函数,求得的梯度受到simoid函数导数的影响
LR的输出结果为什么可以做为概率
LR模型假设样本服从伯努利分布,确定模型的形式后参数是未知的。
并通过在已知样本上进行训练,并且事先赋予其输出的工程意义,即输出的是为正样本的概率,然后用极大似然估计让这个结果去拟合训练集的概率分布,通过这种方式来不断调整参数使模型的输出结果能够很好的拟合样本。
所以个人理解就是用样本分布去训练模型的过程就是赋予了输出结果概率的意义。
逻辑回归与线性模型的关系
是线性模型,但属于广义线性模型。
下面说明普通线性模型和广义线性模型。
普通线性模型
普通线性模型有如下的表达式:
Y
=
β
0
+
β
1
x
1
+
β
2
x
2
+
…
+
β
p
−
1
x
p
−
1
+
ϵ
Y=\beta_{0}+\beta_{1} x_{1}+\beta_{2} x_{2}+\ldots+\beta_{p-1} x_{p-1}+\epsilon
Y=β0+β1x1+β2x2+…+βp−1xp−1+ϵ
β
i
\beta_{i}
βi是未知参数,
β
0
\beta_{0}
β0是截距项
普通线性模型有如下特点:
- 响应变量( y y y)服从正态分布
- 误差 ϵ \epsilon ϵ具有正态性, 与 x x x的变化无关
- x i x_{i} xi具有非随机性,可测并不存在误差; β i \beta_{i} βi虽然未知但不具有随机性
- 预测量(特征) x i x_{i} xi和对应的参数 β i \beta_{i} βi有对应关系,具有非随机性
- 研究响应变量( y y y)的期望,连接方式为恒等: E [ Y ] = f ( β 0 + β 1 x 1 + β 2 x 2 + … + β p − 1 x p − 1 ) = β 0 + β 1 x 1 + β 2 x 2 + … + β p − 1 x p − 1 E[Y]=f\left(\beta_{0}+\beta_{1} x_{1}+\beta_{2} x_{2}+\ldots+\beta_{p-1} x_{p-1}\right)=\beta_{0}+\beta_{1} x_{1}+\beta_{2} x_{2}+\ldots+\beta_{p-1} x_{p-1} E[Y]=f(β0+β1x1+β2x2+…+βp−1xp−1)=β0+β1x1+β2x2+…+βp−1xp−1
广义线性模型
- 响应变量( y y y)的分布从正态分布拓展到指数分布族:比如正态分布、泊松分布、二项分布、负二项分布、伽玛分布、逆高斯分布等(与上不同),这和 ϵ \epsilon ϵ不满足正态分布等价
- x i x_{i} xi具有非随机性,可测并不存在误差; β i \beta_{i} βi虽然未知但不具有随机性
- 预测量 x i x_{i} xi和对应参数 β i \beta_{i} βi具有非随机性,
- 研究响应变量( y y y)的期望,不过连接方式可能多样
所以可知,逻辑回归是响应变量服从伯努利分布的广义线性模型
逻辑回归与线性回归的区别与联系
区别
- 线性回归假设响应变量服从正态分布,逻辑回归假设响应变量服从伯努利分布
- 线性回归优化的目标函数是均方差(最小二乘),而逻辑回归优化的是似然函数(交叉熵)
- 线性归回要求自变量与因变量呈线性关系,而逻辑回归没有要求
- 线性回归分析的是因变量自身与自变量的关系,而逻辑回归研究的是因变量取值的概率与自变量的概率
- 逻辑回归处理的是分类问题,线性回归处理的是回归问题,这也导致了两个模型的取值范围不同:0-1和实数域
- 参数估计上,都是用极大似然估计的方法估计参数(高斯分布导致了线性模型损失函数为均方差,伯努利分布导致逻辑回归损失函数为交叉熵)
联系
- 两个都是线性模型,线性回归是普通线性模型,逻辑回归是广义线性模型
- 表达形式上,逻辑回归是线性回归套上了一个Sigmoid函数
LR中特征相关的问题
为什么特征离散化
下面答案有些不是LR进行离散化特有的原因,而是离散化本身比较general的原因
- 离散特征可以one-hot, 而稀疏向量内积运算速度快,结果易存储
- 离散后数据鲁棒性强,不会因为数据发生一点小的变动而表现出完全不同的性质,使模型更稳定
- 离散后可以进行特征交叉,引入非线性特征
- 增强模型的表达能力,离散化后,原来的一个特征变成N个特征,加大了模型的拟合能力
- 特征离散后相当于简化了特征,一定程度上减轻了过拟合
共线特征对于LR模型的影响
LR模型中特征的共线性不会影响模型的最优解,但是会影响系数的稳定性。比如现在两个特征x1,x2,分别表示米和厘米,这两个长度高度共线性。
1.5
米
=
1
∗
x
1
+
50
∗
x
2
,
也
可
以
表
示
为
2
∗
x
1
−
−
50
∗
x
2
1.5米= 1*x_{1} + 50*x_{2},也可以表示为2*x_{1} - -50*x_{2}
1.5米=1∗x1+50∗x2,也可以表示为2∗x1−−50∗x2
x
2
x_{2}
x2的系数发生的质的翻转,但是表达能力没有变。
所以LR模型中特征的共线性不会影响模型的最优解,但是会使得系数不稳定,从而解释性变差。
如果是出现重复特征,比如某个特征重复了100次,那么相当于把原来唯一的特征分成了一百份,这一百个特征效果和原来单个特征的效果相同。
为什么要删除共线性特征
- 提高模型的可解释性
- 提高模型的训练速度
特征权重的绝对值可以用来衡量特征的重要性吗
不一定,首先特征可能没有归一化,系数收到量级的影响,(1米=1cm * 100)
其次,特征间可能存在共线性,导致特征系数不稳定,可解释性差。
参考资料
https://www.zhihu.com/question/31989952
https://www.cnblogs.com/ModifyRong/p/7739955.html
https://cosx.org/2011/01/how-does-glm-generalize-lm-assumption/
http://www.sohu.com/a/228212348_349736
https://zhuanlan.zhihu.com/p/22876460