当前位置: 首页 > news >正文

最小二乘问题详解2:线性最小二乘求解

1. 引言

复习上一篇文章《最小二乘问题详解1:线性最小二乘》中的知识,对于一个线性问题模型:

f(x;θ)=Aθf(x; \theta) = A\theta f(x;θ)=Aθ

那么线性最小二乘问题可以表达为求一组待定值θ\thetaθ,使得残差的平方和最小:

min⁡θ∥Aθ−b∥2\min_{\theta} \|A\theta - b\|^2 θminAθb2

本质上是求解超定线性方程组:

Aθ=bA\theta = b Aθ=b

具体的线性最小二乘解是:

θ∗=(ATA)−1ATb(1)\theta^* = (A^T A)^{-1} A^T b \tag{1} θ=(ATA)1ATb(1)

2. 求解

2.1 问题

虽然线性最小二乘解已经给出,但是并不意味着在实际的数值计算中就能按照式(1)来进行求解。一个典型的问题就是求逆矩阵:在工程实践和数值计算中,直接求解逆矩阵通常是一个性能消耗大且可能不精确的操作,应该尽量避免。举例来说,我们按照大学本科《线性代数》课程中的方法写程序来求解一个逆矩阵,假设使用伴随矩阵法:

A−1=1det⁡(A)⋅adj(A)A^{-1} = \frac{1}{\det(A)} \cdot \text{adj}(A) A1=det(A)1adj(A)

其中:

  • det⁡(A)\det(A)det(A) 是矩阵 AAA 的行列式。
  • adj(A)\text{adj}(A)adj(A)AAA 的伴随矩阵。

为了求解伴随矩阵 adj(A)\text{adj}(A)adj(A)

  1. 求代数余子式 (Cofactor):对于矩阵 AAA 中的每一个元素 aija_{ij}aij,计算其代数余子式 CijC_{ij}Cij

    • 代数余子式 Cij=(−1)i+j⋅MijC_{ij} = (-1)^{i+j} \cdot M_{ij}Cij=(1)i+jMij
    • MijM_{ij}Mij 是删去 AAA 的第 iii 行和第 jjj 列后得到的子矩阵的行列式(称为余子式)。
  2. 构造余子式矩阵:将所有代数余子式 CijC_{ij}Cij 按照原来的位置排列,形成一个新矩阵 CCC(称为余子式矩阵)。

  3. 转置:将余子式矩阵 CCC 进行转置,得到的矩阵就是伴随矩阵 adj(A)\text{adj}(A)adj(A)

    adj(A)=CT\text{adj}(A) = C^T adj(A)=CT

  4. 代入公式:将 det⁡(A)\det(A)det(A)adj(A)\text{adj}(A)adj(A) 代入公式 A−1=1det⁡(A)⋅adj(A)A^{-1} = \frac{1}{\det(A)} \cdot \text{adj}(A)A1=det(A)1adj(A) 即可。

这里我们大概能估算,使用伴随矩阵法求逆矩阵的理论复杂度是O(n!)O(n!)O(n!),这是一个阶乘级的增长,算法效率非常低。《线性代数》中介绍的另外一种算法高斯消元法也只能达到O(n3)O(n^3)O(n3),呈指数级增加。其实效率只是一方面的问题,使用计算机求解的另外一个问题是舍入误差累积:在计算机中,浮点数运算存在固有的舍入误差;求逆过程涉及大量的除法和减法运算,这些误差会在计算过程中不断累积和传播。总而言之,使用通解求解逆矩阵,可能存在不精确且性能消耗大的问题。

2.2 QR分解

那么不使用逆矩阵怎么办呢?我们需要注意的是,最小二乘问题的本质是求解,而不是求逆矩阵,因此关键是要求解正规方程

ATAθ=ATbA^T A \theta = A^T b ATAθ=ATb

对矩阵AAA作QR分解:

A=Q1RA = Q_1 R A=Q1R

其中:

  • Q1∈Rm×nQ_1\in\mathbb R^{m\times n}Q1Rm×n 列正交,满足Q1TQ1=InQ_1^T Q_1 = I_nQ1TQ1=In
  • R∈Rn×nR\in\mathbb R^{n\times n}RRn×n是上三角矩阵,如果AAA列满秩,则RRR的对角元均非零,可逆。

那么把A=Q1RA=Q_1RA=Q1R代入正规方程,得到:

