最小二乘椭球拟合 知乎_线性回归,最小二乘,矩阵条件数,QR分解

本文讲解线性回归与线性最小二乘问题的正规方程(normal equations),矩阵条件数(condition number),以及用Cholesky分解和QR分解来解正规方程的步骤。

1. 线性回归(linear regression) & 最小二乘问题 (least squares problem)

考虑这样一个问题:给定

equation?tex=N 个样本点
equation?tex=%5Cleft%28x_%7Bn1%7D%2C+x_%7Bn2%7D%2C+%5Cldots%2C+x_%7BnK%7D%2C+y_n+%5Cright%29%2C+n%3D1%2C%5Cldots%2CN ,我们想建立起如下的关系,让我们能通过输入变量
equation?tex=%5Cleft%28x_%7B1%7D%2C+x_%7B2%7D%2C+%5Cldots%2C+x_%7BK%7D+%5Cright%29 来预测输出变量
equation?tex=y 的值:

equation?tex=y+%3D+w_0+%2B+%5Csum_%7Bi%3D1%7D%5E%7BK%7D%7Bw_i+x_i%7D+%5C%5C

为方便表示,记权重向量

equation?tex=%5Cmathbf%7Bw%7D+%3D+%5Cleft%5B+w_0%2C+w_1%2C+%5Cldots%2C+w_K+%5Cright%5D+%5ET ,输入向量
equation?tex=%5Cmathbf%7Bx%7D+%3D+%5Cleft%5B+1%2C+x_1%2C+%5Cldots%2C+x_K+%5Cright%5D+%5ET ,则线性回归(linear regression)的目标即找到如下的关系:

equation?tex=y+%3D+%5Cmathbf%7Bw%5ET+x%7D+%5Ctag%7B1%7D%5C%5C

假如所有样本点都满足(1)式(即这个超平面经过所有的样本点),则我们求解如下的线性系统即可得到权重向量:

equation?tex=%5Cbegin%7Bbmatrix%7D+1%2Cx_%7B11%7D%2Cx_%7B12%7D%2C%5Cldots%2Cx_%7B1K%7D%5C%5C+1%2Cx_%7B21%7D%2Cx_%7B22%7D%2C%5Cldots%2Cx_%7B2K%7D%5C%5C+%5Cvdots%5C%5C+1%2Cx_%7BN1%7D%2Cx_%7BN2%7D%2C%5Cldots%2Cx_%7BNK%7D+%5Cend%7Bbmatrix%7D+%5Cbegin%7Bbmatrix%7D+w_0%5C%5Cw_1%5C%5C%5Cvdots%5C%5Cw_K+%5Cend%7Bbmatrix%7D+%3D%5Cbegin%7Bbmatrix%7D+y_0%5C%5Cy_1%5C%5C%5Cvdots%5C%5Cy_N+%5Cend%7Bbmatrix%7D%5C%5C

equation?tex=%5Cmathbf%7Bx_n%7D+%3D+%5Cleft%5B+1%2C+x_%7Bn1%7D%2C+%5Cldots%2C+x_%7BnK%7D+%5Cright%5D+%5ET
equation?tex=%5Cmathbf%7BX%7D+%3D+%5Cleft%5B+%5Cmathbf%7Bx_1%2C+%5Cldots%2C+x_N%7D+%5Cright%5D%5ET ,即求解
equation?tex=%5Cmathbf%7BXw%3Dy%7D

然而,一般来说

equation?tex=K%5Cll+N ,系统超定(overdetermined, 方程个数大于未知数个数),一般无解,也就是说不存在能通过所有点的超平面。那么我们如何计算线性回归模型的权重系数呢?我们希望
equation?tex=%5Cmathbf%7Bw%7D 使预测误差尽可能的小,即求其最小二乘解,形成如下无约束的优化问题(线性最小二乘问题):

equation?tex=%5Cmin_%7B%5Cmathbf%7Bw%7D%7D+%5Csum_%7Bi%3D1%7D%5E%7BN%7D%7B%5Cleft%28+%5Cmathbf%7Bw%5ET+x_i%7D+-+y_i+%5Cright%29%7D%5E2+%5C%5C

用矩阵和向量表示即

