最小二范数解

最小二范数解

子空间投影问题(最小二乘法)

投影向量

b \textbf{b} b z z z轴和 x y xy xy平面投影分别为 p 1 \textbf{p}_{1} p1 p 2 \textbf{p}_{2} p2两个变换矩阵 P 1 \textbf{P}_{1} P1 P 2 \textbf{P}_{2} P2满足如下以上的例子中两个子空间是正交补的。
上面的问题可以描述为,在空间 R n \mathbb{R}^{n} Rn中,寻找向量 b \textbf{b} b向子空间 R m \mathbb{R}^{m} Rm投影的变换矩阵 P \textbf{P} P

考虑如下情况向量到直线上投影

在二维空间上 R 2 \mathbb{R}^{2} R2,求 b \textbf{b} b在子空间 A = [ 1   0 ] T \textbf{A}=[1 \ 0]^{T} A=[1 0]T上的投影 p \textbf{p} p
\figure\向量向直线投影.jpg

  • 投影方法
    p \textbf{p} p可以表示为 p = Ax , x ∈ R 1 \textbf{p}=\textbf{A}\textbf{x},\textbf{x}\in \mathbb{R}^{1} p=Ax,xR1
    b p ⃗ = p − b = b − Ax \vec{bp}=\textbf{p}-\textbf{b}=\textbf{b}-\textbf{A}\textbf{x} bp =pb=bAx
    由于 b − Ax ⊥ A \textbf{b}-\textbf{A}\textbf{x}\perp\textbf{A} bAxA
    所以 A T ( b − Ax ) = 0 \textbf{A}^{T}(\textbf{b}-\textbf{A}\textbf{x})=0 AT(bAx)=0
    A T Ax = A T b \textbf{A}^{T}\textbf{A}\textbf{x}=\textbf{A}^{T}\textbf{b} ATAx=ATb
    x = ( A T A ) − 1 A T b \textbf{x}=(\textbf{A}^{T}\textbf{A})^{-1}\textbf{A}^{T}\textbf{b} x=(ATA)1ATb,那么最终得到
    p = A ( A T A ) − 1 A T b \textbf{p}=\textbf{A}(\textbf{A}^{T}\textbf{A})^{-1}\textbf{A}^{T}\textbf{b} p=A(ATA)1ATb
  • 优化方法(最小二乘法)
    p \textbf{p} p可以表示为 p = Ax , x ∈ R 1 \textbf{p}=\textbf{A}\textbf{x},\textbf{x}\in \mathbb{R}^{1} p=Ax,xR1 \优化的过程可以表示为 min ⁡ x J ( x ) = ∥ b p ⃗ ∥ 2 2 \min\limits_{\textbf{x}}J(\textbf{x})=\left\|\vec{bp}\right\|_2^2 xminJ(x)=bp 22其中 J ( x ) = ( b − Ax ) T ( b − Ax ) J(\textbf{x})=(\textbf{b}-\textbf{A}\textbf{x})^{T}(\textbf{b}-\textbf{A}\textbf{x}) J(x)=(bAx)T(bAx)\那么 J ′ ( x ) = A T ( b − Ax ) = 0 J'(\textbf{x})=\textbf{A}^{T}(\textbf{b}-\textbf{A}\textbf{x})=0 J(x)=AT(bAx)=0得到(具体参见标量函数对矢量/矩阵的导数内容) p = A ( A T A ) − 1 A T b \textbf{p}=\textbf{A}(\textbf{A}^{T}\textbf{A})^{-1}\textbf{A}^{T}\textbf{b} p=A(ATA)1ATb

子空间投影

