风吹夏天 2018-09-17
点击上方关注,All in AI中国
作者:Adarsh Menon
在这个教程中,你可以了解梯度下降算法将如何工作,并在python中从头开始实现。首先我们看一下线性回归是什么,然后定义损失函数。我们学习了梯度下降算法的工作原理,最后我们将在给定的数据集上实现它,并进行预测。
在每次迭代时更新m和c的值以获得最优解
线性回归
在统计学中,线性回归是一种线性方法,用于对因变量与一个或多个自变量之间的关系进行建模。设X为自变量,Y为因变量。我们将在这两个变量之间定义一个线性关系,如下所示:
这是你在高中学习的线性方程。m是直线的斜率,c是y截距。如今我们将使用这个方程用给定的数据集训练我们的模型,并预测任何给定X值的Y值。我们今天的挑战是确定m和c的值,使得对应于这些值的线是最佳拟合直线或给出最小误差。
损失函数
损失是我们预测的m和c值的误差。我们的目标是最小化这个误差,以获得最准确的m和c值。
我们将使用均方误差函数来计算损失。这个函数有三个步骤:
均方误差方程
这是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