equation?tex=%5Cmin_%7B%5Cmathbf+w%7D+%5Cpsi+%28%5Cmathbf+w%29+%3D+%5CVert+%5Cmathbf%7BXw-y%7D+%5CVert+_2+%5E2

<多项式拟合问题(Polynomial data fitting)>

给定

equation?tex=N 个样本点
equation?tex=%5Cleft%28x_n%2C+y_n+%5Cright%29%2C+n%3D1%2C%5Cldots%2CN ,用
equation?tex=K 阶多项式
equation?tex=y+%3D+w_0+%2B+%5Csum_%7Bk%3D1%7D%5E%7BK%7D%7Bw_k+x%5Ek%7D 来拟合一元函数
equation?tex=y%3Df%28x%29 ,即求解线性系统:

equation?tex=%5Cbegin%7Bbmatrix%7D+1%2Cx_1%2Cx_1%5E2%2C%5Cldots%2Cx_1%5EK%5C%5C+1%2Cx_2%2Cx_2%5E2%2C%5Cldots%2Cx_2%5EK%5C%5C+%5Cvdots%5C%5C+1%2Cx_N%2Cx_N%5E2%2C%5Cldots%2Cx_N%5EK+%5Cend%7Bbmatrix%7D+%5Cbegin%7Bbmatrix%7D+w_0%5C%5Cw_1%5C%5C%5Cvdots%5C%5Cw_K+%5Cend%7Bbmatrix%7D+%3D%5Cbegin%7Bbmatrix%7D+y_0%5C%5Cy_1%5C%5C%5Cvdots%5C%5Cy_N+%5Cend%7Bbmatrix%7D%5C%5C

记为

equation?tex=%5Cmathbf%7BXw%3Dy%7D ,同样,当
equation?tex=K%5Cll+N 时系统超定,只能解最小二乘问题
equation?tex=%5Cmin_%7B%5Cmathbf+w%7D+%5Cpsi+%28%5Cmathbf+w%29+%3D+%5CVert+%5Cmathbf%7BXw-y%7D+%5CVert+_2+%5E2

2. 正规方程 (normal equations) & 伪逆

解最小二乘问题

equation?tex=%5Cmin_%7B%5Cmathbf+w%7D+%5Cpsi+%28%5Cmathbf+w%29+%3D+%5CVert+%5Cmathbf%7BXw-y%7D+%5CVert+_2+%5E2

equation?tex=%5Cbegin%7Balign%7D+%5Cpsi+%28%5Cmathbf+w%29+%26%3D+%28%5Cmathbf%7BXw-y%7D%29%5ET+%28%5Cmathbf%7BXw-y%7D%29+%5C%5C+%26%3D+%5Cmathbf%7Bw%5ET+X%5ET+X+w+-+w%5ET+X%5ET+y+-+y%5ET+X+w+%2B+y%5ET+y%7D+%5Cend%7Balign%7D+%5C%5C

注意上式中所有项均为标量,故

equation?tex=%5Cmathbf%7Bw%5ET+X%5ET+y+%3D+%28y%5ET+X+w%29%5ET+%3D+y%5ET+X+w%7D

equation?tex=%5CRightarrow+%5Cbegin%7Balign%7D+%5Cpsi+%28%5Cmathbf+w%29%3D+%5Cmathbf%7Bw%5ET+X%5ET+X+w%7D+-+2%5Cmathbf%7Bw%5ET+X%5ET+y+%2B+y%5ET+y%7D+%5Cend%7Balign%7D+%5C%5C

假设

equation?tex=%5Cmathbf%7BX%7D 为列满秩矩阵,则
equation?tex=%5Cmathbf%7BX%5ET+X%7D 正定,目标函数
equation?tex=%5Cpsi+%28%5Cmathbf+w%29 为凸函数。

equation?tex=%5Cpsi+%28%5Cmathbf+w%29 求梯度并令其为
equation?tex=%5Cmathbf%7B0%7D

equation?tex=%5Cfrac%7B%5Cpartial+%5Cpsi%7D%7B%5Cpartial+%5Cmathbf%7Bw%7D%7D++%3D+2%5Cmathbf%7BX%5ET+X+w%7D+-2%5Cmathbf%7BX%5ET+y+%3D+0%7D+%5C%5C

