文章目录
第四章 逻辑回归(Logistic Regression)
在分类问题中使用线性回归并不是一种好的解决方法,通常我们使用逻辑回归解决分类问题(Softmax回归也经常被用来解决分类问题)
我们把逻辑回归视为一种分类算法,尽管它的名字里含有回归两字,这只是由于历史原因被赋予这个名字,但是它实际上是一种分类算法
假设表示(hypothesis representation)
逻辑回归模型 h θ ( x ) h_\theta(x) hθ(x),对于分类问题,我们需要输出0或1,所以我们可以进行以下预测:
当 h θ ( x ) > 0.5 h_\theta(x)>0.5 hθ(x)>0.5时,预测 y = 1 y = 1 y=1
当 h θ ( x ) < 0.5 h_\theta(x)<0.5 hθ(x)<0.5时,预测 y = 0 y = 0 y=0
h θ ( x ) = g ( θ T X ) h_\theta(x) = g(\theta^TX) hθ(x)=g(θTX),其中 g g g代表Logistic函数,也叫做Sigmoid函数,为S形函数,公式 g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1,函数图像如下
将
g
(
z
)
g(z)
g(z)带入到
h
θ
(
x
)
h_\theta(x)
hθ(x)中即可得到逻辑回归的假设函数:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
X
h_\theta(x) = \frac{1}{1+e^{-\theta^TX}}
hθ(x)=1+e−θTX1
{ h θ ( x ) < 0.5 y = 0 h θ ( x ) ≥ 0.5 y = 1 \left\{ \begin{aligned} h_\theta(x) & < 0.5 & y = 0 \\ h_\theta(x) & \geq 0.5 & y = 1 \\ \end{aligned} \right. {hθ(x)hθ(x)<0.5≥0.5y=0y=1
h θ ( x ) h_\theta(x) hθ(x)的输出解释**:对于给定的输入变量 x x x根据选择的参数 θ \theta θ,计算输出变量 y = 1 y = 1 y=1的可能性,**即== h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x) = P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ)==
决策界限(decision boundary)
y = 1 ⟹ h θ ( x ) ≥ 0.5 ⟹ z ≥ 0 ⟹ θ T X ≥ 0 y = 0 ⟹ h θ ( x ) ≤ 0.5 ⟹ z ≤ 0 ⟹ θ T X ≤ 0 y = 1 \textcolor{red}{\Longrightarrow} h_\theta(x)\geq0.5 \textcolor{red}{\Longrightarrow} z \geq0 \textcolor{red}{\Longrightarrow} \theta^TX \geq0\\ y = 0 \textcolor{red}{\Longrightarrow} h_\theta(x)\leq0.5 \textcolor{red}{\Longrightarrow} z \leq0 \textcolor{red}{\Longrightarrow} \theta^TX \leq0 y=1⟹hθ(x)≥0.5⟹z≥0⟹θTX≥0y=0⟹hθ(x)≤0.5⟹z≤0⟹θTX≤0
定义 θ T X = 0 \theta^TX = 0 θTX=0为决策边界
我们用训练集来拟合参数 θ \theta θ(拟合方法将在后面的代价函数和梯度下降中介绍),一旦确定了参数 θ \theta θ,也就确定了决策边界
决策边界分为线性决策边界 (Linear decision boundary) 和非线性决策边界 (Non-linear decision boundary)
下图为线性决策边界的例子,令假设函数 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),由训练集拟合得到参数 θ \theta θ为向量[-3,1,1],则当 θ T X ≥ 0 \theta^TX \geq0 θTX≥0时,即 − 3 + x 1 + x 2 ⩾ 0 ⟹ x 1 + x 2 ≥ 3 -3+x_{1}+x_{2} \geqslant 0 \textcolor{red}{\Longrightarrow} x_{1}+x_{2} \geq3 −3+x1+x2⩾0⟹x1+x2≥3时,模型将预测 y = 1 y = 1 y=1。我们可以绘制直线 x 1 + x 2 = 3 x_{1}+x_{2}=3 x1+x2=3,这条线便是我们模型的决策边界,它能将预测为1的区域和预测为0的区域分隔开
下图为非线性决策边界例子,令假设函数 h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 2 + θ 4 x 4 2 ) h_\theta(x) = g(\theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_3^2 + \theta_4x_4^2) hθ(x)=g(θ0+θ1x1+θ2x2+θ3x32+θ4x42),由训练集拟合得到参数 θ \theta θ为向量[-1,0,0,1,1],则当 θ T X ≥ 0 \theta^TX \geq0 θTX≥0时,即 − 1 + x 1 2 + x 2 2 ≥ 0 ⟹ x 1 2 + x 2 2 ≥ 1 -1+x_{1}^2+x_{2}^2 \geq 0 \textcolor{red}{\Longrightarrow} x_{1}^2+x_{2}^2 \geq 1 −1+x12+x22≥0⟹x12+x22≥1时,模型将预测 y = 1 y = 1 y=1。我们可以绘制曲线 x 1 2 + x 2 2 = 3 x_{1}^2+x_{2}^2=3 x12+x22=3,这条线便是我们模型的决策边界,它能将预测为1的区域和预测为0的区域分隔开
可以看出如果有更高阶的多项式,将得到更复杂的决策边界
所以逻辑回归就是寻找决策边界,当我们找到了决策边界,分类问题就迎刃而解了
代价函数(cost function)
若直接将逻辑回归的假设函数代入到代价函数 J J J 中,则得到的将是一个非凸函数,这也导致了当计算这种代价函数的梯度下降算法时,将会收敛到局部最优解。为了避免这种情况,我们将重新构造代价函数,使代价函数是凸函数
我们定义逻辑回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
)
(
i
)
,
y
(
i
)
)
C
o
s
t
(
h
θ
(
x
)
(
i
)
,
y
(
i
)
)
=
{
−
l
o
g
(
h
θ
(
x
)
)
,
i
f
y
=
1
−
l
o
g
(
1
−
h
θ
(
x
)
)
,
i
f
y
=
0
J(\theta) = \frac{1}{m} \sum_{i=1}^m Cost(h_\theta(x)^{(i)},\ y^{(i)})\\ Cost(h_\theta(x)^{(i)},\ y^{(i)}) = \left\{ \begin{aligned} -log(h_\theta(x)),\quad\quad if\ \ y= 1\\ -log(1-h_\theta(x)),\quad\quad if\ \ y= 0 \end{aligned} \right.
J(θ)=m1i=1∑mCost(hθ(x)(i), y(i))Cost(hθ(x)(i), y(i))={−log(hθ(x)),if y=1−log(1−hθ(x)),if y=0
当我们把
y
=
0
y = 0
y=0 和
y
=
1
y=1
y=1 合在一起,可以得到更紧凑的
C
o
s
t
(
h
θ
(
x
)
(
i
)
,
y
(
i
)
)
Cost(h_\theta(x)^{(i)},\ y^{(i)})
Cost(hθ(x)(i), y(i)) 函数:
C
o
s
t
(
h
θ
(
x
)
(
i
)
,
y
(
i
)
)
=
−
y
×
l
o
g
(
h
θ
(
x
)
)
−
(
1
−
y
)
×
l
o
g
(
1
−
h
θ
(
x
)
)
Cost(h_\theta(x)^{(i)},\ y^{(i)})= -y \times log(h_\theta(x)) - (1-y) \times log(1-h_\theta(x))
Cost(hθ(x)(i), y(i))=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
则得到逻辑函数的代价函数:
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
×
l
o
g
(
h
θ
(
x
)
)
+
(
1
−
y
)
×
l
o
g
(
1
−
h
θ
(
x
)
)
]
J(\theta) = -\frac{1}{m} \sum_{i=1}^m \big[y \times log(h_\theta(x)) + (1-y) \times log(1-h_\theta(x))\big]
J(θ)=−m1i=1∑m[y×log(hθ(x))+(1−y)×log(1−hθ(x))]
这个式子是从统计学中的极大似然法得来的,它是统计学中为不同的模型快速寻找参数的方法,大部分人用来拟合逻辑回归模型的代价函数,可以经过数学证明(这里省略),我们构造的这种代价函数
J
(
θ
)
J(\theta)
J(θ) 是一种凸函数,只有唯一的一个全局最优解
最后为了拟合出参数
θ
\theta
θ,需要找到使代价函数
J
(
θ
)
J(\theta)
J(θ)取得最小值的参数
θ
\theta
θ,所以我们应用梯度下降法,将代价函数带入到梯度下降公式(详见第二章)里就得到了在逻辑回归中应用梯度下降的算法
r
e
p
e
a
d
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
θ
0
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
θ
1
=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
1
(
i
)
θ
2
=
θ
2
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
2
(
i
)
.
.
.
θ
n
=
θ
n
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
n
(
i
)
}
repead \ \ until \ \ convergence\{\\\theta_0=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_0\\\theta_1=\theta_1-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_1\\\theta_2=\theta_2-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_2\\...\\\theta_n=\theta_n-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_n\\\}
repead until convergence{θ0=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)θ1=θ1−αm1i=1∑m(hθ(x(i))−y(i))x1(i)θ2=θ2−αm1i=1∑m(hθ(x(i))−y(i))x2(i)...θn=θn−αm1i=1∑m(hθ(x(i))−y(i))xn(i)}
即:
r
e
p
e
a
d
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
θ
j
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
,
j
=
0
,
1
,
2
,
.
.
.
n
}
repead \ \ until \ \ convergence\{\\\theta_j=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j,\ \ \ j = 0,1,2,...n\\\}
repead until convergence{θj=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i), j=0,1,2,...n}
注意这里参数
θ
0
\theta_0
θ0到
θ
n
\theta_n
θn应该是同步更新的,可以用for循环逐个更新这些参数值,也可以使用向量化把n+1个参数同时更新
我们可以发现这个式子看起来和线性回归中梯度下降的式子一样,但实际是不一样的,因为在逻辑函数中我们定义的假设函数发生了改变
{
h
θ
(
x
)
=
θ
T
X
l
i
n
e
a
r
r
e
g
r
e
s
s
i
o
n
h
θ
(
x
)
=
1
1
+
e
−
θ
T
X
l
o
g
i
s
t
i
c
r
e
g
r
e
s
s
i
o
n
\left\{\begin{aligned}h_\theta(x) & = \theta^TX & linear\ \ regression \\ h_\theta(x) & = \frac{1}{1+e^{-\theta^TX}} & logistic\ \ regression \\ \end{aligned}\right.
⎩⎨⎧hθ(x)hθ(x)=θTX=1+e−θTX1linear regressionlogistic regression
注意在逻辑回归中,若特征的范围差距太大,仍然需要使用特征缩放,使得梯度下降收敛更快
高级优化算法(advanced optimization algorithm)
高级优化算法与梯度下降算法相比能极大地提高逻辑回归运行的速度,所以这些算法也更加适合解决大型的机器学习问题,如当有数量庞大的特征时
高级优化算法有:共轭梯度法(conjugate gradient)、BFGS、L-BFGS
-
优点:
- 不需要手动选择学习率,它们有一个智能内循环(线性搜索算法),可以自动尝试不同的学习速率 α \alpha α并自动选择一个好的学习速率,它们甚至可以为每次迭代选择不同的学习速率,那么我们就不需要自己选择。
- 它们的运行速度经常快于梯度下降算法。
-
缺点:过于复杂
多类别分类问题(multi-class classification)
在多类别分类问题中,我们的数据集可能会像下面右图所示,左边的图是我们之前分析过的二元分类问题的数据集
我们用3种不同的符号来代表3个类别,可以使用"一对多(one over all)"方法来进行分类。
现在我们有一个下图所示的训练集,共有3个类别,我们用三角形表示
y
=
1
y=1
y=1 ,方框表示
y
=
2
y=2
y=2,红叉表示
y
=
3
y=3
y=3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。
我们先从用三角形代表的类别1开始,实际上我们可以创建一个新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如下面右图所示,我们要拟合出一个合适的分类器。
为了能实现这样的转变, 我们将多个类别中的一个类标记为正类
(
y
=
1
)
(y=1)
(y=1),然后将其他所有类都标记为负类, 这个模型记作
h
θ
(
1
)
(
x
)
h_\theta^{(1)}(x)
hθ(1)(x)
接着, 类似地第我们选择另一个类标记为正类
(
y
=
2
)
(y= 2)
(y=2),再将其它类都标记为负类, 将这个模型记作
h
θ
(
2
)
(
x
)
h_\theta^{(2)}(x)
hθ(2)(x)。依此类推,最后我们得到一系列的模型简记为:
h
θ
(
i
)
(
x
)
=
P
(
y
=
i
∣
x
:
θ
)
h_\theta^{(i)}(x) = P(y = i|x:\theta)
hθ(i)(x)=P(y=i∣x:θ),其中
i
=
1
,
2
,
⋯
,
k
i = 1,2,\cdots,k
i=1,2,⋯,k,
k
k
k 等于分类别的个数
最后,在我们需要做预测时,我们对每一个输入变量,将所有的分类机都运行一遍,然后选择可能性最高的输出变量。 在分类时,我们要做的就是训练这个逻辑回归分类器 h θ ( i ) ( x ) h_\theta^{(i)}(x) hθ(i)(x),即在我们的三个分类器里面输入 x x x,然后我们选择一个让 h θ ( i ) ( x ) h_\theta^{(i)}(x) hθ(i)(x) 最大的 i i i 即 m a x h θ ( i ) ( x ) max \ h_\theta^{(i)}(x) max hθ(i)(x)
后言
现在我们已经学习了逻辑回归算法,这是一种非常强大,甚至可能是世界上使用最广泛的一种分类算法。