本文内容主要参考了斯坦福大学吴恩达老师的Coursera课程:Deep Learning
Logistic Regression
Logistic Regression是机器学习中很经典的分类器,特别是在二分类问题中,它能够输出0、1事件发生的概率从而达到分类的效果,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等。例如,想探讨胃癌发生的危险因素,可以选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群肯定有不同的体征和生活方式等。这里的因变量就是–是否胃癌,即“是”或“否”,为两分类变量,自变量就可以包括很多了,例如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是离散的。通过logistic回归分析,就可以大致了解到底哪些因素是胃癌的危险因素。国内多数的统计学教材通常称之为逻辑回归,也有的将其翻译为对数几率回归在给出模型的形式之前,我们首先考虑二分类问题,其输出值为
y
∈
{
0
,
1
}
y\in\{0,1\}
y∈{0,1},线性回归模型产生的预测值
z
=
w
T
x
+
b
z=\bm{w}^{\rm{T}}\bm{x}+b
z=wTx+b是实值,于是,我们需要将实值
z
z
z转换为
0
/
1
0/1
0/1值.一种办法就是"单阶跃函数"(unit-step function)
y
=
{
0
,
z
<
0
0.5
,
z
=
0
1
,
z
>
0
y= \begin{cases} 0, &z<0\\ 0.5,&z=0\\ 1,&z>0\\ \end{cases}
y=⎩⎪⎨⎪⎧0,0.5,1,z<0z=0z>0
即若预测值
z
z
z大于零就判为正例,小于零则判为反例,预测值为零则可任意判别,如下图所示
不难看出,单位跃阶函数不连续,所以我们希望找到能在一定程度上近似单位跃阶函数的代替函数.于是有"Sigmoid"函数:
y
=
1
1
+
e
−
z
y=\frac{1}{1+e^{-z}}
y=1+e−z1
它将
z
z
z值转化为一个接近0或1的
y
y
y值,并且其输出值在
z
=
0
z=0
z=0附近变化很陡峭,将
w
T
x
+
b
\bm{w}^{\rm{T}}\bm{x}+b
wTx+b代入上式,得到:
y
=
1
1
+
e
−
(
w
T
x
+
b
)
y=\frac{1}{1+e^{-(\bm{w}^{\rm{T}}\bm{x}+b)}}
y=1+e−(wTx+b)1
损失函数
一般来讲,我们通常使用误差平方和损失函数:
J
(
w
)
=
∑
i
=
1
n
1
2
(
y
^
(
z
i
)
−
y
i
)
2
J(\bm{w})=\sum_{i=1}^n\frac{1}{2}(\hat{y}(z_i)-y_i)^2
J(w)=i=1∑n21(y^(zi)−yi)2
其中
z
i
=
w
x
i
+
b
z_i=wx_i+b
zi=wxi+b,但当代入sigmoid函数时,上述损失函数时是非凸函数,无法使用梯度下降方。因此考虑如下损失函数:
L
(
w
)
=
−
∑
i
=
1
n
(
y
i
log
y
^
+
(
1
−
y
)
log
(
1
−
y
^
)
)
L(w)=-\sum_{i=1}^n(y_i\log\hat{y}+(1-y)\log(1-\hat{y}))
L(w)=−i=1∑n(yilogy^+(1−y)log(1−y^))
为什么要使用这种形式的损失函数呢?首先考虑LR的表达式:
P
(
y
=
1
∣
x
;
w
)
=
1
1
+
e
−
w
T
x
+
b
P
(
y
=
0
∣
x
;
w
)
=
1
−
1
1
+
e
−
w
T
x
+
b
P(y=1|x;w)=\frac{1}{1+e^{-w^{\rm{T}}x+b}}\\ P(y=0|x;w)=1-\frac{1}{1+e^{-w^{\rm{T}}x+b}}
P(y=1∣x;w)=1+e−wTx+b1P(y=0∣x;w)=1−1+e−wTx+b1
上述表达式可以改写为:
P
(
y
∣
x
;
w
)
=
σ
(
z
)
y
∗
(
1
−
σ
(
z
)
)
1
−
y
P(y|x;w)=\sigma(z)^y*(1-\sigma(z))^{1-y}
P(y∣x;w)=σ(z)y∗(1−σ(z))1−y
假定样本独立同分布,则有极大似然估计:
L
(
w
)
=
∏
i
=
1
m
P
(
y
i
∣
x
i
;
w
)
=
∏
i
=
1
m
σ
(
z
)
y
i
∗
(
1
−
σ
(
z
)
)
1
−
y
i
L(w)=\prod_{i=1}^mP(y_i|x_i;w)=\prod_{i=1}^m\sigma(z)^{y_i}*(1-\sigma(z))^{1-y_i}
L(w)=i=1∏mP(yi∣xi;w)=i=1∏mσ(z)yi∗(1−σ(z))1−yi
对数似然为:
l
(
w
)
=
log
L
(
w
)
=
∑
i
=
1
m
(
y
i
∗
log
σ
(
z
i
)
+
(
1
−
y
i
)
∗
log
(
1
−
σ
(
z
i
)
)
)
\begin{aligned} l(w)&=\log L(w)\\ &=\sum_{i=1}^m(y_i*\log\sigma(z_i)+(1-y_i)*\log(1-\sigma(z_i))) \end{aligned}
l(w)=logL(w)=i=1∑m(yi∗logσ(zi)+(1−yi)∗log(1−σ(zi)))
如果令
σ
(
z
i
)
=
y
^
i
\sigma(z_i)=\hat{y}_i
σ(zi)=y^i就得到了之前的损失函数。且它的解是迭代式:
w
j
:
=
w
j
−
α
∗
∂
l
(
w
)
∂
w
=
w
j
−
α
∑
i
=
1
m
[
(
σ
(
z
i
)
−
y
i
)
∗
x
i
]
,
j
=
0
,
1
,
…
,
n
\begin{aligned} w_j:&=w_j-\alpha*\frac{\partial l(w)}{\partial w}\\ &=w_j-\alpha\sum_{i=1}^m[(\sigma(z_i)-y_i)*x_i],j=0,1,\dots,n \end{aligned}
wj:=wj−α∗∂w∂l(w)=wj−αi=1∑m[(σ(zi)−yi)∗xi],j=0,1,…,n
同时补充一个sigmoid函数的求导:
f
(
x
)
=
1
1
+
e
−
x
=
(
1
+
e
−
x
)
−
1
f
′
(
x
)
=
−
(
1
+
e
−
x
)
−
2
e
−
x
∗
−
1
=
(
1
+
e
−
x
)
−
2
e
−
x
=
e
−
x
(
1
+
e
−
x
)
2
=
1
+
e
−
x
−
1
(
1
+
e
−
x
)
2
=
1
+
e
−
x
(
1
+
e
−
x
)
2
−
1
(
1
+
e
−
x
)
2
=
1
1
+
e
−
x
−
1
(
1
+
e
−
x
)
2
=
a
(
1
−
a
)
其
中
a
=
1
1
+
e
−
x
.
\begin{aligned} f(x)&=\frac{1}{1+e^{-x}}=(1+e^{-x})^{-1} \\ f'(x)&=-(1+e^{-x})^{-2}e^{-x}*-1\\ &=(1+e^{-x})^{-2}e^{-x}\\ &=\frac{e^{-x}}{(1+e^{-x})^2}\\ &=\frac{1+e^{-x}-1}{(1+e^{-x})^2}\\ &=\frac{1+e^{-x}}{(1+e^{-x})^2}-\frac{1}{(1+e^{-x})^2}\\ &=\frac{1}{1+e^{-x}}-\frac{1}{(1+e^{-x})^2}\\ &=a(1-a)其中a=\frac{1}{1+e^{-x}} \end{aligned}.
f(x)f′(x)=1+e−x1=(1+e−x)−1=−(1+e−x)−2e−x∗−1=(1+e−x)−2e−x=(1+e−x)2e−x=(1+e−x)21+e−x−1=(1+e−x)21+e−x−(1+e−x)21=1+e−x1−(1+e−x)21=a(1−a)其中a=1+e−x1.
对损失函数的求导有:
f
(
x
)
=
−
(
y
log
(
a
)
+
(
1
−
y
)
log
(
1
−
a
)
)
f
′
(
x
)
=
−
y
a
+
1
−
y
1
−
a
.
\begin{aligned} f(x)&=-(y\log(a)+(1-y)\log(1-a))\\ f'(x)&=-\frac{y}{a}+\frac{1-y}{1-a} \end{aligned}.
f(x)f′(x)=−(ylog(a)+(1−y)log(1−a))=−ay+1−a1−y.