之前的叙述中 x \textbf{x} x可以理解为将投影子空间的基线性组合为 p \textbf{p} p的系数,进行如下的叙述:\假设,在空间 R m \mathbb{R}^{m} Rm中的 n n n个向量 a 1 , a 2 , ⋯   , a n ⃗ \textbf{a}_1,\textbf{a}_2,\cdots,\vec{a_n} a1,a2,,an 是线性不相关的,我们想找到一个线性组合 p = x ^ 1 a 1 + ⋯ + x ^ n a n \textbf{p}=\hat{x}_1\textbf{a}_1+\cdots+\hat{x}_n\textbf{a}_n p=x^1a1++x^nan使得 min ⁡ x J ( x ) = ∥ b p ⃗ ∥ 2 2 \min\limits_{\textbf{x}}J(\textbf{x})=\left\|\vec{bp}\right\|_2^2 xminJ(x)=bp 22,那么只要 b p ⃗ \vec{bp} bp 垂直于子空间便满足要求,也即 b p ⃗ \vec{bp} bp 垂直于子空间所有向量,得到如下等式:
a 1 T ( b − Ax ) = 0 ⋮ a n T ( b − Ax ) = 0 o r [ a 1 T ⋮ a n T ] [ b − Ax ] = A T ( b − Ax ) = 0 \begin{matrix} a_1^T(\textbf{b}-\textbf{A}\textbf{x})=0 \\ \vdots \\ a_n^T(\textbf{b}-\textbf{A}\textbf{x})=0 \\\end{matrix}\quad or\quad\left[ \begin{matrix} a_1^T \\ \vdots \\ a_n^T \\ \end{matrix}\right]\left[\textbf{b}-\textbf{A}\textbf{x}\right]=\textbf{A}^T(\textbf{b}-\textbf{A}\textbf{x})=\textbf{0} a1T(bAx)=0anT(bAx)=0ora1TanT[bAx]=AT(bAx)=0
化简
x = ( A T A ) − 1 A T b \textbf{x}=(\textbf{A}^{T}\textbf{A})^{-1}\textbf{A}^{T}\textbf{b} x=(ATA)1ATb
p = A ( A T A ) − 1 A T b \textbf{p}=\textbf{A}(\textbf{A}^{T}\textbf{A})^{-1}\textbf{A}^{T}\textbf{b} p=A(ATA)1ATb

最小二范数解

对于之前讨论的问题 min ⁡ x J ( x ) = ∥ b − Ax ∥ 2 2 \min\limits_{\textbf{x}}J(\textbf{x})=\left\|\textbf{b}-\textbf{A}\textbf{x}\right\|_2^2 xminJ(x)=bAx22

  1. A ∈ R m × n , x ∈ R n × 1 , b ∈ R m × 1 \textbf{A}\in\mathbb{R}^{m\times n},\textbf{x}\in\mathbb{R}^{n\times 1},\textbf{b}\in\mathbb{R}^{m\times 1} ARm×n,xRn×1,bRm×1
  2. A \textbf{A} A行满秩或列满秩

设任意一向量 vect = b − Ax \textbf{vect}=\textbf{b}-\textbf{A}\textbf{x} vect=bAx,移项后具有 Ax = b \textbf{A}\textbf{x}=\textbf{b} Ax=b的形式,那么对于 Ax = b \textbf{A}\textbf{x}=\textbf{b} Ax=b我们知道:

  • m = n m=n m=n时,方程具有唯一解
  • m > n m>n m>n时,方程无解
  • m < n m<n m<n时,方程有无穷解
    在之前投影的问题 b p ⃗ = b − Ax \vec{bp}=\textbf{b}-\textbf{A}\textbf{x} bp =bAx( b ∉ A \textbf{b}\notin\textbf{A} b/A)属于方程无解的情况,得到的解 x \textbf{x} x为使 ∥ b − Ax ∥ 2 2 \left\|\textbf{b}-\textbf{A}\textbf{x}\right\|_2^2 bAx22(或者叫做误差)最小的解。但对于 m < n m<n m<n,方程有无穷解的情况可以利用最小二乘法求解最小二范数解。
    Ax = b \textbf{A}\textbf{x}=\textbf{b} Ax=b,满足:
  1. A ∈ R m × n , x ∈ R n × 1 , b ∈ R m × 1 \textbf{A}\in\mathbb{R}^{m\times n},\textbf{x}\in\mathbb{R}^{n\times 1},\textbf{b}\in\mathbb{R}^{m\times 1} ARm×n,xRn×1,bRm×1
  2. A \textbf{A} A行满秩
  3. m < n m<n m<n

