[机器学习-1.1]线性回归之基础

机器学习之线性回归基础

由房价估计到线性回归

让我们思考一个实际问题:
即同一时段房价是否是可预测的?
我们直觉上知道一个城市的商品房的每平米价格由很多因素影响,也就是说,我们或许可以从这些影响因素中挖掘出有用的信息,来预测房价。
如果我们收集了大量的房屋信息数据,我们可以用表格来展示这些数据:

项目 卧室数(x0) 楼层(x1) 卧室朝向(x2) 层高(xn) RMB/m2(y)
1
2
3
m

表格的每一行代表的是一个样本,一共m个样本,构成了数据集。
每一个样本,由n个特征数据 x(从卧室数到层高)和标签数据 y(RMB/m2)构成。
我们猜想,能不能用如下的这样的公式,利用x值,映射出y值,也就实现了预测的效果。
Θ0+Θ1x1+Θ2x2++Θnxn=y \Theta _{0} + \Theta _{1}x_{1} + \Theta _{2}x_{2} + \cdots \cdots +\Theta _{n}x_{n} = y
Θ\Thetaxx的下标表示特征序号,如果我们把上式表征为一个自变量为xx的函数 ,我们有:
Θ0+Θ1x1+Θ2x2++Θnxn=hθ(x) \Theta _{0} + \Theta _{1}x_{1} + \Theta _{2}x_{2} + \cdots \cdots +\Theta _{n}x_{n} = { h }_{ \theta }(x)
简写为连加形式:
i=0nθixi=hθ(x),x0=1 \sum _{ i=0 }^{ n }{ { \theta }_{ i } } { x }_{ i }={ h }_{ \theta }(x),其中{ x }_{ 0 }=1
也可以表示为矩阵形式,默认向量是纵向量:
θTx=hθ(x) \overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x } ={ h }_{ \theta }(x)
如以上公式所表示的,只要我们求出合适的θi{\theta}_{i}值,利用给定的房屋特征值,就能预测出房屋价格。
以上方法,我们将其称之为线性回归模型,这是解决如房价估计一类数值型预测问题的普适性方法。
由此,我们将房屋预测问题,以及何其类似的数值预测问题,转化为求θi{\theta}_{i}的问题。
那么,我们如何量化,并最终得到最优的参数θi{\theta}_{i}组合呢?

从最大似然到最小二乘

我们直觉上知道,再厉害的模型,都不可能百分百预测到我们需要的结果。那么预测值和真实值之间就会存在误差,用 ε\varepsilon 来表示误差。因此,我们有公式:
ε(j)=y(j)θTx { \varepsilon }^{ (j) } = { y }^{ (j) }-\overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x }
其中,上标(j)(j)代表样本序号,j=1,2mj=1,2\cdots \cdots m.
那么,ε(j){ \varepsilon }^{ (j) }越小,代表预测值同真实值之间的差值越小,模型的拟合能力越强。
于是,我们需要做的就是最小化误差。
我们知道,这个误差,是由非常多的独立因素,叠加造成的随机现象,那么由于中心极限定理,我们可以得到:
εN(0,σ2) \varepsilon \sim N(0,{ \sigma }^{ 2 })
也就是说,误差服从正态分布。
由此我们可以得到随机变量ε(j){ \varepsilon }^{ (j) }的概率密度函数:
p(ε(j))=12πσe((ε(j))22σ2) p({ \varepsilon }^{ (j) })=\frac { 1 }{ \sqrt { 2\pi } \sigma } { e }^{ (-\frac { { ({ \varepsilon }^{ (j) }) }^{ 2 } }{ 2{ \sigma }^{ 2 } } ) }
联立误差公式,我们得到条件概率密度函数:
p(y(j)x(j);θ)=12πσe((y(j)θTx)22σ2) p\left( { { y }^{ (j) } }|{ { x }^{ (j) };\theta } \right) =\frac { 1 }{ \sqrt { 2\pi } \sigma } { e }^{ (-\frac { { ({ y }^{ (j) }-\overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x } ) }^{ 2 } }{ 2{ \sigma }^{ 2 } } ) }
为了使误差尽可能小,我们就要尽可能得到一个合适的θ\theta值使得得到y的概率尽可能的大。
我们将数据集中的每个样本的条件概率密度连乘得到似然函数,似然函数表示如下:
L(θ)=j=1mp(y(j)x(j);θ)=j=1m12πσe((y(j)θTx)22σ2) L(\theta )=\prod _{ j=1 }^{ m }{ p\left( { { y }^{ (j) } }|{ { x }^{ (j) };\theta } \right) =\prod _{ j=1 }^{ m }{ \frac { 1 }{ \sqrt { 2\pi } \sigma } { e }^{ (-\frac { { ({ y }^{ (j) }-\overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x } ) }^{ 2 } }{ 2{ \sigma }^{ 2 } } ) } } }
似然函数两边取对数:
(θ)=lnL(θ)=j=1mln12πσ12σ2j=1m(y(j)θTx)2 \ell (\theta )=\ln { L(\theta )= } \sum _{ j=1 }^{ m }{ \ln { \frac { 1 }{ \sqrt { 2\pi } \sigma } } } -\frac { 1 }{ 2{ \sigma }^{ 2 } } \sum _{ j=1 }^{ m }{ { ({ y }^{ (j) }-\overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x } ) }^{ 2 } }
求似然函数的最大值,也就是求对数似然的最大值,j=1mln12πσ\sum _{ j=1 }^{ m }{ \ln { \frac { 1 }{ \sqrt { 2\pi } \sigma } } }是定值,因此,最大似然问题,转化成最小二乘问题:
minJ(θ)=min12σ2j=1m(y(j)θTx)2 \min { J(\theta ) } =\min { \frac { 1 }{ 2{ \sigma }^{ 2 } } \sum _{ j=1 }^{ m }{ { ({ y }^{ (j) }-\overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x } ) }^{ 2 } } }
J(θ)J(\theta)是我们的目标函数。
至此,我们将数值拟合问题,通过似然函数,转化成最小二乘问题。
接下来,我们就要求目标函数的最小值,
这里我们有两个方法:
方法一:求驻点,得到解析解;
方法二:利用渐进方法,得到近似解。