equation?tex=%5CRightarrow+%5Cmathbf%7BX%5ET+X+w%7D+%3D+%5Cmathbf%7BX%5ET+y%7D+%5Ctag%7B2%7D%5C%5C

(2)式称为最小二乘问题的正规方程(normal equations)。由(2)式:

equation?tex=%5Cmathbf+w+%3D+%5Cmathbf%7B+%5Cleft%28X%5ET+X%5Cright%29%5E%7B-1%7D+X%5ET+y%7D%5C%5C

定义矩阵

equation?tex=%5Cmathbf%7BX%7D 的伪逆(pseudo-inverse,Moore-Penrose inverse)为:

equation?tex=%5Cmathbf%7BX%7D%5E%5Cdagger+%3D+%5Cmathbf%7B+%5Cleft%28X%5ET+X%5Cright%29%5E%7B-1%7D+X%5ET%7D%5C%5C

则有

equation?tex=%5Cmathbf+w+%3D%5Cmathbf%7BX%7D%5E%5Cdagger+%5Cmathbf+y

3. Cholesky分解解正规方程

可以对矩阵

equation?tex=%5Cmathbf%7BX%5ET+X%7D 进行Cholesky分解来解最小二乘问题的正规方程(参考文献[1], Chapter 6, page 145):

1) 计算

equation?tex=%5Cmathbf%7BA+%5Cleftarrow+X%5ET+X%7D
equation?tex=%5Cmathbf%7Bb+%5Cleftarrow+X%5ET+y%7D

2) 对

equation?tex=%5Cmathbf%7BA%7D 进行Cholesky分解,即计算下三角矩阵
equation?tex=%5Cmathbf%7BG%7D ,使
equation?tex=%5Cmathbf%7BA+%3D+G+G%5ET%7D

3) 解下三角系统

equation?tex=%5Cmathbf%7BGz%3Db%7D 得到
equation?tex=%5Cmathbf%7Bz%7D

4) 解上三角系统

equation?tex=%5Cmathbf%7BG%5ET+w%3Dz%7D 得到
equation?tex=%5Cmathbf%7Bw%7D

4. 矩阵的条件数(condition number)

记线性系统为

equation?tex=%5Cmathbf%7BAx%3Db%7D
equation?tex=%5Cmathbf%7BA%7D 为系数矩阵(这里的字母与前文无关),假设我们通过某种方法得到其解为
equation?tex=%5Cmathbf%7B%5Chat%7Bx%7D%7D ,而准确解(未知)为
equation?tex=%5Cmathbf%7Bx_e%7D ,则相对误差为
equation?tex=%5Cfrac%7B%5CVert+%5Cmathbf%7Bx_e-%5Chat+x%7D%5CVert%7D+%7B%5CVert+%5Cmathbf%7Bx_e%7D+%5CVert%7D 。但是,我们一般不知道准确解
equation?tex=%5Cmathbf%7Bx_e%7D 的值,因此只能通过residual
equation?tex=%5Cmathbf%7B%5Chat%7Br%7D%3Db-A%5Chat+x%7D 来判断我们的解是否准确。由于舍入误差(round off error)的存在,
equation?tex=%5Cmathbf%7B%5Chat%7Br%7D%7D 往往不为
equation?tex=%5Cmathbf%7B0%7D ;在某些情况下,虽然
equation?tex=%5Cmathbf%7B%5Chat%7Br%7D%7D 的范数很小,但
equation?tex=%5Cmathbf%7B%5Chat%7Bx%7D%7D 却和
equation?tex=%5Cmathbf%7Bx_e%7D相差很远。这里边就涉及到矩阵条件数(condition number)的问题。

<4.1 可逆矩阵的条件数>

equation?tex=%5Cmathbf%7BA%7D 可逆时,residual为
equation?tex=%5Cmathbf%7B%5Chat%7Br%7D%3Db-A%5Chat+x%3DAx_e-A%5Chat+x%3DA%28x_e-%5Chat+x%29%7D

