吴恩达机器学习学习笔记(一)单变量回归模型

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_40759863/article/details/86036336

近来,在网易云课堂观看了吴恩达机器学习的视频,写下该系列博客让自己在未来能够观看复习知识。

如上图所示,这是一幅关于房子尺寸与房子的价格之间关系的散点图,假如你有一位朋友想要出售他的房子,那么你就可以根据这些数据来为你的朋友评估他的房子的价格。现在观察图像,我们似乎能够在这张图上画出一条倾斜的直线来拟合这些点,如下图:

通过这条直线,我们就可以来根据你朋友房子的尺寸来估计他房子的价格,但问题来了?你可以清楚知道,在这张图片上,我们可以画出很多条直线,那么哪一条直线才是最拟合这些数据点的呢?这就是机器学习将要解决的问题。

如上图,图为一些房子的尺寸x与对应的房子价格y的数据,我们设所要得到的直线为上图的h(x)函数,该函数中的\Theta 0\Theta 1就是我们所要求出的参数,该模型因为只有一个变量x,所以我们称为“单变量回归模型”。那么如何求解出最佳的两个参数呢?这时候我们就要利用上面说的数据集通过某些算法来训练我们的函数(在实践中,我们会通常把数据集分为两部分:训练集和测试集,训练集用来训练函数得到合社参数,再利用测试集来评估我们的函数性能),从而得到适合的参数。

 

如上图所示,现在我们有一个假设的线性函数h(x),现在要做的就是求出该函数的两个参数\Theta 1\Theta 0,我们设一个关于这两个函数的函数J(\Theta 0,\Theta 1),看上图,J(\Theta 0,\Theta 1)是将每一个样本x^{(i)}(i为样本的编号)输入到h(x)中得到一个预测值,再与该样本的真实房价y^{(i)}相减得到一个差值,将这些差值取平方加起来得到一个总和除以m再乘以1/2(m为样本的 总数,乘1/2是为了之后对J(\Theta 0,\Theta 1)求导方便),我们称该函数为“损失函数”。所以,J(\Theta 0,\Theta 1)的值就是我们的预测值与真实值的差距,显然,我们希望该差距应该越小越好,所以我们的目标就转为求解上图中的Goal函数:

下面我们来介绍求解该函数的方法:梯度下降。

首先我们先看上图,该图的纵坐标是损失函数的值,横坐标为它的两个变量\Theta 0\Theta 1,现在我们想象该图是两个山峰,而你此时身处其中一个小的山峰中,如上图中红色顶点的叉点,你沿着某个方向往前踏出一步,然后再选择一个方向再往前前进一步,每走一步,你就离山底更进一步,直至最后抵达山底。

在单变量回归模型中,损失函数J(\theta 0, \theta 1)的值与两个参数的值之间的关系如上图,我们可以看到,该图与上面“爬山”图的不同之处在于J(\theta 0, \theta 1)这个函数没有局部最优解,只有一个全局最优解,这使得我们进行梯度下降后,总会使得每一个参数\theta _{i}都求得一个最佳值,我们称这种函数为“凸函数”(事实上,线性回归模型无论是多变量还是单变量,它的损失函数都是“凸函数”)。梯度下降的过程就类似与上述“爬山过程”,下面给出梯度下降的算法公式(下面:=符号表示把右边的值赋予左边):

 

如上图所示:我们通过对 J(\Theta 0,\Theta 1)求关于\Theta j(在本文中,j为0,1)求偏导数再乘以一个学习率\alpha,然后再用\Theta j减去该值来更新\Theta j,其中学习率\alpha就是“每次爬山的步长”,偏导数就是“下山的方向”,反复重复公式中的过程,直到\Theta j不再更新(梯度下降算法执行时,随着\theta j越来越接近最优值,偏导数部分的值会越来越小,更新的幅度越来越小,当到达最低点时,偏导数的值为0,所以公式等号右边部分会等于左边部分,偏导数便不再更新)。下面给出参数更新的两种情况:

左边那张图的情况:当我们的参数\theta1大于最优值时,执行梯度下降算法,偏导数部分求得的结果大于0,带入到公式中我们显然可以看出\theta1被减小了,即“不断往左移动”直到最优值。

右边那张图的情况:但我们的参数\theta1小于最优值时,执行梯度下降算法,偏导数部分求得的结果小于0,带入到公式中我们显然可以看出\theta1被增大了,即“不断往右移动”直到最优值。

在使用公式进行梯度下降的过程中,我们要注意得“同步更新”两个参数的值:

上图中,左边就是进行了“同步更新” ,即先将每个参数进行一次梯度下降的值保存在临时变量中,再将这些临时变量的值同时赋给对应的参数,于此相反的,右边的更新参数就不是同步更新(\Theta 1进行梯度下降的时候 J(\Theta 0,\Theta 1中的\Theta 0已经更新了)。将J(\Theta 0,\Theta 1)关于\Theta 0\Theta 1的偏导数求出后带入公式中,可以得到下面公式:

下面我们再讲一下 学习率\alpha的选取,它选择过小或者过大都会造成不好的影响,如果取值太小,则每次进行梯度下降的幅度太小,那么我们得进行很多次梯度下降才能取到参数的最优值;如果取值过大,那么参数梯度下降的幅度将会很大,则可能会出现下面一种情况:如果你的\theta取值已经很接近最优值,但可能会因为你的更新步长\alpha太大而更新后的点“恰好”错过最低点,此时它会继续执行梯度下降算法继续更新参数的值,但永远得不到能使损失函数取到最小值的那个参数值。如下图所示情况: 

 (左边的点已经接近最低点,但如果你的更新步长过大,则它下一步更新就得到右边的点,这将错过那个能使J(\theta 1)值最小的最优值)

通常,我们可以画出\underset{\theta }{minJ(\theta )}的值与\theta的梯度下降迭代次数的关系图来观察学习率的大小,如下图:

如果你的参数进行一定次数的梯度下降后, \underset{\theta }{minJ(\theta )}的值能够逐渐减小最后收敛于某值时,则说明你的学习率\alpha选择恰当,如果是关系图是下面的图像,则说明你的学习率选取过大,错过了最优解,则你应该选取更小的学习率:

吴恩达则通常会尝试一系列的学习率取值,再画关系图观察后,按比例增大学习率的值,直到得到恰当的\alpha的值,比如先取0.001,然后依次取0.003,0.01,0.03,....(每次扩大三倍)。

以上,就是我们单变量模型的主要内容,下次我们将介绍单变量回归模型的扩展——多变量回归模型。

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_40759863/article/details/86036336