逻辑回归是机器学习中广泛应用的一种分类算法,在介绍逻辑回归之前,我们先从线性回归说起。
线性回归(Linear Regression)
给定数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
,
x
i
∈
R
n
,
y
i
∈
R
D=\{(x^1,y^1),(x^2,y^2),...,(x^m,y^m)\}, x^i \in R^n,y^i \in R
D={(x1,y1),(x2,y2),...,(xm,ym)},xi∈Rn,yi∈R,线性回归的目的是学习一个线性模型,通过输入
x
x
x尽可能精确的预测真实值
y
y
y, 线性回归模型表达式为:
h
(
x
;
θ
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h({\bf x;\theta})=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n
h(x;θ)=θ0+θ1x1+θ2x2+...+θnxn
其中
h
(
x
;
θ
)
h({\bf x;\theta})
h(x;θ)为预测值,如果令
x
0
=
1
x_0=1
x0=1,我们可以写为向量形式:
h
(
x
,
θ
)
=
θ
T
x
h(x,\theta)=\bf \theta^Tx
h(x,θ)=θTx。
线性回归的目标是构造最优的参数
θ
\theta
θ, 使得预测值
h
(
x
;
θ
)
h({\bf x;\theta})
h(x;θ)与真实值
y
y
y之间的差距尽可能小,通过最小二乘法,我们构造损失函数:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
2
J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h({\bf x}^i;\theta)-y^i)^2
J(θ)=2m1i=1∑m(h(xi;θ)−yi)2
要求得
θ
=
a
r
g
 
