你好 ,
话不多说,开始正题,今天主讲线性回归之一元线性回归
首先我们来看一下什么是回归分析:
正相关:
负相关:
不相关:
我们需要求解方程如下,其中θ0和θ1是我们要求解的
接下来我们来简单求解一下,如下图我们知道截距和斜率我们都可画出直线
那我们如何才能求解方程系数?在这里我们引入代价函数,而代价函数采用的则是最小二乘法
在这里,i是样本点,m表示m个样本点,公式下面的2可有可无 只是为了后面平方求导时算出来的数好看
我们来看一个例子:
这里我领你们算一个 后面的算法一样,由左图我们可知斜率是1截距是0(这里是我们假定θ1=1,后面还是会变的,我们要做多个假设来拟合出曲线),我们取3个样本点分别是(1,1),(2,2),(3,3)我们将数据代入上面的公式:由图可知真实值是0,预测值也是0,(画×的地方是真实值,函数值是预测值)代价函数:1/6 * (0+0+0)=0 画出右图
这个我们假设θ1=0.5 大概算一下代价函数是:
1/6 * [(1-0.5)² +(2-1)² +(3-1.5)²] ≈0.6
在右图画出,下面的自己做
经过无数个θ1的改变,我们可以拟合出一条代价函数
这时候通过代价函数我们就能求出θ1和θ0
我们接下来来看这幅图,右边是二维的等高线图,画叉的地方数值都相等(等高线貌似是高一地理学的??我也不晓得)
红圈的位置是最小值
下面我们介绍一下相关系数(了解一下就可以)
我们现在要介绍的梯度下降法,梯度下降法是一个优化算法,使用梯度下降法我们来不断地优化代价函数,使得代价函数的值不断变小,这是一个不断迭代的过程,我们通过不停的迭代改变θ1和θ0的值,最终使代价函数的值最小
看一下公式:=代表赋值的意思
学习率我们要采用一个合适值,学习率大小就是每次步长的大小
在迭代过程中我们来更新数值,J(θ1,θ0)这是代价函数,我们需要分别对θ1和θ0求导
我们要同步更新,不能异步更新
我们先考虑一个参数
求导过程省略,如果不会就重新学习一下高等数学(我会考虑以后要不要更新,这玩意好像没法更。。。)
线性回归的代价函数是凸函数
看这图,左边就是非凸函数,右边就是凸函数
凸函数就是可以走到全局最小值(采用梯度下降法),非凸函数有很多的局部极小值,也有个全局最小值
下节我们来看一下用Python如何实现