多元线性模型最小一乘回归
一、算法目的
多元线性模型的矩阵形式:
Y
=
X
β
+
ε
(1)
Y=X\beta+\varepsilon\tag{1}
Y=Xβ+ε(1)
其中,
Y
=
[
y
1
y
2
⋮
y
n
]
,
X
=
[
1
x
11
⋯
x
1
p
1
x
21
⋯
x
2
p
⋮
⋮
⋱
⋮
1
x
n
1
⋯
x
n
p
]
β
=
[
β
0
β
1
⋮
β
p
]
,
ε
=
[
ε
1
ε
2
⋮
ε
n
]
Y=\left[ \begin{matrix} y_{1} \\ y_{2} \\ \vdots \\ y_{n} \end{matrix} \right] ,X=\left[ \begin{matrix} 1&x_{11}&\cdots&x_{1p} \\ 1&x_{21}&\cdots&x_{2p} \\ \vdots&\vdots&\ddots&\vdots \\ 1 &x_{n1}&\cdots&x_{np} \end{matrix} \right]\\ \beta=\left[ \begin{matrix} \beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p} \end{matrix} \right],\varepsilon=\left[ \begin{matrix} \varepsilon_{1} \\ \varepsilon_{2} \\ \vdots \\ \varepsilon_{n} \end{matrix} \right]
Y=⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤,X=⎣⎢⎢⎢⎡11⋮1x11x21⋮xn1⋯⋯⋱⋯x1px2p⋮xnp⎦⎥⎥⎥⎤β=⎣⎢⎢⎢⎡β0β1⋮βp⎦⎥⎥⎥⎤,ε=⎣⎢⎢⎢⎡ε1ε2⋮εn⎦⎥⎥⎥⎤
对于以上多元线性模型我们要通过最小一乘法,也就是要求出使得残差的绝对值的和最小的参数
β
\beta
β的估计
β
^
\widehat{\beta}
β
。
二、算法推导
2.1目标函数的表示形式
我们的目标函数为:
min
Q
(
β
)
=
∑
i
=
1
n
∣
y
i
−
x
i
′
β
∣
(2)
\min Q(\beta)=\sum_{i=1}^{n}|y_{i}-x_{i}'\beta| \tag{2}
minQ(β)=i=1∑n∣yi−xi′β∣(2)
其中,
x
i
′
=
[
1
,
x
i
1
,
⋯
,
x
i
p
]
x_{i}'=[1,x_{i1},\cdots,x_{ip}]
xi′=[1,xi1,⋯,xip]。
2.2构造一个线性规划
我们知道,任何一个向量都可以表示为两个非负向量的差,为了符合线性规划中对未知变量保持非负的习惯与一般做法。我们令
β
=
d
1
−
d
2
,
d
1
≥
0
,
d
2
≥
0
(3)
\beta=d_{1}-d_{2},d_{1}\ge0,d_{2}\ge0\tag{3}
β=d1−d2,d1≥0,d2≥0(3)
下面我们给出线性规划约束条件的系数矩阵和系数矩阵右端项:
A
=
[
I
n
X
−
X
I
n
−
X
X
]
,
B
=
[
Y
−
Y
]
(4)
A=\left[\begin{matrix} I_{n}&X&-X \\ I_{n}&-X&X \end{matrix} \right],B=\left[\begin{matrix} Y\\ -Y \end{matrix} \right]\tag{4}
A=[InInX−X−XX],B=[Y−Y](4)
线性规划的变量为
(
r
,
d
1
,
d
2
)
T
(r,d_{1},d_{2})^{T}
(r,d1,d2)T,线性规划目标函数的变量系数矩阵为
(
l
′
,
0
,
0
)
(l',0,0)
(l′,0,0)。其中,
r
=
[
r
1
r
2
⋮
r
n
]
,
l
=
[
1
1
⋮
1
]
n
×
1
(5)
r=\left[ \begin{matrix} r_{1} \\ r_{2} \\ \vdots \\ r_{n} \end{matrix} \right],l=\left[ \begin{matrix} 1 \\ 1 \\ \vdots \\ 1 \end{matrix} \right]_{n\times1 \tag{5}}
r=⎣⎢⎢⎢⎡r1r2⋮rn⎦⎥⎥⎥⎤,l=⎣⎢⎢⎢⎡11⋮1⎦⎥⎥⎥⎤n×1(5)
综上,线性规划表示为:
{
min
(
l
′
,
0
,
0
)
(
r
,
d
1
,
d
2
)
T
=
∑
i
=
1
n
r
i
A
[
r
d
1
d
2
]
≥
B
,
[
r
d
1
d
2
]
≥
0
(6)
\begin{cases}\min(l',0,0)(r,d_{1},d_{2})^{T}=\sum_{i=1}^{n}r_{i} \\ A\left[\begin{matrix} r\\ d_{1}\\ d_{2} \end{matrix}\right]\ge B,\left[\begin{matrix} r\\ d_{1}\\ d_{2} \end{matrix}\right]\ge 0\end{cases}\tag{6}
⎩⎪⎪⎨⎪⎪⎧min(l′,0,0)(r,d1,d2)T=∑i=1nriA⎣⎡rd1d2⎦⎤≥B,⎣⎡rd1d2⎦⎤≥0(6)
2.3一个证明:揭示(2)和(6)之间的关系
下面我们来证明,当线性规划
(
6
)
(6)
(6)求得最优解
(
r
,
d
1
,
d
2
)
T
(r,d_{1},d_{2})^{T}
(r,d1,d2)T时,
β
=
d
1
−
d
2
\beta=d_{1}-d_{2}
β=d1−d2就是目标函数(2)的解。并且线性规划
(
6
)
(6)
(6)的最小值就是目标函数
(
2
)
(2)
(2)的最小值,也即
min
Q
=
∑
i
=
1
n
r
i
(7)
\min Q=\sum_{i=1}^{n}r_{i}\tag{7}
minQ=i=1∑nri(7)
证明:
线性规划(6)的第一个约束条件可以写成
r
+
X
d
1
−
X
d
2
≥
Y
,
r
−
X
d
1
+
X
d
2
≥
−
Y
r+Xd_{1}-Xd_{2}\ge Y,r-Xd_{1}+Xd_{2}\ge -Y
r+Xd1−Xd2≥Y,r−Xd1+Xd2≥−Y。也即
r
≥
Y
−
X
β
,
r
≥
−
(
Y
−
X
β
)
r\ge Y-X\beta,r\ge -(Y-X\beta)
r≥Y−Xβ,r≥−(Y−Xβ)。也就是
r
i
≥
∣
y
i
−
x
i
′
β
∣
,
i
=
1
,
2
,
⋯
,
n
(8)
r_{i}\ge|y_{i}-x_{i}'\beta|,i=1,2,\cdots,n\tag{8}
ri≥∣yi−xi′β∣,i=1,2,⋯,n(8)
假设当线性规划
(
6
)
(6)
(6)求得最优解
(
r
,
d
1
,
d
2
)
T
,
β
=
d
1
−
d
2
(r,d_{1},d_{2})^{T},\beta=d_{1}-d_{2}
(r,d1,d2)T,β=d1−d2时,存在
β
~
=
d
1
~
−
d
2
~
\widetilde{\beta}=\widetilde{d_{1}}-\widetilde{d_{2}}
β
=d1
−d2
,使得
Q
(
β
~
)
<
Q
(
β
)
Q(\widetilde{\beta})<Q(\beta)
Q(β
)<Q(β),其中
d
1
~
≥
0
,
d
2
~
≥
0
\widetilde{d_{1}}\ge 0,\widetilde{d_{2}}\ge 0
d1
≥0,d2
≥0。令
r
~
=
(
r
1
~
,
r
2
~
,
⋯
,
r
n
~
)
\widetilde{r}=(\widetilde{r_{1}},\widetilde{r_{2}},\cdots,\widetilde{r_{n}})
r
=(r1
,r2
,⋯,rn
),不妨令其中
r
i
~
=
∣
y
i
−
x
i
′
β
~
∣
,
i
=
1
,
2
,
⋯
,
n
\widetilde{r_{i}}=|y_{i}-x_{i}'\widetilde{\beta}|,i=1,2,\cdots,n
ri
=∣yi−xi′β
∣,i=1,2,⋯,n.那么
A
[
r
~
d
1
~
d
2
~
]
≥
B
,
[
r
~
d
1
~
d
2
~
]
≥
0
(9)
A\left[\begin{matrix} \widetilde{r}\\ \widetilde{d_{1}}\\ \widetilde{d_{2}} \end{matrix}\right]\ge B,\left[\begin{matrix} \widetilde{r}\\ \widetilde{d_{1}}\\ \widetilde{d_{2}} \end{matrix}\right]\ge 0 \tag{9}
A⎣⎡r
d1
d2
⎦⎤≥B,⎣⎡r
d1
d2
⎦⎤≥0(9)
所以
(
r
~
,
d
1
~
,
d
2
~
)
T
(\widetilde{r},\widetilde{d_{1}},\widetilde{d_{2}})^{T}
(r
,d1
,d2
)T也满足线性规划
(
6
)
(6)
(6)的约束条件,并且
(
l
′
,
0
,
0
)
(
r
~
,
d
1
~
,
d
2
~
)
T
=
∑
i
=
1
n
r
i
~
=
∑
i
=
1
n
∣
y
i
−
x
i
′
β
~
∣
=
Q
(
β
~
)
<
Q
(
β
)
(l',0,0)(\widetilde{r},\widetilde{d_{1}},\widetilde{d_{2}})^{T}=\sum_{i=1}^{n}\widetilde{r_{i}}=\sum_{i=1}^{n}|y_{i}-x_{i}'\widetilde{\beta}|=Q(\widetilde{\beta})<Q(\beta)
(l′,0,0)(r
,d1
,d2
)T=∑i=1nri
=∑i=1n∣yi−xi′β
∣=Q(β
)<Q(β),由
(
8
)
(8)
(8)知,
Q
(
β
)
=
∑
i
=
1
n
∣
y
i
−
x
i
′
β
∣
≤
∑
i
=
1
n
r
i
Q(\beta)=\sum_{i=1}^{n}|y_{i}-x_{i}'\beta|\leq\sum_{i=1}^{n}r_{i}
Q(β)=∑i=1n∣yi−xi′β∣≤∑i=1nri,所以
∑
i
=
1
n
r
i
~
<
∑
i
=
1
n
r
i
\sum_{i=1}^{n}\widetilde{r_{i}}<\sum_{i=1}^{n}r_{i}
∑i=1nri
<∑i=1nri,这与
(
r
,
d
1
,
d
2
)
T
(r,d_{1},d_{2})^{T}
(r,d1,d2)T是线性规划的最优解矛盾,所以第一部分得证。
从上述的推导我们可以得知,在
d
1
d_{1}
d1和
d
2
d_{2}
d2已经确定的情况下,
∣
y
i
−
x
i
′
β
∣
,
i
=
1
,
2
,
⋯
,
n
|y_{i}-x_{i}'\beta|,i=1,2,\cdots,n
∣yi−xi′β∣,i=1,2,⋯,n均为定值,由
(
8
)
(8)
(8)可知,为了使得线性规划
(
6
)
(6)
(6)的目标函数最小,必须取
r
i
=
∣
y
i
−
x
i
′
β
∣
r_{i}=|y_{i}-x_{i}'\beta|
ri=∣yi−xi′β∣。所以
(
7
)
(7)
(7)成立。
2.4回归算法
s
t
e
p
(
1
)
step(1)
step(1):输入回归数据
X
X
X和
Y
Y
Y
s
t
e
p
(
2
)
step(2)
step(2):根据
2.2
2.2
2.2中的
(
4
)
,
(
5
)
,
(
6
)
(4),(5),(6)
(4),(5),(6)计算出线性规划的相关矩阵
A
,
B
,
C
A,B,C
A,B,C其中
C
=
(
l
′
,
0
(
p
+
1
)
×
1
,
0
(
p
+
1
)
×
1
)
C=(l',0_{(p+1)\times1},0_{(p+1)\times1})
C=(l′,0(p+1)×1,0(p+1)×1)。
s
t
e
p
(
3
)
step(3)
step(3):将
A
,
B
,
C
A,B,C
A,B,C带入单纯形法模块,求得最优解
(
r
,
d
1
,
d
2
)
T
(r,d_{1},d_{2})^{T}
(r,d1,d2)T
s
t
e
p
(
4
)
step(4)
step(4):得到
β
^
=
d
1
−
d
2
\widehat{\beta}=d_{1}-d_{2}
β
=d1−d2
注:关于单纯形法原理本文不再赘述。
三、实际案例与python编程计算
3.1引入数据集
我们以著名的
H
a
l
d
Hald
Hald数据为例。
3.2计算 β ^ \widehat{\beta} β
下面给出计算最小一乘回归方程完整 p y t h o n python python源代码:
import pandas as pd
import numpy as np
from scipy import optimize
#多元线性模型的最小一乘回归(不等式约束条件)
#导入数据
dataset1=pd.read_excel('Hald.xlsx')
dataset2=pd.read_excel('Hald.xlsx')
#计算X,Y
Y=dataset1['Y'].values
dataset2['Y']=1
X=dataset2.values
#计算A,B,C
n=len(X)
B=np.hstack((Y,-Y))
In=np.eye(n)
A1=np.hstack((In,X,-X))
A2=np.hstack((In,-X,X))
A=np.vstack((A1,A2))
p=len(X[0])-1
l=np.ones(n,np.int)
o=np.zeros(p+1,np.int)
C=np.hstack((l,o,o))
#使用optimize包的linprog函数求解线性规划
r = optimize.linprog(C,A_ub=-A,b_ub=-B,bounds=(0,None))
#得到最优解x=(r,d1,d2)'
x=(r.x)
#计算β估计
beta=[]
for i in range(n,n+p+1):
beta.append(x[i]-x[i+p+1])
#输出结果
print('多元线性模型的最小一乘法回归方程为:\ny=',end='')
print(beta[0],end='')
for i in range(1,p+1):
if beta[i]>0:
print('+{}x{}'.format(beta[i],i),end='')
else:
print('{}x{}'.format(beta[i], i),end='')
下面给出程序运行结果:
四、参考文献
[1]陈希孺.最小一乘线性回归(下)[J].数理统计与管理,1989(06):48-56.
[2]吕书龙. 最小一乘估计快速算法的研究[D].福州大学,2003.