一、Logistic 回归
前面我们学习的是多元线性回归和多项式回归用于房价预测,这些回归类型的算法的预测结果都是连续的值,这里我们开始学习分类相关的问题,分类问题的预测结果是一个离散值。
对于垃圾邮件分类问题,预测的结果为 { 不是垃圾邮件,是垃圾邮件 } \{\text{不是垃圾邮件,是垃圾邮件} \} {不是垃圾邮件,是垃圾邮件},我们可以用符号分别记为 y ∈ { 0 , 1 } y\in\{0,1\} y∈{0,1},其中 0 0 0 表示 反例(Negative Class), 1 1 1 表示 正例(Positive Class)。对于二分类,预测结果只有两种,所以可以记这两个结果为 正例 和 反例,对于多分类,预测的结果为 y ∈ { 1 , 2 , ⋯ } y\in\{1,2,\cdots\} y∈{1,2,⋯}。这里我们首先讨论怎样进行二分类,最后过渡到多分类。
1.1 利用回归进行分类
如下图是对肿瘤进行恶性或良性分类的问题,坐标轴根据肿瘤大小将肿瘤分为两类:
怎样根据以上的数据,学习一个模型来实现对未知数据的分类呢?我们可以利用之前的 线性回归算法,通过学习得到如下所示的假设函数,之后将分类器的阈值设置为
0.5
0.5
0.5 ,即
- 如果 h θ ( x ) ≥ 0.5 h_\theta(x)\geq 0.5 hθ(x)≥0.5,预测值 y = 1 y=1 y=1
- 如果 h θ ( x ) ≤ 0.5 h_\theta(x)\leq 0.5 hθ(x)≤0.5,预测值 y = 0 y=0 y=0
从上面的例子可以看出,我们可以通过设置阈值的方式将回归算法用于分类,但是利用线性回归进行分类会存在一些问题。如下图所示,如果新加入一个右侧的样本:
我们仍然使用线性回归的方式,可能会得到下图所示的假设函数:
从上面的假设函数可以看出,如果我们仍然选择使用
0.5
0.5
0.5 作为阈值,就会造成一部分数据分类错误,所以因为新样本的加入导致产生了一个更坏的假设函数。
所以直接使用线性回归进行分类并不是一个很好的选择,因为拟合得到曲线的好坏通常是不固定的。
使用线性回归进行分类还可能出现的一个问题是,预测得到的结果可能会远大于 1 或 小于 0,这会导致预测结果和真实的标签 { 0 , 1 } \{0,1\} {0,1} 之间的差距过大,从而产生分类误差。
1.2 Logistic 回归
Logistic 回归 是一种分类算法,虽然名字称为回归,但是这确实是一个用来分类的算法,其特点是算法的输出或预测值 0 ≤ h θ ( x ) ≤ 1 0\leq h_\theta(x)\leq 1 0≤hθ(x)≤1,所以可以将其用于预测标签 y ∈ { 0 , 1 } y\in\{0,1\} y∈{0,1} 的情况。
Logistic 回归的假设函数相比于线性回归加入了一个新的函数,即:
h
θ
(
x
)
=
g
(
θ
T
x
)
h_\theta(x) = g(\theta^Tx)
hθ(x)=g(θTx)
其中:
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+e^{-z}}
g(z)=1+e−z1
g
(
z
)
g(z)
g(z) 称为 Sigmoid 函数 或 Logistic 函数,其函数图像如下所示:
可以发现,在
z
z
z 趋于无穷大时候,
g
(
z
)
g(z)
g(z) 趋于 1,在
z
z
z 趋于无穷小时,
g
(
z
)
g(z)
g(z) 趋于 0。因此,通过对线性回归加入
g
(
z
)
g(z)
g(z) 函数,我们就能将预测的结果保证在
[
0
,
1
]
[0,1]
[0,1] 之间。
最终,我们得到 Logistic 回归的假设函数:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}
hθ(x)=1+e−θTx1
这样我们就可以选择一个方法确定其中参数 θ \theta θ 的值,假设函数就能帮我们对新样本做出预测。
对于肿瘤预测的假设函数,我们希望得到的预测结果为 h θ ( x ) = 1 h_\theta(x)=1 hθ(x)=1 表示是肿瘤, h θ ( x ) = 0 h_\theta(x)=0 hθ(x)=0 表示不是肿瘤,但是上面我们说,Sigmoid 函数得到的结果是 [ 0 , 1 ] [0,1] [0,1] 之间的,所以,在 Logistic 回归中,预测得到的结果其实表示的是 概率,如:
- h θ ( x ) = 0.7 h_\theta(x)=0.7 hθ(x)=0.7 表示预测该样本是肿瘤的概率为 0.7 0.7 0.7
所以我们可以将假设函数记为:
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
h_\theta(x)=P(y=1|x;\theta)
hθ(x)=P(y=1∣x;θ)
即,在假设函数中的参数为
θ
\theta
θ,并且样本为
x
x
x 时,预测结果为
1
1
1 的概率,对于二分类来说,只有两种以预测结果,所以有:
P
(
y
=
0
∣
x
;
θ
)
+
P
(
y
=
1
∣
x
;
θ
)
=
1
P(y=0|x;\theta) + P(y=1|x;\theta) = 1
P(y=0∣x;θ)+P(y=1∣x;θ)=1
因此我们也可以根据上式计算出:
P
(
y
=
0
∣
x
;
θ
)
=
1
−
P
(
y
=
1
∣
x
;
θ
)
P(y=0|x;\theta) = 1 - P(y=1|x;\theta)
P(y=0∣x;θ)=1−P(y=1∣x;θ)
1.3 决策边界
有了预测概率后,我们就可以根据预测概率得到预测结果 y = 1 y=1 y=1 还是 y = 0 y=0 y=0 ,即:
- 当 h θ ( x ) ≥ 0.5 h_\theta(x) \geq 0.5 hθ(x)≥0.5 时, y = 1 y=1 y=1
- 当 h θ ( x ) < 0.5 h_\theta(x) \lt 0.5 hθ(x)<0.5 时, y = 0 y=0 y=0
观察 Sigmoid 函数,我们可以发现,当 z < 0 z<0 z<0 时, g ( z ) ≤ 0.5 g(z)\leq 0.5 g(z)≤0.5;当 z > 0 z>0 z>0 时, g ( z ) > 0.5 g(z)\gt 0.5 g(z)>0.5。Logistic 回归就是令 g ( z ) g(z) g(z) 中 z = θ T x z=\theta^Tx z=θTx,也就是对于 Logistic 回归:
- 当 z = θ T x ≥ 0 z=\theta^Tx \geq 0 z=θTx≥0 时, h θ ( x ) ≥ 0.5 h_\theta(x) \geq 0.5 hθ(x)≥0.5 ,记 y = 1 y=1 y=1
- 当 z = θ T x < 0 z=\theta^Tx \lt 0 z=θTx<0 时, h θ ( x ) < 0.5 h_\theta(x) \lt 0.5 hθ(x)<0.5 ,记 y = 0 y=0 y=0
如下图所示的数据集中,如果我们令假设函数如下所示:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
)
h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2)
hθ(x)=g(θ0+θ1x1+θ2x2)
这里我们不介绍假设函数中参数的求解,如果我们现在令三个参数分别为
θ
0
=
−
3
,
θ
1
=
1
,
θ
2
=
1
\theta_0 = -3,\theta_1=1,\theta_2=1
θ0=−3,θ1=1,θ2=1,所以假设函数就是:
h
θ
(
x
)
=
g
(
−
3
+
x
1
+
x
2
)
h_\theta(x)=g(-3+x_1+x_2)
hθ(x)=g(−3+x1+x2)
根据上面的讨论,我们可以得到:
- 当 θ T x = − 3 + x 1 + x 2 ≥ 0 \theta^Tx=-3 + x_1 + x_2 \geq 0 θTx=−3+x1+x2≥0 时,预测结果 y = 1 y=1 y=1
根据
−
3
+
x
1
+
x
2
≥
0
-3 + x_1 + x_2 \geq 0
−3+x1+x2≥0,我们可以得到
x
2
≥
−
x
1
+
3
x_2 \geq - x_1 +3
x2≥−x1+3 这个条件,我们将这条线在图中表示如下:
可以看到,我们根据参数 θ \theta θ 和 h θ ( x ) h_\theta(x) hθ(x) 得到了一个可以将样本分为两类的边界,边界上方的区域就是 y = 1 y=1 y=1 的部分,边界下方的区域就是 y = 0 y=0 y=0 的部分,我们称这个边界为 决策边界,表示进行分类时进行判断的边界。
从上面的描述我们可以看出,如果我们有了假设函数,并且假设函数中的参数都确定了,那么我们就能够确定一个 决策边界 用于分类,决策边界在哪是由 假设函数 和 其中的参数 决定的。
下面是一个更复杂的例子,我们可以选择一个多项式构成的假设函数,函数的形式如下:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
1
2
+
θ
4
x
2
2
)
h_\theta(x)=g(\theta_0 + \theta_1x_1 + \theta_2x_2+\theta_3x_1^2 + \theta_4x_2^2)
hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)
同样,我们直接给出其中参数的值,来观察这样构成的假设函数是怎么实现分类的,我们令
θ
0
=
−
1
,
θ
1
=
0
,
θ
2
=
0
,
θ
3
=
1
,
θ
4
=
1
\theta_0 = -1,\theta_1 = 0,\theta_2=0,\theta_3 = 1,\theta_4 =1
θ0=−1,θ1=0,θ2=0,θ3=1,θ4=1,得到具体的假设函数为:
h
θ
(
x
)
=
g
(
−
1
+
x
1
2
+
x
2
2
)
h_\theta(x)=g(-1 + x_1^2 + x_2^2)
hθ(x)=g(−1+x12+x22)
- 当 − 1 + x 1 2 + x 2 2 ≥ 0 -1 + x_1^2 + x_2^2\geq 0 −1+x12+x22≥0 时,我们可以得到预测结果 y = 1 y=1 y=1
因此我们可以得到条件
x
1
2
+
x
2
2
≥
1
x_1^2 + x_2^2\geq 1
x12+x22≥1,在图中表示如下,我们就得到了对应该数据集的决策边界。
对于更加一般的情况,我们可以用如下形式的假设函数来模拟非常复杂的决策边界,如下图所示:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
1
2
+
θ
4
x
1
2
x
2
+
θ
5
x
1
2
x
2
2
+
⋯
)
h_\theta(x) = g(\theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_1^2 + \theta_4 x_1^2 x_2 + \theta_5 x_1^2 x_2^2 + \cdots )
hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x12x2+θ5x12x22+⋯)
1.4 代价函数
对于一个需要分类的数据集,我们记 有
m
m
m 个样本的数据集为
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
⋯
,
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)})\}
{(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))},其中每个
x
=
[
x
0
x
1
⋮
x
n
]
,
x
0
=
1
,
y
∈
{
0
,
1
}
x = \left[ \begin{matrix} x_0 \\ x_1 \\ \vdots \\ x_n \end{matrix} \right] ,x_0 =1,y\in \{ 0,1\}
x=⎣⎢⎢⎢⎡x0x1⋮xn⎦⎥⎥⎥⎤,x0=1,y∈{0,1} ,假设函数记为:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}
hθ(x)=1+e−θTx1
现在我们有了数据集和假设函数的形式,那么我们怎么确定假设函数中的参数 θ \theta θ 呢?
在线性回归中,我们使用代价函数表示预测值与真实值之间的差距,从而根据代价函数来优化其中的参数
θ
\theta
θ,这里我们首先假设也使用其中的 平方误差代价函数:
J
(
θ
)
=
1
m
∑
i
=
1
m
1
2
[
h
θ
(
x
(
i
)
)
−
y
(
i
)
]
2
J(\theta)=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}\left[h_\theta(x^{(i)}) - y^{(i)}\right]^2
J(θ)=m1i=1∑m21[hθ(x(i))−y(i)]2
我们可以将其中的平方项简写如下:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
1
2
[
h
θ
(
x
)
−
y
]
2
Cost(h_\theta(x),y)=\frac{1}{2}\left[ h_\theta(x) - y\right]^2
Cost(hθ(x),y)=21[hθ(x)−y]2
那么代价函数就可以写为:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)})
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
其中 C o s t ( h θ ( x ) , y ) Cost(h_\theta(x),y) Cost(hθ(x),y) 表示预测值 h θ ( x ) h_\theta(x) hθ(x)与真实值 y y y 之间的差距,不同的衡量方式会使 C o s t ( h θ ( x ) , y ) Cost(h_\theta(x),y) Cost(hθ(x),y) 对应不同的表达式。
如果我们使用平方差代价函数用于求解 Logistic 回归 的假设函数中的参数,因为
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}
hθ(x)=1+e−θTx1 对应的 Sigmoid 函数是一个非线性函数,所以
J
(
θ
)
J(\theta)
J(θ) 会成为
θ
\theta
θ 的非凸函数,凸函数和非凸函数分别如下左右所示,凸函数只有一个全局最小值,但是非凸函数有多个局部最小值,所以对非凸函数使用梯度下降算法并不能保证一定找到那个全局最小值。
所以直接使用线性回归中的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_\theta(x),y)
Cost(hθ(x),y) 代价函数并不能使用梯度下降来找到最小值,那么我们就需要再找一个凸函数,使得我们可以利用梯度下降算法来求解全局最小值。
在 Logistic 回归中,我们可以使用如下的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_\theta(x),y)
Cost(hθ(x),y) 函数:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
log
(
h
θ
(
x
)
)
,
y
=
1
−
log
(
1
−
h
θ
(
x
)
)
,
y
=
0
Cost(h_\theta(x),y)=\begin{cases} -\log (h_\theta(x)), & y=1 \\ -\log(1-h_\theta(x)), & y=0 \end{cases}
Cost(hθ(x),y)={−log(hθ(x)),−log(1−hθ(x)),y=1y=0
上式表示:
- 对于真实的标签值 y = 1 y=1 y=1 时,选择 C o s t ( h θ ( x ) , y ) = − log ( h θ ( x ) ) Cost(h_\theta(x),y) = -\log (h_\theta(x)) Cost(hθ(x),y)=−log(hθ(x))
- 对于真实的标签值 y = 0 y=0 y=0 时,选择 C o s t ( h θ ( x ) , y ) = − log ( 1 − h θ ( x ) ) Cost(h_\theta(x),y) = -\log(1-h_\theta(x)) Cost(hθ(x),y)=−log(1−hθ(x))
为社么要这样选择呢?我们从两个 C o s t ( h θ ( x ) , y ) Cost(h_\theta(x),y) Cost(hθ(x),y) 函数的图形表示来看:
-
对于 y = 1 y=1 y=1 时,由于 h θ ( x ) ∈ [ 0 , 1 ] h_\theta(x)\in [0,1] hθ(x)∈[0,1],再根据 log ( x ) \log(x) log(x) 函数的形状,我们可以得到 C o s t ( h θ ( x ) , y ) = − log ( h θ ( x ) ) Cost(h_\theta(x),y) = -\log (h_\theta(x)) Cost(hθ(x),y)=−log(hθ(x)) 的图像如下:
从图中我们可以看出,当 y = 1 , h θ ( x ) = 1 y=1,h_\theta(x)=1 y=1,hθ(x)=1 时, C o s t = 0 Cost = 0 Cost=0;但是当 y = 1 , h θ ( x ) → 0 y=1,h_\theta(x)\rightarrow 0 y=1,hθ(x)→0 时, C o s t → ∞ Cost \rightarrow \infty Cost→∞。其表示当预测值与真实值相同时,两者的代价值为 0 0 0,但是如果两者不相同,两者的代价值就会比较大,我们就能使用这个比较大的代价值来惩罚学习算法,从而得到更好的参数。 -
对于 y = 0 y=0 y=0 时,由于 h θ ( x ) ∈ [ 0 , 1 ] h_\theta(x)\in [0,1] hθ(x)∈[0,1],再根据 log ( x ) \log(x) log(x) 函数的形状,我们可以得到 C o s t ( h θ ( x ) , y ) = − log ( 1 − h θ ( x ) ) Cost(h_\theta(x),y) = -\log(1-h_\theta(x)) Cost(hθ(x),y)=−log(1−hθ(x)) 的图像如下:
从图中我们可以看出,当 y = 0 , h θ ( x ) = 1 y=0,h_\theta(x)=1 y=0,hθ(x)=1 时, C o s t → ∞ Cost \rightarrow \infty Cost→∞;但是当 y = 0 , h θ ( x ) → 0 y=0,h_\theta(x)\rightarrow 0 y=0,hθ(x)→0 时, C o s t = 0 Cost = 0 Cost=0。这也说明了在真实值与预测值相同时代价值较小,但是不同时代价值比较大。
从上面个两个讨论我们可以知道,对于这个新的代价函数,首先它是凸函数,这表示我们可以使用梯度下降算法来寻找最小值。还有就是我们能够根据预测结果计算出相应的代价值,如果预测值和真实值不同,就会产生比较大的代价值,我们就能使用代价值来优化其中的参数。
1.5 简化代价函数与梯度下降
对于
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)})
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
C o s t ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) , y = 1 − log ( 1 − h θ ( x ) ) , y = 0 Cost(h_\theta(x),y)=\begin{cases} -\log (h_\theta(x)), & y=1 \\ -\log(1-h_\theta(x)), & y=0 \end{cases} Cost(hθ(x),y)={−log(hθ(x)),−log(1−hθ(x)),y=1y=0
构成的代价函数,由于
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_\theta(x),y)
Cost(hθ(x),y) 包含两个不同的函数,但是我们希望将两者合并为一个, 这样更加便于我们使用梯度下降对其求解参数,因此,我们将
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_\theta(x),y)
Cost(hθ(x),y) 写成如下形式:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
y
log
(
h
θ
(
x
)
)
−
(
1
−
y
)
log
(
1
−
h
θ
(
x
)
)
Cost(h_\theta(x),y) = -y\log(h_\theta(x)) - (1-y)\log(1-h_\theta(x))
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
我们将 y = 0 y=0 y=0 和 y = 1 y=1 y=1 分别带入上式,可以发现
- 当 y = 1 y=1 y=1 时, C o s t ( h θ ( x ) , y ) = − log ( h θ ( x ) ) Cost(h_\theta(x),y) = -\log (h_\theta(x)) Cost(hθ(x),y)=−log(hθ(x))
- 当 y = 0 y=0 y=0 时, C o s t ( h θ ( x ) , y ) = − log ( 1 − h θ ( x ) ) Cost(h_\theta(x),y) = -\log(1-h_\theta(x)) Cost(hθ(x),y)=−log(1−hθ(x))
最终,我们可以得到 Logistic 回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
,
y
(
i
)
)
)
=
−
1
m
[
∑
i
=
1
m
[
y
(
i
)
log
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
]
]
\begin{aligned}J(\theta) & = \frac{1}{m} \sum_{i=1}^{m}Cost(h_\theta(x^{(i)}, y^{(i)})) \\ & = -\frac{1}{m} \left[ \sum_{i=1}^{m} [ y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)})\log(1-h_\theta(x^{(i)})] \right] \end{aligned}
J(θ)=m1i=1∑mCost(hθ(x(i),y(i)))=−m1[i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))]]
上式来源于概率论中的极大似然估计方法,使用这个方法我们可以估计其中的参数值,并且该函数是 凸函数,这样我们就可以使用梯度下降算法计算其最小值。
到这里,我们的目的已经明确了,那就是最小化代价函数:
min
J
(
θ
)
\min{J(\theta)}
minJ(θ)
使得假设函数 h θ ( x ) h_\theta(x) hθ(x) 能够预测得出和真实值尽可能相似的结果。
我们仍然可以使用梯度下降算法来更新其中的参数:
do{
θ j = θ j − α ∂ ∂ θ j J ( θ ) \quad \theta_j = \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\theta) θj=θj−α∂θj∂J(θ)
}while(!convergence)
可以看出,我们主要求解的就是
∂
∂
θ
j
\frac{\partial}{\partial\theta_j}
∂θj∂,根据求导公式可以得到 1:
∂
∂
θ
j
J
(
θ
)
=
1
m
∑
i
=
1
m
[
h
θ
(
x
(
i
)
)
−
y
(
i
)
]
x
j
(
i
)
\frac{\partial}{\partial\theta_j}J(\theta) = \frac{1}{m} \sum_{i=1}^m \left[ h_\theta(x^{(i)}) - y^{(i)} \right] x_j^{(i)}
∂θj∂J(θ)=m1i=1∑m[hθ(x(i))−y(i)]xj(i)
因此,我们更新的过程就可以改为为;
do{
θ j = θ j − α 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) , j = 0 , 1 , 2 , ⋯ , n \quad \theta_j = \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^m \left[ h_\theta(x^{(i)}) - y^{(i)} \right] x_j^{(i)} \quad,\quad j = 0,1,2,\cdots,n θj=θj−αm1i=1∑m[hθ(x(i))−y(i)]xj(i),j=0,1,2,⋯,n
}while(!convergence)
对比之前的线性回归,我们可以发现两者更新的表达式都是 θ j = θ j − α 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) \quad \theta_j = \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^m \left[ h_\theta(x^{(i)}) - y^{(i)} \right] x_j^{(i)} θj=θj−αm1i=1∑m[hθ(x(i))−y(i)]xj(i),但是其实两者并不相同,因为线性回归中 h θ ( x ) = θ T x h_\theta(x) = \theta^Tx hθ(x)=θTx,在 Logistic 回归中 h θ ( x ) = 1 1 + e − θ T x h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+e−θTx1,所以虽然两者形式相同,但是假设函数不同,两者也完全不同。
特征缩放应用于 Logistic 回归对于梯度的计算仍然有很大的提升作用,因此如果多个特征的取值范围相差过大,我们可以选择通过特征缩放减少梯度下降的时间。
1.6 高级优化
对于代价函数 J ( θ ) J(\theta) J(θ) 和偏导数 ∂ ∂ θ j J ( θ ) \frac{\partial}{\partial \theta_j}J(\theta) ∂θj∂J(θ) 的求解不只有梯度下降一种方法,更高级的优化方法包括:
- 共轭梯度(Conjugate gradient)
- 拟牛顿法(BFGS)
- L-BFGS
这些算法的主要优点是:
- 不需要手动的选择学习率 α \alpha α,算法自动的选择一个合适的学习率来优化其中的参数
- 相比于梯度下降算法,这些高级的方法可以收敛的更快
但是这些算法过于复杂,我们可以直接使用相应的库来直接调用。
二、Logistic 回归用于多分类
2.1 多分类
多分类就样本对应的真实标签的个数大于2,例如对于天气分类,我们可以将当前的天气分为 晴天
y
=
1
y=1
y=1、阴天
y
=
2
y=2
y=2 、雨天
y
=
3
y=3
y=3、下雪天
y
=
4
y=4
y=4 。
二分类的数据集只分为两种,如下左图,但是多分类的数据集分为多种,如下右图所示,这时我们就不能简单的再使用二分类的方法,我们需要使用特殊的方法找到不同类别样本之间的决策边界。
2.2 多分类的实现
实现多分类的一种方法就是构建多个二分类模型,通过它们的同时使用,实现对多种数据的分类,如下所示是包含三种类别的数据,即 y = 1 , 2 , 3 y=1,2,3 y=1,2,3:
为了能够区分出这三类数据,我们可以将问题转换为三个独立的二分类问题:
-
将所有数据集分为 { c l a s s 1 , c l a s s 2 + c l a s s 3 } \{class1,\ \ class2+class3\} {class1, class2+class3} 构成的两类数据,如下图,我们令 c l a s s 1 class1 class1 为正例,即 y = 1 y=1 y=1,那么我们就能根据这两类数据构建一个假设函数 h θ ( 1 ) ( x ) h_\theta^{(1)}(x) hθ(1)(x),从而确定如下图所示的决策边界,这个假设函数可以判断数据为 c l a s s 1 class1 class1 的概率,因为 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x)=P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ) ,也就是样本属于 c l a s s 1 class1 class1 的概率。
-
同理,我们再将数据集分为 { c l a s s 2 , c l a s s 1 + c l a s s 3 } \{class2,\ \ class1+class3\} {class2, class1+class3},这样我们可以得到用于区分 c l a s s 2 class2 class2 的假设函数 h θ ( 2 ) ( x ) h_\theta^{(2)}(x) hθ(2)(x),计算样本属于 c l a s s 2 class2 class2 的概率。
-
最后将数据集分为 { c l a s s 3 , c l a s s 1 + c l a s s 2 } \{class3,\ \ class1+class2\} {class3, class1+class2},得到用于区分 c l a s s 3 class3 class3 的假设函数 h θ ( 3 ) ( x ) h_\theta^{(3)}(x) hθ(3)(x),计算样本属于 c l a s s 3 class3 class3 的概率。
最终,我们拟合得到三个分类器:
h θ ( i ) ( x ) = P ( y = i ∣ x ; θ ) , ( i = 1 , 2 , 3 ) h_\theta^{(i)}(x) = P(y=i | x;\theta),\quad (i=1,2,3) hθ(i)(x)=P(y=i∣x;θ),(i=1,2,3)
将一个新样本分别使用这三个分类器进行计算,得到三个概率值:
P
(
y
=
1
)
=
h
θ
(
1
)
(
x
)
P
(
y
=
2
)
=
h
θ
(
2
)
(
x
)
P
(
y
=
3
)
=
h
θ
(
3
)
(
x
)
\begin{aligned} P(y=1) & = h_\theta^{(1)}(x) \\ P(y=2) & = h_\theta^{(2)}(x) \\ P(y=3) & = h_\theta^{(3)}(x) \\ \end{aligned}
P(y=1)P(y=2)P(y=3)=hθ(1)(x)=hθ(2)(x)=hθ(3)(x)
我们只需要找到概率值最大的表达式对应的类别就可以将新样本分为对应的类,如
P
(
y
=
1
)
=
0.3
,
P
(
y
=
2
)
=
0.8
,
P
(
y
=
3
)
=
0.7
P(y=1)=0.3,P(y=2)=0.8,P(y=3)=0.7
P(y=1)=0.3,P(y=2)=0.8,P(y=3)=0.7,那么该样本就分为第
2
2
2 类。我们用表达式表示为:
max
i
h
θ
(
i
)
(
x
)
\max_i h_\theta^{(i)}(x)
imaxhθ(i)(x)
其表示 h θ ( i ) ( x ) h_\theta^{(i)}(x) hθ(i)(x) 最大时对应的索引 i i i。