equation?tex=%5CRightarrow+%5Cmathbf%7Bx_e-%5Chat+x+%3D+A%5E%7B-1%7D%5Chat%7Br%7D%7D%5C%5C

选择向量范数和相应的矩阵范数,左右两边取范数得

equation?tex=%5CVert+%5Cmathbf%7Bx_e-%5Chat+x%5CVert+%3D+%5CVert+A%5E%7B-1%7D%5Chat%7Br%7D%7D+%5CVert+%5Cleq+%5Cmathbf%7B%5CVert+A%5E%7B-1%7D%5CVert+%5CVert+%5Chat%7Br%7D%5CVert+%7D+%5C%5C

equation?tex=%5CVert+%5Cmathbf%7Bb%7D+%5CVert+%3D+%5CVert+%5Cmathbf%7BAx_e%7D+%5CVert+%5Cleq+%5Cmathbf%7B%5CVert+A%5CVert+%5CVert+x_e%5CVert%7D

equation?tex=%5CRightarrow+%5Cfrac%7B1%7D%7B%5CVert+%5Cmathbf%7Bx_e%7D+%5CVert%7D+%5Cleq+%5Cfrac%7B%5CVert+%5Cmathbf%7BA%7D+%5CVert%7D%7B%5CVert+%5Cmathbf%7Bb%7D+%5CVert%7D%5C%5C

equation?tex=%5CRightarrow%5Cfrac%7B%5CVert+%5Cmathbf%7Bx_e-%5Chat+x%7D%5CVert%7D+%7B%5CVert+%5Cmathbf%7Bx_e%7D+%5CVert%7D+%5Cleq+%5Cmathbf%7B%5CVert+A%5CVert+%5CVert+A%5E%7B-1%7D%5CVert%7D+%5Cfrac%7B%5CVert+%5Cmathbf%7B%5Chat%7Br%7D%7D+%5CVert%7D%7B%5CVert+%5Cmathbf%7Bb%7D+%5CVert%7D+%5C%5C

定义矩阵

equation?tex=%5Cmathbf%7BA%7D 的条件数为
equation?tex=%5Ckappa%28%5Cmathbf+A%29%3D%5Cmathbf%7B%5CVert+A%5CVert+%5CVert+A%5E%7B-1%7D%5CVert%7D ,则

equation?tex=%5Cfrac%7B%5CVert+%5Cmathbf%7Bx_e-%5Chat+x%7D%5CVert%7D+%7B%5CVert+%5Cmathbf%7Bx_e%7D+%5CVert%7D+%5Cleq+%5Ckappa%28%5Cmathbf+A%29+%5Cfrac%7B%5CVert+%5Cmathbf%7B%5Chat%7Br%7D%7D+%5CVert%7D%7B%5CVert+%5Cmathbf%7Bb%7D+%5CVert%7D+%5C%5C

上式表明,线性系统解的相对误差由residual和条件数约束。

由于

equation?tex=%5Ckappa%28%5Cmathbf+A%29%3D%5Cmathbf%7B%5CVert+A%5CVert+%5CVert+A%5E%7B-1%7D%5CVert%7D%5Cgeq%5Cmathbf%7B%5CVert+A+A%5E%7B-1%7D%5CVert%7D+%3D+%5Cmathbf%7B%5CVert+I%5CVert%7D+%3D1 ,所以如果矩阵的条件数为1,则矩阵是ideally conditioned;当矩阵接近奇异时,条件数较大,解的相对误差可能较大。

<4.2 正交矩阵的条件数>

equation?tex=%5Cmathbf%7BQ%7D 为正交矩阵,
equation?tex=%5Cmathbf%7BQ%5ET%3DQ%5E%7B-1%7D%7D ,则对任意满足
equation?tex=%5CVert+%5Cmathbf%7Bx%7D+%5CVert_2%3D1
equation?tex=%5Cmathbf%7Bx%7D ,有

equation?tex=%5CVert+%5Cmathbf%7BQx%7D+%5CVert_2%3D+%5Cmathbf%7Bx%5ETQ%5ETQx%7D%3D%5Cmathbf%7Bx%5ETx%7D%3D1%5C%5C

根据矩阵范数的定义,

equation?tex=%5CVert+%5Cmathbf%7BQ%7D+%5CVert_2%3D1

