一元线性回归:梯度下降法

一元线性回归是线性回归的最简单的一种,即只有一个特征变量。首先是梯度下降法,这是比较经典的求法。一元线性回归通俗易懂地说,就是一元一次方程。只不过这里的斜率和截距要通过最小二乘和梯度下降法不断迭代找到最优解。我们先来看看运用到的代价函数:最小二乘法。

一元线性回归 机器学习实际应用 一元线性回归的总结_一元线性回归 机器学习实际应用


这其实和高中学的最小二乘法一模一样,不过值得注意的是,这里的2其实是可以消去的,这对结果的影响不大,之所以保留是因为,方便与之后求导所得的2消掉。

梯度下降法:

开始就说过,斜率和截距是要通过迭代计算求得的。因为初始化的斜率和截距所求得的代价函数(最小二乘法)的值很大,所以要通过梯度下降法来不断改变斜率和截距的值,从而达到全局最优解局部最优解。全局最优解和局部最优解,这两者是有分别的,如下图:

一元线性回归 机器学习实际应用 一元线性回归的总结_线性回归_02


θ0和θ1分别对应斜率和截距,J(θ0,θ1)就是代价函数的值。假设红色的点代价函数的值较大,蓝色的点较小,θ0和θ1的初始值的不同会导致所位于的红色峰值不同。如果J(θ0,θ1)的值在左边的红色山峰上(黑色十角星),那么经过迭代得到的就是左边的蓝色峰底,也就是全局最优解(因为J(θ0,θ1)最小)。但是,如果J(θ0,θ1)的值在右边的红色山峰上,那么那么经过迭代得到的就是右边的蓝色峰底,即局部最优解(J(θ0,θ1)不是最小)。

重点来了,怎么进行θ0和θ1的更新呢?用到下面的公式:

一元线性回归 机器学习实际应用 一元线性回归的总结_多元线性回归_03


新的值=新的值—学习率*代价函数对旧的值的求导。这就是梯度下降法的更新公式, 学习率是步长的意思,这里不过多解释。这里要注意学习率的取值:

一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_04


梯度下降法适用于多种场景,对于线性回归的解法是这样的——

首先是求导的结果:

一元线性回归 机器学习实际应用 一元线性回归的总结_一元线性回归 机器学习实际应用_05


一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_06


然后带入公式得到:

一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_07

线性回归的原理大概就是这样了,接下来用python进行实战训练——

这里用到的数据是这样的,很多行的由逗号分隔的两列数据

一元线性回归 机器学习实际应用 一元线性回归的总结_梯度下降法_08


接下来是代码部分,首先是载入数据,

一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_09


让我们看看数据的分布图像是怎么样的?

一元线性回归 机器学习实际应用 一元线性回归的总结_多元线性回归_10


定义参数

一元线性回归 机器学习实际应用 一元线性回归的总结_多元线性回归_11


程序主体部分:

一元线性回归 机器学习实际应用 一元线性回归的总结_线性回归_12

一元线性回归 机器学习实际应用 一元线性回归的总结_梯度下降法_13


开始测试

一元线性回归 机器学习实际应用 一元线性回归的总结_梯度下降法_14


测试结果

一元线性回归 机器学习实际应用 一元线性回归的总结_一元线性回归 机器学习实际应用_15


一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_16


从测试结果我们可以看到代价函数的值从最开始的5565经过迭代后变为112,而且最后显示的图像也比较符合,这就是梯度下降法在一元线性回归的应用。

一元线性回归:sklearn

其实在Python中,很多算法别人已经帮写好了,只需要直接调用即可,方便快捷,结果也是一样的。

开始都是一样的,注意改变数据的维度

一元线性回归 机器学习实际应用 一元线性回归的总结_多元线性回归_17


两句话就可以完成模型的创建和拟合

一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_18


最后输出一样的结果

一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_19

多元线性回归:梯度下降法

现实生活中,很多事情不仅仅是一个特征,所以一元线性回归不怎么常用,多元线性回归比较常见。多元线性回归和一元线性回归的本质都是一样的,不同的是,多元线性回归的特征较多,但是核心算法不变,多元线性回归显示的图像是3d立体图,如下面的例子:

数据是两个特征(左边两个),然后得到一个结果(最右边)

一元线性回归 机器学习实际应用 一元线性回归的总结_线性回归_20


python实现:

这里导入了画3d图的包

一元线性回归 机器学习实际应用 一元线性回归的总结_梯度下降法_21


因为有两个特征,所以这里的最小二乘法要有两个参数

一元线性回归 机器学习实际应用 一元线性回归的总结_一元线性回归 机器学习实际应用_22


梯度更新的代码也是多加了一个参数而已:

一元线性回归 机器学习实际应用 一元线性回归的总结_一元线性回归 机器学习实际应用_23


运行程序:

一元线性回归 机器学习实际应用 一元线性回归的总结_多元线性回归_24


一元线性回归 机器学习实际应用 一元线性回归的总结_线性回归_25


结果显示:

一元线性回归 机器学习实际应用 一元线性回归的总结_线性回归_26


一元线性回归 机器学习实际应用 一元线性回归的总结_多元线性回归_27


从结果我们可以看到,代价函数的值从开始的47点多降到了1左右,而且图像也比较吻合。这就是梯度下降法在多元线性回归中的应用。

多元线性回归:sklearn

和一元线性回归一样,多元线性回归也可以使用sklearn进行计算。

python的实现,开始都是一样的

一元线性回归 机器学习实际应用 一元线性回归的总结_线性回归_28


开始创建并拟合模型,这里是有两个系数

一元线性回归 机器学习实际应用 一元线性回归的总结_线性回归_29


运行:

一元线性回归 机器学习实际应用 一元线性回归的总结_机器学习_30


这里的结果和梯度下降法不太一样,因为sklearn的算法是标准方程法

一元线性回归 机器学习实际应用 一元线性回归的总结_多元线性回归_31

以上就是一元线性回归和多元线性回归在机器学习里的一般解决方法。