目录
1.假设函数
2.代价函数:
3.梯度下降算法
(1)首先假设,得到如下的h(x)函数,然后依次取
(2)然后同时取不同的,再去求解
(3)梯度下降更新:
1)求导项:
2)对于学习率
4.梯度下降在线性回归中的应用
总结:
前言:本篇博文仅介绍吴恩达机器学习课程中的线性回归这一算法部分,主要内容来自于课程和大牛撰写的课程笔记。该篇博文仅介绍相关的基础概念和原理,对于公式中涉及的数学知识不做额外补充。课程视频来自于B站,课程笔记来自于GitHub。博文底附上链接。
首先,机器学习大体上分为监督学习和无监督学习,而监督学习一般用来处理连续值的数据集问题;相反的,无监督学习就用来处理离散值的数据集问题。接下来要介绍的线性回归就属于监督学习。
线性回归模型,是回归模型中的一种,一般是用来拟合目标值和特征值之间线性相关的数据集,然后做出预测。举个例子来更好的说明。
以课程中的例子为例,假设我们要买一套120平米的房子,但是我们只知道120平米以下的房价,不知道自己想买的房子的房价。这时候我们希望能够预测以下120平米的房子价格为多少,此时房子的面积和房子的价格之间则是线性相关的,所以我们可以用一条直线去模拟两者之间的关系。如下图所示:
此时,我们可以将横轴设为x,代表房屋面积,纵轴设为h(x),代表房屋价格。我们现在知道了房屋的面积xi,可以用这种线性关系去预测房屋价格。
假设有m个训练样本,x表示输入,h(x)表示输出,则一种可能的假设函数为:
式子中的和都是模型参数,这里暂时不用纠结到底代表什么意思,我们可以直观的理解它就是一个一元一次的线性函数。
我们得到了这条直线,可以用来拟合存在的m个样本数据集,但是不同的和所画出的直线不同,所拟合的数据集中的样本数量也不多。在这种情况下,当然希望直线能够拟合训练样本中的大部分数据,这样才能对其他未知的数据做出的预测价格更为准确。
即h(x)代表线性回归要拟合的房价,而y代表训练样本数据集中真实的房价,如果要拟合更多的数据,那么就要使得的均方误差达到最小,如下图所示:
因此,又设计了一个代价函数,用来求解均方误差的最小值。
m代表样本数量,i表示第i个样本,1/2则是为了计算方便添加的。此时,求解h(x)拟合更多数据集的问题就转变成了求解的最小值,只要该函数达到最小,即证明我们预测的房价和样本中实际的房价误差达到了最小,那么该线性回归函数h(x)就是可靠的。
现在来整体看一下我们所得到的函数和式子:
此时,我们的目标就是求最小的J代价函数,但是怎么求解呢,课程中给出了适用性最强的算法。
为了更好的理解该算法,下面我们具体的看一下这个算法的执行过程。
然后求得,图像如下所示:
从上图,可以得知,J在取得最小值,此时h(x)拟合的数据最好。
此时得到的图像是一个3D的曲面图,如下所示:
我们最终的目的就是要找到这个曲面中最低的点,就是我们要求解的值。
在一元线性回归中只有两个参数,因此,我们要同时对进行上面公式的更新。
公式中,中间的:=就相当于赋值符号,不难理解。而后面的,我们称为学习率,这是一个控制梯度下降快慢的参数,后面再讲。最后是这个求导项,是关键,也是理解梯度下降的重要点。下面进行讲解:
对于J(),它是一个二元一次的函数,要求二元一次函数的最小值,我们在初中就学过,对这个函数进行求导,然后令它的导数函数等于0,解这个方程最后就能得出二元一次函数的最低点的x的值。所以要求导,这里是一样的原理,只是我们不对x求导,因为这里要求的是什么时候取的值能够让J函数得到最小的值,从而得到最好的线性回归拟合函数。下面用图进一步的说明。
我们一次都对曲线上的点取切线的斜率来更新,当在最低点右边的时候,斜率为正,此时导数大于等于0,那么
当在最低点左边的时候,此时导数小于等于0,那么
以此不断更新参数值,从而使其达到最小,这样的过程就是梯度下降。
这个树是用来控制下降快慢的,当太大时,我们会得到下图:
即很难取到最低点。
同样,当太小时,更新的又太慢,如下图:
所以选择合适的也是至关重要的。
以上,便是梯度下降算法的内容。
首先看一下线性回归的函数公式:
然后时线性回归的代价函数的公式:
最后是梯度下降的公式:
如果会微积分求导的话,其实不难得出:
下面附上自己的求导过程,便于大家理解:
因为是第一次写长篇博客,所以逻辑有点混乱,望各位见谅。这里在最后对以上的内容做一个简单的总结,便于自己和大家的理解。
首先,线性回归的目的就在于为了去拟合训练样本数据集中的绝大多数数据(全部拟合是最好的,但这只是理想情况),而线性回归的一般式子就是一元函数。那么如何让去拟合更多的数据呢?因为x和h(x)都是固定的,那么选取合适的模型参数就尤为重要。
然后为了取得最合适的模型参数,我们利用均方误差的概念引入了代价函数这一公式:,然后求解的目标就转移成了对代价函数求解最小值的问题,为了求解最小值,有很多方法,这里只介绍了梯度下降的方法。
最后就是为了求解这个最小值,引入了梯度下降算法,其核心公式是:
梯度下降核心内容是对自变量进行不断的更新(针对求偏导),使得目标函数不断逼近最小值的过程。
因为自己还没有学会python,等学完了python,可能会补充实现的代码。希望这篇博客能够对大家理解线性回归有一定的帮助。
另外就是对于自己的博客写作水平还有待提升,望见谅。
吴恩达机器学习B站视频:https://www.bilibili.com/video/BV164411b7dx?from=search&seid=2954203059144500579
对应的课程学习笔记出处:https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes