1. 描述
在本练习中,您将使用牛顿方法对分类问题实现逻辑回归。
2.数据
首先,下载data2.zip并从zip文件中提取文件。 在本练习中,假设一所高中有一个数据集,该数据集表示40名被大学录取的学生和40名未被录取的学生。 每个
(
x
(
i
)
;
y
(
i
)
)
(x(i) ;y(i))
(x(i);y(i))训练示例包含学生在两个标准化考试中的成绩以及学生是否被录取的标签。
您的任务是建立一个二元分类模型,根据 学生在两门考试中的成绩来估计大学录取的机会。 在训练数据中,
x
x
x数组的第一列代表所有测试1的分数,第二列代表所有测试2的分数,
y
y
y矢量使用" 1“标记被录取的学生和" 0”标记 没被录取的学生。
3.绘制数据
将训练样例的数据加载到程序中,并将
x
0
=
1
x_0 = 1
x0=1截距项添加到
x
x
x矩阵中。
在开始牛顿方法之前,我们将首先使用不同的符号绘制数据来表示两个类。 在Matlab / Octave中,您可以使用find命令分离正类和负类:
% find返回满足指定条件的行的索引
pos = find ( y == 1 ) ; neg = find ( y == 0 ) ;
% Assume the features are in the 2nd and 3rd columns of x
plot ( x ( pos , 2 ) , x ( pos , 3 ) , '+' ) ; hold on
plot ( x ( neg , 2 ) , x ( neg , 3 ) , ' o ' )
你画的应该如下所示
![](https://i-blog.csdnimg.cn/blog_migrate/b8d3dc72149429c7c068169424df20c2.png)
4 .逻辑回归
回想一下逻辑回归,假设函数为
(1)
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
=
P
(
y
=
1
∣
x
;
θ
)
h _ { \theta } ( x ) = g \left( \theta ^ { T } x \right) = \frac { 1 } { 1 + e ^ { - \theta ^ { T } x } } = P ( y = 1 | x ; \theta ) \tag{1}
hθ(x)=g(θTx)=1+e−θTx1=P(y=1∣x;θ)(1)
Matlab/Octave没有sigmoid函数库,所以你必须自己定义它。最简单的方法是通过内联表达式。
g = inline('1.0 ./ (1.0 + exp(-z))');
%Usage: To find the value of sigmoid
%evaluated at 2, call g(2)
给定一个训练集
{
x
(
i
)
}
i
=
1
,
…
,
m
\{x^{(i)}\}_{i=1,\dots,m}
{x(i)}i=1,…,m我们定义一个极大似然函数为
(2)
J
(
θ
)
=
∏
i
=
1
m
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
t
)
J ( \theta ) = \prod _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) \right) ^ { y ^ { ( i ) } } \left( 1 - h _ { \theta } \left( x ^ { ( i ) } \right) \right) ^ { 1 - y ^ { ( t ) } } \tag{2}
J(θ)=i=1∏m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(t)(2)
为了便于计算,我们将下面的对数函数最大化
(3)
L
(
θ
)
=
1
m
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
L ( \theta ) = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left[ y ^ { ( i ) } \log \left( h _ { \theta } \left( x ^ { ( i ) } \right) \right) + \left( 1 - y ^ { ( i ) } \right) \log \left( 1 - h _ { \theta } \left( x ^ { ( i ) } \right) \right) \right] \tag{3}
L(θ)=m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))](3)
记住,最大化(3)等于最小化它的负数,然后我们的问题变成了
(4)
min
θ
L
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
\min _ { \theta } L ( \theta ) = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left[ - y ^ { ( i ) } \log \left( h _ { \theta } \left( x ^ { ( i ) } \right) \right) - \left( 1 - y ^ { ( i ) } \right) \log \left( 1 - h _ { \theta } \left( x ^ { ( i ) } \right) \right) \right] \tag{4}
θminL(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))](4)
其中
∇
θ
L
\nabla_\theta L
∇θL是
L
L
L的梯度,其定义如下
(5)
∇
θ
L
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
(
i
)
\nabla _ { \theta } L = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) x ^ { ( i ) } \tag{5}
∇θL=m1i=1∑m(hθ(x(i))−y(i))x(i)(5)
上述目标函数最小化的一种方法是梯度下降算法,我们根据以下规则更新迭代
θ
\theta
θ
(6)
θ
←
θ
−
α
∇
θ
L
(
θ
)
\theta \leftarrow \theta - \alpha \nabla _ { \theta } L ( \theta ) \tag{6}
θ←θ−α∇θL(θ)(6)
直到连续迭代的目标函数之间的差值小于(或等于)某个阈值,即
(7)
∣
L
+
(
θ
)
−
L
(
θ
)
∣
≤
ϵ
\left| L ^ { + } ( \theta ) - L ( \theta ) \right| \leq \epsilon \tag{7}
∣∣L+(θ)−L(θ)∣∣≤ϵ(7)
使用初始化
θ
=
0
\theta = 0
θ=0的梯度下降算法尝试解决逻辑回归的问题,并回答下列问题。
- 假设 ϵ = 1 0 − 6 \epsilon = 10 ^ { - 6 } ϵ=10−6。实现收很慢敛需要多少次迭代?注意,梯度下降算法收敛速度,可能需要很长时间才能达到最小值。
- 收敛后得到的 θ \theta θ值是多少?
- 计算每次迭代过程中的 L ( θ ) L(\theta) L(θ)和说明 L ( θ ) L(\theta) L(θ)在梯度下降算法中如何减少。
- 收敛之后,使用
θ
\theta
θ的值找出分类问题的决策边界。决策边界定义为其中的直线
P ( y = 1 ∣ x ; θ ) = g ( θ T x ) = 0.5 P(y=1|x;\theta) = g(\theta^Tx) = 0.5 P(y=1∣x;θ)=g(θTx)=0.5
这对应于
θ T x = 0 \theta^Tx = 0 θTx=0
绘制边界相当于绘制 θ T x = 0 \theta^Tx = 0 θTx=0。当你完成时,你绘制应该如下图所示。注意,在不同的参数设置下,图可能略有不同。
![](https://img.catqu.com/images/2019/01/25/d9b105c2328174c614021e44a89670ae.png)
- 测试1的成绩为20分和测试2为80分的学生不被录取的概率是多少?
5. 牛顿方法
我们的目标是使用牛顿方法去最小化这个函数。回想一下牛顿方法的更新规则是
θ
(
t
+
1
)
=
θ
(
t
)
−
H
−
1
∇
θ
L
\theta ^ { ( t + 1 ) } = \theta ^ { ( t ) } - H ^ { - 1 } \nabla _ { \theta } L
θ(t+1)=θ(t)−H−1∇θL
在逻辑回归中,海森矩阵是
(8)
H
=
1
m
∑
i
=
1
m
[
h
θ
(
x
(
i
)
)
(
1
−
h
θ
(
x
(
i
)
)
)
x
(
i
)
(
x
(
i
)
)
T
]
H = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left[ h _ { \theta } \left( x ^ { ( i ) } \right) \left( 1 - h _ { \theta } \left( x ^ { ( i ) } \right) \right) x ^ { ( i ) } \left( x ^ { ( i ) } \right) ^ { T } \right] \tag{8}
H=m1i=1∑m[hθ(x(i))(1−hθ(x(i)))x(i)(x(i))T](8)
注意,上面给出的公式是向量化的版本。具体来说,这意味着
x
(
i
)
∈
R
n
+
1
,
x
(
i
)
(
x
(
i
)
)
T
∈
R
(
n
+
1
)
×
(
n
+
1
)
x^{(i)} \in R^{n+1}, x^{(i)}(x^{(i)})^T \in R^{(n+1) \times (n+1)}
x(i)∈Rn+1,x(i)(x(i))T∈R(n+1)×(n+1),其中
h
θ
(
x
(
i
)
)
h_\theta(x^{(i)})
hθ(x(i))和
y
(
i
)
y^{(i)}
y(i)是标量。
现在,在你的程序中实现牛顿法,从初值
θ
=
0
\theta = 0
θ=0。使用和(7)相同的停止条件的梯度下降算法。为了确定使用多少迭代,计算每次迭代过程中的
L
(
θ
)
L(\theta)
L(θ)和绘制你的结果。牛顿方法通常在5-15次迭代中收敛。
最后,回答如下问题
- 当收敛时 θ \theta θ的值是多少?
- 显示牛顿法中 L L L是如何减少的?
- 画出决策边界
- 测试1的成绩为20分和测试2为80分的学生不被录取的概率是多少?
- 对比梯度下降法和牛顿法,你学到了什么?