(或直接由

equation?tex=%5Cmathbf%7B%5CVert+Q%5CVert%7D_2%3D%5Csqrt%7B%5Crho%5Cleft%28++%5Cmathbf%7BQ%5ET+Q%7D+%5Cright%29%7D%3D%5Csqrt%7B%5Crho%5Cleft%28++%5Cmathbf%7BI%7D+%5Cright%29%7D%3D1 。)

同理,

equation?tex=%5CVert+%5Cmathbf%7BQ%5E%7B-1%7D%7D+%5CVert_2%3D%5CVert+%5Cmathbf%7BQ%5ET%7D+%5CVert_2%3D1 ,所以,
equation?tex=%5Ckappa_2%28%5Cmathbf+Q%29%3D1

乘正交矩阵不会放大误差,这是其非常好的性质。

<4.3 对称正定矩阵的条件数>

equation?tex=%5Cmathbf%7BA%7D
equation?tex=n 阶对称正定矩阵,其
equation?tex=n 个特征值
equation?tex=%5Clambda_1%5Cgeq+%5Clambda_2+%5Cgeq+%5Ccdots+%5Cgeq+%5Clambda_n+%5Cgt+0 ,则其
equation?tex=l2 范数:

equation?tex=%5Cmathbf%7B%5CVert+A%5CVert%7D_2%3D%5Csqrt%7B%5Crho%5Cleft%28++%5Cmathbf%7BA%5ET+A%7D+%5Cright%29%7D%3D%5Csqrt%7B%5Clambda_1%5E2%7D+%3D+%5Clambda_1%5C%5C

equation?tex=%5Cmathbf%7BA%5E%7B-1%7D%7D也是对称正定阵,特征值:
equation?tex=%5Cfrac%7B1%7D%7B%5Clambda_n%7D%5Cgeq%5Cfrac%7B1%7D%7B%5Clambda_%7Bn-1%7D%7D+%5Cgeq+%5Ccdots+%5Cgeq+%5Cfrac%7B1%7D%7B%5Clambda_1%7D+%5Cgt+0
equation?tex=%5Cmathbf%7B%5CVert+A%5E%7B-1%7D%5CVert%7D_2%3D%5Cfrac%7B1%7D%7B%5Clambda_n%7D ,所以

equation?tex=%5Ckappa_2%28%5Cmathbf+A%29%3D%5Cmathbf%7B%5CVert+A%5CVert_2+%5CVert+A%5E%7B-1%7D%5CVert_2%7D%3D%5Cfrac%7B%5Clambda_1%7D%7B%5Clambda_n%7D%5C%5C

即对称正定阵的

equation?tex=l_2 条件数为其最大特征值与最小特征值之比。

<4.4 当A不可逆时>

equation?tex=%5Cmathbf%7BA%7D
equation?tex=m%5Ctimes+n 阶矩阵,
equation?tex=m%5Cgt+n ,则

equation?tex=%5Cmathbf%7B%5Chat%7Br%7D%3DA%28x_e-%5Chat+x%29%7D+%5CRightarrow+%5Cmathbf%7Bx_e-%5Chat+x+%3D+A%5E%5Cdagger%5Chat%7Br%7D%7D%5C%5C

和前面的过程类似,可以得到

equation?tex=%5Ckappa%28%5Cmathbf+A%29%3D%5Cmathbf%7B%5CVert+A%5CVert+%5CVert+A%5E%5Cdagger%5CVert%7D

equation?tex=%5Cmathbf%7BA%7D 的奇异值为
equation?tex=%5Csigma_1%5Cgeq+%5Csigma_2+%5Cgeq+%5Ccdots+%5Cgeq+%5Csigma_n+%5Cgt+0 ,通过SVD可以推导
equation?tex=%5Cmathbf%7BA%7D 的条件数为
equation?tex=%5Ckappa_2%28%5Cmathbf+A%29%3D%5Cfrac%7B%5Csigma_1%7D%7B%5Csigma_n%7D (参考文献[1], Chapter 6, page 153)。

而直接解正规方程

equation?tex=%5Cmathbf%7BA%5ET+A+x%7D+%3D+%5Cmathbf%7BA%5ET+b%7D 的条件数为