问题描述 min ⁡ x ∥ x ∥ 2 2 = x T x \min\limits_{\textbf{x}}\left\|\textbf{x}\right\|_2^2=\textbf{x}^T\textbf{x} xminx22=xTx ( s . t . Ax = b s.t.\textbf{A}\textbf{x}=\textbf{b} s.t.Ax=b)
引入拉格朗日算子 J ( x ) = 1 2 x T x − λ ( Ax − b ) , ( λ ∈ R m × 1 ) J(\textbf{x})=\frac{1}{2}\textbf{x}^T\textbf{x}-\lambda(\textbf{A}\textbf{x}-\textbf{b}),(\lambda\in\mathbb{R}^{m\times 1}) J(x)=21xTxλ(Axb),(λRm×1)
对上式求导 ∇ J ( x ) = x − A T λ = 0 \nabla J(\textbf{x})=\textbf{x}-\textbf{A}^T\lambda=0 J(x)=xATλ=0
x = A T λ \textbf{x}=\textbf{A}^T\lambda x=ATλ
Ax = A A T λ \textbf{A}\textbf{x}=\textbf{A}\textbf{A}^T\lambda Ax=AATλ
( A A T ) − 1 Ax = λ (\textbf{A}\textbf{A}^T)^{-1}\textbf{A}\textbf{x}=\lambda (AAT)1Ax=λ
λ = ( A A T ) − 1 b \lambda=(\textbf{A}\textbf{A}^T)^{-1}\textbf{b} λ=(AAT)1b
可以得到
x = A T ( A A T ) − 1 b \textbf{x}=\textbf{A}^T(\textbf{A}\textbf{A}^T)^{-1}\textbf{b} x=AT(AAT)1b
结论,对 Ax = b \textbf{A}\textbf{x}=\textbf{b} Ax=b

  • m = n m=n m=n时,方程具有唯一解- m > n m>n m>n时,方程无解 最小二乘解为 x = ( A T A ) − 1 A T b \textbf{x}=(\textbf{A}^{T}\textbf{A})^{-1}\textbf{A}^{T}\textbf{b} x=(ATA)1ATb
  • m < n m<n m<n时,方程有无穷解
    最小二范数解为 x = A T ( A A T ) − 1 b \textbf{x}=\textbf{A}^T(\textbf{A}\textbf{A}^T)^{-1}\textbf{b} x=AT(AAT)1b 其中 ( A T A ) − 1 A T (\textbf{A}^{T}\textbf{A})^{-1}\textbf{A}^{T} (ATA)1AT A T ( A A T ) − 1 \textbf{A}^T(\textbf{A}\textbf{A}^T)^{-1} AT(AAT)1 A \textbf{A} A在相应情况下的伪逆矩阵
  • 12
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要求线性方程组的最小范数,可以使用奇异值分(Singular Value Decomposition,SVD)方法。下面是求线性方程组最小范数的步骤: 1. 将线性方程组表示为矩阵形式:Ax = b,其中A是系数矩阵,x是未知向量,b是常数向量。 2. 对系数矩阵A进行奇异值分:A = UΣV^T,其中U和V是正交矩阵,Σ是对角矩阵。 3. 将线性方程组表示为奇异值分的形式:UΣV^Tx = b。 4. 由于U和V是正交矩阵,它们的转置等于它们的逆。因此,可以将方程组重写为:ΣV^Tx' = U^Tb,其中x'是新的未知向量。 5. 由于Σ是对角矩阵,可以通过将对角线上的非零元素取倒数,并将其他元素设为零来计算Σ的伪逆Σ⁺。 6. 计算新的未知向量x':x' = VΣ⁺U^Tb。 这样就得到了线性方程组的最小范数x'。 以下是使用NumPy库来求线性方程组最小范数的示例代码: ```python import numpy as np # 定义线性方程组的系数矩阵 A 和常数向量 b A = np.array([[1, 2], [3, 4], [5, 6]]) b = np.array([1, 2, 3]) # 进行奇异值分 U, S, Vt = np.linalg.svd(A) # 计算伪逆矩阵 S_pseudo_inv = np.zeros((A.shape[1], A.shape[0])) S_pseudo_inv[:A.shape[1], :A.shape[1]] = np.linalg.inv(np.diag(S)) # 计算最小范数 x_prime = Vt.T @ S_pseudo_inv @ U.T @ b # 打印最小范数 print("线性方程组的最小范数为:", x_prime) ``` 在这个示例中,我们使用`np.linalg.svd`函数对系数矩阵A进行奇异值分,得到正交矩阵U、对角矩阵Σ和正交矩阵V的转置。然后,我们计算Σ的伪逆矩阵S_pseudo_inv,以及最小范数x_prime。最后,我们打印出最小范数。 如果你有任何其他问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值