(Q1R)T(Q1R)x=(Q1R)Tb(Q_1 R)^T (Q_1 R) x = (Q_1 R)^T b (Q1R)T(Q1R)x=(Q1R)Tb

左边整理,因为Q1TQ1=InQ_1^T Q_1 = I_nQ1TQ1=In

RTQ1TQ1Rx=RTRxR^T Q_1^T Q_1 R x = R^T R x RTQ1TQ1Rx=RTRx

右边为

RTQ1TbR^T Q_1^T b RTQ1Tb

因此正规方程等价于

RTRx=RT(Q1Tb)\boxed{R^T R x = R^T (Q_1^T b)} RTRx=RT(Q1Tb)

RRR可逆(即AAA满秩,rank⁡(A)=n\operatorname{rank}(A)=nrank(A)=n),则RTR^TRT也可逆。左右两边左乘(RT)−1(R^T)^{-1}(RT)1,得到:

Rx=Q1Tb.R x = Q_1^T b. Rx=Q1Tb.

c=Q1⊤bc = Q_1^\top bc=Q1b(这是一个长度为nnn的向量),于是我们得到一个简单的上三角线性系统

Rx=c,c=Q1Tb\boxed{R x = c,\qquad c = Q_1^T b} Rx=c,c=Q1Tb

这就是QR方法把正规方程化简得到的核心结果:只需解上三角方程Rx=Q1TbR x = Q_1^T bRx=Q1Tb

以上只是对AAA列满秩的情况做了推导,如果AAA列满秩,那么QR分解可以表示为x=R−1Q1⊤bx = R^{-1}Q_1^\top bx=R1Q1b;如果AAA列不满秩(RRR奇异),需要使用列主元QR方法对RTRx=RT(Q1Tb)R^T R x = R^T (Q_1^T b)RTRx=RT(Q1Tb)进行求解,或者干脆使用下面要介绍的SVD分解(奇异值分解)法。

2.3 SVD分解

另外一种求解的方法是SVD分解。对任意矩阵AAA,存在奇异值分解:

A=UΣVT\boxed{A = U\Sigma V^T} A=UΣVT

其中:

  • U∈Rm×mU\in\mathbb R^{m\times m}URm×m为正交(列为左奇异向量),

  • V∈Rn×nV\in\mathbb R^{n\times n}VRn×n为正交(列为右奇异向量),

  • Σ∈Rm×n\Sigma\in\mathbb R^{m\times n}ΣRm×n为“对角块”矩阵,通常写成

    Σ=[Σr000]\Sigma=\begin{bmatrix}\Sigma_r & 0 \\ 0 & 0\end{bmatrix} Σ=[Σr000]

    其中Σr=diag⁡(σ1,…,σr)\Sigma_r=\operatorname{diag}(\sigma_1,\dots,\sigma_r)Σr=diag(σ1,,σr)(σ1≥σ2≥⋯≥σr>0)(\sigma_1\ge\sigma_2\ge\cdots\ge\sigma_r>0)(σ1σ2σr>0)r=rank⁡(A)r=\operatorname{rank}(A)r=rank(A)

将SVD代入正规方程,先计算A⊤AA^\top AAA

ATA=(UΣVT)T(UΣVT)=VΣTUTUΣVT=V(ΣTΣ)VT.A^T A = (U\Sigma V^T)^T(U\Sigma V^T) = V \Sigma^T U^T U \Sigma V^T = V (\Sigma^T \Sigma) V^T. ATA=(UΣVT)T(UΣVT)=VΣTUTUΣVT=V(ΣTΣ)VT.

注意UTU=IU^T U=IUTU=I。而ΣTΣ\Sigma^T\SigmaΣTΣn×nn\times nn×n的对角块矩阵,其非零对角元就是σi2(i=1..r)\sigma_i^2(i=1..r)σi2(i=1..r),其余为零。

同样的,计算ATbA^T bATb

ATb=VΣTUTb.A^T b = V \Sigma^T U^T b. ATb=VΣTUTb.

于是正规方程变为:

V(ΣTΣ)VTx=VΣTUTb.V (\Sigma^T \Sigma) V^T x = V \Sigma^T U^T b. V(ΣTΣ)VTx=VΣTUTb.

两边左乘VTV^TVT,因为VVV正交,VTV=IV^TV=IVTV=I,得到:

