作者:Adarsh Menon

在这个教程中,你可以理解梯度低落算法将如何事情,并在python中从头开始实现。
首先我们看一下线性回归是什么,然后定义丢失函数。
我们学习了梯度低落算法的事情事理,末了我们将在给定的数据集上实现它,并进行预测。

在每次迭代时更新m和c的值以得到最优解

线性回归

教程采用梯度下降算法实现线性回归

在统计学中,线性回归是一种线性方法,用于对因变量与一个或多个自变量之间的关系进行建模。
设X为自变量,Y为因变量。
我们将在这两个变量之间定义一个线性关系,如下所示:

这是你在高中学习的线性方程。
m是直线的斜率,c是y截距。
如今我们将利用这个方程用给定的数据集演习我们的模型,并预测任何给定X值的Y值。
我们本日的寻衅是确定m和c的值,使得对应于这些值的线是最佳拟合直线或给出最小偏差。

丢失函数

丢失是我们预测的m和c值的偏差。
我们的目标是最小化这个偏差,以得到最准确的m和c值。

我们将利用均方偏差函数来打算丢失。
这个函数有三个步骤:

对付给定x,找到实际y和预测y值之间的差值(y=mx+c)。
把这个差值进行平方。
找出X中每个值的平方均值。

均方偏差方程

这是yi实际值,ȳ i是预测值。
让我们更换ȳ i的值:

更换 ȳ i的值

以是我们将偏差平方并找出均值。
因此,名称均方偏差。
现在我们已经定义了丢失函数,让我们进入有趣的部分 - 最小化它,并找到m和c。

梯度低落算法

梯度低落是探求函数最小值的迭代优化算法。
这里的函数是我们的丢失函数。

理解梯度低落

解释梯度低落算法的事情事理

想象一个山谷和一个没有方向感的人想要到达山谷的底部。
当斜坡陡峭时,他沿着斜坡走下坡时,步幅较大,当斜坡不那么陡峭时,步幅较小。
他根据自己目前的位置决定下一个位置,并在他到达山谷底部时停下来,这是他的目标。

让我们考试测验将梯度低落算法运用于m和c,并逐步逼近它:

1.最初让m = 0和c = 0。
设L是我们的学习率。
这可以掌握m值随每一步的变革程度。
L可以是0.0001的这样小的数值,以得到良好的准确性。

2.打算丢失函数相对付m的偏导数,并插入个中x,y,m和c确当前值,得到导数值D。

关于m的导数

Dc 是相对付m的偏导数的值。
类似地,我们找到关于c,Dc的偏导数:

关于c的导数

3.现在我们利用以下等式更新m和c确当前值:

4.我们重复这个过程,直到我们的丢失函数是一个非常小的值或空想情形下为0(这意味着0偏差或100%准确度)。
我们现在剩下的m和c的值将是最佳值。

现在回到我们的类比,m可以被认为是图中职员确当前位置。
D即是斜率的陡度,L是他移动的速率。
现在我们利用上面的等式打算的m的新值将是他的下一个位置,并且L×D将是步幅的大小。
当斜率更陡(D更大)时,他须要迈出更大的步幅,当它更陡(D更小)时,他迈出更小的步幅。
末了他到达山谷的底部,相称于我们的丢失= 0。

现在有了m和c的最佳值,我们的模型已经准备好进行预测了。

履行模型

现在让我们将上面的所有内容转换为代码并查看我们的模型!

梯度低落算法是机器学习中最大略、运用最广泛的算法之一,紧张是由于它可以运用于任何函数来优化它。
学习它为节制机器学习奠定了根本。
你可以在这里找到数据集和代码:

https//github.com/chasinginfinity/ml-from-scratch/tree/master/02%20Linear%20Regression%20using%20Gradient%20Descent