equation?tex=%5Ckappa_2%28%5Cmathbf%7BA%5ET+A%7D%29%3D%5Cfrac%7B%5Clambda_1%7D%7B%5Clambda_n%7D%3D%5Cfrac%7B%5Csigma_1%5E2%7D%7B%5Csigma_n%5E2%7D%3D%5Ckappa_2%28%5Cmathbf+A%29%5E2%5C%5C

上式说明由直接解正规方程得到的解的相对误差由

equation?tex=%5Ckappa_2%28%5Cmathbf+A%29%5E2 约束。当
equation?tex=%5Ckappa_2%28%5Cmathbf+A%29 较大时,即使residual很小,解的相对误差也可能很大。因此我们希望寻求一种算法,使相对误差由
equation?tex=%5Ckappa_2%28%5Cmathbf+A%29 约束,而不是
equation?tex=%5Ckappa_2%28%5Cmathbf+A%29%5E2 。这就是下面要介绍的QR分解。

5. 最小二乘问题的QR分解(full size & economy size)

<5.1 Full size QR decomposition>

equation?tex=%5Cmathbf%7BA_%7Bm%5Ctimes+n%7D%7D 为列满秩矩阵,
equation?tex=m%5Cgt+n%2C+rank%28%5Cmathbf%7BA%7D%29%3Dn 。对
equation?tex=%5Cmathbf%7BA%7D 进行QR分解:

equation?tex=%5Cmathbf%7BA_%7Bm%5Ctimes+n%7D%3DQ_%7Bm%5Ctimes+m%7D%7D+%5Cleft%5B++%5Cbegin%7Bmatrix%7D%5Cmathbf%7BR_%7Bn%5Ctimes+n%7D%5C%5C0_%7B%28m-n%29%5Ctimes+n%7D%7D%5Cend%7Bmatrix%7D%5Cright%5D%5C%5C

其中

equation?tex=%5Cmathbf%7BQ%7D 为正交矩阵,
equation?tex=%5Cmathbf%7BR%7D 为上三角矩阵。

则对最小二乘问题

equation?tex=%5Cmin_%7B%5Cmathbf+x%7D+%5CVert+%5Cmathbf%7Br%7D+%5CVert+_2+%5E2+%3D+%5CVert+%5Cmathbf%7Bb-Ax%7D+%5CVert+_2+%5E2 ,有

equation?tex=%5Cbegin%7Balign%7D+%5CVert+%5Cmathbf%7Br%7D+%5CVert+_2%5E2+%26%3D+%5Cleft%5CVert+%5Cmathbf%7Bb-Q%7D+%5Cleft%5B++%5Cbegin%7Bmatrix%7D%5Cmathbf%7BR%5C%5C0%7D%5Cend%7Bmatrix%7D%5Cright%5D%5Cmathbf%7Bx%7D%5Cright%5CVert+_2%5E2+%3D+%5Cleft%5CVert+%5Cmathbf%7BQ%5ETb-Q%5ETQ%7D+%5Cleft%5B++%5Cbegin%7Bmatrix%7D%5Cmathbf%7BR%5C%5C0%7D%5Cend%7Bmatrix%7D%5Cright%5D+%5Cmathbf%7Bx%7D%5Cright%5CVert+_2%5E2+%5C%5C%26%3D+%5Cleft%5CVert+%5Cmathbf%7BQ%5ETb-%7D+%5Cleft%5B++%5Cbegin%7Bmatrix%7D%5Cmathbf%7BR%5C%5C0%7D%5Cend%7Bmatrix%7D%5Cright%5D%5Cmathbf%7Bx%7D+%5Cright%5CVert+_2%5E2+%3D+%5Cleft%5CVert++%5Cleft%5B++%5Cbegin%7Bmatrix%7D%5Cmathbf%7Bc%5C%5Cd%7D%5Cend%7Bmatrix%7D%5Cright%5D-%5Cleft%5B++%5Cbegin%7Bmatrix%7D%5Cmathbf%7BRx%5C%5C0%7D%5Cend%7Bmatrix%7D%5Cright%5D+%5Cright%5CVert+_2%5E2+%5C%5C%26%3D+%5Cleft%5CVert+%5Cmathbf%7Bc-Rx%7D+%5Cright%5CVert+_2%5E2+%2B+%5Cleft%5CVert+%5Cmathbf%7Bd%7D+%5Cright%5CVert+_2%5E2+%5Cend%7Balign%7D%5C%5C

