机器学习基石 Lecture10: Logistic Regression
Logistic Regression Problem
假如现在需要预测一个心脏病是否发作的问题,那么这个问题理想的生成函数
f
f
f是一个只会产生+1和-1结果的函数。这样的问题是二元分类的问题。但是如果需要的是预测一个病人心脏病发作概率的问题,想要得到的目标函数就是一个产生
[
0
,
1
]
[0,1]
[0,1]之间值的概率分布函数,因此这样的问题叫做soft 二元分类:
和二元分类不同的地方是对于目标函数的假设。而且实际中的数据也会存在一定的噪音问题,这也会在假设函数中体现。现在对于一个样本
x
x
x我们依然是采用加权求和的方式,但是最后会加上一个logistic function
θ
(
s
)
\theta(s)
θ(s)来让这个加权和归一到
[
0
,
1
]
[0,1]
[0,1]。这样的假设叫做logistic hypothesis。
而这个
θ
(
s
)
\theta(s)
θ(s)的函数是一个平滑单调的sigmoid函数,因此就得到了最终的假设函数:
Logistic Regression Error
目前学了三种不同的线性模型,前两种的error measure都比较明确,那么这个新的模型假设的error是啥样的呢?
首先考虑一个问题,对于每一个样例
x
x
x而言,已知目标函数
f
(
x
)
=
P
(
+
1
∣
x
)
f(x)=P(+1|x)
f(x)=P(+1∣x)而求不同
y
y
y的概率如下所示:
因此对于整个数据集而言,模型产生整个数据集的概率就是将每一个样例的概率进行相乘(假设每个点独立同分布采样得出):
整个数据集为:
而我们的假设函数
h
(
x
)
h(x)
h(x)目的就是为了逼近目标函数,因此可以直接将其替换就可以得到我们的模型得到这个数据集的概率:
而因为我们假设
h
≈
f
h\approx f
h≈f,因此使用假设函数产生数据集的概率与实际产生的概率近似相等。而由于数据集中已经得到了这样的数据,因此我们假设实际的目标函数
f
f
f产生这样的数据集的概率很大。这样我们的算法就可以将能够最大化数据集产生概率的
h
h
h作为最终的结果
g
g
g:
考虑到目标函数的对称性:
可以将最终的联合概率写为:
由于我们的每个
P
(
x
i
P(x_{i}
P(xi的乘积对于每个假设函数
h
h
h而言都是一样大的,在算法进行选择的过程中这些值没有意义,因此只需要考虑
h
h
h的部分。即:
也就是:
将右边进行取对数然后加个负号,然后将
θ
(
s
)
\theta(s)
θ(s)带入,且加个系数
1
/
N
1/N
1/N,我们的算法目标就变为:
最后的部分就是我们的
E
i
n
(
w
)
E_{in}(w)
Ein(w)。而每一项对应的
e
r
r
(
w
,
x
n
,
y
n
)
=
l
n
(
1
+
e
x
p
(
−
y
n
w
T
x
n
)
)
err(w,x_{n},y_{n})=ln(1+exp(-y_{n}w^{T}x_{n}))
err(w,xn,yn)=ln(1+exp(−ynwTxn))叫做交叉熵误差(cross-entropy error)。
Gradient of Logistic Regression Error
于是就来计算求得最小
E
i
n
(
w
)
E_{in}(w)
Ein(w)时候的系数
w
w
w。由于我们的目标函数
E
i
n
(
w
)
E_{in}(w)
Ein(w)是个连续可微且二次可微的凸函数,因此可以直接求其梯度。其梯度等于0的位置就是我们想要的
w
w
w。因此进行梯度的计算。
先求每一项
w
i
w_{i}
wi的导数,然后写为向量形式即可。
我们得到了梯度之后发现,让梯度直接为0无法求得
w
w
w的一个闭式解:
然后转向开始讲的PLA算法,发现其迭代优化的思路有一定的借鉴意义:
最终可以把这种迭代形式的更新写为如下的形式,两个部分
η
\eta
η和
v
v
v的选择和算法的停止条件可以决定这种迭代算法的形式。而
η
\eta
η表示更新的步长,
v
v
v表示的是更新的方向:
Gradient Descent
当应用到当前最小化
E
i
n
(
w
)
E_{in}(w)
Ein(w)里,这种迭代优化的算法也需要考虑方向
v
v
v和步长
η
\eta
η的问题。更新的方向应该是一个能够使得目标函数减小的方向,步长
η
\eta
η是一个合理的正数。使用贪心方法的话就转化为了另一个问题,那就是找到一个单位长度的方向向量
v
v
v最小化一步更新之后的目标函数
E
i
n
(
w
t
+
η
v
)
E_{in}(w_{t}+\eta v)
Ein(wt+ηv):
这个问题依然是一个难解的非线性问题,但是可以使用一定的近似来将其转化为可解的线性问题。使用的方法是假定
η
\eta
η较小,在当前的系数
w
t
w_{t}
wt的附近对目标函数采用多维的一阶泰勒展开。
于是问题被转化为:
对于给定的
η
\eta
η我们可以知道这个值最小时对应的是当
v
v
v指向梯度的相反方向时。于是我们就得到了这个迭代优化方法的所有流程,这个方法叫做梯度下降法:
而步长
η
\eta
η的选择也会很大的影响学习算法的效率,太大太小都不行。一个理想的方式是使其正比于梯度:
正比于梯度之后就会发现可以与
v
v
v的分母抵消,复用这个符号
η
\eta
η就能得到新的迭代公式:
最终梯度下降方法解决逻辑回归问题的算法流程如下:
这个算法与pocket PLA算法的复杂度相同,每步更新时都要遍历所有的样本一次。