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

奇异值分解(Singular Value Decomposition, SVD)


奇异值分解(SVD) 是线性代数中一个极其重要的矩阵分解方法,适用于任意 m \times n 的复数或实数矩阵。它不仅在理论分析中非常有用,还在机器学习、信号处理、统计学、图像压缩等领域有广泛的应用。

1. SVD 的定义


对于任意矩阵 A \in \mathbb{C}^{m \times n} ,其 SVD 分解为:

A = U \Sigma V^*

其中:

        U \in \mathbb{C}^{m \times m}
是左奇异向量矩阵(列向量是 A A^*  的特征向量),且 U 是酉矩阵(U U^* = I)。

        \Sigma \in \mathbb{R}^{m \times n} 
是奇异值矩阵,其对角线元素 \sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_r > 0 ( r = \text{rank}(A) ),其余位置为 0。

        V \in \mathbb{C}^{n \times n} 
是右奇异向量矩阵(列向量是 A^* A 的特征向量),且 V 是酉矩阵(V V^* = I)。

2. SVD 的计算方法


(1)计算A^* A 和 A A^* 

A^* A  是 n \times n 的 Hermitian 矩阵,其特征值 \lambda_i   是非负实数,且 \sigma_i = \sqrt{\lambda_i} 。

    A A^*  是 m \times m 的 Hermitian 矩阵,其特征值与 A^* A 的非零特征值相同。

(2)求 A^* A 的特征值和特征向量


计算 A^* A 的特征值\lambda_1, \lambda_2, \dots, \lambda_n \geq 0  。 对应的单位特征向量 \mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n  构成 V 的列。

(3)求 A A^* 的特征向量


计算 A A^* 的单位特征向量 \mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_m  ,构成 U 的列。

对于非零奇异值 \sigma_i,有:

\mathbf{u}_i = \frac{A \mathbf{v}_i}{\sigma_i}


(4)构造 \Sigma 

    \Sigma 是一个对角矩阵,其前 r 个对角元素是\sigma_1, \sigma_2, \dots, \sigma_r ,其余为 0。

3. SVD 的性质


奇异值的唯一性

奇异值 \sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_r > 0 是唯一的。

U 和 V 的列向量(奇异向量)不唯一(可以乘以 e^{i\theta} 仍满足分解)。

矩阵的秩

        \text{rank}(A) = \text{ num of nonzero singular values} = r

低秩近似(Eckart-Young 定理)

用前 k 个奇异值近似 A

        A_k = U_k \Sigma_k V_k^*

其中 U_k, V_k 只保留前 k 列,\Sigma_k  只保留前 k 个奇异值。

这是最优低秩近似,即:

        \| A - A_k \|_F \leq \| A - B \|_F \quad \forall B \text{ meet } \text{rank}(B) \leq k
与特征分解的关系

     A A^* = U \Sigma \Sigma^T U^*(左奇异向量是 A A^* 的特征向量)。

    A^* A = V \Sigma^T \Sigma V^*(右奇异向量是 A^* A 的特征向量)。

4. 谱还原累加的步骤

还是按照上述理论,
计算 SVD:

        A = U \Sigma V^* 

选择前 k 个奇异值:

保留 \sigma_1, \sigma_2, \dots, \sigma_k ,其余设为 0。

重建矩阵:

        A_k = U \Sigma_k V^*

其中  \Sigma_k  是仅保留前 k 个奇异值的对角矩阵。

等价的外积形式:

        A_k = \sum_{i=1}^k \sigma_i \mathbf{u}_i \mathbf{v}_i^*

即逐层叠加  \sigma_i \mathbf{u}_i \mathbf{v}_i^*  成分。

5. 谱还原累加的性质


最优低秩近似(Eckart-Young 定理):

        \| A - A_k \|_F \leq \| A - B \|_F \quad \forall B \text{ meet } \text{rank}(B) \leq k

其中 \| \cdot \|_F 是 Frobenius 范数。

能量占比:

前 k 个奇异值的能量占比:

            \frac{\sum_{i=1}^k \sigma_i^2}{\sum_{i=1}^r \sigma_i^2}

可用于决定保留多少奇异值(如 PCA 中选取主成分)。

压缩与去噪:

图像压缩:仅存储  U_k, \Sigma_k, V_k   可大幅减少数据量。

信号去噪:丢弃较小的奇异值(通常对应噪声)。

6. SVD 的应用