(左乘正交矩阵

equation?tex=%5Cmathbf%7BQ%5ET%7D 不改变向量的2范数。)

所以

equation?tex=%5Cmin_%7B%5Cmathbf+x%7D+%5CVert+%5Cmathbf%7Br%7D+%5CVert+_2+%5E2
equation?tex=%5Cmin_%7B%5Cmathbf+x%7D+%5Cleft%5CVert+%5Cmathbf%7Bc-Rx%7D+%5Cright%5CVert+_2%5E2 ,当
equation?tex=%5Cmathbf%7BRx%3Dc%7D 时为最优解,此时
equation?tex=%5CVert+%5Cmathbf%7Br%7D+%5CVert+_2+%5E2+%3D+%5CVert+%5Cmathbf%7Bd%7D+%5CVert+_2+%5E2

注意现在我们求解的是上三角系统

equation?tex=%5Cmathbf%7BRx%3Dc%7D ,其条件数
equation?tex=%5Ckappa_2%28%5Cmathbf+R%29+%3D+%5Ckappa_2%28%5Cmathbf+A%29 ,所以误差由
equation?tex=%5Ckappa_2%28%5Cmathbf+A%29 约束,而不是
equation?tex=%5Ckappa_2%28%5Cmathbf+A%29%5E2

<5.2 Economy size QR decomposition>

Economy size的QR分解为:

equation?tex=%5Cmathbf%7BA_%7Bm%5Ctimes+n%7D%3DQ_%7Bm%5Ctimes+n%7DR_%7Bn%5Ctimes+n%7D%7D ,此时
equation?tex=%5Cmathbf%7BQ%7D 各列正交,
equation?tex=%5Cmathbf%7BR%7D 为上三角矩阵。则

equation?tex=%5Cbegin%7Balign%7D+%5Cmathbf+x+%26%3D%5Cmathbf%7BA%7D%5E%5Cdagger+%5Cmathbf+b+%3D+%5Cmathbf%7B+%5Cleft%28A%5ET+A%5Cright%29%5E%7B-1%7D+A%5ET+b%7D+%3D+%5Cmathbf%7B+%5Cleft%28R%5ET+Q%5ET+QR%5Cright%29%5E%7B-1%7D+R%5ET+Q%5ET+b%7D+%5C%5C%26%3D+%5Cmathbf%7B+%5Cleft%28R%5ETR%5Cright%29%5E%7B-1%7D+R%5ET+Q%5ET+b%7D+%3D+%5Cmathbf%7B+R%5E%7B-1%7D+Q%5ET+b%7D+%5Cend%7Balign%7D%5C%5C

所以只需解上三角系统

equation?tex=%5Cmathbf%7BRx%3DQ%5ETb%7D 即可。此时条件数
equation?tex=%5Ckappa_2%28%5Cmathbf+R%29+%3D+%5Ckappa_2%28%5Cmathbf+A%29

综上,将线性最小二乘问题正规方程的QR分解法步骤表述如下(参考文献[1], Chapter 6, page 156):

1) QR分解

full size:

equation?tex=%5Cmathbf%7BA_%7Bm%5Ctimes+n%7D%3DQ_%7Bm%5Ctimes+m%7D%7D+%5Cleft%5B++%5Cbegin%7Bmatrix%7D%5Cmathbf%7BR_%7Bn%5Ctimes+n%7D%5C%5C0_%7B%28m-n%29%5Ctimes+n%7D%7D%5Cend%7Bmatrix%7D%5Cright%5D
equation?tex=%5Cmathbf%7BQ%7D 为正交矩阵,
equation?tex=%5Cmathbf%7BR%7D 为上三角矩阵;

economy size:

