继续是机器学习课程的笔记,这节介绍的是单变量线性回归算法,线性回归算法也是一个比较基础的算法。
模型表达
首先是以房屋交易问题为例,假设我们回归问题的训练集如下表所示:
Size in feet2feet2 (x) | Price($) in 1000’s (y) |
---|---|
2104 | 462 |
1416 | 232 |
1534 | 315 |
852 | 178 |
… | … |
此外我们将使用以下变量来描述这个回归问题:
- m 代表训练集中实例的数量
- x 代表特征/输入变量
- y 代表目标变量/输出变量
- (x,y) 代表训练集中的实例
- (x(i),y(i)x(i),y(i)) 代表第i个观察实例
- h 代表学习算法的解决方案或函数,也成为假设(hypothesis)
下面是一个典型的机器学习过程:
所以对于房价预测问题,我们是在训练集上执行学习算法,学习到一个假设h
,然后将要预测的房屋的尺寸作为输入变量输入给h
,而输出结果就是该房屋的交易价格。
这里的h
也就是一个模型,是一个从输入变量x
都输出变量y
的函数映射。它的一种可能的表达式为:
这个表达式只含有一个特征/输入变量,因此这样的问题叫作 单变量线性回归问题.
代价函数
当我们得到一个模型后,就必须选择合适的参数θ0θ0和θ1θ1.在房价问题中,对应的就是直线的斜率和在y轴上的截距。
我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距就是建模误差(modeling error),如下图所示:
上图中,hθ(x(i))hθ(x(i))是对第i个输入变量的预测输出值,而y(i)y(i)则是对应的真实值。
因此我们的目标是选择出可以使得建模误差的平方和能够最小的模型参数,也就是min(hθ(x(i))hθ(x(i)) -y(i)y(i))。
这里就使用一个代价函数J(θ0,θ1)=12m∑mi=1(hθ(x(i))−y(i))2J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2
这里的代价函数也叫做平方误差代价函数,这是最常用的解决回归问题的方法。当然还有其他代价函数,这将在后面提及。
梯度下降
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1)J(θ0,θ1)的最小值。
思想过程
梯度下降算法的思想如下:
首先,我们有一个代价函数,假设是J(θ0,θ1)J(θ0,θ1),我们的目标是minθ0,θ1J(θ0,θ1)minθ0,θ1J(θ0,θ1)。
接下来的做法是:
- 首先是随机选择一个参数的组合(θ0,θ1)(θ0,θ1),视频中说一般是设θ0=0,θ1=0θ0=0,θ1=0;
- 然后是不断改变(θ0,θ1)(θ0,θ1),并计算代价函数,直到一个局部最小值。之所以是局部最小值,是因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值,选择不同的初始参数组合,可能会找到不同的局部最小值。
下图是视频中给出的梯度下降法是如何工作的:
算法公式
下面给出梯度下降算法的公式:
repeat until convergence{
θj:=θj−α∂∂θjJ(θ0,θ1)(forj=0andj=1)θj:=θj−α∂∂θjJ(θ0,θ1)(forj=0andj=1)
}
也就是在梯度下降中,不断重复上述公式直到收敛,也就是找到局部最小值局部最小值。其中符号:=
是赋值符号的意思。
公式中的αα称为学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈进的步子有多大。
在梯度下降中,还涉及都一个参数更新的问题,即更新(θ0,θ1)(θ0,θ1),一般我们的做法是同步更新:
算法详解
在上述公式中∂∂θjJ(θ0,θ1)∂∂θjJ(θ0,θ1)是一个偏导数,其含义就是函数J(θ0,θ1)J(θ0,θ1)的斜率,假设我们要求的代价函数J(θ0,θ1)J(θ0,θ1)如下图所示,初始点是图中的红色的点,那么由于在该点上的切线斜率是一个正数,而学习率也是正数,所以更新后的θ1θ1会减小,也就是会向左移动,并靠近局部最小值。
当然,如果起始点是在上述曲线左侧,其切线斜率则是负值,那么会导致θ1θ1逐渐变大,同样也是靠近局部最小值。
公式中的学习率αα是决定找到局部最小值的快慢,同时也决定了能否找到局部最小值,因为如果取值过大,就可能错过局部最小值,并且可能会导致无法收;但是取值过小,学习的速度就会比较慢。
视频中也提到一个问题,如果初始点就是一个局部最小点,那么由于局部最小值的切线斜率是0,那么会导致参数不变,因为其实已经在局部最小值了。
此外,即使学习率αα是一个固定值,梯度下降法也是可以收敛到一个局部最小值,原因是在接近局部最小值时,∂∂θjJ(θ0,θ1)∂∂θjJ(θ0,θ1)会自动变得更小,然后就可以慢慢接近局部最小值,而不需要改变学习率。
应用于线性回归
根据前面内容,我们有
梯度下降算法公式:
repeat until convergence{
θj:=θj−α∂∂θjJ(θ0,θ1)(forj=0andj=1)θj:=θj−α∂∂θjJ(θ0,θ1)(forj=0andj=1)
}
以及线性回归模型
hθ(x)=θ0+θ1xJ(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2hθ(x)=θ0+θ1xJ(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2
这里的关键就是求解代价函数的导数,即:
∂∂θjJ(θ0,θ1)=∂∂θj12m∑mi=1(hθ(x(i))−y(i))2∂∂θjJ(θ0,θ1)=∂∂θj12m∑i=1m(hθ(x(i))−y(i))2
进一步,可以得到:
由此,我们的算法可以改写成:
repeat until convergence{
θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i)) θ1:=θ1−α1m∑i=1m((hθ(x(i))−y(i))⋅x(i))θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))θ1:=θ1−α1m∑i=1m((hθ(x(i))−y(i))⋅x(i))
}
最后,在我们给出的梯度下降算法公式实际上是一个叫批量梯度下降(batch gradient descent),即它在每次梯度下降中都是使用整个训练集的数据,所以公式中是带有∑mi=1∑i=1m,当然也存在其他梯度下降法,在每次梯度下降时考虑部分数据。
小结
这里就介绍完单变量的线性回归方法,对于这个线性回归算法,我的理解是,因为正如开头介绍的经典的机器学习过程,是使用一个学习算法在给定的数据集上学习得到一个模型,然后使用该模型对新的数据进行预测,得到一个预测的结果,所以对于线性回归也是要求解其模型,其实就是我们非常熟悉的直线方程hθ=θ0+θ1xhθ=θ0+θ1x,就是让我们计算得到的直线方程尽可能逼近实际的直线方程,而衡量的标准就是使用代价函数,而在线性回归中,非常常用的是平方和误差函数J(θ0,θ1)=12m∑mi=1(hθ(x(i))−y(i))2J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2,那么这就把问题变成求解最小的代价函数,也就是求解一对参数θ0,θ1θ0,θ1使得minJ(θ0,θ1)minJ(θ0,θ1),而要得到这对参数,我们就是使用梯度下降方法。梯度下降法也是一个非常常用的方法,包括在神经网络中都会使用到。