(ΣTΣ)(VTx)=ΣT(UTb)(\Sigma^T \Sigma)(V^T x) = \Sigma^T (U^T b) (ΣTΣ)(VTx)=ΣT(UTb)

y=VTxy=V^T xy=VTxc=UTbc=U^T bc=UTb代入,得到更简单的对角方程:

(ΣTΣ)y=ΣTc\boxed{(\Sigma^T\Sigma) y = \Sigma^T c} (ΣTΣ)y=ΣTc

接下来按奇异值分块展开对角方程,先写出Σ\SigmaΣ相关的形状:

Σ=[Σr000],Σ⊤Σ=[Σr2000]\Sigma=\begin{bmatrix}\Sigma_r & 0 \\ 0 & 0\end{bmatrix},\qquad \Sigma^\top\Sigma = \begin{bmatrix}\Sigma_r^2 & 0 \\ 0 & 0\end{bmatrix} Σ=[Σr000],ΣΣ=[Σr2000]

yyyccc也做相应分块:

y=[y1y2],c=[c1c2]y=\begin{bmatrix}y_1\ y_2\end{bmatrix},\qquad c=\begin{bmatrix}c_1\ c_2\end{bmatrix} y=[y1 y2],c=[c1 c2]

其中y1,c1∈Rry_1,c_1\in\mathbb R^ry1,c1Rr对应非零奇异值,y2,c2y_2,c_2y2,c2对应奇异值为0的部分(维度 n−rn-rnr),代入得到分块方程:

[Σr2000][y1y2]=[Σr000][c1c2]\begin{bmatrix}\Sigma_r^2 & 0 \\ 0 & 0\end{bmatrix} \begin{bmatrix}y_1 \\ y_2\end{bmatrix}= \begin{bmatrix}\Sigma_r & 0 \\ 0 & 0\end{bmatrix} \begin{bmatrix}c_1 \\ c_2\end{bmatrix} [Σr2000][y1y2]=[Σr000][c1c2]

即等价于两组方程:

Σr2y1=Σrc1,0=0⋅c2(无约束/自由分量)\Sigma_r^2 y_1 = \Sigma_r c_1,\qquad 0 = 0\cdot c_2 \ (\text{无约束/自由分量}) Σr2y1=Σrc1,0=0c2 (无约束/自由分量)

由于Σr\Sigma_rΣr为对角且可逆,第一式等价于

Σry1=c1⟹y1=Σr−1c1.\Sigma_r y_1 = c_1 \quad\Longrightarrow\quad y_1 = \Sigma_r^{-1} c_1. Σry1=c1y1=Σr1c1.

y2y_2y2(对应零奇异值的分量)在正规方程中不受约束——这反映了在列秩不足时普通最小二乘解不是唯一的(可以在零空间方向任意加解)。为得到最小范数解(惯常的选择),取 y2=0y_2=0y2=0

最后回到xxx的求解,对于yyy有:

y=[Σr−1c10]y = \begin{bmatrix} \Sigma_r^{-1} c_1 \\ 0 \end{bmatrix} y=[Σr1c10]

c1c_1c1c=U⊤bc=U^\top bc=Ub关系代回:

y=[Σr−1000]UTby = \begin{bmatrix} \Sigma_r^{-1} & 0 \\ 0 & 0\end{bmatrix} U^T b y=[Σr1000]UTb

由于y=VTxy=V^T xy=VTx,于是:

x=Vy=V[Σr−1000]UTbx = V y = V \begin{bmatrix} \Sigma_r^{-1} & 0 \\ 0 & 0\end{bmatrix} U^T b x=Vy=V[Σr1000]UTb

定义Σ+\Sigma^+Σ+为将非零奇异值取倒数后转置得到的伪逆矩阵(对角块为Σr−1\Sigma_r^{-1}Σr1,其余为0),则

x+=VΣ+UTb\boxed{x^+ = V \Sigma^+ U^T b} x+=VΣ+UTb

这就是 最小二乘的 Moore–Penrose 伪逆解

  • AAA列满秩,则为唯一最小二乘解,由于那么Σ+=Σ−1\Sigma^+=\Sigma^{-1}Σ+=Σ1,SVD求解公式退化为常见的x=VΣ−1UTbx = V\Sigma^{-1}U^T bx=VΣ1UTb
  • 若秩亏,它给出 在所有最小二乘解中范数最小的那个(minimum-norm solution)。

