zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python机器学习教程—线性回归原理和实现

Python机器教程学习原理 实现 回归 线性
2023-06-13 09:13:04 时间

线性回归介绍

第一个要讲的机器学习算法便是线性回归,从此模型入手便于我们很快的熟悉机器学习的流程,便于以后对其他算法甚至是深度学习模型的掌握。

什么是线性回归?回归问题在前文曾提到过,是指利用机器学习的模型算法找出一组数据输入和输出之间的关系,输出是连续的数据那么这个问题便是回归问题,而所谓线性回归,即是使用线性数学模型解决生活中回归预测问题。即找到一个最优秀的线性模型y=f(x)表达样本数据特征之间的规律,从而传入未知输出的输入x,求出预测的输出y。 试图用类似下面的公式表示的线性模型来表达输入与输出之间的关系,当然自变量x可能有很多个:

针对一组数据输入与输出我们可以找到很多线性模型,但最优秀的线性模型需要满足的是能最好的拟合图中的数据,误差是最小的。比如拿到模型去测试一组数据,已知输入和真实输出,那么我们的预测输出与真实输出之间的差便是误差,那么所有测试数据总的误差也体现着模型表达能力的误差。那么线性回归中最难的部分也就是模型训练的部分——怎么寻找到最适合的斜率和截距,也就是公式中的

损失和误差函数

来解释下误差,可以从图中看到拟合的直线,那么假设输入和真实输出也就是对应图上的的黑点值为:

,而对应直线上的预测输出是

,那么误差便是 

,已知误差不能是负的,可以采用绝对值或平方的方法对其进行操作,在这里采用平方的方式,要使得所有样本的误差达到最小,便求得图中五个点的误差的平方,这也就是图中的损失函数loss。要找到一个模型,使得损失函数的值达到最小,便相当于对损失函数找最小值,也转化为一个求导问题,那么损失函数中的1/2便是为了消掉平方求导后出来的2。因此也可以明白损失值最小的便是拟合度最好的模型。

图1.一元线性方程实例 

上面提到的例子只是一个简单的方程的误差,那么损失函数的方程中

,实际上我们的未知值是

,所以我们的损失函数loss实际上是一个关于

的函数,随着这两个未知数的不同,loss函数应该如何变化呢?这其实是需要用一个三维平面图来表示的,如下图我们所需要找的便是这样一个图中的最低点。我们的目标便是要竭尽全力去找到这个极值点对应的坐标。

图2.损失函数三维图 

要明白数学原理,我们不妨先从抛物线入手,回忆一下中学学到的要找一个如下图中抛物线的极值点,初中我们的方法是找对称轴,高中我们采用求导的方法,多项式函数导函数的意义表示的某点切线的斜率,当其斜率为0时便代表我们找到了极值点。

图3.抛物线实例 

梯度下降

那么如今在计算机上的操作,由于计算机采用的是机械求导,一旦参数变多工作量将极其大,因此求导找极值点的方法便不可取。而计算机找极值点采用的方法是——梯度下降,通过不断的迭代,一点一点地找到函数的最小值。一旦数学模型比较复杂,这样的方式会比直接求导更为简单。从上图中抛物线的特点我们可知,在极值点右边到极值点斜率在一点一点减小,对称的来看左边到极值点则是斜率一点点增大,那么梯度下降通过这样的规律去重复计算找到最低点,这里说的比较简略,有兴趣的同学可以去找相关博客理解原理。

由梯度下降的更新公式可以看出梯度不断地更新的方法便是用旧的x值不断地减去学习率α×导函数,更新的x值便是下一步到X坐标上的哪个点。这就相当于一个下山的过程,人要沿着下坡才能走到山底,那么这个学习率α便相当于人迈的步子有多大,这也是一个在训练过程中我们需要不断训练的参数,过大过小都有可能导致模型的效果不好(过大可能错过极值点,过小会给模型增加很多计算量)。

那么这样的对三维的图像来说,利用梯度下降便需要在

这两个方向上都不断的进行梯度更新,这就用到的偏导数的知识,也是大家在大学的高等数学中有学到的,两个方向上通过偏导数不断地更新。

从上面的公式中可以看到求得了 

方向上的偏导数组成的向量便是梯度,那么根据向量的概念,每个方向走的步子会合到一个方向,这就是梯度的方向。

本文注重讲解线性回归的原理,下文则会介绍线性回归的python实现,可直接点击链接跳转。

https://blog.csdn.net/danielxinhj/article/details/127542955?spm=1001.2014.3001.5502