线性回归的解析解

目标函数J(θ)J(\theta)表示为矩阵形式:
J(θ)=12(Xθy)T(Xθy) J(\theta ) = \frac { 1 }{ 2 } { (X\theta -y) }^{ T }\cdot (X\theta -y)
J(θ)J(\theta )θ\theta的偏导:
θJ(θ)=XTXθXTy { \triangledown }_{ \theta }J(\theta )={ X }^{ T }X\theta -{ X }^{ T }y
J(θ)J(\theta)的驻点:
θJ(θ)=XTXθXTy=0 { \triangledown }_{ \theta }J(\theta )={ X }^{ T }X\theta -{ X }^{ T }y=0
得到:
θ=(XTX)1XTy \theta ={ ({ X }^{ T }X) }^{ -1 }{ X }^{ T }y
若,XTX{ X }^{ T }X本身不可逆,我们加入扰动因子,使得,半正定的XTX{ X }^{ T }X,成为正定矩阵,也就保证了其可逆:
θ=(XTX+λI)1XTy \theta ={ ({ X }^{ T }X+\lambda I) }^{ -1 }{ X }^{ T }y
至此,我们得到线性回归方法的解析解。

线性回归的梯度下降方法

解析解总是给人一种数学方法的感觉,换句话说,就是给人感觉不够智能,那么,我们有没有一种智能的方法,寻找θ\theta的最优解(局部最优解)呢?
现在我们想象,由两个参数,θ1{\theta}_{1}θ2{\theta}_{2},所有的数据组合,在目标函数J(θ)J(\theta)上的映射,形成了一个起伏不定的面,有许多的"山峰",也有许多的"山谷",我们自然可以尝试所有的数据组合,找到J(θ)J(\theta)的最低点,但实际上,考虑到穷搜算法的计算量,这种方法的是低效的。我们能不能让θ\theta如同水流一样,"顺流而下"的找到最低点呢?答案是肯定的,我们可以用梯度下降方法找到最低点。
所谓J(θ)J(\theta)的梯度,就是J(θ)J(\theta)在某点的方向导数的最大情况。
所谓方向导数,就是J(θ)J(\theta)在某点上,沿某方向的的变化率,
那么J(θ)J(\theta)梯度就可以解释为J(θ)J(\theta)在某点上最大的变化率,梯度是一个矢量,有方向有大小。梯度可以表示为:
gradJ(θ1,θ2,θ3θn)=(Jθ1,Jθ2,Jθ3,Jθn) grad\quad J({ \theta }_{ 1 },{ \theta }_{ 2 }{ ,\theta }_{ 3 }\cdots { \theta }_{ n })=(\frac { \partial J }{ \partial { \theta }_{ 1 } } ,\frac { \partial J }{ \partial { \theta }_{ 2 } } ,\frac { \partial J }{ \partial { \theta }_{ 3 } } ,\cdots \frac { \partial J }{ \partial { \theta }_{ n } } )
J(θ)J(\theta)在每个方向上的偏导分量,构成一个合方向,其模值就是这一点的最大变化率。
简言之梯度下降算法,就是让J(θ)J(\theta)在每个方向分量上按照最大变化率变化,他们的总和将导致J(θ)J(\theta)的下降。
梯度下降算法公式如下:
θi=θiαJ(θ)θi { \theta }_{ i }={ \theta }_{ i }-\alpha \frac { \partial J(\theta ) }{ \partial { \theta }_{ i } }
其中右边的θj{ \theta }_{ j }代表这一步的值,左边的θj{ \theta }_{ j }代表上一步的值,α\alpha代表每次下降的程度。
J(θ)θi\frac { \partial J(\theta ) }{ \partial { \theta }_{ i} }的推导如下:
J(θ)θi=12(hθ(x)y)2θi=(hθ(x)y)xi \frac { \partial J(\theta ) }{ \partial { \theta }_{ i } } =\frac { 1 }{ 2 } \frac { \partial { ({ h }_{ \theta }(x)-y) }^{ 2 } }{ \partial { \theta }_{ i } } =({ h }_{ \theta }(x)-y){ x }_{ i }
由此,我们得到批量梯度下降算法(BGD):
Repeatuntilconvergence{θi=θiαj=1m(hθ(x(j))y(j))xi(j)} Repeat\quad until\quad convergence\{ \\ { \theta }_{ i }={ \theta }_{ i }\quad -\alpha \sum _{ j=1 }^{ m }{ ({ h }_{ \theta }({ x }^{ (j) })-{ y }^{ (j) }){ x }_{ i }^{ (j) } } \}
为了克服BGD难以跳出局部最优解的问题,我们采用随机梯度下降算法(SGD):
Loop{forj=1tom{θi=θiα(hθ(x(j))y(j))xi(j)}} Loop\{ \\ for\quad j\quad =\quad 1\quad to\quad m\{ \\ { \theta }_{ i }={ \theta }_{ i }-\alpha ({ h }_{ \theta }({ x }^{ (j) })-{ y }^{ (j) }){ x }_{ i }^{ (j) }\} \}
现在我们所使用的SGD,实际是一个BGD和上述SGD的折中版本,即为mini-batch SGD。采用若干样本的平均梯度作为更新方向。

