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