分类与逻辑回归
与回归问题相似,但标签数据 y y y不是连续值,而是离散值,我们首先考虑二分类问题,其中的标签数据 y y y的值为0或1。
1 逻辑回归
对于逻辑回归,因为标签数据
y
∈
{
0
,
1
}
y \in \{0,1\}
y∈{0,1},因此对于我们预测的输出值应该位于0到1之间,如果我们直接使用之前的线性方程,无法构建一个良好的模型。为了解决这个问题,我们选择的模型为
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x) = g(\theta^Tx) = \frac{1}{1+e^{-\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函数,其图像如下所示
当
z
→
∞
z\rightarrow \infty
z→∞时,
g
(
z
)
g(z)
g(z)的值趋近于1。通过这样的限制,
h
θ
(
x
)
h_{\theta}(x)
hθ(x)输出的值位于0到1之间。
对于函数
g
(
z
)
g(z)
g(z)的选择,也可以使用从0平滑地增加到1的其他函数,但是有几个原因我们选择sigmoid函数(在之后的广义线性模型会进行讲解),首先先介绍关于sigmoid函数的导数特性。
g
′
(
z
)
=
d
d
z
1
1
+
e
−
z
=
e
z
(
1
+
e
−
z
)
2
=
1
1
+
e
−
z
(
1
−
1
1
+
e
−
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
\begin{aligned} g^{'}(z) &= \frac{d}{dz}\frac{1}{1+e^{-z}} \\ &= \frac{e^z}{(1+e^{-z})^2} \\ &= \frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}}) \\ &= g(z)(1-g(z)) \end{aligned}
g′(z)=dzd1+e−z1=(1+e−z)2ez=1+e−z1(1−1+e−z1)=g(z)(1−g(z))
已经确定了模型
h
θ
(
x
)
h_{\theta}(x)
hθ(x),接下来我们需要对参数
θ
\theta
θ进行求解,之前我们讲解过线性回归在一系列假设下可以使得最小二乘作为最大似然估计,让我们定义分类模型一组概率假设,然后通过最大似然拟合参数。我们假设概率分布如下所示(之前的线性回归是假设为高斯分布)
P
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
P
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
\begin{aligned} P(y=1|x;\theta) &= h_{\theta}(x)\\ P(y=0|x;\theta)&=1-h_{\theta}(x) \end{aligned}
P(y=1∣x;θ)P(y=0∣x;θ)=hθ(x)=1−hθ(x)
我们方便描述,我们可以将其写为
p
(
y
∣
x
;
θ
)
=
(
h
θ
(
x
)
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
p(y|x;\theta)=(h_{\theta}(x))^y(1-h_{\theta}(x))^{1-y}
p(y∣x;θ)=(hθ(x))y(1−hθ(x))1−y
假设有m个独立分布的数据样本,我们将似然函数写为
L
(
θ
)
=
p
(
Y
∣
X
;
θ
)
=
∏
i
=
1
m
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∏
i
=
1
m
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
\begin{aligned} L(\theta) &= p(\mathbf{Y}|\mathbf{X};\theta) \\ &= \prod_{i=1}^mp(y^{(i)}|x^{(i)};\theta)\\ &= \prod_{i=1}^m(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}} \end{aligned}
L(θ)=p(Y∣X;θ)=i=1∏mp(y(i)∣x(i);θ)=i=1∏m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
之后我们同样对似然函数进行对数化,得到
l
(
θ
)
=
l
o
g
L
(
θ
)
=
∑
i
=
1
m
l
o
g
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
=
∑
i
=
1
m
(
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
)
\begin{aligned} l(\theta) &= logL(\theta)\\ &=\sum_{i=1}^mlog(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}\\ &=\sum_{i=1}^m(y^{(i)}log(h_{\theta}(x^{(i)}))+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))) \end{aligned}
l(θ)=logL(θ)=i=1∑mlog(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)=i=1∑m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
对了对上式进行最大化,我们使用梯度上升算法,考虑只有一个数据样本
(
x
,
y
)
(x,y)
(x,y)的情况下,对参数
θ
j
\theta_j
θj进行更新,过程如下所示
∂
∂
θ
j
l
(
θ
)
=
y
1
g
(
θ
T
x
)
∂
∂
θ
j
g
(
θ
T
x
)
−
(
1
−
y
)
1
1
−
g
(
θ
T
x
)
∂
∂
θ
j
g
(
θ
T
x
)
=
y
(
1
−
g
(
θ
T
x
)
)
x
j
−
(
1
−
y
)
g
(
θ
T
x
)
x
j
=
y
x
j
−
y
x
j
g
(
θ
T
x
)
−
x
j
g
(
θ
T
x
)
+
y
x
j
g
(
θ
T
x
)
=
x
j
(
y
−
g
(
θ
T
x
)
)
=
x
j
(
y
−
h
θ
(
x
)
)
\begin{aligned} \frac{\partial}{\partial \theta_j}l(\theta) &= y\frac{1}{g(\theta^Tx)}\frac{\partial}{\partial \theta_j}g(\theta^Tx)-(1-y)\frac{1}{1-g(\theta^Tx)}\frac{\partial}{\partial \theta_j}g(\theta^Tx) \\ &=y(1-g(\theta^Tx))x_j-(1-y)g(\theta^Tx)x_j \\ &=yx_j-yx_jg(\theta^Tx)-x_jg(\theta^Tx)+yx_jg(\theta^Tx)\\ &=x_j(y-g(\theta^Tx)) \\ &=x_j(y-h_{\theta}(x)) \end{aligned}
∂θj∂l(θ)=yg(θTx)1∂θj∂g(θTx)−(1−y)1−g(θTx)1∂θj∂g(θTx)=y(1−g(θTx))xj−(1−y)g(θTx)xj=yxj−yxjg(θTx)−xjg(θTx)+yxjg(θTx)=xj(y−g(θTx))=xj(y−hθ(x))
因此
θ
j
=
θ
j
+
α
x
j
(
i
)
(
y
(
i
)
−
h
θ
(
x
)
)
\theta_j = \theta_j + \alpha x^{(i)}_j(y^{(i)}-h_{\theta}(x))
θj=θj+αxj(i)(y(i)−hθ(x))
2 感知器算法
感知器算法会修改逻辑回归方法,使其“强制”输出值为0或1,因此将g的定义改为阈值函数
g
(
z
)
=
{
1
i
f
z
≥
0
0
i
f
z
<
0
g(z)= \left\{ \begin{aligned} 1 & & if && z \ge 0 \\ 0 && if && z < 0 \end{aligned} \right.
g(z)={10ififz≥0z<0
令
h
θ
(
x
)
=
g
(
θ
T
x
)
h_{\theta}(x) = g(\theta^Tx)
hθ(x)=g(θTx),更新的规则为
θ
j
:
=
θ
j
+
α
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\theta_j := \theta_j+\alpha(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}_j
θj:=θj+α(y(i)−hθ(x(i)))xj(i)。这就是感知器算法的基本内容。
3 另一种最大化 l ( θ ) 的 算 法 l(\theta)的算法 l(θ)的算法
我们使用牛顿法来求取函数的零点,首先考虑对于给定的函数
f
f
f:从一个实数映射到另一个实数,我们需要找到一个实数
θ
\theta
θ使得
f
(
θ
)
=
0
f(\theta)=0
f(θ)=0。
该方法的解释:我们可以认为它是通过在当前
θ
\theta
θ处与
f
f
f相切的线性函数近似函数f,求解该线性函数等于0的位置,然后将下一个
θ
\theta
θ定义为线性函数为零的地方。
其更新过程为
θ
:
=
θ
−
f
(
θ
)
f
′
(
θ
)
\theta:=\theta-\frac{f(\theta)}{f^{'}(\theta)}
θ:=θ−f′(θ)f(θ)
牛顿法可以获取函数
f
(
θ
)
f(\theta)
f(θ)的零点,如果我们需要最大化损失函数
l
(
θ
)
l(\theta)
l(θ),我们可以令其导数为0,因此令
f
(
θ
)
=
l
′
(
θ
)
f(\theta)=l^{'}(\theta)
f(θ)=l′(θ),所以参数的更新定义为
θ
:
=
θ
−
l
′
(
θ
)
l
′
′
(
θ
)
\theta:=\theta-\frac{l^{'}(\theta)}{l^{''}(\theta)}
θ:=θ−l′′(θ)l′(θ)
当我们将牛顿法应用于多维情况时,将其扩展为
θ
:
=
θ
−
H
−
1
∇
θ
l
(
θ
)
\theta:=\theta-\mathbf{H}^{-1}\nabla_{\theta}l(\theta)
θ:=θ−H−1∇θl(θ)
上式中的
H
\mathbf{H}
H为海森矩阵,其定义为
H
i
j
=
∂
2
l
(
θ
)
∂
θ
i
∂
θ
j
\mathbf{H}_{ij}=\frac{\partial^2l(\theta)}{\partial \theta_i \partial \theta_j}
Hij=∂θi∂θj∂2l(θ)
牛顿法可以实现比梯度下降算法更少的迭代次数,然而在每一次迭代中的计算量更大,因为需要计算
n
n
n节方阵的逆,因此牛顿法适用于特征数
n
n
n比较少的情况。