文章目录
第2章:单变量线性回归
2.1 模型描述 Model representation
机器学习可以分为监督学习和无监督学习,监督学习的每个样本都有标签,而无监督学习没有标签。其中监督学习又包括回归问题和分类问题,回归问题就是预测一个具体数值的输出,如房价预测;分类问题就是预测离散值的输出,如肿瘤判断。
我们向学习算法提供训练集,比如房价训练集,学习算法的任务是输出一个函数,通常用小写字母h表示假设函数,假设函数的作用是把房子的大小作为输入变量x,它会试着输出相应房子的预测y值。
那么,我们怎么表示假设函数h呢?我们设假设函数为
h
θ
(
x
)
h_{\theta}(x)
hθ(x):
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x) = \theta_0 + \theta_1 x
hθ(x)=θ0+θ1x这种模型被称为线性回归,更准确来说,是单变量线性回归。
2.2 代价函数 Cost function
假设函数
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x) = \theta_0 + \theta_1 x
hθ(x)=θ0+θ1x 中的
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1 为模型参数,选择不同的参数值会得到不同的假设函数,那么,我们如何选择这两个参数值呢?
在线性回归中,我们有一个训练集,我们要做的是得出
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1 这两个参数的值,使得假设函数表示的直线尽量地与这些数据点很好的拟合,即输入x得到的预测值
h
θ
(
x
)
h_{\theta}(x)
hθ(x)最接近该样本对应的真实值y值,也就是解决最小化问题。
代价函数
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)的数学定义为预测值与实际值之差的平方误差和的
1
2
m
\frac {1}{2m}
2m1:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_0,\theta_1)= \frac {1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2
J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
单变量线性回归公式总结如下:
假设函数 Hypothesis:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x) = \theta_0 + \theta_1 x
hθ(x)=θ0+θ1x
参数 Parameters:
θ
0
\theta_0
θ0 ,
θ
1
\theta_1
θ1
代价函数 Cost function:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_0,\theta_1)= \frac {1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2
J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2
目标函数 Goal:
m
i
n
i
m
i
z
e
J
(
θ
0
,
θ
1
)
minimize \ J(\theta_0,\theta_1)
minimize J(θ0,θ1)
为了更好地使代价函数
J
J
J可视化,我们令参数
θ
0
=
0
\theta_0=0
θ0=0,只有一个参数
θ
1
\theta_1
θ1,于是将假设函数简化为
h
θ
(
x
)
=
θ
1
x
h_{\theta}(x) = \theta_1 x
hθ(x)=θ1x,将代价函数简化为
J
(
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_1)= \frac {1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2
J(θ1)=2m1∑i=1m(hθ(x(i))−y(i))2,我们会得到如下图所示的代价函数图
J
(
θ
1
)
J(\theta_1)
J(θ1)。
那么,如果保留两个参数
θ
0
\theta_0
θ0 ,
θ
1
\theta_1
θ1,会得到如下图所示的碗状曲面函数,曲面的高度即为代价函数
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)的值。
代价函数
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)用等高线图表示如下。
2.3 梯度下降 Gradient descent
我们有一个线性回归的代价函数
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1),可以用梯度下降算法来最小化代价函数
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)。梯度下降算法的思路:给定
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1的初始值(通常将
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1均初始化为0),然后不停地一点点地改变
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1来使
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)变小,直到我们找到
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)的最小值或局部最小值。
我们可以将代价函数的图像看成一座山,你从给定的初始值
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1出发,环顾四周寻找从什么方向最快下山,然后迈出一步,并从新的起点寻找下一步最快下山的方向,重复上面的步骤,一步一步往下走,直到到达局部最低点。值得注意的是,不同的初始值可能会得到不同的代价函数局部最小值。
梯度下降算法的定义:
repeat until convergence {
θ
j
:
=
θ
j
−
α
∂
d
θ
j
J
(
θ
0
,
θ
1
)
(
f
o
r
j
=
0
a
n
d
j
=
1
)
\theta_j := \theta_j - \alpha \frac{\partial}{\mathrm{d}\theta_j}J(\theta_0,\theta_1)\ (for \ j=0\ and\ j=1 )
θj:=θj−αdθj∂J(θ0,θ1) (for j=0 and j=1)}
同步更新:
t
e
m
p
0
:
=
θ
0
−
α
∂
d
θ
0
J
(
θ
0
,
θ
1
)
temp0:=\theta_0-\alpha \frac{\partial}{\mathrm{d}\theta_0}J(\theta_0,\theta_1)
temp0:=θ0−αdθ0∂J(θ0,θ1)
t
e
m
p
1
:
=
θ
1
−
α
∂
d
θ
1
J
(
θ
0
,
θ
1
)
temp1:=\theta_1-\alpha \frac{\partial}{\mathrm{d}\theta_1}J(\theta_0,\theta_1)
temp1:=θ1−αdθ1∂J(θ0,θ1)
θ
0
:
=
t
e
m
p
0
\theta_0:=temp0
θ0:=temp0
θ
1
:
=
t
e
m
p
1
\theta_1:=temp1
θ1:=temp1
要注意,梯度下降要对
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1进行同步更新,即对
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1都更新完了以后再进行赋值。
为了理解梯度下降算法,我们仍然考虑代价函数只有一个参数的情形。从下图中可以看出,无论偏导数项为正为负,
θ
1
\theta_1
θ1总能使
J
(
θ
1
)
J(\theta_1)
J(θ1)趋向于最小值。
其中
α
\alpha
α表示学习率,它用来控制我们以多大幅度更新参数
θ
j
\theta_j
θj,既下山的步长。如果
α
\alpha
α太小,即下山的步子很小,梯度下降得很慢;但如果
α
\alpha
α太大,很可能会直接跨过最低点,导致无法收敛或发散。
如果已经处于一个局部最优点,下一步梯度下降将不会改变,因为局部最优点的导数为0。
当我们接近局部最低点时,导数值会变得越来越小,所以,即使学习率
α
\alpha
α不变,梯度下降的幅度也会越来越小,最后收敛到局部最优点。
2.4 线性回归的梯度下降 Gradient descent for linear regression
我们将梯度下降算法应用到最小化平方差代价函数,就得到线性回归的梯度下降。
梯度下降算法变成如下形式:
repeat until convergence {
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
\theta_0 := \theta_0 - \alpha \frac {1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
(
i
)
\theta_1 := \theta_1 - \alpha \frac {1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})\cdot x^{(i)}
θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x(i)}
线性回归的代价函数总是下图所示的弓形函数,也叫凸函数,它没有局部最优解,只有一个全局最优。
线性回归的梯度下降在等高线图上的表示如下图所示。
上述梯度下降算法称为Batch梯度下降算法,Batch梯度下降算法的每一步梯度下降都遍历了整个训练集的样本,所以在梯度下降计算偏导数的时候计算的是m个训练样本的总和。