基于机器学习梯度下降优化算法来寻找最佳的线性回归模型

2021/4/8 22:26:01

本文主要是介绍基于机器学习梯度下降优化算法来寻找最佳的线性回归模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

线性回归模型

线性回归模型是一个非常简单的算法模型,它属于机器学习中的监督学习算法。假设数据集中有特征xi和特征yi,现在每个i对应于一个样本点(xi,yi),希望通过线性回归算法建立如下所示的一个模型。

在这里插入图片描述

其中yi为线性模型的预测值,我们肯定是希望yi能够准确预测未知的样本。通俗来讲就是找到一个函数(wxi+b)拟合 yi使得误差最小,即最小化该模型的损失函数:
在这里插入图片描述

只要能够使得损失函数最小化,那么此时建立的回归模型就能够较好的预测未知样本。那么如何最小化这个误差呢?这里需要用到梯度下降算法,非常简单,但是却非常强大,它的核心就是链式求导。

梯度
在梯度下降法中,我们首先要明确梯度的概念,一元回归中梯度就是我们所说的导数,多元回归中梯度就是我们所说的偏导数,如下所示是 f(x)=x² 这个函数在 x=1 处的梯度

在这里插入图片描述

f(x)=x²

我们为什么要求梯度呢?我们想要最快的进行回归模型的优化,而朝着梯度的方向进行优化往往是最快的。一个点的梯度值是这个函数变化最快的地方,也就是说沿着梯度的反方向,我们能够更快地找到函数的最小值点。

梯度下降算法

梯度下降算法,我们可以理解为朝着梯度的反方向一点一点的下降,最终我们就能找到损失函数的最小值,此时的模型就是我们所需要的。

在这里插入图片描述

比如我们在一座大山上的某处位置(函数的某一位置),由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,这样一步步的走下去,一直走到山脚,这就是梯度下降算法的直观体现。

在这里插入图片描述

在我们进行梯度下降的时候,我们还需要指定算法走的这一步有多大,如果一步太小,那么算法的下降的速度会很慢,如果步长很大就容易在最小值点不断跳动,到不了最低点,所以步长是我们需要考虑中,机器学习中步长我们使用 η表示。

当算法进行一步梯度下降的之后,我们需要重新定位算法所在损失函数的位置,然后进行下一步梯度下降,更新公式是

在这里插入图片描述

算法通过不断地迭代更新,最终我们能够找到一组最优的参数w和b,这就是梯度下降法的原理。

当我们找到最优的参数w和b之后,我们就拥有了最终的回归模型,我们就可以使用这个最终的模型来预测未知样本了,这就是机器学习梯度下降优化算法对线性回归模型进行优化的过程。

代码为

def linear_model(x):
 return x * w + b
def get_loss(y_, y):
 return torch.mean((y_ - y_train) ** 2)
for e in range(10): # 进行 10 次更新
 y_ = linear_model(x_train)
 loss = get_loss(y_, y_train)
 
 w.grad.zero_() 
 b.grad.zero_() 
 loss.backward()
 
 w.data = w.data - 1e-2 * w.grad.data # 更新 w
 b.data = b.data - 1e-2 * b.grad.data # 更新 b 
 print('epoch: {}, loss: {}'.format(e, loss.data[0]))


这篇关于基于机器学习梯度下降优化算法来寻找最佳的线性回归模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程