当前位置: 首页 > 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.lryc.cn/news/598464.html

相关文章:

  • 光通信从入门到精通:PDH→DWDM→OTN 的超详细演进笔记
  • day62-可观测性建设-全链路监控zabbix+grafana
  • 深度分析Java内存结构
  • 排序查找算法,Map集合,集合的嵌套,Collections工具类
  • SSM之表现层数据封装-统一响应格式全局异常处理
  • Spring AI 系列之二十四 - ModerationModel
  • 从0到1学习c++ 命名空间
  • 【Linux】linux基础开发工具(一) 软件包管理器yum、编辑器vim使用与相关命令
  • 【YOLOv8改进 - 特征融合】FCM:特征互补映射模块 ,通过融合丰富语义信息与精确空间位置信息,增强深度网络中小目标特征匹配能力
  • Springboot儿童医院问诊导诊系统aqy75(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 免费生成文献综述的网站推荐,助力高效学术写作
  • 408——数据结构(第二章 线性表)
  • 线段树学习笔记 - 练习题(2)
  • Flowable + Spring Boot 自定义审批流实战教程
  • 「iOS」黑魔法——方法交换
  • 词嵌入维度与多头注意力关系解析
  • 51c视觉~3D~合集4
  • 【C语言进阶】柔性数组
  • 11款Scrum看板软件评测:功能、价格、优缺点
  • C++标准库算法实战指南
  • Java基础day16-Vector类-Stack类-Collection子接口Set接口
  • 基础NLP | 02 深度学习基本原理
  • EasyExcel 模板导出数据 + 自定义策略(合并单元格)
  • 亚马逊云科技 EC2 部署 Dify,集成 Amazon Bedrock 构建生成式 AI 应用
  • 货车手机远程启动的扩展功能有哪些
  • QML 模型
  • java如何声明函数
  • Vulnhub Matrix-Breakout-2-Morpheus靶机攻略
  • jd h5st参数纯算
  • 现代C++的一般编程规范