2.4 比较

从以上论述可以看到,SVD分解稳定且能处理秩亏的情况,但比QR分解慢,复杂度高,通常O(mn2)O(mn^2)O(mn2);QR分解在列满秩、条件数不是太差时更快;若需要判定秩或求最小范数解,SVD是首选。

3. 补充

在最后补充一些基础知识,也是笔者很感兴趣的一点,那就是为什么一个矩阵A可以进行QR分解或者SVD分解呢?

3.1 QR分解

QR分解其实非常好理解,它的本质其实就是大学本科《线性代数》课程中提到的施密特(Gram–Schmidt)正交化。我们先复习一下施密特正交化相关的知识。

设有一组线性无关向量

a1,a2,…,an∈Rma_1, a_2, \dots, a_n \in \mathbb{R}^m a1,a2,,anRm

我们想把它们变成一组正交(再归一化后变成标准正交)的向量q1,q2,…,qnq_1, q_2, \dots, q_nq1,q2,,qn。具体步骤如下:

  1. 取第一个向量,归一化:

    q1=a1∣a1∣q_1 = \frac{a_1}{|a_1|} q1=a1a1

  2. 对第 2 个向量,先减去在q1q_1q1上的投影:

    q~2=a2−(q1Ta2)q1\tilde{q}_2 = a_2 - (q_1^T a_2) q_1 q~2=a2(q1Ta2)q1

    然后归一化:

    q2=q~2∣q~2∣q_2 = \frac{\tilde{q}_2}{|\tilde{q}_2|} q2=q~2q~2

  3. 对第 3 个向量,减去它在前两个正交向量上的投影:

    q~3=a3−(q1Ta3)q1−(q2Ta3)q2\tilde{q}_3 = a_3 - (q_1^T a_3) q_1 - (q_2^T a_3) q_2 q~3=a3(q1Ta3)q1(q2Ta3)q2

    然后归一化:

    q3=q~3∣q~3∣q_3 = \frac{\tilde{q}_3}{|\tilde{q}_3|} q3=q~3q~3

  4. 一般地,对第jjj个向量:

    q~j=aj−∑i=1j−1(qiTaj)qi,qj=q~j∣q~j∣\tilde{q}_j = a_j - {\sum_{i=1}^{j-1}} (q_i^T a_j) q_i, \quad q_j = \frac{\tilde{q}_j}{|\tilde{q}_j|} q~j=aji=1j1(qiTaj)qi,qj=q~jq~j

这样得到的qi{q_i}qi就是标准正交基,且每个qjq_jqj只用到了前j−1j-1j1个。

现在把矩阵AAA看成由列向量组成:

A=[a1,a2,…,an]∈Rm×n.A = [a_1, a_2, \dots, a_n] \in \mathbb{R}^{m\times n}. A=[a1,a2,,an]Rm×n.

把施密特正交化写成矩阵形式,我们得到一组正交向量:

Q1=[q1,q2,…,qn]∈Rm×n,Q1TQ1=In.Q_1 = [q_1, q_2, \dots, q_n] \in \mathbb{R}^{m\times n}, \quad Q_1^T Q_1 = I_n. Q1=[q1,q2,,qn]Rm×n,Q1TQ1=In.

同时,原向量可以写成:

aj=∑i=1jrijqia_j = \sum_{i=1}^j r_{ij} q_i aj=i=1jrijqi

其中:

rij=qiTajr_{ij} = q_i^T a_j rij=qiTaj

把这些关系拼成矩阵形式:

A=Q1RA = Q_1 R A=Q1R

其中:

  • R=(rij)R = (r_{ij})R=(rij)n×nn \times nn×n上三角矩阵,因为第jjj列只用到前jjjqiq_iqi
  • Q1Q_1Q1的列正交,所以Q1TQ1=IQ_1^T Q_1 = IQ1TQ1=I

3.2 SVD分解

SVD分解其实也非常有意思,同样也可以顺着《线性代数》中基础知识来进行推导。首先复习一下特征值和特征向量。对于一个方阵 A∈Rn×nA \in \mathbb{R}^{n \times n}ARn×n,如果存在一个非零向量 v∈Rn\mathbf{v} \in \mathbb{R}^nvRn 和一个实数 λ\lambdaλ,使得:

Av=λvA \mathbf{v} = \lambda \mathbf{v} Av=λv