equation?tex=%5Cmathbf%7BA_%7Bm%5Ctimes+n%7D%3DQ_%7Bm%5Ctimes+n%7DR_%7Bn%5Ctimes+n%7D%7D
equation?tex=%5Cmathbf%7BQ%7D 各列正交,
equation?tex=%5Cmathbf%7BR%7D 为上三角矩阵;

2) full size:

equation?tex=%5Cleft%5B+%5Cbegin%7Bmatrix%7D%5Cmathbf%7Bc%5C%5Cd%7D%5Cend%7Bmatrix%7D%5Cright%5D%3D%5Cmathbf%7BQ%5ETb%7D ;economy size:
equation?tex=%5Cmathbf%7Bc%3DQ%5ETb%7D

3) 解上三角系统

equation?tex=%5Cmathbf%7BRx%3Dc%7D 得到
equation?tex=%5Cmathbf%7Bx%7D

参考文献

[1] Uri M. Ascher, Chen Greif. A First Course in Numerical Methods, SIAM, 2011. (Chapter 5, 6)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是磁力计校准最小二乘椭球拟合的C代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX_POINTS 1000 #define MAX_VARS 10 double X[MAX_POINTS][MAX_VARS], X_T[MAX_VARS][MAX_POINTS], X_T_X[MAX_VARS][MAX_VARS], X_T_Y[MAX_VARS], A[MAX_VARS]; double Y[MAX_POINTS]; int num_points, num_vars; void transpose(double X[][MAX_VARS], int n, int m, double X_T[][MAX_POINTS]) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { X_T[j][i] = X[i][j]; } } } void multiply(double X[][MAX_VARS], int n, int m, double Y[MAX_VARS], double Z[MAX_VARS]) { int i, j; for (i = 0; i < n; i++) { Z[i] = 0.0; for (j = 0; j < m; j++) { Z[i] += X[i][j] * Y[j]; } } } void matrix_multiply(double X[][MAX_VARS], double Y[][MAX_VARS], int n, int m, int p, double Z[][MAX_VARS]) { int i, j, k; for (i = 0; i < n; i++) { for (j = 0; j < p; j++) { Z[i][j] = 0.0; for (k = 0; k < m; k++) { Z[i][j] += X[i][k] * Y[k][j]; } } } } void invert(double X[][MAX_VARS], int n, double Y[][MAX_VARS]) { int i, j, k; double temp; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { Y[i][j] = (i == j) ? 1.0 : 0.0; } } for (k = 0; k < n; k++) { temp = X[k][k]; for (j = 0; j < n; j++) { X[k][j] /= temp; Y[k][j] /= temp; } for (i = k + 1; i < n; i++) { temp = X[i][k]; for (j = 0; j < n; j++) { X[i][j] -= X[k][j] * temp; Y[i][j] -= Y[k][j] * temp; } } } for (k = n - 1; k > 0; k--) { for (i = k - 1; i >= 0; i--) { temp = X[i][k]; for (j = 0; j < n; j++) { X[i][j] -= X[k][j] * temp; Y[i][j] -= Y[k][j] * temp; } } } } void fit_ellipsoid(double X[][MAX_VARS], double Y[MAX_POINTS], int n, int m, double A[MAX_VARS]) { int i, j; double B[MAX_VARS], C[MAX_VARS]; transpose(X, n, m, X_T); matrix_multiply(X_T, X, m, n, m, X_T_X); matrix_multiply(X_T, Y, m, n, 1, X_T_Y); invert(X_T_X, m, B); multiply(B, X_T_Y, m, m, C); for (i = 0; i < m; i++) { A[i] = C[i]; } } int main() { int i, j; printf("Enter number of points: "); scanf("%d", &num_points); printf("Enter number of variables: "); scanf("%d", &num_vars); printf("Enter data:\n"); for (i = 0; i < num_points; i++) { for (j = 0; j < num_vars; j++) { scanf("%lf", &X[i][j]); } scanf("%lf", &Y[i]); } fit_ellipsoid(X, Y, num_points, num_vars, A); printf("Coefficients:\n"); for (i = 0; i < num_vars; i++) { printf("%lf ", A[i]); } printf("\n"); return 0; } ``` 该代码实现了磁力计校准最小二乘椭球拟合的算法,可以通过输入据来进行拟合并输出拟合结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值