文章目录
Intro
逻辑回归是一种十分常见得一种分析模型,属于广义线性回归分析模型。
本文回答了以下问题:
线性回归/逻辑回归的使用前提/假设是?
线性回归/逻辑回归是什么?
线性回归/逻辑回归为什么使用其对应的损失函数?
线性回归/逻辑回归如何计算其梯度?
本文包括了:
线性回归/逻辑回归的假设,线性回归/逻辑回归的形式,线性回归/逻辑回归的损失函数推导过程,线性回归/逻辑回归的梯度计算, 逻辑回归在多分类问题上的应用;
分享两个讲的非常好的文章:
详解逻辑回归
逻辑回归与面试问题
关于逻辑回归的总结与解释
以上两个文章讲解都非常好,但是有些细节可能个人理解偏多,希望大家都能有自己的思考。
通常,我们见到逻辑回归会想到它的函数图像,和softmax,以及线性回归。下面,我们将进行介绍与解释:
Logistic Regression
理解逻辑回归,首先要明确一点,逻辑回归是一种分析方法,而不是一个公式,也不是一个函数,它是一个模型。
如同线性回归一样,逻辑回归本身也包含很多参数,使用它的目的,就是调整这些参数,以达到很好的预测效果。
1. 回归的预测形式
逻辑回归的基础是线性回归,而线性回归是一个比较容易理解的分析方式,我们从线性回归的单变量形式讲起:
1.1 线性回归的单变量形式
对于输入数据:
X
=
{
x
1
,
x
2
,
.
.
.
,
x
n
}
\textbf{X} = \{x_1, x_2, ..., x_n\}
X={x1,x2,...,xn}
我们想得到的预测结果是:
Y
=
{
y
1
,
y
2
,
.
.
.
,
y
n
}
\textbf{Y} = \{y_1, y_2, ..., y_n\}
Y={y1,y2,...,yn}
则线性回归模型中,我们假设存在参数
θ
\bm{\theta}
θ ,使下式成立:
y
=
θ
1
x
+
θ
2
{y} = \theta_1{x} + \theta_2
y=θ1x+θ2
即,在二维平面中,从一堆散点中,找到一条直线,形成
x
→
y
x\rightarrow y
x→y 的映射,如果有
x
n
e
w
x_{new}
xnew 出现,我们能根据映射,合理的预测
y
n
e
w
y_{new}
ynew 的值,如下图所示:
1.2 线性回归的多变量形式
在单变量的基础上,我们进一步假设,对上述
X
\textbf{X}
X 中的每一个
x
n
x_n
xn ,都有:
x
n
:
=
i
n
=
i
1
,
i
2
,
.
.
.
,
i
K
x_n:= \textbf{i}_n = {i_1, i_2, ..., i_K}
xn:=in=i1,i2,...,iK
即对每个输入都是K维的数据。
与单变量一样,我们希望通过建立一个映射,使得
x
→
y
x\rightarrow y
x→y 依然成立,则对任意的
x
n
x_n
xn 仍然假设参数
θ
\bm{\theta}
θ 存在:
h
θ
(
x
n
)
=
Σ
j
=
1
K
θ
j
⋅
i
j
+
θ
b
i
a
s
=
θ
T
i
=
y
n
h_\theta(x_n) = \Sigma_{j=1}^K \theta_j \cdot i_j + \theta_{bias} = \bm{\theta}^T\textbf{i} = y_n
hθ(xn)=Σj=1Kθj⋅ij+θbias=θTi=yn
最终,
h
θ
h_\theta
hθ 仍然是
x
→
y
x\rightarrow y
x→y 的映射,只不过是多维度映射。而无论
x
n
e
w
x_{new}
xnew的维度为多大,我们都将最后一维当作1,则对于一组新的多维数据
x
n
e
w
x_{new}
xnew ,我们可以通过
θ
T
i
\bm{\theta}^T\textbf{i}
θTi 计算得到对应的
y
n
e
w
y_{new}
ynew。注意到,当K=1时,多变量形式变成了单变量形式。
1.3 逻辑回归:将线性回归转化为概率模型
在以上线性回归中,我们不难发现其输出是根据输入变化的,如果预测的直线是递增的,当输入 x n e w x_{new} xnew 取无穷大时,输出 y n e w y_{new} ynew 也会无穷大。这种回归方式能满足我们对一些数值预测问题(如股票预测,房价预测,室温预测等)的需求,但并不能满足我们对分类问题的需求。
在分类问题中,线性回归不能满足我们的需求,这是因为最终我们想要的输出值在分类问题中,往往是一个整数,以下我们探讨二分类问题。
对于二分类问题,沿用线性回归中的形式,我们可以将输出表达为:
Y
=
y
1
,
y
2
,
.
.
.
,
y
n
,
y
i
∈
0
,
1
\bm{Y} = {y_1, y_2, ..., y_n}, y_i \in {0, 1}
Y=y1,y2,...,yn,yi∈0,1
可以想象,对于二分类问题在坐标系中的表达,就变成了两条线:
y
=
0
y=0
y=0 和
y
=
1
y=1
y=1 上的散点。我们无法使用一条直线来拟合出他们的结果。
所以,对于任何一个二分类问题,我们可以将其看作一个概率预测问题,即仍然通过线性预测的方式进行数值预测,只不过预测的是事件
A
A
A 发生的概率。
但这样的假设会引出新的问题:在一个输入是无穷的情况下,理论输出也是无穷大,可概率不可能无穷大。所以我们需要将线性回归的模型输出,限制在
[
0
,
1
]
[0, 1]
[0,1] 这个区间。
1.4 逻辑回归的形式
有了以上的目的,我们只需要找到一个方程,对这个方程 f ( x ) f(x) f(x),我们需要保证其值域为 [ 0 , 1 ] [0, 1] [0,1] ,且为单调函数,最终我们选择了Sigmoid函数作为了逻辑回归的函数,至于为什么这样选择,可以参照这篇博客和其引用的这篇博客。
我们先看Sigmoid函数的样子:
Sigmoid的函数表达式为:
f
(
x
)
=
e
x
1
+
e
x
=
1
1
+
e
−
x
f(x) = \frac{e^x}{1+e^x} = \frac{1}{1+e^{-x}}
f(x)=1+exex=1+e−x1
往往逻辑回归处理的是多变量问题,所以沿用上述线性回归结果,我们可以把这个方程写为:
f
(
x
)
=
1
1
+
e
−
θ
T
i
f(x) = \frac{1}{1+e^{-\bm{\theta}^T\bm{i}}}
f(x)=1+e−θTi1
所以最终,我们通过了Sigmoid函数,将线性回归的结果转化为了一个在0到1之间的概率值。直觉上,我们可以将大于0.5的输出判断为属于1类,小于0.5的输出判断为0类。就完成了二分类问题的预测。
2. 回归的核心:损失函数
上述问题都谈论到我们想刻画一个 θ \bm{\theta} θ ,使预测会得到一个更好的结果。但如何得到 θ \bm{\theta} θ ,又如何确定 θ \bm{\theta} θ 的好坏。但从每次判断的结果来看是不够准确的,因为我们不仅需要知道预判是好还是坏,也同样需要知道预判有多好或者多坏。即每次输出结果到真实值的差距。
这就是线性回归和逻辑回归中的损失函数,损失函数刻画了每次预测结果
y
^
\hat y
y^ 和真实值
y
y
y 之间的距离。
那我们如何确定这个距离,取决于我们使用何种关系衡量他们。
2.1 线性回归的基本假设
对于线性回归,我们使用的是MSE(Mean Square Error),均方差,也就是预测值和真实值的平均平方差。但为什么使用均方差呢?
直觉上,我们可以认为,样本点到真实值(线性回归的真实值,是一条距离所有样本点平均距离最近的一条直线)的误差是相当平均的。所以我们引入假设:
- 样本到真实值的误差呈正态分布
事实上,线性回归不只有这一个假设,还有以下假设:
对于以上性质,其实都很好理解:
- 线性性,可加性:我们本身在做的就是线性回归,如果没有了线性关系,那得到的预测结果肯定会很差。
- 无自相关性:这里我的理解和网上一些其他理解不同。在了解了自相关性性质之后,我们可以得到的结论是,自变量是时序的,那么我们可以理解为信号中的因果性,换句话说,影响 y ^ n \hat y_n y^n 输出的不只有自变量 x n \bm x_n xn ,也和 n n n 的值有关。这种关系,是线性回归算法很难捕捉到的,自然其结果变差。PS:对于一些计算置信区间的说法我保持怀疑态度,如果说自相关性会让其标准差变小,那置信区间会变窄,这样结果不是更稳定吗?
- 多重共线性,这个更好理解了,如果自变量之间都存在线性关系,会让模型学习能力变弱,简单的假设 i k = a i 1 i_k = ai_1 ik=ai1(完全共线性) ,则对应的, i 1 i_1 i1 的真实值 θ 1 = θ ^ k + θ ^ 1 \theta_1 = \hat\theta_k + \hat\theta_1 θ1=θ^k+θ^1;这使得解有无数种,故很难在回归的过程中,找到两个合适的值。
- 方差为常数说明了样本的同一性,异常值导致的方差异常会让预测值 y ^ \hat y y^ 变得不确定,故使模型失效。
对于以上性质,或者假设,是指线性回归使用的前提,在这些前提的基础上,我们才能继续研究。
2.2 线性回归的损失函数
线性回归的损失函数选择的是均方差MSE(Mean Square Error),用
l
o
s
s
loss
loss 表示损失函数,对于N个预测值和真实值(
y
^
,
y
\bm{\hat y}, \bm{y}
y^,y)最基本的形式为:
l
o
s
s
=
1
N
Σ
i
=
1
N
(
y
^
i
−
y
i
)
2
loss = \frac{1}{N} \Sigma_{i=1}^N (\hat y_i - y_i)^2
loss=N1Σi=1N(y^i−yi)2
即为其预测值与真实值差的平方的平均值。
为什么线性回归选择MSE作为损失函数呢?
查询了一些资料过后,我更详细的描述了一下:
在线性回归中,如上所述,我们已经知道,模型的预测形式为
h
θ
(
x
)
=
x
T
θ
+
b
h_\theta(x) = x^T\theta+b
hθ(x)=xTθ+b,其中
x
x
x为输入,
b
b
b为偏置项。(这里及下文中不再使用
i
\bm i
i 来表示输入
x
n
x_n
xn 中的多变量,直接使用向量
x
x
x 代替)
从上文的假设中,我们可知,线性回归假设误差项符合正态分布,即:
h
θ
(
x
)
−
y
=
ϵ
∈
N
(
μ
,
σ
2
)
h_\theta(x) - y = \epsilon \in N(\mu, \sigma^2)
hθ(x)−y=ϵ∈N(μ,σ2)
其中,
ϵ
=
y
−
y
^
\epsilon = y - \hat y
ϵ=y−y^ 表示真实值与预测值的误差。
要知道,在这个假设下,我们可以将想要预测的直线
h
θ
h_\theta
hθ 理解为正态分布的平均值,即样本的点以正态分布的形式随机散落在真实直线的两边。
大致(我用的N(0, 1)的正态分布)如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2dc8bf5ac1d7ad6e35b7a53a69143ddb.jpeg#pic_center)
以下内容可以略看:
这时,我们看正态分布的公式为:
f
(
x
)
=
1
2
π
σ
e
−
(
x
−
μ
)
2
2
σ
2
f(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}
f(x)=2πσ1e−2σ2(x−μ)2
根据我们的假设:
h
θ
(
x
)
−
y
=
ϵ
∈
N
(
μ
,
σ
2
)
h_\theta(x) - y = \epsilon \in N(\mu, \sigma^2)
hθ(x)−y=ϵ∈N(μ,σ2)
进而正态分布公式变为:
f
(
ϵ
)
=
1
2
π
σ
e
−
(
ϵ
−
μ
)
2
2
σ
2
f(\epsilon) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon-\mu)^2}{2\sigma^2}}
f(ϵ)=2πσ1e−2σ2(ϵ−μ)2
我们可以把它看作是(这个写法不严谨):
f
(
ϵ
∣
μ
,
σ
)
=
1
2
π
σ
e
−
(
ϵ
−
μ
)
2
2
σ
2
f(\epsilon|\mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon-\mu)^2}{2\sigma^2}}
f(ϵ∣μ,σ)=2πσ1e−2σ2(ϵ−μ)2
即我们可以将正态分布的概率密度函数(即上式)转化为概率:
P
(
ϵ
∣
μ
,
σ
)
=
1
2
π
σ
e
−
(
ϵ
−
μ
)
2
2
σ
2
P(\epsilon|\mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon-\mu)^2}{2\sigma^2}}
P(ϵ∣μ,σ)=2πσ1e−2σ2(ϵ−μ)2
很明显这是一个条件概率方程,根据极大似然估计,我们可以将其等效于一个似然函数:
L
(
μ
,
σ
∣
ϵ
i
)
=
1
2
π
σ
e
−
(
ϵ
i
−
μ
)
2
2
σ
2
L(\mu, \sigma|\epsilon_i) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon_i-\mu)^2}{2\sigma^2}}
L(μ,σ∣ϵi)=2πσ1e−2σ2(ϵi−μ)2
注意,这里我用了
ϵ
i
\epsilon_i
ϵi来表示每个误差,这个似然函数的意义是找到一组
(
μ
,
σ
)
(\mu, \sigma)
(μ,σ)使得
ϵ
i
\epsilon_i
ϵi的概率最大。(即我们需要找到一个
μ
\mu
μ 每个使
ϵ
i
\epsilon_i
ϵi 无限接近于
μ
\mu
μ 。对于事件:每一次预测值都满足
ϵ
i
\epsilon_i
ϵi 无限接近于
μ
\mu
μ,我们可以用概率连乘表达,这也是为什么似然函数变成了连乘!)
则现在我们需要:
m
a
x
L
(
μ
,
σ
)
=
∏
i
=
1
N
1
2
π
σ
e
−
(
ϵ
i
−
μ
)
2
2
σ
2
max\ L(\mu, \sigma) = \prod_{i=1}^{N}\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon_i - \mu)^2}{2\sigma^2}}
max L(μ,σ)=i=1∏N2πσ1e−2σ2(ϵi−μ)2
对似然函数取对数:
l
o
g
L
(
μ
,
σ
)
=
l
o
g
(
∏
i
=
1
N
1
2
π
σ
e
−
(
ϵ
i
−
μ
)
2
2
σ
2
)
=
Σ
i
=
1
N
l
o
g
(
1
2
π
σ
e
−
(
ϵ
i
−
μ
)
2
2
σ
2
)
=
Σ
i
=
1
N
(
l
o
g
(
1
2
π
σ
)
+
l
o
g
(
e
−
(
ϵ
i
−
μ
)
2
2
σ
2
)
)
=
Σ
i
=
1
N
l
o
g
(
1
2
π
σ
)
−
Σ
i
=
1
N
(
ϵ
i
−
μ
)
2
2
σ
2
=
−
Σ
i
=
1
N
l
o
g
2
π
−
l
o
g
Σ
i
=
1
N
σ
−
Σ
i
=
1
N
(
ϵ
i
−
μ
)
2
2
σ
2
=
−
Σ
i
=
1
N
l
o
g
2
π
−
N
2
l
o
g
σ
2
−
Σ
i
=
1
N
(
ϵ
i
−
μ
)
2
2
σ
2
\begin{aligned} logL(\mu, \sigma) &= log( \prod_{i=1}^{N}\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon_i - \mu)^2}{2\sigma^2}}) \\ &=\Sigma_{i=1}^N log(\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon_i - \mu)^2}{2\sigma^2}}) \\ &= \Sigma_{i=1}^N(log(\frac{1}{\sqrt{2\pi}\sigma}) + log(e^{-\frac{(\epsilon_i - \mu)^2}{2\sigma^2}})) \\ &=\Sigma_{i=1}^Nlog(\frac{1}{\sqrt{2\pi}\sigma}) - \Sigma_{i=1}^N\frac{(\epsilon_i - \mu)^2}{2\sigma^2} \\ &= -\Sigma_{i=1}^Nlog\sqrt{2\pi} - log\Sigma_{i=1}^N\sigma - \frac{\Sigma_{i=1}^N(\epsilon_i - \mu)^2}{2\sigma^2} \\ &= -\Sigma_{i=1}^Nlog\sqrt{2\pi} - \frac{N}{2}log\sigma^2 - \frac{\Sigma_{i=1}^N(\epsilon_i - \mu)^2}{2\sigma^2} \end{aligned}
logL(μ,σ)=log(i=1∏N2πσ1e−2σ2(ϵi−μ)2)=Σi=1Nlog(2πσ1e−2σ2(ϵi−μ)2)=Σi=1N(log(2πσ1)+log(e−2σ2(ϵi−μ)2))=Σi=1Nlog(2πσ1)−Σi=1N2σ2(ϵi−μ)2=−Σi=1Nlog2π−logΣi=1Nσ−2σ2Σi=1N(ϵi−μ)2=−Σi=1Nlog2π−2Nlogσ2−2σ2Σi=1N(ϵi−μ)2
即最终,除去常数项,我们得到的式子是:
l
o
g
L
(
μ
,
σ
2
)
=
−
N
2
l
o
g
σ
2
−
Σ
i
=
1
N
(
ϵ
i
−
μ
)
2
2
σ
2
logL(\mu, \sigma^2)= - \frac{N}{2}log\sigma^2 - \frac{\Sigma_{i=1}^N(\epsilon_i - \mu)^2}{2\sigma^2}
logL(μ,σ2)=−2Nlogσ2−2σ2Σi=1N(ϵi−μ)2
对上式进行求导,(只写出对
σ
2
\sigma^2
σ2的导数),令
σ
2
=
x
\sigma^2 = x
σ2=x,
Σ
i
=
1
N
(
ϵ
i
−
μ
)
2
=
K
\Sigma_{i=1}^N(\epsilon_i - \mu)^2=K
Σi=1N(ϵi−μ)2=K:
f
(
x
)
=
−
N
2
l
o
g
x
−
K
2
x
f
′
(
x
)
=
−
N
2
⋅
1
x
−
(
−
1
)
⋅
K
⋅
1
x
2
=
0
\begin{aligned} f(x) &=-\frac{N}{2}logx-\frac{K}{2x} \\ f'(x) &=-\frac{N}{2}\cdot\frac{1}{x} - (-1)\cdot K\cdot \frac{1}{x^2} = 0 \\ \end{aligned}
f(x)f′(x)=−2Nlogx−2xK=−2N⋅x1−(−1)⋅K⋅x21=0
即:
N
2
x
=
K
2
x
2
x
=
K
N
\begin{aligned} \frac{N}{2x} &=\frac{K}{2x^2} \\ x&=\frac{K}{N} \end{aligned}
2xNx=2x2K=NK
则求导后,我们可知,当:
μ
=
1
N
Σ
i
=
1
N
ϵ
i
,
\mu=\frac{1}{N}\Sigma_{i=1}^N\epsilon_i,
μ=N1Σi=1Nϵi,
σ
2
=
1
N
Σ
i
=
1
N
(
ϵ
i
−
μ
)
2
\sigma^2 = \frac{1}{N}\Sigma_{i=1}^N(\epsilon_i - \mu)^2
σ2=N1Σi=1N(ϵi−μ)2
时,似然函数取最大值。
略看结束!
到此,我们完成了对正态分布的推导,推到最后,发现一个事实:这不就是两个参数的定义吗???
我不是很明白,因此我把它post在这里,但我觉得这个问题其实非常简单!
由于我们假设了
ϵ
\epsilon
ϵ 是符合正态分布的,回到我们的初衷,是预测一条直线,能通过它继续根据未知输入预测输出值。所以我们希望这个原始数据与正态分布越吻合越好,至少满足:
μ
=
1
N
Σ
i
=
1
N
ϵ
i
,
\mu=\frac{1}{N}\Sigma_{i=1}^N\epsilon_i,
μ=N1Σi=1Nϵi,
预测出的直线能代表其均值,更好的结果是(因为我们预测的是误差值!),这个均值最好趋近于0。
在这个假设下,我们同时也想要方差越小越好,这说明数据得真实值与实际值越吻合(离散程度越低!),那么我们将
μ
=
0
\mu=0
μ=0,代入方差的定义式中,得到:
σ
2
=
1
N
Σ
i
=
1
N
ϵ
i
2
\sigma^2 = \frac{1}{N}\Sigma_{i=1}^N\epsilon_i^{\ 2}
σ2=N1Σi=1Nϵi 2
可以通过似然函数或者直接通过方差定义得到结论:
m
a
x
L
(
μ
,
σ
)
→
m
i
n
σ
2
→
m
i
n
1
N
Σ
i
=
1
N
ϵ
i
2
→
m
i
n
1
N
Σ
i
=
1
N
(
y
−
y
^
)
2
\begin{aligned} max\ L(\mu, \sigma) &\rightarrow min\ \sigma^2 \\ &\rightarrow min\ \frac{1}{N}\Sigma_{i=1}^N\epsilon_i^{\ 2} \\ &\rightarrow min\ \frac{1}{N}\Sigma_{i=1}^N(y-\hat y)^{\ 2} \end{aligned}
max L(μ,σ)→min σ2→min N1Σi=1Nϵi 2→min N1Σi=1N(y−y^) 2
2.3 线性回归的优化及梯度计算
在得到了损失函数之后,我们可以计算线性回归的优化过程和梯度。对于单变量的情况,其损失函数十分简单:
L
o
s
s
=
J
(
θ
)
=
(
y
^
−
y
)
2
=
(
θ
0
x
+
θ
1
−
y
)
2
Loss=J(\theta)=(\hat y - y)^2 = (\theta_0x + \theta_1 -y)^2
Loss=J(θ)=(y^−y)2=(θ0x+θ1−y)2
不同于直接求导,对于大量的数据,我们使用梯度下降法进行计算:
J
(
θ
i
)
:
=
J
(
θ
i
)
−
α
∂
J
(
θ
i
)
∂
θ
i
J(\theta_i):=J(\theta_i) - \alpha\frac{\partial J(\theta_i)}{\partial \theta_i}
J(θi):=J(θi)−α∂θi∂J(θi)
其中,
α
\alpha
α 为学习率。通过迭代,我们可以无限将损失函数逼近与0,即通过2.2中损失函数的定义,我们可以获得一条最佳的预测直线。在单变量情况下,我们可以用一个粗略的图进行表达:
![](https://i-blog.csdnimg.cn/blog_migrate/a957be4d5241bc38020a35935e381193.png#pic_center)
L o s s = J ( θ 0 , θ 1 ) = 1 N Σ i = 1 N ( θ 0 x i + θ 1 − y i ) 2 = 1 N Σ i = 1 N ( h θ ( x i ) − y i ) 2 Loss=J(\bm \theta_0, \bm \theta_1) =\frac{1}{N}\Sigma_{i=1}^{N} (\bm \theta_0 x_i + \bm \theta_1 - y_i)^2=\frac{1}{N}\Sigma_{i=1}^{N}(h_\theta( x_i)- y_i)^2 Loss=J(θ0,θ1)=N1Σi=1N(θ0xi+θ1−yi)2=N1Σi=1N(hθ(xi)−yi)2
此时,我们分别对参数向量
θ
0
\bm \theta_0
θ0 和
θ
1
\bm \theta_1
θ1进行求导可得:
θ
0
:
=
θ
0
−
α
2
N
Σ
i
=
1
N
(
h
θ
(
x
i
)
−
y
i
)
⋅
x
i
θ
1
:
=
θ
1
−
α
2
N
Σ
i
=
1
N
(
h
θ
(
x
i
)
−
y
i
)
⋅
1
\begin{aligned} &\bm\theta_0 := \bm \theta_0 - \alpha \frac{2}{N}\Sigma_{i=1}^{N}(h_\theta( x_i)- y_i)\cdot x_i \\ &\bm \theta_1:= \bm \theta_1 - \alpha \frac{2}{N}\Sigma_{i=1}^{N}(h_\theta( x_i)- y_i)\cdot 1 \end{aligned}
θ0:=θ0−αN2Σi=1N(hθ(xi)−yi)⋅xiθ1:=θ1−αN2Σi=1N(hθ(xi)−yi)⋅1进行计算即可,对于多变量情况中的每一组
{
x
,
y
}
\{\bm x, \bm y\}
{x,y},我们都进行上式的迭代运算,即能得到最终结果。这时的梯度下降的示意图为:
![](https://i-blog.csdnimg.cn/blog_migrate/fabf5f3901e268b7c2748e4a4421a2fe.png#pic_center)
到此,我们就可以完成线性回归,拟合出一条恰当的直线了。而梯度下降的算法,由于内容太多,可以重新写一篇文章了,大家可以自己查找。
2.4 逻辑回归的基本假设
说起来,使用逻辑回归对数据的分布是没有要求的,任何数据都可以用逻辑回归进行判断,但这终究还是起源于逻辑回归的形式。其实,逻辑回归适用于符合伯努利分布
B
B
B 形式的数据,毕竟它的功能就是预测事件发生的可能性,事件只可能发生,或者不发生。
然而,对于逻辑回归并不只能用于二分类问题,其在多分类问题也可以进行扩展,这其中就包括了著名的
S
o
f
t
m
a
x
Softmax
Softmax 函数。
2.5 逻辑回归的损失函数
注意到,在选取损失函数的时候,我们更倾向于构建一个方程,能表达计算方法的意义。如,在线性回归中,我们使用MSE是为了贴合线性回归“寻找一条直线,使其到各个样本点的距离最小”的假设。所以在逻辑回归中,我们希望寻找一组参数,使其在Sigmoid函数上的映射,能最接近输入事件发生的概率,即:
m
a
x
P
(
x
∣
θ
)
max \ P(x|\bm{\theta})
max P(x∣θ)这样的思想让我们不由得会联想到线性回归——我们只需要继续做均方差就可以了,那么逻辑回归的损失函数将变成:
J
(
θ
)
=
1
N
Σ
i
(
z
(
x
i
)
−
y
i
)
2
J(\bm{\theta})=\frac{1}{N}\Sigma_i(z(x_i) - y_i)^2
J(θ)=N1Σi(z(xi)−yi)2其中,
z
(
x
i
)
z(x_i)
z(xi)代表了从输入到线性变换再到Sigmoid映射的过程,
y
i
y_i
yi代表了此处结果的真实值(0或1)。然而,理想很饱满,现实很骨感,在这样的情况下,我们最终发现逻辑回归的效果很差,因为我们最终形成的是一个非凸函数,即结果很容易落入极值。一个非常非常粗糙的图如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/4336949a04fe3bd6ef26c2b5c405a665.png#pic_center)
注意,这只是一个示意图,可以理解成一个非凸函数的示意图。但回过头来,如果还是从逻辑回归的定义入手,这个问题就变得简单了很多。
我们知道,逻辑回归的输出目标是一个概率,即
P
(
y
∣
x
,
θ
)
P(y|x, \bm{\theta})
P(y∣x,θ),由于输入
x
\bm{x}
x是已知的,在后式中我们不将
x
\bm{x}
x 写入条件中,我们可以将输出
P
P
P 看作为对于参数的似然函数
L
L
L,则得到:
L
(
θ
∣
y
)
=
P
(
y
∣
θ
)
=
z
(
x
)
,
y
∈
(
0
,
1
)
L(\bm{\theta}|y) = P(y|\bm{\theta})=z(\bm{x}), y \in (0, 1)
L(θ∣y)=P(y∣θ)=z(x),y∈(0,1)在输出已知的情况下,我们可以将整个式子写成:
{
L
(
θ
∣
y
=
1
)
=
z
(
x
)
L
(
θ
∣
y
=
0
)
=
1
−
z
(
x
)
\left\{ \begin{aligned} &\ L(\bm{\theta}|y=1)=z(\bm{x}) \\ &\ L(\bm{\theta}|y=0) = 1 - z(\bm{x}) \end{aligned} \right.
{ L(θ∣y=1)=z(x) L(θ∣y=0)=1−z(x)即:
L
(
θ
)
=
Π
i
=
1
N
(
y
i
z
(
x
i
)
+
(
1
−
y
i
)
(
1
−
z
(
x
i
)
)
)
L(\bm{\theta}) = \Pi_{i=1}^N(y_iz(\bm{x_i})+ (1-y_i)(1-z(\bm{x_i})))
L(θ)=Πi=1N(yiz(xi)+(1−yi)(1−z(xi)))我们对似然函数取对数,简化运算:
l
o
g
L
(
θ
)
=
Σ
i
=
1
N
(
y
i
l
o
g
z
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
z
(
x
i
)
)
)
logL(\bm{\theta})= \Sigma_{i=1}^N(y_ilogz(\bm{x_i})+(1-y_i)log(1-z(\bm{x_i})))
logL(θ)=Σi=1N(yilogz(xi)+(1−yi)log(1−z(xi)))注意到,我们希望模型效果越好时,损失函数越小。所以我们对上式取反并进行归一化,得到逻辑回归的损失函数:
J
(
θ
)
=
−
1
N
l
o
g
L
(
θ
)
=
−
1
N
Σ
i
=
1
N
(
y
i
l
o
g
z
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
z
(
x
i
)
)
)
,
y
i
∈
{
0
,
1
}
J(\bm{\theta})=-\frac{1}{N}logL(\bm{\theta})=-\frac{1}{N}\Sigma_{i=1}^N(y_ilogz(\bm{x_i})+(1-y_i)log(1-z(\bm{x_i}))), y_i\in \{0, 1\}
J(θ)=−N1logL(θ)=−N1Σi=1N(yilogz(xi)+(1−yi)log(1−z(xi))),yi∈{0,1}这就是逻辑回归的损失函数,注意到,这里式子中的两项分别代表了真实函数与假设分布的交叉熵,所以我们也可以称之为二元交叉熵损失函数。对于交叉熵的理解可以参考这篇文章当然,我们的过程是对似然函数取对数,所以它的损失函数也叫对数损失函数。
(这里似然函数使用连乘表达在上文提到过,可以搜索“连乘”)
2.6 逻辑回归的优化及梯度计算
计算逻辑回归的梯度,根据上面线性回归的方式,我们同样使用梯度下降的方式。注意,在逻辑回归中,我们使用到的参数
θ
\bm{\theta}
θ 存在于函数
z
(
x
i
)
z(\bm{x_i})
z(xi) 中,即:
z
(
x
i
)
=
h
(
θ
x
i
)
,
h
(
⋅
)
=
s
i
g
m
o
i
d
;
z(\bm{x_i}) = h(\bm{\theta x_i}), h(\cdot)=sigmoid;
z(xi)=h(θxi),h(⋅)=sigmoid;
则对参数
θ
\bm{\theta}
θ 的梯度更新可以写为:
θ
i
=
θ
i
−
1
−
α
∂
J
(
θ
)
∂
θ
\theta_i=\theta_{i-1} - \alpha\frac{\partial J(\theta)}{\partial\bm{\theta}}
θi=θi−1−α∂θ∂J(θ)
其中
α
\alpha
α 为预先定义的学习率。我们对损失函数进行偏导计算的结果为:
∂
J
(
θ
)
∂
θ
=
−
∂
1
N
Σ
i
=
1
N
(
y
i
l
o
g
z
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
z
(
x
i
)
)
)
∂
θ
=
−
1
N
∂
Σ
i
=
1
N
(
y
i
l
o
g
h
(
θ
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
h
(
θ
x
i
)
)
)
∂
θ
=
−
1
N
Σ
i
=
1
N
(
y
i
l
o
g
h
(
θ
x
i
)
∂
θ
+
(
1
−
y
i
)
l
o
g
(
1
−
h
(
θ
x
i
)
)
∂
θ
)
=
−
1
N
Σ
i
=
1
N
(
y
i
l
o
g
h
(
θ
x
i
)
∂
h
(
θ
x
i
)
∂
h
(
θ
x
i
)
∂
θ
+
(
1
−
y
i
)
l
o
g
(
1
−
h
(
θ
x
i
)
)
∂
h
(
θ
x
i
)
∂
h
(
θ
x
i
)
∂
θ
)
=
−
1
N
Σ
i
=
1
N
(
y
i
1
h
(
θ
x
i
)
∂
h
(
θ
x
i
)
∂
θ
+
(
1
−
y
i
)
−
1
1
−
h
(
θ
x
i
)
∂
h
(
θ
x
i
)
∂
θ
)
=
−
1
N
Σ
i
=
1
N
(
(
y
i
h
(
θ
x
i
)
−
1
−
y
i
1
−
h
(
θ
x
i
)
)
∂
h
(
θ
x
i
)
∂
θ
)
\begin{aligned} \frac{\partial J(\bm{\theta})}{\partial\bm{\theta}}&=-\frac{\partial\frac{1}{N}\Sigma_{i=1}^N(y_ilogz(\bm{x_i})+(1-y_i)log(1-z(\bm{x_i}))) }{\partial\bm{\theta}} \\ &=-\frac{1}{N}\frac{\partial \Sigma_{i=1}^N(y_ilogh(\bm{\theta x_i}) + (1-y_i)log(1-h(\bm{\theta x_i})))}{\partial\bm{\theta}} \\ &=-\frac{1}{N}\Sigma_{i=1}^N(y_i\frac{logh(\bm{\theta x_i})}{\partial \bm{\theta}}+(1-y_i)\frac{log(1-h(\bm{\theta x_i}))}{\partial\bm{\theta}}) \\ &=-\frac{1}{N}\Sigma_{i=1}^N(y_i\frac{logh(\bm{\theta x_i})}{\partial{h(\bm{\theta x_i})}}\frac{\partial h(\bm{\theta x_i})}{\partial \bm{\theta}}+(1-y_i)\frac{log(1-h(\bm{\theta x_i}))}{\partial h(\bm{\theta x_i})}\frac{\partial h(\bm{\theta x_i})}{\partial\bm{\theta}}) \\ &=-\frac{1}{N}\Sigma_{i=1}^N(y_i\frac{1}{{h(\bm{\theta x_i})}}\frac{\partial h(\bm{\theta x_i})}{\partial \bm{\theta}}+(1-y_i)\frac{-1}{1-h(\bm{\theta x_i})}\frac{\partial h(\bm{\theta x_i})}{\partial\bm{\theta}}) \\ &=-\frac{1}{N}\Sigma_{i=1}^N((\frac{y_i}{{h(\bm{\theta x_i})}} - \frac{1-y_i}{1-h(\bm{\theta x_i})})\frac{\partial h(\bm{\theta x_i})}{\partial \bm{\theta}}) \\ \end{aligned}
∂θ∂J(θ)=−∂θ∂N1Σi=1N(yilogz(xi)+(1−yi)log(1−z(xi)))=−N1∂θ∂Σi=1N(yilogh(θxi)+(1−yi)log(1−h(θxi)))=−N1Σi=1N(yi∂θlogh(θxi)+(1−yi)∂θlog(1−h(θxi)))=−N1Σi=1N(yi∂h(θxi)logh(θxi)∂θ∂h(θxi)+(1−yi)∂h(θxi)log(1−h(θxi))∂θ∂h(θxi))=−N1Σi=1N(yih(θxi)1∂θ∂h(θxi)+(1−yi)1−h(θxi)−1∂θ∂h(θxi))=−N1Σi=1N((h(θxi)yi−1−h(θxi)1−yi)∂θ∂h(θxi))
这里要用到Sigmoid一个很重要的性质,Sigmoid的导与Sigmoid函数本身有关:
d
h
(
x
)
d
x
=
d
1
1
+
e
−
x
d
x
=
d
(
1
+
e
−
x
)
−
1
d
(
1
+
e
−
x
)
⋅
d
(
1
+
e
−
x
)
d
e
−
x
⋅
d
e
−
x
d
x
=
−
(
1
+
e
−
x
)
−
2
⋅
1
⋅
(
−
e
−
x
)
=
e
−
x
(
1
−
e
−
x
)
2
=
1
1
+
e
−
x
⋅
e
−
x
1
+
e
−
x
=
1
1
+
e
−
x
⋅
(
1
+
e
−
x
)
−
1
1
+
e
−
x
=
1
1
+
e
−
x
⋅
(
1
−
1
1
+
e
−
x
)
=
h
(
x
)
(
1
−
h
(
x
)
)
\begin{aligned} \frac{dh(x)}{d x}&=\frac{d\frac{1}{1+e^{-x}}}{d x} \\ &=\frac{d(1+e^{-x})^{-1}}{d(1+e^{-x})}\cdot\frac{d(1+e^{-x})}{de^{-x}}\cdot\frac{de^{-x}}{dx} \\ &=-(1+e^{-x})^{-2} \cdot 1 \cdot (-e^{-x}) \\ &=\frac{e^{-x}}{(1-e^{-x})^2} \\ &=\frac{1}{1 + e^{-x}} \cdot\frac{e^{-x}}{1 + e^{-x}} \\ &=\frac{1}{1 + e^{-x}} \cdot\frac{(1 +e^{-x}) - 1 }{1 + e^{-x}} \\ &=\frac{1}{1 + e^{-x}} \cdot(1 - \frac{1}{1 + e^{-x}}) \\ & = h(x)(1-h(x)) \end{aligned}
dxdh(x)=dxd1+e−x1=d(1+e−x)d(1+e−x)−1⋅de−xd(1+e−x)⋅dxde−x=−(1+e−x)−2⋅1⋅(−e−x)=(1−e−x)2e−x=1+e−x1⋅1+e−xe−x=1+e−x1⋅1+e−x(1+e−x)−1=1+e−x1⋅(1−1+e−x1)=h(x)(1−h(x))
在已知以上性质之后,我们可以继续计算梯度:
∂
J
(
θ
)
∂
θ
=
−
1
N
Σ
i
=
1
N
(
(
y
i
h
(
θ
T
x
i
)
−
1
−
y
i
1
−
h
(
θ
T
x
i
)
)
∂
h
(
θ
T
x
i
)
∂
θ
)
=
−
1
N
Σ
i
=
1
N
(
(
y
i
h
(
θ
T
x
i
)
−
1
−
y
i
1
−
h
(
θ
T
x
i
)
)
∂
h
(
θ
T
x
i
)
∂
(
θ
T
x
i
)
⋅
∂
(
θ
T
x
i
)
∂
θ
)
=
−
1
N
Σ
i
=
1
N
(
(
y
i
h
(
θ
T
x
i
)
−
1
−
y
i
1
−
h
(
θ
T
x
i
)
)
⋅
h
(
θ
T
x
i
)
⋅
(
1
−
h
(
θ
T
x
i
)
)
⋅
x
i
)
=
−
1
N
Σ
i
=
1
N
(
(
y
i
⋅
(
1
−
h
(
θ
T
x
i
)
)
−
(
1
−
y
i
)
h
(
θ
T
x
i
)
)
⋅
x
i
)
=
−
1
N
Σ
i
=
1
N
(
(
y
i
−
h
(
θ
T
x
i
)
y
i
−
h
(
θ
T
x
i
)
+
y
i
h
(
θ
T
x
i
)
)
⋅
x
i
)
=
−
1
N
Σ
i
=
1
N
(
(
y
i
−
h
(
θ
T
x
i
)
)
⋅
x
i
)
\begin{aligned} \frac{\partial J(\bm{\theta})}{\partial\bm{\theta}} &=-\frac{1}{N}\Sigma_{i=1}^N((\frac{y_i}{{h(\bm{\theta^T x_i})}} - \frac{1-y_i}{1-h(\bm{\theta^T x_i})})\frac{\partial h(\bm{\theta^T x_i})}{\partial \bm{\theta}}) \\ &=-\frac{1}{N}\Sigma_{i=1}^N((\frac{y_i}{{h(\bm{\theta^T x_i})}} - \frac{1-y_i}{1-h(\bm{\theta^T x_i})})\frac{\partial h(\bm{\theta^T x_i})}{\partial (\bm{\theta^T x_i})}\cdot\frac{\partial(\bm{\theta^T x_i})}{\partial \bm{\theta}}) \\ &=-\frac{1}{N}\Sigma_{i=1}^N((\frac{y_i}{{h(\bm{\theta^T x_i})}} - \frac{1-y_i}{1-h(\bm{\theta^T x_i})}) \cdot h(\bm{\theta^T x_i})\cdot (1 - h(\bm{\theta^T x_i}))\cdot\bm{x_i}) \\ &=-\frac{1}{N}\Sigma_{i=1}^N((y_i\cdot(1 - {h(\bm{\theta^T x_i}))} - (1-y_i)h(\bm{\theta^T x_i})) \cdot \bm{x_i}) \\ &=-\frac{1}{N}\Sigma_{i=1}^N((y_i - {h(\bm{\theta^T x_i})y_i} - h(\bm{\theta^T x_i}) + y_ih(\bm{\theta^T x_i})) \cdot \bm{x_i}) \\ &= -\frac{1}{N}\Sigma_{i=1}^N((y_i - h(\bm{\theta^T x_i}) ) \cdot \bm{x_i}) \\ \end{aligned}
∂θ∂J(θ)=−N1Σi=1N((h(θTxi)yi−1−h(θTxi)1−yi)∂θ∂h(θTxi))=−N1Σi=1N((h(θTxi)yi−1−h(θTxi)1−yi)∂(θTxi)∂h(θTxi)⋅∂θ∂(θTxi))=−N1Σi=1N((h(θTxi)yi−1−h(θTxi)1−yi)⋅h(θTxi)⋅(1−h(θTxi))⋅xi)=−N1Σi=1N((yi⋅(1−h(θTxi))−(1−yi)h(θTxi))⋅xi)=−N1Σi=1N((yi−h(θTxi)yi−h(θTxi)+yih(θTxi))⋅xi)=−N1Σi=1N((yi−h(θTxi))⋅xi)
则我们可以通过上式对逻辑回归的梯度进行更新,看似复杂的公式经过了Sigmoid求导的巧妙变换变得十分简单,进而我们可以快速的更新逻辑回归中的参数。
3. 结语
总结来看:
- 简而言之逻辑回归 = Sigmoid(线性回归)
- 逻辑回归和线性回归的不同之处在于适用的问题不同,一个是回归,一个是分类(计算概率)
- 两者的损失函数也不同,线性回归使用的是MSE,其本质是使真实点到预测直线的方差最小;逻辑回归使用的是MLE,对数损失函数,其本质是使预测概率最接近真实值
以上就是关于逻辑回归和线性回归的所有内容。