均值漂移算法python 均值漂移线性回归模型_线性回归模型


线性回归的模型思想

回归的思想和分类有所不一样,分类输出的结果为离散的值,回归输出的是一个连续型的值。线性回归的思想就是试图找到一个多元的线性函数:



当输入一组特征(也就是变量X)的时候,模型输出一个预测值y = h(x),我们要求这个预测值尽可能的准确,那么怎么样才能做到尽可能准确呢?

这要求我们建立一个评价指标来评价模型的在数据集上的误差,当这个误差达到最小的时候,模型的拟合性最强。在线性回归中我们常用的是平均平方误差(mse - mean square error)和平均绝对离差(mae - mean absolute deviation)来评估拟合的误差:


(其中


表示实际值,


表示预测值)


(其中


表示实际值,


表示预测值)


在线性回归中,这两种评价标准都是可以的,我们这里着重讲一下平均平方误差的方法(mse),所以我们现在的目标就是:


(就是找到能够使得误差最小的参数



线性回归的计算

由于f(x)函数的变量较多,所以我们在计算上面目标函数的时候我们用矩阵和向量做一下转变:

我们令


(这里的X表示为行向量)


(这里的


表示的列向量)


(这里的y表示的是实际值组成的列向量)


所以有



观察目标函数我们可以知道当


取得最小值的时候目标函数也就取得了最小值,把上面的值用矩阵的方式表示出来就是


,所以现在就要求


的最小值,为了求导方便我们加上一个1/2(此处为了求导方便),即



我们把上面的函数叫做损失函数:



所以我们现在需要求上面损失函数取得最小值时候的



这里有两种方法求解上面损失函数的最小值:

梯度下降法

关于什么是梯度,我们这里不在进行说明,如果有不明白的朋友可以自行百度。简单总结一下就是一个多元函数偏导数组成的列向量。

梯度下降法的思想就是随机的选择一点,从这点出发,沿着目标函数下降最快的方向求解最优值。那么什么才是下降最快的方向呢,答案是负梯度方向,也就是梯度的反方向。

这里给出如下图形帮助大家理解一下什么是目标函数下降最快的方向:


均值漂移算法python 均值漂移线性回归模型_均值漂移算法python_02


上图中,一圈一圈的线就相当于损失函数的等高线,外圈是值比较大的等高线,内圈是值比较小的等高线,我们随机选择从


出发,一直沿着等高线的垂直方向向着目标函数最小值的方向前进,我们能够以最小的距离快速到达目标函数的最小值点,但是如果我们如果朝着其他方向前进,则我们就像在走盘山公路一样,绕来绕去,不是说一定不能到达最小值处,但是一定会花费很长的距离。在计算机中如果学习率


是固定的,则沿着损失函数梯度的负方向能够以最小的迭代次数到达损失函数的最小值处。


理解了梯度下降法后,我们就来求一下损失函数的梯度:

损失函数J(


)是一个标量,我们对


向量中各个标量求导后排列成列向量就得到了梯度方向:



(这里对标量对向量求导不熟悉的同学可以参考一下维基百科上面的讲解,非常的详细)

标量对向量求导的en.wikipedia.org


就是损失函数的梯度


把随机的出发点设为


,则通过一下方法得到新的




通过上述方法得到一组新的


后计算一次损失函数的值,直到损失函函数到达最小值或者我们预设的条件为止,最终得到的


向量就是我们模型的求解。(注意这里要跟大家说一下的事,学习步长


要设置适当,太大容易找不到最小值,太小会导致迭代次数过大,增加计算机的计算消耗,具体多少合适,大家可以在具体模型中通过模型的准确率等指标进行调节)


最小二乘法

最小二乘法的求解思想很简单,就是利用我们大学时候学的函数求最值的优化方法求解:

即一个可导函数的函数,如果存在最值,那么该处的各变量的偏导数为0

所以可以令:



得到:




为非奇异矩阵(可逆)的情况下有:



以上就是线性回归的思想以及模型的求解过程了,欢迎大家交流。