Yongchao Fu

最小化目标函数算法之直接矩阵求解最小二乘

付永超 / 2019-06-21


我准备开一个新坑介绍一系列最小化目标函数的计算方法,这是本系列的第一篇。

本文介绍一个通过矩阵直接求解最小二乘问题的一个案例,这种计算方法其实不应该被归类到“最小化目标函数”这种方法中,因为这种方根本无需计算目标函数,是通过求解析解的方法解决最小二乘问题,后续的方法都是求数值解的方法,但是该方法确实是一种非常关键且基础的求解最小而成问题的方法,所以首先介绍与实施,该案例使用的数据也会在后续案例中持续使用。

1.使用的数据:

ID time conc
1 0.5 5.95432
1 1 5.35306
1 1.5 5.03
1 2 4.78
1 2.5 4.39
1 3 3.68
1 4 3.2
1 5 2.55
1 6 2.03
1 8 1.28
1 12 0.552
1 14 0.321

1.1数据所对应的散点图:

1

2

2.案例演示所使用的软件:

Excel2010

3.理论基础:

线性模型可以写为下列形式:

\[ C_{i} = \theta_{0} + \theta_{1} X_{i} + e_{i} \]

\[ C = \theta + \theta X + e_{i} \]

更一般的可以写为下列形式:

\[ C = X\theta + e \]

其中:

C是n*1的观测向量(因变量)

X是n*p的自变量矩阵,又叫设计矩阵

θ是p*1的未知的参数向量

e是n*1的随机误差向量,假设e~N(0,σ^2)

n是观测值得个数

p是未知参数的个数

观测向量(因变量):

\[ C = \begin{pmatrix} C_{1} \\ C_{2} \\ \vdots \\ C_{n} \\ \end{pmatrix} \]

自变量矩阵:

\[ X = \begin{pmatrix} 1 & x_{1} \\ 1 & x_{2} \\ \vdots & \vdots \\ 1 & x_{n} \\ \end{pmatrix} \]

\[ \theta = \begin{pmatrix} \theta_{0} \\ \theta_{1} \\ \end{pmatrix} \]

函数关系:

\[ \begin{pmatrix} C_{1} \\ C_{2} \\ \vdots \\ C_{n} \\ \end{pmatrix} = \begin{pmatrix} 1 & x_{1} \\ 1 & x_{2} \\ \vdots & \vdots \\ 1 & x_{n} \\ \end{pmatrix} \bullet \begin{pmatrix} \theta_{0} \\ \theta_{1} \\ \end{pmatrix} = \begin{pmatrix} \theta_{0} + \theta_{1} \bullet x_{1} \\ \theta_{0} + \theta_{1} \bullet x_{2} \\ \vdots \\ \theta_{0} + \theta_{1} \bullet x_{n} \\ \end{pmatrix} \]

求解参数θ估计值的最基本方法是最小二乘法,其思想是在θ的真值处应使观测值与预测值差值的平方和最小:

\[ \sum_{}^{}e_{i}^{2} = \left( C - \text{Xθ} \right)^{2} \]

\[ {= C^{2} - 2\theta^{'}X^{'}C + \left( \text{Xθ} \right)^{2}} \]