(1)矩阵求逆与伪逆(Moore-Penrose 伪逆)

        如果 A = U \Sigma V^* ,则其伪逆:

        A^+ = V \Sigma^+ U^*
其中\Sigma^+  是 \Sigma 的伪逆(非零元素取倒数再转置)。

(2)主成分分析(PCA)

        PCA 本质上是数据协方差矩阵 X^T X 的 SVD 分解。

(3)图像压缩

        保留前 k个奇异值,可以大幅减少存储空间:

        A \approx U_k \Sigma_k V_k^*

(4)推荐系统(协同过滤)

        SVD 用于降维,提取用户和物品的潜在特征。

(5)最小二乘问题

        求解 \min_{\mathbf{x}} \| A \mathbf{x} - \mathbf{b} \|_2   时,SVD 提供稳定解。

7. 小矩阵计算示例


设矩阵:

A =\begin{bmatrix} 1 & 1 \\ 0 & 1 \\ 1 & 0 \end{bmatrix}


计算 SVD:

计算 A^T A 和 A A^T :

A^TA=\begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}     AA^T=\begin{bmatrix} 2 &1 &1 \\ 1 &1 &0 \\ 1 &0 &1 \end{bmatrix}

 
A^T A 的特征值 \lambda_1 = 3, \lambda_2 = 1,对应奇异值 \sigma_1 = \sqrt{3}, \sigma_2 = 1 。

计算 V 和 U

V 的列是 A^T A 的特征向量。

U 的前两列由\mathbf{u}_i = \frac{A \mathbf{v}_i}{\sigma_i}   计算,最后一列由 Gram-Schmidt 正交化得到。

最终 SVD:

A = U \Sigma V^T = \begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{6}} & \frac{1}{\sqrt{3}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{6}} & -\frac{1}{\sqrt{3}} \\ 0 & \sqrt{\frac{2}{3}} & -\frac{1}{\sqrt{3}} \end{bmatrix} \begin{bmatrix} \sqrt{3} & 0 \\ 0 & 1 \\ 0 & 0 \end{bmatrix} \begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix}

8. 小结


SVD 适用于任意矩阵,而特征分解仅适用于方阵。

奇异值 \sigma_i 是非负的,并按降序排列。

SVD 可用于矩阵近似、降维、求伪逆、PCA、图像压缩等。

计算 SVD 通常使用数值方法(如 QR 迭代;使用数值软件:LAPACK,openblas,cusolver),而非手动计算(除非矩阵很小)。

SVD 是数据科学和工程中的核心工具

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

相关文章:

  • 武汉火影数字|数字党建展厅制作 VR红色数字纪念馆 党史馆数字化打造
  • Windows 10 远程桌面(RDP)防暴力破解脚本
  • Linux内核中动态内存分配函数解析
  • 滑动窗口机制及其应用
  • 云渲染的算力困局与架构重构:一场正在发生的生产力革命
  • Apache POI 实战应用:企业级文档处理解决方案
  • 5.7 input子系统
  • uboot FPGA调试环境搭建
  • C++ <多态>详解:从概念到底层实现
  • 不同头会关注输入序列中不同的部分和不同维度所蕴含的信息,这里的头和嵌入维度不是对应的,仅仅是概念上的吗?
  • 在Ubuntu上使用QEMU学习RISC-V程序(1)起步第一个程序
  • 负载均衡-LoadBalance
  • YOLOv4深度解析:革命性的实时目标检测技术
  • 基于Zig语言,opencv相关的c++程序静态交叉编译
  • USRP X440
  • Vulnhub Web-Machine-N7靶机攻略(附VB安装教程)
  • Docker快速安装Clickhouse
  • Vue 项目中的组件引用如何实现,依赖组件间的数据功能交互及示例演示
  • OpenLayers 综合案例-基础图层控制
  • 解密 Base64 编码:从原理到应用的全面解析
  • 前端实现 excel 数据导出,封装方法支持一次导出多个Sheet
  • Effective Python 第16条:用get处理字典缺失键,避免in与KeyError的陷阱
  • 时间日期选择器组件进行日期和时间的禁用处理逻辑
  • 让UV管理一切!!!
  • wiz2025 挑战赛从 SpringActuator 泄露到 s3 敏感文件获取全解析
  • 再生基因总结
  • Vue工程化 ElementPlus
  • Android Camera createCaptureSession
  • 精密圆柱销类分拣系统“cad【9张】三维图+设计书明说
  • 货车手机远程启动的扩展功能有哪些