机器学习之线性回归基础
由房价估计到线性回归
让我们思考一个实际问题:
即同一时段房价是否是可预测的?
我们直觉上知道一个城市的商品房的每平米价格由很多因素影响,也就是说,我们或许可以从这些影响因素中挖掘出有用的信息,来预测房价。
如果我们收集了大量的房屋信息数据,我们可以用表格来展示这些数据:
项目 |
卧室数(x0) |
楼层(x1) |
卧室朝向(x2) |
… |
层高(xn) |
RMB/m2(y)
|
1 |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
3 |
|
|
|
|
|
|
… |
|
|
|
|
|
|
m |
|
|
|
|
|
|
表格的每一行代表的是一个样本,一共m个样本,构成了数据集。
每一个样本,由n个特征数据 x(从卧室数到层高)和标签数据 y(RMB/m2)构成。
我们猜想,能不能用如下的这样的公式,利用x值,映射出y值,也就实现了预测的效果。
Θ0+Θ1x1+Θ2x2+⋯⋯+Θnxn=y
Θ和x的下标表示特征序号,如果我们把上式表征为一个自变量为x的函数 ,我们有:
Θ0+Θ1x1+Θ2x2+⋯⋯+Θnxn=hθ(x)
简写为连加形式:
i=0∑nθixi=hθ(x),其中x0=1
也可以表示为矩阵形式,默认向量是纵向量:
θT→⋅x→=hθ(x)
如以上公式所表示的,只要我们求出合适的θi值,利用给定的房屋特征值,就能预测出房屋价格。
以上方法,我们将其称之为线性回归模型,这是解决如房价估计一类数值型预测问题的普适性方法。
由此,我们将房屋预测问题,以及何其类似的数值预测问题,转化为求θi的问题。
那么,我们如何量化,并最终得到最优的参数θi组合呢?
从最大似然到最小二乘
我们直觉上知道,再厉害的模型,都不可能百分百预测到我们需要的结果。那么预测值和真实值之间就会存在误差,用 ε 来表示误差。因此,我们有公式:
ε(j)=y(j)−θT→⋅x→
其中,上标(j)代表样本序号,j=1,2⋯⋯m.
那么,ε(j)越小,代表预测值同真实值之间的差值越小,模型的拟合能力越强。
于是,我们需要做的就是最小化误差。
我们知道,这个误差,是由非常多的独立因素,叠加造成的随机现象,那么由于中心极限定理,我们可以得到:
ε∼N(0,σ2)
也就是说,误差服从正态分布。
由此我们可以得到随机变量ε(j)的概率密度函数:
p(ε(j))=2πσ1e(−2σ2(ε(j))2)
联立误差公式,我们得到条件概率密度函数:
p(y(j)∣x(j);θ)=2πσ1e(−2σ2(y(j)−θT→⋅x→)2)
为了使误差尽可能小,我们就要尽可能得到一个合适的θ值使得得到y的概率尽可能的大。
我们将数据集中的每个样本的条件概率密度连乘得到似然函数,似然函数表示如下:
L(θ)=j=1∏mp(y(j)∣x(j);θ)=j=1∏m2πσ1e(−2σ2(y(j)−θT→⋅x→)2)
似然函数两边取对数:
ℓ(θ)=lnL(θ)=j=1∑mln2πσ1−2σ21j=1∑m(y(j)−θT→⋅x→)2
求似然函数的最大值,也就是求对数似然的最大值,∑j=1mln2πσ1是定值,因此,最大似然问题,转化成最小二乘问题:
minJ(θ)=min2σ21j=1∑m(y(j)−θT→⋅x→)2
J(θ)是我们的目标函数。
至此,我们将数值拟合问题,通过似然函数,转化成最小二乘问题。
接下来,我们就要求目标函数的最小值,
这里我们有两个方法:
方法一:求驻点,得到解析解;
方法二:利用渐进方法,得到近似解。
线性回归的解析解
目标函数J(θ)表示为矩阵形式:
J(θ)=21(Xθ−y)T⋅(Xθ−y)
求J(θ)对θ的偏导:
▽θJ(θ)=XTXθ−XTy
求J(θ)的驻点:
▽θJ(θ)=XTXθ−XTy=0
得到:
θ=(XTX)−1XTy
若,XTX本身不可逆,我们加入扰动因子,使得,半正定的XTX,成为正定矩阵,也就保证了其可逆:
θ=(XTX+λI)−1XTy
至此,我们得到线性回归方法的解析解。
线性回归的梯度下降方法
解析解总是给人一种数学方法的感觉,换句话说,就是给人感觉不够智能,那么,我们有没有一种智能的方法,寻找θ的最优解(局部最优解)呢?
现在我们想象,由两个参数,θ1和θ2,所有的数据组合,在目标函数J(θ)上的映射,形成了一个起伏不定的面,有许多的"山峰",也有许多的"山谷",我们自然可以尝试所有的数据组合,找到J(θ)的最低点,但实际上,考虑到穷搜算法的计算量,这种方法的是低效的。我们能不能让θ如同水流一样,"顺流而下"的找到最低点呢?答案是肯定的,我们可以用梯度下降方法找到最低点。
所谓J(θ)的梯度,就是J(θ)在某点的方向导数的最大情况。
所谓方向导数,就是J(θ)在某点上,沿某方向的的变化率,
那么J(θ)梯度就可以解释为J(θ)在某点上最大的变化率,梯度是一个矢量,有方向有大小。梯度可以表示为:
gradJ(θ1,θ2,θ3⋯θn)=(∂θ1∂J,∂θ2∂J,∂θ3∂J,⋯∂θn∂J)
J(θ)在每个方向上的偏导分量,构成一个合方向,其模值就是这一点的最大变化率。
简言之梯度下降算法,就是让J(θ)在每个方向分量上按照最大变化率变化,他们的总和将导致J(θ)的下降。
梯度下降算法公式如下:
θi=θi−α∂θi∂J(θ)
其中右边的θj代表这一步的值,左边的θj代表上一步的值,α代表每次下降的程度。
∂θi∂J(θ)的推导如下:
∂θi∂J(θ)=21∂θi∂(hθ(x)−y)2=(hθ(x)−y)xi
由此,我们得到批量梯度下降算法(BGD):
Repeatuntilconvergence{θi=θi−αj=1∑m(hθ(x(j))−y(j))xi(j)}
为了克服BGD难以跳出局部最优解的问题,我们采用随机梯度下降算法(SGD):
Loop{forj=1tom{θi=θi−α(hθ(x(j))−y(j))xi(j)}}
现在我们所使用的SGD,实际是一个BGD和上述SGD的折中版本,即为mini-batch SGD。采用若干样本的平均梯度作为更新方向。
线性回归的复杂度惩罚因子
为了让拟合效果更进一步提升,我们采用高阶模型。高阶模型往往会导致一个问题,那就是过拟合。过拟合从参数意义上表现为某些θ异常大或小。此时,我们将目标函数增加θ的平方项来解决这个问题。这个防止过拟合的方法叫做L2正则。公式如下:
J(θ)=21j=1∑m(y(j)−θT→⋅x→)2+λj=1∑mθj2
我们也将上式称为Ridge回归。
如果我们将平方项改为绝对值,称之为L1正则,可以得到:
J(θ)=21j=1∑m(y(j)−θT→⋅x→)2+λj=1∑m∣θj∣
我们称为Lasso回归。Lasso回归不止具有防止过拟合的功能,还可以降维。
通过这个简陋的图,大致可以理解为什么L1可以降维,而L2不可以。![[机器学习-1.1]线性回归之基础 [机器学习-1.1]线性回归之基础](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzk2My9jMWIzM2QxYjUzY2MzOTZjNjU2YjQ3OWVmMzQwNDQxMy5KUEVH)