AndrewNg - 线性回归【1】梯度下降

来源:互联网 发布:charge是什么软件 编辑:程序博客网 时间:2024/06/04 23:33

AndrewNg - 线性回归


经典的Ng房屋问题,给定数据集如下:

2014160024001416300033324400220369232540

xR2x(i)1表示房屋面积,x(i)2表示房间数量,首先我们会估计yx是一个线性函数:hθ(x)=θ(0)+θ(1)x1+θ(2)x2。其中θi为参数(也称为权重),为了更方便于表达,我们定义x0=1,所以有:
hθ(x)=i=1nθixi=θTx,

其中n为输入向量中特征个数(不包含x0)。那么对于给定的训练集,我们如何选择或学习得出θ?在这里我们选取的方法是让hθ(x)尽量的接近于y ,所以我们得到成本函数(cost function-最小二乘法)如下:
J(θ)=12i=1m(hθ(x(i))y(i))2

最小均方差算法( Least mean square)

我们的目标是选取可以使J(θ)最小的的θ。为了得到最终的θ,一般我们会给θ赋上初值,通过相关的算法对θ迭代求值,知道θ收敛。这里提及的是梯度下降法,迭代式如下:

θj:=θjαθjJ(θ).

当然,θ0,...,θn是同时迭代更新的。这里的α我们是用来控制学习速率的参数。当然写代码的时候式子中的偏导还得再求一下,为了计算方便起见,假设我们先只有一个样本(x,y),即J(θ)中的求和符号先忽略一下:
θjJ(θ)=θj12(hθ(x)y)2=(hθ(x)y)θj(hθ(x)y)=(hθ(x)y)θj(i=0nθixiy)=(hθ(x)y)xj

所以对于一个训练样本来说,迭代式会变成:
θj:=θj+α(y(i)hθ(x)(i))x(i)j.

要将上边的迭代式拓展到含m样本的训练集上,我们一般用到的有两种修改方法,其一如下:


Loopuntilconvergence:{θj:=θj+αi=1m(y(i)hθ(x)(i))x(i)j(for every j).}


很明显这个算法每一次的迭代都要遍历整个训练集,所以起名叫批量梯度下降。我们说沿着梯度方向总能够找到局部最优解(说明问题的优化与初值有关),而且我们这里的问题还是一个凸二次函数,说明它只有一个局部最优解就是全局最优解。

这里写图片描述

可以看到图中是初值为(48,30)时梯度下降法的迹。与批量梯度下降法对应,随机梯度下降法相对来说更适合比较大的数据集:

Loopuntilconvergence:{for i to m{θj:=θj+α(y(i)hθ(x)(i))x(i)j(for every j).}}


相比于批量梯度下降法每次都要遍历训练集才能更新θ来说,随机梯度下降立杆见影,每一步都会对θ有一个调整,不过其最后只能接近最优而到不了真正的最优。

下节预告

换一种方法,用公式直接推导出θ的值,规范形方程(normal equations),简单粗暴!

0 0