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