min
J
(
θ
)
\theta = arg\,\min J(\theta)
θ=argminJ(θ), 可以通过梯度下降法:
θ
j
:
=
θ
j
−
λ
∂
J
(
θ
)
∂
θ
j
=
θ
j
−
λ
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
x
j
i
\theta_{j}:=\theta_j-\lambda \frac{\partial J(\theta)}{\partial \theta_j}=\theta_j-\frac{\lambda}{m}\sum_{i=1}^m(h({\bf x}^i;\theta)-y^i)x_j^i
θj:=θj−λ∂θj∂J(θ)=θj−mλi=1∑m(h(xi;θ)−yi)xji
逻辑回归(Logistic Regression)
线性回归的的值域是
(
−
∞
,
+
∞
)
(-\infty,+\infty)
(−∞,+∞), 而逻辑回归是在线性回归的基础上加上一个非线性映射,映射到值域
(
0
,
1
)
(0,1)
(0,1):
h
(
x
;
θ
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h(x;\theta)=g({\bf \theta^Tx})=\frac{1}{1+e^{-{\bf \theta^Tx}}}
h(x;θ)=g(θTx)=1+e−θTx1
因此逻辑回归是广义的线性回归模型,其中,
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1被称为sigmoid函数, 该函数有一个特性是
g
′
(
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
g^{\prime}(z)=g(z)(1-g(z))
g′(z)=g(z)(1−g(z)) 。
逻辑回归的函数值还可以表示 y = 1 y=1 y=1的概率,即: P ( y = 1 ) = h ( x ; θ ) P(y=1)=h(x;\theta) P(y=1)=h(x;θ),同样 y = 0 y=0 y=0的概率表示为: P ( y = 0 ) = 1 − h ( x ; θ ) P(y=0)=1-h(x;\theta) P(y=0)=1−h(x;θ), 因此逻辑回归常用于解决分类问题,当概率 P > 0.5 P>0.5 P>0.5时, 即 θ T x > 0 {\bf \theta^Tx}>0 θTx>0 时,分为正类,否则分为负类。
下面我们来构造逻辑回归的损失函数,因为逻辑回归是广义的线性回归模型,那么可否与线性回归一样用最小二乘法?我们知道sigmoid函数是非线性的,如果用最小二乘法,那么得到的损失函数 J ( θ ) J(\theta) J(θ)是非凸函数,那么用梯度下降法求解极值时,很容易得到局部最优解,而无法得到全局最优解,因此我们应该从另一个角度构造损失函数。
前面我们讲过
h
(
x
;
θ
)
h(x;\theta)
h(x;θ)是
y
=
1
y=1
y=1的概率,
1
−
h
(
x
;
θ
)
1-h(x;\theta)
1−h(x;θ)为
y
=
0
y=0
y=0的概率,我们可以构造概率函数:
P
(
y
∣
x
;
θ
)
=
h
(
x
;
θ
)
y
(
1
−
h
(
x
;
θ
)
)
1
−
y
P(y|x;\theta)=h(x;\theta)^y(1-h(x;\theta))^{1-y}
P(y∣x;θ)=h(x;θ)y(1−h(x;θ))1−y
我们需要最大化概率函数,若给定数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D=\{(x^1,y^1),(x^2,y^2),...,(x^m,y^m)\}
D={(x1,y1),(x2,y2),...,(xm,ym)}, 则似然函数为:
L
(
θ
)
=
∏
i
=
1
m
h
(
x
i
;
θ
)
y
i
(
1
−
h
(
x
i
;
θ
)
)
1
−
y
i
L(\theta)=\prod_{i=1}^{m}h(x^i;\theta)^{y^i}(1-h(x^i;\theta))^{1-y^i}
L(θ)=i=1∏mh(xi;θ)yi(1−h(xi;θ))1−yi
取对数:
l
(
θ
)
=
L
o
g
L
(
θ
)
=
∑
i
=
1
m
(
y
i
L
o
g
h
(
x
i
;
θ
)
+
(
1
−
y
i
)
L
o
g
(
1
−
h
(
x
i
;
θ
)
)
l(\theta)=LogL(\theta)=\sum_{i=1}^{m}(y^iLogh(x^i;\theta)+(1-y^i)Log(1-h(x^i;\theta))
l(θ)=LogL(θ)=i=1∑m(yiLogh(xi;θ)+(1−yi)Log(1−h(xi;θ))
需要最大化
l
(
θ
)
l(\theta)
l(θ)来得到最优的
θ
\theta
θ, 但是一般的我们求极值问题需要转化为最小化问题,因此我们构造损失函数:
J
(
θ
)
=
−
1
m
l
(
θ
)
J(\theta)=-\frac{1}{m}l(\theta)
J(θ)=−m1l(θ)
因此只需要
min
J
(
θ
)
\min J(\theta)
minJ(θ), 还是通过梯度下降法:
θ
j
:
=
θ
j
−
λ
∂
J
(
θ
)
∂
θ
j
\theta_j:=\theta_j-\lambda \frac{\partial J(\theta)}{\partial \theta_j}
θj:=θj−λ∂θj∂J(θ)
其中,
∂
J
(
θ
)
∂
θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
h
(
x
i
;
θ
)
∂
h
(
x
i
;
θ
)
∂
θ
j
−
1
−
y
i
1
−
h
(
x
i
;
θ
)
∂
h
(
x
i
;
θ
)
∂
θ
j
)
=
−
1
m
∑
i
=
1
m
(
y
i
h
(
x
i
;
θ
)
−
1
−
y
i
1
−
h
(
x
i
;
θ
)
)
∂
h
(
x
i
;
θ
)
∂
θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
g
(
θ
T
x
i
)
−
1
−
y
i
1
−
g
(
θ
T
x
i
)
)
∂
g
(
θ
T
x
i
)
∂
θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
g
(
θ
T
x
i
)
−
1
−
y
i
1
−
g
(
θ
T
x
i
)
)
g
(
θ
T
x
i
)
(
1
−
g
(
θ
T
x
i
)
)
∂
(
θ
T
x
i
)
∂
θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
(
1
−
g
(
θ
T
x
i
)
)
−
(
1
−
y
i
)
g
(
θ
T
x
i
)
)
∂
(
θ
T
x
i
)
∂
θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
−
g
(
θ
T
x
i
)
)
x
j
i
=
1
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
x
j
i
\begin{aligned} \frac{\partial J(\theta)}{\partial \theta_j}&=-\frac{1}{m}\sum_{i=1}^{m}(\frac{y^i}{h(x^i;\theta)}\frac{\partial h(x^i;\theta)}{\partial \theta_j}-\frac{1-y^i}{1-h(x^i;\theta)}\frac{\partial h(x^i;\theta)}{\partial \theta_j})\\ &=-\frac{1}{m}\sum_{i=1}^{m}(\frac{y^i}{h(x^i;\theta)}-\frac{1-y^i}{1-h(x^i;\theta)})\frac{\partial h(x^i;\theta)}{\partial \theta_j}\\ &=-\frac{1}{m}\sum_{i=1}^{m}(\frac{y^i}{g({\theta^Tx^i})}-\frac{1-y^i}{1-g({\theta^Tx^i})})\frac{\partial g({\theta^Tx^i})}{\partial \theta_j}\\ &=-\frac{1}{m}\sum_{i=1}^{m}(\frac{y^i}{g({\theta^Tx^i})}-\frac{1-y^i}{1-g({\theta^Tx^i})})g({\theta^Tx^i})(1-g({\theta^Tx^i}))\frac{\partial (\theta^Tx^i)}{\partial \theta_j}\\ &=-\frac{1}{m}\sum_{i=1}^{m}({y^i}(1-g({\theta^Tx^i))}-(1-y^i){g({\theta^Tx^i})})\frac{\partial (\theta^Tx^i)}{\partial \theta_j}\\ &=-\frac{1}{m}\sum_{i=1}^{m}({y^i}-g({\theta^Tx^i))}x_j^i\\ &=\frac{1}{m}\sum_{i=1}^{m}(h(x^i;\theta)-y^i)x_j^i \end {aligned}
∂θj∂J(θ)=−m1i=1∑m(h(xi;θ)yi∂θj∂h(xi;θ)−1−h(xi;θ)1−yi∂θj∂h(xi;θ))=−m1i=1∑m(h(xi;θ)yi−1−h(xi;θ)1−yi)∂θj∂h(xi;θ)=−m1i=1∑m(g(θTxi)yi−1−g(θTxi)1−yi)∂θj∂g(θTxi)=−m1i=1∑m(g(θTxi)yi−1−g(θTxi)1−yi)g(θTxi)(1−g(θTxi))∂θj∂(θTxi)=−m1i=1∑m(yi(1−g(θTxi))−(1−yi)g(θTxi))∂θj∂(θTxi)=−m1i=1∑m(yi−g(θTxi))xji=m1i=1∑m(h(xi;θ)−yi)xji
因此
θ
\theta
θ的迭代更新为:
θ
j
:
=
θ
j
−
λ
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
x
j
i
\theta_j:=\theta_j-\frac{\lambda}{m}\sum_{i=1}^{m}(h(x^i;\theta)-y^i)x_j^i
θj:=θj−mλi=1∑m(h(xi;θ)−yi)xji
可见与线性回归的迭代更新完全一致。
正则化(regularization)
在讲正则化之前,我们先讲一下过拟合(over fitting)和欠拟合(under fitting)问题。
欠拟合:模型过于简单,不能捕捉到数据特征,无法很好的拟合数据,表现在训练误差和测试误差都很大。
过拟合:模型过于复杂,不仅捕捉到数据的特征,而且还拟合了数据噪音,表现在模型在训练数据上表现的非常好,但是在测试数据表现很糟糕,泛化能力差。
解决欠拟合问题我们需要增加特征维度,将模型做的更加复杂。相反,对于过拟合问题我们需要减少特征,将模型简单化,增强泛化能力。除此之外,我们也可以通过正则化的方法,在不减少特征的情况下,达到抑制过拟合的目的。
因为我们训练模型的结果是得到参数 θ \theta θ, 我们不希望 θ \theta θ的某些分量过大导致对某些特征过于敏感,因此我们在损失函数上加上一个惩罚因子,不同的惩罚因子构成不同的正则化方法。
L2正则
以线性回归为例,加了L2正则项的损失函数变为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
2
+
λ
∣
∣
θ
∣
∣
2
2
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
2
+
λ
∑
j
=
1
n
θ
j
2
\begin{aligned} J(\theta)&=\frac{1}{2m}\sum_{i=1}^m(h({\bf x}^i;\theta)-y^i)^2+\lambda||\theta||_2^2\\ &=\frac{1}{2m}\sum_{i=1}^m(h({\bf x}^i;\theta)-y^i)^2+\lambda\sum_{j=1}^n\theta_j^2 \end{aligned}
J(θ)=2m1i=1∑m(h(xi;θ)−yi)2+λ∣∣θ∣∣22=2m1i=1∑m(h(xi;θ)−yi)2+λj=1∑nθj2
加了L2正则项的线性回归又叫岭回归(ridge regression).
L1正则
加了L1正则项的损失函数变为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
2
+
λ
∣
∣
θ
∣
∣
1
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
2
+
λ
∑
j
=
1
n
∣
θ
j
∣
\begin{aligned} J(\theta)&=\frac{1}{2m}\sum_{i=1}^m(h({\bf x}^i;\theta)-y^i)^2+\lambda||\theta||_1\\ &=\frac{1}{2m}\sum_{i=1}^m(h({\bf x}^i;\theta)-y^i)^2+\lambda\sum_{j=1}^n|\theta_j| \end{aligned}
J(θ)=2m1i=1∑m(h(xi;θ)−yi)2+λ∣∣θ∣∣1=2m1i=1∑m(h(xi;θ)−yi)2+λj=1∑n∣θj∣
加了L1正则项的线性回归又叫 Lasso regression. L1正则希望
θ
\theta
θ的分量尽可能多的为0,因此学出的参数是稀疏的,可以用于特征选择和降维。
Elastic Net
结合了L1和L2正则,损失函数为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
;
θ
)
−
y
i
)
2
+
λ
(
ρ
∑
j
=
1
n
∣
θ
j
∣
+
(
1
−
ρ
)
∑
j
=
1
n
θ
j
2
)
\begin{aligned} J(\theta)&=\frac{1}{2m}\sum_{i=1}^m(h({\bf x}^i;\theta)-y^i)^2+\lambda(\rho\sum_{j=1}^n|\theta_j|+(1-\rho)\sum_{j=1}^n\theta_j^2) \end{aligned}
J(θ)=2m1i=1∑m(h(xi;θ)−yi)2+λ(ρj=1∑n∣θj∣+(1−ρ)j=1∑nθj2)