那么:

  • λ\lambdaλ 称为 特征值(eigenvalue)
  • v\mathbf{v}v 称为对应于 λ\lambdaλ特征向量(eigenvector)

接下来复习一下什么叫做对角化。如果一个n×nn \times nn×n矩阵AAA可以写成:

A=PDP−1A = P D P^{-1} A=PDP1

其中:

  • DDD 是一个对角矩阵(只有对角线上有元素)
  • PPP 是一个可逆矩阵

我们就说 AAA可对角化的

而且通常:

  • DDD 的对角元素是 AAA 的特征值:D=diag⁡(λ1,…,λn)D = \operatorname{diag}(\lambda_1, \dots, \lambda_n)D=diag(λ1,,λn)
  • PPP 的列是对应的特征向量

即:

P=[v1v2⋯vn],D=[λ1⋱λn]P = [\mathbf{v}_1\ \mathbf{v}_2\ \cdots\ \mathbf{v}_n],\quad D = \begin{bmatrix} \lambda_1 & & \\ & \ddots & \\ & & \lambda_n \end{bmatrix} P=[v1 v2  vn],D=λ1λn

对角化非常重要,因为对角矩阵计算非常简单,比如计算DkD^kDk只需把对角元各自取kkk次方即可。对角化的本质就是把复杂的线性变换,变成旋转 → 拉伸 → 逆旋转的过程。注意,不是所有矩阵都能对角化,只有当矩阵有nnn个线性无关的特征向量时,才能对角化。但是,所有对称矩阵(如 ATAA^T AATA)都可以对角化,而且可以使用正交矩阵对角化。

也就是说,存在正交矩阵VVV,使得:

ATA=VΛVT,Λ=diag⁡(λ1,…,λn)A^T A = V \Lambda V^T,\quad \Lambda = \operatorname{diag}(\lambda_1, \dots, \lambda_n) ATA=VΛVT,Λ=diag(λ1,,λn)

然后根据这个对角化公式,构造UUUΣ\SigmaΣ,最终得到SVD:

A=UΣV⊤A = U \Sigma V^\top A=UΣV

这里具体构造UUUΣ\SigmaΣ的过程还是有点繁琐的,这里就不进一步推导了,免得离题太远。

http://www.dtcms.com/a/431207.html

相关文章:

  • Multi-Arith数据集:数学推理评估的关键基准与挑战
  • 基于 Spring Security OAuth2 + JWT 实现 SSO
  • 数智经济时代医疗领域医学影像系统现状与趋势研究:多模态融合技术方向
  • 解读 2025 《高质量数据集 分类指南》
  • 为什么说这个是6dB de-emphasis”(即“6dB去加重”)--Con‘t
  • Eclipse 快捷键
  • 樟木头网站网络安全维护公司
  • 【EE初阶 - 网络原理】网络通信
  • 方案网站有哪些盗用别的公司网站模块
  • 做网站是否要去工商备案做网站群
  • Less resolver error:‘~antd/es/style/themes/index.less‘ wasn‘t found.
  • php网站验证码错误网站改版对用户的影响
  • vue中如何实现异步加载组件
  • 网站地图seo石城网站建设
  • 怎么防止网站被镜像wordpress seo 主题
  • 那些钓鱼网站是怎么做的页面设计上边距在哪里找
  • 中国移动idc建设网站wordpress 导航栏
  • @RequestBody与@PathVariable什么时候加
  • 2011 年真题配套词汇单词笔记(考研真相)
  • “AMQP协议深度解析:消息队列背后的通信魔法”之核心概念与SpringBoot落地实战
  • 网规答题点【summer解析】华为5G空口新技术有F-OFDM和SCMA,F-OFDM是基于OFDM的改进版本,可以 实现空口物理层分片,兼容LTE 4G。
  • 简约智能设备制造公司网站今天东营发生的重大新闻
  • Matrixport DAT与XBIT携DEX赋能生态,共赴新加坡TOKEN2049
  • 做网站需要什么营业执照中国建设企业协会网站首页
  • 微服务项目->在线oj系统(Java-Spring)--增删改(前端)
  • 软件网站开发评估免费拿货的代理商
  • C#基础05-控制语句
  • 网站域名过期还能用吗wordpress主题管理插件
  • 扩展BaseMapper类
  • 秦皇岛建设部网站工程建设信息都在哪个网站发布