线性回归的复杂度惩罚因子

为了让拟合效果更进一步提升,我们采用高阶模型。高阶模型往往会导致一个问题,那就是过拟合。过拟合从参数意义上表现为某些θ\theta异常大或小。此时,我们将目标函数增加θ\theta的平方项来解决这个问题。这个防止过拟合的方法叫做L2正则。公式如下:
J(θ)=12j=1m(y(j)θTx)2+λj=1mθj2 J(\theta )=\frac { 1 }{ 2 } \sum _{ j=1 }^{ m }{ { ({ y }^{ (j) }-\overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x } ) }^{ 2 } } +\lambda \sum _{ j=1 }^{ m }{ { \theta }_{ j }^{ 2 } }
我们也将上式称为Ridge回归。
如果我们将平方项改为绝对值,称之为L1正则,可以得到:
J(θ)=12j=1m(y(j)θTx)2+λj=1mθj J(\theta )=\frac { 1 }{ 2 } \sum _{ j=1 }^{ m }{ { ({ y }^{ (j) }-\overset { \rightarrow }{ { \theta }^{ T } } \cdot \overset { \rightarrow }{ x } ) }^{ 2 } } +\quad \lambda \sum _{ j=1 }^{ m }{ { \left| { \theta }_{ j } \right| } }
我们称为Lasso回归。Lasso回归不止具有防止过拟合的功能,还可以降维。
通过这个简陋的图,大致可以理解为什么L1可以降维,而L2不可以。[机器学习-1.1]线性回归之基础