逻辑回归
第 1 章 简介
逻辑回归是一种常用的机器学习方法,用于解决分类问题。虽然名字中带有"回归",但实际上是一种分类算法,主要进行二分类。它的发展历史可以追溯到19世纪末的统计学研究。统计学家Karl Pearson和Ronald Fisher对二项分布进行了深入研究,为逻辑回归的发展奠定了基础。20世纪40年代,美国统计学家John William Tukey和美国经济学家John Neumann Friedman引入了逻辑回归的概念。1958年,经济学家Daniel McFadden提出了条件最大似然估计法,进一步完善了逻辑回归。目前,逻辑回归在统计学和机器学习领域得到了广泛应用。
第 2 章 预备知识
2.1 海涅定理(归结原则)
设 f f f 在 U ( x 0 ; σ ) U(x_0; \sigma) U(x0;σ) 上有定义,极限 lim x → x 0 f ( x ) \displaystyle \lim_{x \to x_0}f(x) x→x0limf(x) 存在的充要条件:对任何含于 U ( x 0 ; σ ) U(x_0; \sigma) U(x0;σ) 且以 x 0 x_0 x0为极限的数列 { x n } \{x_n\} {xn}, lim n → ∞ f ( x n ) \displaystyle \lim_{n \to \infty}f(x_n) n→∞limf(xn)极限存在且相等。
2.2 单调有界准则
在实数系中,有界的单调数列必有极限。
2.3 最大似然估计
最大似然估计(Maximum Likelihood Estimate, MLE)最早是由德国数学家高斯在1821年针对正态分布提出的,但一般将之归功于费希尔,因为费希尔在1922年再次提出了这种想法并证明它的一些性质而使得最大似然法得到了广泛的应用[1]。
定义 1
设总体的概率函数为
p
(
x
;
θ
)
p(x; \theta)
p(x;θ),
θ
∈
Θ
\theta \in \Theta
θ∈Θ,其中
θ
\theta
θ 是一个未知参数或几个未知参数组成的参数向量,
Θ
\Theta
Θ是参数空间,
x
1
,
⋯
,
x
n
x_1, \cdots, x_n
x1,⋯,xn 是来自该总体的样本,将样本的联合概率函数看成
θ
\theta
θ 的函数,用
L
(
θ
;
x
1
,
⋯
,
x
n
)
L(\theta;x_1, \cdots,x_n)
L(θ;x1,⋯,xn) 表示,简记为
L
(
θ
)
L(\theta)
L(θ)。其表达式如下:
L
(
θ
)
=
L
(
θ
;
x
1
,
⋯
,
x
n
)
=
P
(
x
1
;
θ
)
P
(
x
2
;
θ
)
⋯
P
(
x
n
;
θ
)
L(\theta) = L(\theta;x_1, \cdots,x_n)=P(x_1; \theta)P(x_2; \theta) \cdots P(x_n; \theta)
L(θ)=L(θ;x1,⋯,xn)=P(x1;θ)P(x2;θ)⋯P(xn;θ)
L
(
θ
)
L(\theta)
L(θ)称为样本的似然函数。如果某统计量
θ
^
=
θ
^
(
x
1
,
⋯
,
x
n
)
\hat{\theta} = \hat{\theta}(x_1, \cdots, x_n)
θ^=θ^(x1,⋯,xn) 满足:
L
(
θ
^
)
=
max
θ
∈
Θ
L
(
θ
)
L(\hat{\theta}) = \max_{\theta \in \Theta} L(\theta)
L(θ^)=θ∈ΘmaxL(θ)
则称
θ
^
\hat{\theta}
θ^ 是
θ
\theta
θ 的最大似然估计。
第 3 章 理论推导
3.1 随机变量及其分布
定义 2
在样本空间
Ω
\Omega
Ω上定义的实值函数
X
=
X
(
ω
)
X=X(\omega)
X=X(ω),即能够表示随机现象结果的变量,我们称为随机变量,常用大写字母
X
,
Y
,
Z
X, Y, Z
X,Y,Z表示,其取值(随机现象结果)用小写字母
x
,
y
,
z
x, y, z
x,y,z表示。随机变量的取值有有限个,则称为离散随机变量;随机变量的取值有无限个时,称为连续随机变量[1]。
定义表明:随机变量
X
X
X是样本点
ω
\omega
ω的一个函数,这个函数可以是不同的样本点对应不同的实数,也允许多个样本点对应同一个实数。样本点可以是数值型,也可以不是,但随机变量的取值一定是实数。在概率论中,讨论随机变量(任意随机变量)就一定要讨论随机变量的分布,只要知道随机变量的分布就可以知道随机变量取值的概率值[1]。
定义 3
设
X
X
X是随机变量,对于任意实数
x
x
x,称
F
(
x
)
=
P
(
X
≤
x
)
F(x)=P(X\leq x) \notag
F(x)=P(X≤x)
为随机变量
X
X
X的分布函数,且称
X
X
X服从
F
(
x
)
F(x)
F(x), 记为
X
∼
F
(
x
)
X \sim F(x)
X∼F(x)。
定理 1
任意分布函数
F
(
x
)
F(x)
F(x) 都具有如下三条基本性质:
(1) 单调性
F
(
x
)
F(x)
F(x) 是定义在整个实数轴
(
−
∞
,
∞
)
(-\infty, \infty)
(−∞,∞)上是单调非递减,即对于任意
x
1
,
x
2
x_1, x_2
x1,x2, 有
F
(
x
1
)
≤
F
(
x
2
)
F(x_1) \leq F(x_2)
F(x1)≤F(x2).
(2) 有界性 对任意的
x
x
x, 有
0
≤
F
(
x
)
≤
1
0 \leq F(x) \leq 1
0≤F(x)≤1,且
F
(
−
∞
)
=
0
F
(
∞
)
=
1
F(-\infty) = 0 \\ F(\infty) = 1
F(−∞)=0F(∞)=1
(3) 右连续性
F
(
x
)
F(x)
F(x)是
x
x
x 的右连续函数,即对任意的
x
0
x_0
x0 ,有
lim
x
→
x
0
+
F
(
x
)
=
F
(
x
0
)
\lim_{x \rightarrow {x_0^+}} F(x) = F(x_0)
x→x0+limF(x)=F(x0)
(1)证:
对于任意
x
2
>
x
1
x_2 > x_1
x2>x1, 即
(
−
∞
,
x
1
]
⊂
(
−
∞
,
x
2
]
(-\infty, x_1] \subset (-\infty, x_2]
(−∞,x1]⊂(−∞,x2], 根据概率的单调性(当事件B被事件A包含时,说明事件A比事件B更容易发生,那么事件B的概率不应该比A的概率小,即若
B
⊂
A
B \subset A
B⊂A, 则
P
(
A
)
≤
P
(
B
)
P(A) \leq P(B)
P(A)≤P(B))可知,
F
(
x
1
)
=
P
(
X
≤
x
1
)
≤
P
(
X
≤
x
2
)
=
F
(
x
2
)
.
F(x_1) = P(X\leq x_1) \leq P(X\leq x_2)=F(x_2).
F(x1)=P(X≤x1)≤P(X≤x2)=F(x2).
(2)证:
很显然,
lim
x
→
∞
F
(
x
)
\displaystyle \lim_{x \to \infty}F(x)
x→∞limF(x)存在。
令
A
n
=
{
X
≤
n
}
A_n=\{X \leq n\}
An={X≤n}, 则有
A
n
⊂
A
n
+
1
A_n \subset A_{n+1}
An⊂An+1,
∑
i
=
1
+
∞
A
i
=
Ω
\displaystyle \sum_{i=1}^{+\infty} A_i=\Omega
i=1∑+∞Ai=Ω,
lim
x
→
∞
F
(
x
)
=
lim
n
→
∞
F
(
n
)
=
lim
n
→
∞
P
(
A
n
)
=
P
(
∑
i
=
1
+
∞
A
i
)
=
P
(
Ω
)
=
1
\begin{align} \lim_{x \to \infty}F(x) &= \lim_{n \to \infty}F(n) \notag \\ &=\lim_{n \to \infty}P(A_n) \notag \\ &=P(\sum_{i=1}^{+\infty} A_i) \notag \\ &=P(\Omega) \notag \\ &=1 \notag \end{align}
x→∞limF(x)=n→∞limF(n)=n→∞limP(An)=P(i=1∑+∞Ai)=P(Ω)=1
很显然,
lim
x
→
−
∞
F
(
x
)
\displaystyle \lim_{x \to -\infty}F(x)
x→−∞limF(x)存在。
令
B
n
=
{
X
≤
−
n
}
B_n=\{X \leq -n\}
Bn={X≤−n}, 则有
B
n
⊃
B
n
+
1
B_n \supset B_{n+1}
Bn⊃Bn+1,
∏
i
=
1
+
∞
B
i
=
∅
\displaystyle \prod_{i=1}^{+\infty} B_i=\empty
i=1∏+∞Bi=∅,
lim
x
→
−
∞
F
(
x
)
=
lim
n
→
∞
F
(
−
n
)
=
lim
n
→
∞
P
(
B
n
)
=
P
(
∏
i
=
1
+
∞
B
i
)
=
P
(
∅
)
=
0
\begin{align} \lim_{x \to -\infty}F(x) &= \lim_{n \to \infty}F(-n) \notag \\ &=\lim_{n \to \infty}P(B_n) \notag \\ &=P(\prod_{i=1}^{+\infty} B_i) \notag \\ &=P(\empty) \notag \\ &=0 \notag \\ \end{align}
x→−∞limF(x)=n→∞limF(−n)=n→∞limP(Bn)=P(i=1∏+∞Bi)=P(∅)=0
注 1: 随机事件的样本空间为实数轴上的所有实数集合
(
−
∞
,
∞
)
(-\infty, \infty)
(−∞,∞) 。当随机变量
X
→
−
∞
X \to -\infty
X→−∞ , 随机事件包含的样本数目趋向
0
0
0,即事件的样本空间趋向
∅
\empty
∅ 。又因为不可能事件是指在样本空间中不可能发生的事件,它的样本空间大小为
∅
\empty
∅,表示不包含任何样本,所以
P
(
∅
)
P(\empty)
P(∅) 为
0
0
0。同理,当随机变量
X
→
∞
X \to \infty
X→∞ , 事件的样本空间大小趋向
Ω
\Omega
Ω , 所以
P
(
Ω
)
P(\Omega)
P(Ω) 为
1
1
1。
(3)证:
对
∀
x
0
∈
R
\forall x_0 \in R
∀x0∈R, 则
lim
n
→
∞
F
(
x
0
+
1
n
)
=
lim
n
→
∞
P
{
X
≤
x
0
+
1
n
}
=
P
{
X
≤
x
0
}
=
F
(
x
0
)
\lim_{n \to \infty}F(x_0 + \frac{1}{n}) = \lim_{n \to \infty}P\{X \leq x_0 + \frac{1}{n}\}=P\{X \leq x_0\}=F(x_0)
n→∞limF(x0+n1)=n→∞limP{X≤x0+n1}=P{X≤x0}=F(x0)
注 2: 这三个基本性质成为判别某个函数是否能成为分布函数的充要条件,换句话说,只要这三条性质成立,则这个函数就是分布函数。
3.2 逻辑函数及逻辑分布
3.2.1 逻辑函数
比利时数学家Pierre-François Verhulst在19世纪提出了一种人口增长模型,被称为Logistic增长模型。该模型考虑了人口增长的饱和性,与简单的指数增长模型相比,更贴近实际情况。Logistic增长模型基于以下假设:
(1) 人口增长受到有限资源和环境容量的限制;
(2) 人口增长速度随着人口数量的增加而减缓,趋向于一个稳定的饱和值。
Logistic增长模型的数学表达式如下:
d
N
d
t
=
r
N
(
1
−
N
K
)
\frac{dN}{dt} = rN(1 - \frac{N}{K})
dtdN=rN(1−KN)
其中,
N
N
N 表示时间
t
t
t 时刻的人口数量,
d
N
d
t
\frac{dN}{dt}
dtdN表示人口数量随时间的变化率,
r
r
r表示人口增长率系数(正常情况下是一个正数),
K
K
K表示环境容量或饱和人口数量。Logistic增长模型的特点是在人口数量逼近环境容量时,变化率就会减缓,最终达到一个稳定的饱和值。当人口数量接近饱和值时,增长速度接近于零。
Logistic增长模型是对指数增长模型的一种改进,更符合实际情况。它在人口生态学和人口动力学研究中得到了广泛应用,用于描述和预测人口数量随时间的变化趋势。Logistic增长模型的求解过程具体如下:
解:
d
N
d
t
=
r
N
(
1
−
N
K
)
d
t
=
1
r
N
(
1
−
N
K
)
d
N
∫
d
t
=
∫
1
r
N
(
1
−
N
K
)
d
N
r
t
=
K
∫
1
N
(
K
−
N
)
d
N
r
t
=
∫
(
1
N
+
1
K
−
N
)
d
N
r
t
=
∫
1
N
d
N
+
∫
1
K
−
N
d
N
r
t
=
ln
N
−
ln
(
K
−
N
)
−
r
t
=
ln
K
−
N
N
e
−
r
t
=
K
N
−
1
N
=
K
1
+
e
−
r
t
\begin{align} \frac{dN}{dt} &= rN(1 - \frac{N}{K}) \notag \\ dt &= \frac{1}{rN(1 - \frac{N}{K})}dN \notag \\ \int dt &= \int \frac{1}{rN(1 - \frac{N}{K})}dN \notag \\ rt &= K\int \frac{1}{N(K - N)}dN \notag \\ rt &= \int (\frac{1}{N} + \frac{1}{K-N}) dN \notag \\ rt &= \int \frac{1}{N}dN + \int \frac{1}{K-N} dN \notag \\ rt &= \ln N - \ln (K-N) \notag \\ -rt &= \ln \frac{K-N}{N} \notag \\ e^{-rt} &= \frac{K}{N} - 1 \notag \\ N &= \frac{K}{1 + e^{-rt}} \notag \end{align}
dtdNdt∫dtrtrtrtrt−rte−rtN=rN(1−KN)=rN(1−KN)1dN=∫rN(1−KN)1dN=K∫N(K−N)1dN=∫(N1+K−N1)dN=∫N1dN+∫K−N1dN=lnN−ln(K−N)=lnNK−N=NK−1=1+e−rtK
即,
f
(
t
)
=
K
1
+
e
−
r
t
f(t) = \frac{K}{1 + e^{-rt}} \notag
f(t)=1+e−rtK
公式2-11就是我们所称的Logistic函数。函数图像如下:
图2-1 Logistic函数K的敏感性测试
图2-2 Logistic函数r的敏感性测试
从上图2-1~2可以看出,随着K的增大, 逻辑函数的值域变大,反之,变小,函数的上确界为K, 下确界为0。随着r增大, Logistic函数图像变窄,反之,变宽。当K=1时,逻辑函数的值域落在
[
0
,
1
]
[0, 1]
[0,1]之间,可将其作为概率,所以我们称K=1, r=1时的Logistic函数为标准Logistic函数,也称为Sigmoid函数, Sigmoid函数表达式如下:
f
(
t
)
=
1
1
+
e
−
t
f(t) = \frac{1}{1 + e^{-t}} \notag
f(t)=1+e−t1
3.2.2 逻辑分布
逻辑分布是一种连续型概率分布,常用于描述具有S型的随机变量的分布情况。它是逻辑函数在概率统计中的应用。
定义 1 设
X
X
X 是连续型随机变量(数据中的某个特征或属性),
X
X
X 服从逻辑分布是指X以下分布函数和密度函数[2]:
F
(
x
)
=
P
(
X
≤
x
)
=
1
1
+
e
−
(
x
−
μ
)
γ
(2-1)
F(x) = P(X \le x) = \frac{1}{1 + e^{-\frac{(x - \mu)}{\gamma}}} \tag{2-1}
F(x)=P(X≤x)=1+e−γ(x−μ)1(2-1)
f
(
x
)
=
F
′
(
x
)
=
e
−
(
x
−
μ
)
γ
γ
(
1
+
e
−
(
x
−
μ
)
γ
)
2
(2-2)
f(x) = F'(x) = \frac{ e^{-\frac{(x - \mu)}{\gamma}}}{\gamma (1 + e^{-\frac{(x - \mu)}{\gamma}})^2} \tag{2-2}
f(x)=F′(x)=γ(1+e−γ(x−μ))2e−γ(x−μ)(2-2)
其中,
μ
\mu
μ为位置参数,
γ
>
0
\gamma>0
γ>0为形状参数。
下面研究一下位置参数和形状参数对逻辑分布函数的影响,如下图所示:
图2-3 μ对Sigmoid分布的影响
图2-4 γ对Sigmoid分布的影响
从上图可以看出,当 μ < 0 \mu < 0 μ<0时,分布曲线向左平移,否则向右平;当 μ = 0 \mu = 0 μ=0时,分布曲线居于中心。当 γ < 0 \gamma < 0 γ<0时,分布曲线变为下降曲线,随着 γ \gamma γ的增大,分布曲线增加的越平缓。
3.3 逻辑回归模型
3.3.1 点与直线的关系
图2-5 点与直线的关系
从图 2-5 可以看出,直线
L
:
1
2
x
+
y
−
1
=
0
L: \frac{1}{2}x+y-1=0
L:21x+y−1=0 将直角坐标系的点划分为两类点:一类点在直线的上方,记为A点;一类点在直线的下方,记为B点。
直线上方的点满足:
1
2
x
+
y
−
1
=
(
1
2
1
)
(
x
,
y
)
−
1
>
0
(2-3)
\frac{1}{2}x+y-1 = \binom{\frac{1}{2}}{1}(x, y) -1> 0 \tag{2-3}
21x+y−1=(121)(x,y)−1>0(2-3)
直线下方的点满足:
1
2
x
+
y
−
1
=
(
1
2
1
)
(
x
,
y
)
−
1
<
0
\frac{1}{2}x+y-1 = \binom{\frac{1}{2}}{1}(x, y) -1 < 0
21x+y−1=(121)(x,y)−1<0
直线
L
1
:
−
1
2
x
−
y
+
1
=
0
L_1: -\frac{1}{2}x-y+1=0
L1:−21x−y+1=0 将直角坐标系的点划分为两类点:一类点在直线的上方,记为A点;一类点在直线的下方,记为B点。
直线上方的点满足:
−
1
2
x
−
y
+
1
=
(
−
1
2
−
1
)
(
x
,
y
)
+
1
<
0
(2-4)
-\frac{1}{2}x-y+1 = \binom{-\frac{1}{2}}{-1}(x, y) +1 < 0 \tag{2-4}
−21x−y+1=(−1−21)(x,y)+1<0(2-4)
直线下方的点满足:
−
1
2
x
−
y
+
1
=
(
−
1
2
−
1
)
(
x
,
y
)
+
1
>
0
-\frac{1}{2}x-y+1 = \binom{-\frac{1}{2}}{-1}(x, y) +1 > 0
−21x−y+1=(−1−21)(x,y)+1>0
结论 1
从公式 2-3 和 2-4 可以看出,如果点
A
A
A 位于超平面法向量的同一侧,则该点满足:
f
(
x
)
=
w
T
x
+
b
>
0
(2-5)
f(\mathbf{x})=\mathbf{w}^T\mathbf{x} + b > 0 \tag{2-5}
f(x)=wTx+b>0(2-5)
反之,满足:
f
(
x
)
=
w
T
x
+
b
<
0
(2-6)
f(\mathbf{x})=\mathbf{w}^T\mathbf{x} + b < 0 \tag{2-6}
f(x)=wTx+b<0(2-6)
3.3.2 单位阶跃函数
在先前的部分中,探讨了利用线性函数的函数值来判别实例类别(与0进行比较)的方法。此方法虽然简单、易行,但是也存在人工设置类别的不足。显然,单位阶跃函数可以代替人工划分类别,其表达式如下:
g
(
x
)
=
{
0
,
x
<
0
1
,
x
≥
0
(2-7)
g(x) = \begin{cases} 0, & x < 0 \\ 1, & x \geq 0 \end{cases} \tag{2-7}
g(x)={0,1,x<0x≥0(2-7)
从式 2-6 可以看出, 将线性函数和单位阶跃函数结合起来,可以给出实例的类别。然而单位阶跃函数作为分类函数有一个主要的缺点:不连续。
证明:
g
(
x
)
g(x)
g(x) 在
x
=
0
x=0
x=0 处不连续.
证:
根据函数定义可知,
lim
x
→
0
−
g
(
x
)
=
0
≠
lim
x
→
0
+
g
(
x
)
=
1
\lim_{x \to 0^-} g(x) = 0 \neq \lim_{x \to 0^+}g(x) = 1
x→0−limg(x)=0=x→0+limg(x)=1
因此,函数在
x
=
0
x=0
x=0 处不连续。
单位阶跃函数在每个点都有定义,但在
x
=
0
x=0
x=0 处是不连续的。因为在
x
=
0
x=0
x=0 时,左右极限不相等,即从左侧接近
x
=
0
x=0
x=0 的极限为 0,而从右侧接近
x
=
0
x=0
x=0 的极限为 1。这使得单位阶跃函数在
x
=
0
x=0
x=0 处发生跳跃,因此在该点处不连续。这种跳跃间断点导致单位阶跃函数在某些优化算法计算中可能出现问题,特别是在涉及导数计算的优化方法中。因为它处处不可微,在这些优化算法中可能无法精确地找到最优解。
3.3.3 逻辑回归模型
为了克服上述不足,我们需要寻找一个光滑函数来逼近单位阶跃函数。Logistic 分布函数便是一种常用的光滑函数,其函数表达式如式 2-1 所示,为了计算简单,我们令
μ
=
0
\mu=0
μ=0,
γ
=
1
\gamma=1
γ=1,其表达式如下:
F
(
x
)
=
P
(
X
≤
x
)
=
1
1
+
e
−
x
(2-8)
F(x) = P(X \le x) = \frac{1}{1 + e^{-x}} \tag{2-8}
F(x)=P(X≤x)=1+e−x1(2-8)
根据式 2-8 的分布函数性质可知,当
x
<
0
x < 0
x<0 时,
F
(
x
)
=
P
(
X
≤
x
)
<
0.5
F(x) = P(X \le x) < 0.5
F(x)=P(X≤x)<0.5; 当
x
=
0
x = 0
x=0 时,
F
(
x
)
=
P
(
X
≤
x
)
=
0.5
F(x) = P(X \le x) = 0.5
F(x)=P(X≤x)=0.5; 当
x
>
0
x > 0
x>0 时,
F
(
x
)
=
P
(
X
≤
x
)
>
0.5
F(x) = P(X \le x) > 0.5
F(x)=P(X≤x)>0.5。结合式 2-5 和 2-6 可知,
F
(
f
(
x
)
)
=
P
(
X
≤
f
(
x
)
)
=
1
1
+
e
−
f
(
x
)
=
1
1
+
e
−
(
w
T
x
+
b
)
\begin{align} F(f(x)) &= P(X \le f(x)) \notag \\ &= \frac{1}{1 + e^{-f(x)}} \notag \\ &= \frac{1}{1 + e^{-(\mathbf{w}^T\mathbf{x} + b)}} \notag \end{align}
F(f(x))=P(X≤f(x))=1+e−f(x)1=1+e−(wTx+b)1
假设最终结果
Y
∼
b
(
0
,
1
)
Y \sim b(0,1)
Y∼b(0,1),其中
b
(
0
,
1
)
b(0,1)
b(0,1) 称为二点分布,或称0-1分布,或称伯努利分布,其分布列如下:
P
(
Y
=
y
)
=
p
y
⋅
(
1
−
p
)
1
−
y
y
=
0
,
1
P(Y=y) = p^y \cdot (1-p)^{1-y} \quad \quad y=0, 1
P(Y=y)=py⋅(1−p)1−yy=0,1
那么,逻辑回归模型如下:
P
(
Y
=
1
∣
x
)
=
1
1
+
e
−
(
w
T
x
+
b
)
(2-9)
P(Y=1|\mathbf{x}) = \frac{1}{1 + e^{-(\mathbf{w}^T\mathbf{x} + b)}} \tag{2-9}
P(Y=1∣x)=1+e−(wTx+b)1(2-9)
P
(
Y
=
0
∣
x
)
=
1
−
P
(
Y
=
1
∣
x
)
=
1
−
1
1
+
e
−
(
w
T
x
+
b
)
=
e
−
(
w
T
x
+
b
)
1
+
e
−
(
w
T
x
+
b
)
=
1
1
+
e
w
T
x
+
b
(2-10)
\begin{align} P(Y=0|\mathbf{x}) &= 1 - P(Y=1|\mathbf{x}) \notag \\ &= 1 - \frac{1}{1 + e^{-(\mathbf{w}^T\mathbf{x} + b)}} \notag \\ &= \frac{e^{-(\mathbf{w}^T\mathbf{x} + b)}}{1 + e^{-(\mathbf{w}^T\mathbf{x} + b)}} \notag \\ &= \frac{1}{1 + e^{\mathbf{w}^T\mathbf{x} + b}} \notag \end{align} \tag{2-10}
P(Y=0∣x)=1−P(Y=1∣x)=1−1+e−(wTx+b)1=1+e−(wTx+b)e−(wTx+b)=1+ewTx+b1(2-10)
逻辑回归模型python代码如下:
def sigmoid(w, X):
z = np.dot(X, w)
return 1 / (1 + np.exp(-z))
3.4 参数估计
上一节,我们构建了逻辑回归模型2-9 和 2-10。接下来,我们需要训练模型参数
w
,
b
\mathbf{w}, b
w,b。对于给定的训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
n
,
y
n
)
}
T=\{(\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2),\cdots,(\mathbf{x}_n, y_n)\}
T={(x1,y1),(x2,y2),⋯,(xn,yn)},其中,
x
i
∈
R
n
,
y
i
∈
{
0
,
1
}
\mathbf{x}_i \in R^n,y_i \in \{0, 1\}
xi∈Rn,yi∈{0,1},结合概率模型,我们很容易想到用极大似然估计法估计模型参数。极大似然估计的核心思想是寻找一个合适的参数,使得观察数据在给定参数下概率最大(最有可能出现),具体步骤如下:
步骤 1: 构建似然函数
首先,令
P
(
Y
=
1
∣
x
)
=
σ
(
x
)
P(Y=1|\mathbf{x}) = \sigma(\mathbf{x})
P(Y=1∣x)=σ(x),则
P
(
Y
=
0
∣
x
)
=
1
−
σ
(
x
)
P(Y=0|\mathbf{x}) = 1-\sigma(\mathbf{x})
P(Y=0∣x)=1−σ(x)。
其次,对式2-9和2-10进行合并:
P
(
Y
=
y
i
∣
x
i
)
=
σ
(
x
i
)
y
i
(
1
−
σ
(
x
i
)
)
1
−
y
i
y
i
=
0
,
1
P(Y=y_i | \mathbf{x}_i) = \sigma(\mathbf{x}_i)^{y_i}(1-\sigma(\mathbf{x}_i))^{1-y_i} \quad \quad y_i=0, 1
P(Y=yi∣xi)=σ(xi)yi(1−σ(xi))1−yiyi=0,1
然后,假设训练集
T
T
T 中的样本独立同分布,因此似然函数可描述为:
L
(
w
)
=
∏
i
=
1
n
P
(
Y
=
y
i
∣
x
i
)
=
∏
i
=
1
n
σ
(
x
i
)
y
i
(
1
−
σ
(
x
i
)
)
1
−
y
i
(2-11)
\begin{align} L(\mathbf{w}) &= \prod_{i=1}^n P(Y=y_i | \mathbf{x}_i) \notag \\ &= \prod_{i=1}^n \sigma(\mathbf{x}_i)^{y_i}(1-\sigma(\mathbf{x}_i))^{1-y_i} \notag \end{align} \tag{2-11}
L(w)=i=1∏nP(Y=yi∣xi)=i=1∏nσ(xi)yi(1−σ(xi))1−yi(2-11)
最后,通过 2-11 可以看出,多个概率在做乘积的时候可能出现数值下溢。例如,
0.3
×
0.2
×
0.02
=
0.0006
0.3 \times 0.2 \times 0.02 = 0.0006
0.3×0.2×0.02=0.0006。为了解决该问题,我们选择两边取自然对数,公式如下:
ln
(
L
(
w
)
)
=
ln
(
∏
i
=
1
n
P
(
Y
=
y
i
∣
x
i
)
)
=
ln
(
∏
i
=
1
n
σ
(
x
i
)
y
i
(
1
−
σ
(
x
i
)
)
1
−
y
i
)
=
ln
(
∏
i
=
1
n
σ
(
x
i
)
y
i
(
1
−
σ
(
x
i
)
)
1
−
y
i
)
=
∑
i
=
1
n
ln
(
σ
(
x
i
)
y
i
(
1
−
σ
(
x
i
)
)
1
−
y
i
)
=
∑
i
=
1
n
{
y
i
ln
σ
(
x
i
)
+
(
1
−
y
i
)
ln
(
1
−
σ
(
x
i
)
)
}
\begin{align} \ln (L(\mathbf{w})) &= \ln(\prod_{i=1}^n P(Y=y_i | \mathbf{x}_i)) \notag \\ &= \ln(\prod_{i=1}^n \sigma(\mathbf{x}_i)^{y_i}(1-\sigma(\mathbf{x}_i))^{1-y_i}) \notag \\ &= \ln(\prod_{i=1}^n \sigma(\mathbf{x}_i)^{y_i}(1-\sigma(\mathbf{x}_i))^{1-y_i}) \notag \\ &= \sum_{i=1}^n\ln( \sigma(\mathbf{x}_i)^{y_i}(1-\sigma(\mathbf{x}_i))^{1-y_i}) \notag \\ &= \sum_{i=1}^n \{y_i\ln\sigma(\mathbf{x}_i) + (1-y_i)\ln(1-\sigma(\mathbf{x}_i))\} \notag \\ \end{align}
ln(L(w))=ln(i=1∏nP(Y=yi∣xi))=ln(i=1∏nσ(xi)yi(1−σ(xi))1−yi)=ln(i=1∏nσ(xi)yi(1−σ(xi))1−yi)=i=1∑nln(σ(xi)yi(1−σ(xi))1−yi)=i=1∑n{yilnσ(xi)+(1−yi)ln(1−σ(xi))}
为了节省资源,将损失函数改为矩阵形式:
−
L
(
w
,
b
)
=
−
y
′
ln
1
1
+
e
−
X
w
−
(
1
−
y
′
)
ln
1
1
+
e
X
w
=
−
(
y
′
ln
y
^
+
(
1
−
y
′
)
ln
(
1
−
y
^
)
)
\begin{align} -L(w, b) &= -y^{'}\ln{\frac{1}{1 + e^{-Xw}}} - (1 - y^{'})\ln{\frac{1}{1 + e^{Xw}}} \notag \\ &= -(y^{'}\ln{\hat{y}} + (1 - y^{'})\ln{(1-\hat{y})}) \notag \end{align}
−L(w,b)=−y′ln1+e−Xw1−(1−y′)ln1+eXw1=−(y′lny^+(1−y′)ln(1−y^))
其中,
y
′
y^{'}
y′为
y
y
y的转置。下面为损失函数python代码:
def loss(y, y_hat):
epsilon = 1e-15
cross_entropy = -np.mean(y * np.log(y_hat + epsilon) + (1 - y) * np.log(1 - y_hat + epsilon))
return cross_entropy
步骤 2: 梯度下降法更新公式[3]
在最优化中,我们通常将最大优化问题转化为最小优化问题来求解。转换形式如下:
J
(
w
)
=
−
ln
(
L
(
w
)
)
=
−
∑
i
=
1
n
{
y
i
ln
σ
(
x
i
)
+
(
1
−
y
i
)
ln
(
1
−
σ
(
x
i
)
)
}
\begin{align} J(\mathbf{w}) &= -\ln (L(\mathbf{w})) \notag \\ &= -\sum_{i=1}^n \{y_i\ln\sigma(\mathbf{x}_i) + (1-y_i)\ln(1-\sigma(\mathbf{x}_i))\} \notag \end{align}
J(w)=−ln(L(w))=−i=1∑n{yilnσ(xi)+(1−yi)ln(1−σ(xi))}
计算
J
(
w
)
J(\mathbf{w})
J(w) 对
w
\mathbf{w}
w的导数:
∂
J
(
w
)
∂
w
=
−
∂
∑
i
=
1
n
{
y
i
ln
σ
(
x
i
)
+
(
1
−
y
i
)
ln
(
1
−
σ
(
x
i
)
)
}
∂
w
=
−
∑
i
=
1
n
{
y
i
∂
ln
σ
(
x
i
)
∂
w
+
(
1
−
y
i
)
∂
ln
(
1
−
σ
(
x
i
)
)
∂
w
}
=
−
∑
i
=
1
n
{
y
i
1
σ
(
x
i
)
∂
σ
(
x
i
)
∂
z
i
∂
z
i
∂
w
−
(
1
−
y
i
)
1
1
−
σ
(
x
i
)
∂
σ
(
x
i
)
∂
z
i
∂
z
i
∂
w
}
=
−
∑
i
=
1
n
{
y
i
1
σ
(
x
i
)
∂
σ
(
x
i
)
∂
z
i
−
(
1
−
y
i
)
1
1
−
σ
(
x
i
)
∂
σ
(
x
i
)
∂
z
i
}
∂
z
i
∂
w
=
−
∑
i
=
1
n
{
y
i
σ
(
x
i
)
(
1
−
σ
(
x
i
)
)
σ
(
x
i
)
−
(
1
−
y
i
)
σ
(
x
i
)
(
1
−
σ
(
x
i
)
)
1
−
σ
(
x
i
)
}
∂
z
i
∂
w
=
−
∑
i
=
1
n
σ
(
x
i
)
(
1
−
σ
(
x
i
)
)
{
y
i
1
−
σ
(
x
i
)
σ
(
x
i
)
(
1
−
σ
(
x
i
)
)
−
(
1
−
y
i
)
σ
(
x
i
)
σ
(
x
i
)
(
1
−
σ
(
x
i
)
)
}
∂
z
i
∂
w
=
−
∑
i
=
1
n
{
y
i
−
σ
(
x
i
)
}
∂
z
i
∂
w
=
−
∑
i
=
1
n
{
y
i
−
σ
(
x
i
)
}
∂
w
T
x
i
∂
w
=
−
∑
i
=
1
n
{
y
i
−
σ
(
x
i
)
}
x
i
\begin{align} \frac{\partial J(\mathbf{w})}{\partial \mathbf{w}} &= -\frac{\partial \sum_{i=1}^n \{y_i\ln\sigma(\mathbf{x}_i) + (1-y_i)\ln(1-\sigma(\mathbf{x}_i))\}}{\partial \mathbf{w}} \notag \\ &= -\sum_{i=1}^n \{y_i\frac{\partial \ln\sigma(\mathbf{x}_i)}{\partial \mathbf{w}} + (1-y_i)\frac{\partial \ln(1-\sigma(\mathbf{x}_i))}{\partial \mathbf{w}}\} \notag \\ &= -\sum_{i=1}^n \{y_i\frac{1}{\sigma(\mathbf{x}_i)}\frac{\partial \sigma(\mathbf{x}_i)}{\partial \mathbf{z}_i}\frac{\partial \mathbf{z}_i}{\partial \mathbf{w}} - (1-y_i)\frac{1}{1-\sigma(\mathbf{x}_i)}\frac{\partial \sigma(\mathbf{x}_i)}{\partial \mathbf{z}_i}\frac{\partial \mathbf{z}_i}{\partial \mathbf{w}} \} \notag \\ &= -\sum_{i=1}^n \{y_i\frac{1}{\sigma(\mathbf{x}_i)}\frac{\partial \sigma(\mathbf{x}_i)}{\partial \mathbf{z}_i} - (1-y_i)\frac{1}{1-\sigma(\mathbf{x}_i)}\frac{\partial \sigma(\mathbf{x}_i)}{\partial \mathbf{z}_i}\} \frac{\partial \mathbf{z}_i}{\partial \mathbf{w}} \notag \\ &= -\sum_{i=1}^n \{y_i\frac{\sigma(\mathbf{x}_i)(1-\sigma(\mathbf{x}_i))}{\sigma(\mathbf{x}_i)} - (1-y_i)\frac{\sigma(\mathbf{x}_i)(1-\sigma(\mathbf{x}_i))}{1-\sigma(\mathbf{x}_i)}\} \frac{\partial \mathbf{z}_i}{\partial \mathbf{w}} \notag \\ &= -\sum_{i=1}^n \sigma(\mathbf{x}_i)(1-\sigma(\mathbf{x}_i))\{y_i\frac{1-\sigma(\mathbf{x}_i)}{\sigma(\mathbf{x}_i)(1-\sigma(\mathbf{x}_i))} - (1-y_i)\frac{\sigma(\mathbf{x}_i)}{\sigma(\mathbf{x}_i)(1-\sigma(\mathbf{x}_i))}\} \frac{\partial \mathbf{z}_i}{\partial \mathbf{w}} \notag \\ &= -\sum_{i=1}^n \{y_i - \sigma(\mathbf{x}_i)\} \frac{\partial \mathbf{z}_i}{\partial \mathbf{w}} \notag \\ &= -\sum_{i=1}^n \{y_i - \sigma(\mathbf{x}_i)\} \frac{\partial \mathbf{w}^T\mathbf{x}_i}{\partial \mathbf{w}} \notag \\ &= -\sum_{i=1}^n \{y_i - \sigma(\mathbf{x}_i)\} \mathbf{x}_i \notag \\ \end{align}
∂w∂J(w)=−∂w∂∑i=1n{yilnσ(xi)+(1−yi)ln(1−σ(xi))}=−i=1∑n{yi∂w∂lnσ(xi)+(1−yi)∂w∂ln(1−σ(xi))}=−i=1∑n{yiσ(xi)1∂zi∂σ(xi)∂w∂zi−(1−yi)1−σ(xi)1∂zi∂σ(xi)∂w∂zi}=−i=1∑n{yiσ(xi)1∂zi∂σ(xi)−(1−yi)1−σ(xi)1∂zi∂σ(xi)}∂w∂zi=−i=1∑n{yiσ(xi)σ(xi)(1−σ(xi))−(1−yi)1−σ(xi)σ(xi)(1−σ(xi))}∂w∂zi=−i=1∑nσ(xi)(1−σ(xi)){yiσ(xi)(1−σ(xi))1−σ(xi)−(1−yi)σ(xi)(1−σ(xi))σ(xi)}∂w∂zi=−i=1∑n{yi−σ(xi)}∂w∂zi=−i=1∑n{yi−σ(xi)}∂w∂wTxi=−i=1∑n{yi−σ(xi)}xi
假设梯度下降法的学习率为
η
\eta
η,则模型参数更新公式如下:
w
:
=
w
−
η
∇
J
(
w
)
\mathbf{w} := \mathbf{w} - \eta\nabla J(\mathbf{w})
w:=w−η∇J(w)
为了方便计算,将迭代公式更改为矩阵形式:
w
:
=
−
ϵ
X
′
(
y
^
−
y
)
w := - \epsilon X^{'}(\hat{y} - y)
w:=−ϵX′(y^−y)
其中,
ϵ
\epsilon
ϵ 设定为固定的接近为0的正数,
y
^
\hat{y}
y^为预测概率。下面是梯度下降法python代码:
def gradient_descent(X, y, max_iter=200, eta=1e-5, tol=1e-5):
# 初始化
w = np.zeros((X.shape[1], 1))
loss_old = np.inf
# 迭代
for i in range(max_iter):
# 预测
y_hat = sigmoid(w, X)
# 评估
_loss = loss(y, y_hat)
# 打印
print(f"第{i}次迭代,损失为{_loss}")
# 更新权重
w = w - eta * np.dot(X.T, y_hat - y)
# 更新损失
loss_old = _loss
return w
第 4 章 实验与分析
待完善
第 5 章 参考文献
[1] 茆诗松,程依明,濮晓龙. 概率论与数理统计教程[M]. 北京: 高等教育出版社, 2010:61-65.
[2] 李航. 统计学习方法[M]. 北京: 清华大学出版社, 2019:91-109.
[3] 刘硕. Python机器学习算法原理、实现与案例[M]. 北京: 清华大学出版社, 2019:25-26.