一.线性回归问题
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。线性回归包括一元线性回归和多元线性回归,一元是只有一个自变量x,多元是指有多个自变量x1,x2.....如y=a0+a1x1+a2x2。
首先我们来看一个例子:
我们不妨先假设一个线性函数关系:函数h表示房价,x1表示面积,x2表示卧室数目。
现在,我们想要根据训练集数据拟合一个函数,这就需要我们求出参数值。大家可以想象,我们肯定希望找到的那个函数,距离每个点都很近,最好所有的点上都在这个函数上,但是这肯定不现实,所以我们希望这些点尽量离函数近一点,也就是所有训练样本到函数的距离之和最小。用数学的方式形式化,我们得到代价函数J
二.梯度下降法
(一)前提
在介绍梯度下降法之前,我们先回顾一下几个基础的数学概念。
-
导数
一个点的导数不仅仅表示该点切线的斜率,还反应了函数在该点的变化率。
-
偏导数
在二元函数中,偏导数仅仅是表示某点在x方向的导数和在y轴方向的导数。这反应了偏导数的局限性,仅仅是多元函数沿着坐标轴的变化率,但是如下图,在M0点处存在很多方向的偏导数(并不仅仅x和y方向),这就引出了方向导数。
-
方向导数
两点间距离
我们不仅仅要知道函数在坐标轴方向上的变化率(即偏导数),还需要设法求得函数在其他方向上的变化率。而方向导数就是函数在其他特定方向上的变化率。
从二元函数上某点P点向某个方向发出一条射线,通过p0(x+△x,y+△y)且P0在领域内。
若极限存在则方向导数为:
-
梯度
由上面的方向导数可知,方向导数是在各个方向上都有,而且每个方向上的变化一般是不一样的,那到底沿哪个方向最大呢?沿哪个方向最小呢?为了研究方便,就有了梯度的定义。
- 梯度是一个向量,由函数f关于它的n个变量的偏导数构成,比如三元函数f的梯度为(fx,fy,fz),二元函数f的梯度为(fx,fy),一元函数f的梯度为f(x)
- 梯度的方向是函数增长最快的方向,梯度的反方向是函数降低最快的方向。
(二)梯度下降法(BGD)
梯度下降法的基本思想:
我们的目的是寻找J最小时的参数,开始时我们随机选择一个参数的组合(θ_0,θ_1,......,θ_n ),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
目标函数J关于参数θ的梯度是目标函数上升最快的方向,那么让函数从任意一点开始,沿着梯度反方向移动一个步长α(α是学习率,它决定了我们沿着梯度方向向下迈出的步子有多大,α的值是根据情况自行设定的),就可以使得函数J下降的最快,形式化如下。(注意,这里所有的参数θ都要同时更新)
我们发现在迭代过程中,每更新一个参数θ,都会计算一遍全部训练集,如果训练集很大,那么将很耗时间。
随机梯度下降(SGD):去掉求和公式,用样本中的一个例子来近似我所有的样本,来调整。
批量梯度下降(MBGD):其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是1个样本近似全部不太准,那我多取几个样本会比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。
注意(以一元函数举例说明)
-
梯度下降法是收敛到局部最小值,不一定可以收敛到全局最小值,这与我们选择的初始参数有关。
我们初始值选择了如图的x0,由于f在点x0的导数大于0,梯度方向向右,负梯度方向向左,从而x0向左移动,逐渐收敛到了局部最小值,而不能收敛到全局最小值。
-
α的大小要适中
学习率α太小,每次移动步长太小,收敛太慢,这个比较容易理解。
学习率α太大,每次移动步长大,可能导致不收敛,这里用一个图来表示一下:
由于距离最小值点越远,导数越大,从而导致步长越来越大,不会收敛。通常可以考虑尝试这些学习率:
α=0.01,0.03,0.1,0.3,1,3,10
三. 最小二乘法
最小二乘法的本质就是利用向量表示代价方程J,然后对参数向量进行求导,令导数为0求极值,从而解出参数向量。
那么将样本属性X带入方程可以得到:
用向量表示出来:
也就是:
同样,为了保证点到函数的距离和的平方最小,得到代价公式(Y是样本目标向量):
令J对参数向量求导:
最后如果
如果不可逆,那就是有很多解了,取哪个解由归纳偏好决定。
至此,我们得到了所有的参数,模型建立完成。