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

算法相关 徐 自远 1065℃

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

原创 AI中国 2018-09-17 14:11:35

点击上方关注,All in AI中国

作者:Adarsh Menon

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

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

线性回归

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

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

损失函数

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

我们将使用均方误差函数来计算损失。这个函数有三个步骤:

  1. 对于给定x,找到实际y和预测y值之间的差值(y=mx+c)。
  2. 把这个差值进行平方。
  3. 找出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

 

教程:采用梯度下降算法实现线性回归!http://t.jinritoutiao.js.cn/dufkRD/

转载请注明:徐自远的乱七八糟小站 » 教程:采用梯度下降算法实现线性回归!

喜欢 (0)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号