\[ {= C^{'}C - 2\theta^{'}X^{'}C + \theta^{'}X^{'}\text{Xθ}} \]

因为\(\sum_{}^{}e_{i}^{2} = C^{'}C - 2\theta^{'}X^{'}C + \theta^{'}X^{'}\text{Xθ}\)函数在最小值处,其相对与θ的导数为零,

所以

\[ \frac{\partial\sum_{}^{}e_{i}^{2}}{\partial\theta} = 0 \]

\[ -2X^{'}C + 2X^{'}\text{Xθ} = 0 \]

\[ X^{'}C = X^{'}\text{Xθ} \]

\[ \theta{= \left( X^{'}X \right)}^{- 1}X^{'}C \]

方差与协方差矩阵可以被顺便求解出来:

\[ {\hat{\sigma}}^{2} = \frac{\text{WRSS}}{\left( N - P \right)} = \frac{\sum_{}^{}{W_{i}\left( C_{i} - {\hat{C}}_{i} \right)}^{2}}{\left( N - P \right)} \]

其中\({\hat{C}}_{i} = f\left( X,\hat{\theta} \right)\),Wi是权重

\[ \text{Var}\left( \hat{C} \right) = \left( X^{'}X \right)^{- 1}{\hat{\sigma}}^{2} \]

4.实例计算:

4.1使用的模型:

此处直接对原始数据求解线性模型,而使用血管内给药的1房室1级速率消除模型求解它,即使用此模型:C=θ0+θ1*time+e

也可写为:C=θ*X+e

3

将数据如图所示的写入Excel工作,这样就可以得到设计矩阵(自变量矩阵,下同)与观测向量

4.2设计矩阵X=A2:B13,

4.3观测向量C=D2:D13,

4.4计算参数向量θ:

4.4.1构造设计矩阵X的转置X'

复制A2:B13单元格,鼠标右键单击B15单元格,选择“选择性粘贴”子菜单,勾选其中的“转置(E)”选项,然后确定,这样就得到了设计矩阵X的转置矩阵X'

4

设计矩阵的转置X'=B15:M16

4.4.2计算X'X

选中B18:C19这四个单元格,然后在输入=MMULT(B15:M16,A2:B13),之后在键盘上同时按下“Ctrl”键和“Shift”键不放,再按下“回车”键完成数组构建。

(小提示:

1.MMULT()是Excel中的矩阵乘法公式,

2.矩阵的乘法有先后顺序之分,右侧的矩阵依次乘左边的矩阵,所以顺序部分反

3.同时按下“Ctrl”键+“Shift”键+“回车”键是Excel中数组公式的输入方式,这种方式输入公式后,选中其中的单元格可以看到公式外自动添加了大括号,

3.要对包含同一个数组公式的单元格进行修改,必须选中所有的包含同一个数组公式的单元进行修改,无法单独的更改其中1个单元格)

5

X'X=B18:C19

4.4.3计算X'X的逆矩阵(X'X)-1

选中B21:C22这四个单元格,然后在输入=MINVERSE(B18:C19),之后同时按下“Ctrl”键+“Shift”键+“回车”键完成数组构建。

(小提示:MINVERSE()是Excel中的求逆矩阵的公式)

6

X'X的逆矩阵(X'X)-1=B21:C22

4.4.4计算(X'X)-1*X'

选中B24:M25这24个单元格,然后在输入=MMULT(B21:C22,B15:M16),之后同时按下“Ctrl”键+“Shift”键+“回车”键完成数组构建。

7

(X'X)-1*X'=B24:M25

4.4.5计算(X'X)-1*X'*C

选中B27:C28这2个单元格,然后在输入=MMULT(B24:M25,D2:D13),之后同时按下“Ctrl”键+“Shift”键+“回车”键完成数组构建。

8

(X'X)-1*X'*C=B27:C28

4.5结果解读

这样便求算出了参数矩阵θ=B27:C28,其中截距=B27=5.337,斜率=C28=-0.419

4.6计算RSS

在得到截距与斜率这两个参数后,求可以计算出因变量C的预测值Pre,观测与预测的残差Res,残差平方和RSS

Pre:在E2单元格输入=$B$27+$B$28*B2,然后下拉填充至E13单元格

Res:在F2单元格输入=D2-E2,然后下拉填充至F13单元格

RSS:在G2单元格输入=SUMSQ(F2:F13)

9

RSS=G2

4.7计算协方差矩阵Var(C)

选中F21这1个单元格,然后在输入=B21*$G$2,之后通过拖拽填充的方式填充F22,G21,G22单元格。

(小提示:这里因为是常数(RSS)与矩阵相乘所以不需要使用矩阵乘法公式)

11

Var(C)=F21:G22

5.小结:

以上就是一个完整的使用Excel逐步手工通过矩阵求解线性模型最小二乘问题的完整步骤,理解上述步骤对之后掌握其他方法的基础!