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

当算法遇到线性代数(四):奇异值分解(SVD)

SVD分解的理论与应用

线性代数系列相关文章(置顶)

1.当算法遇到线性代数(一):二次型和矩阵正定的意义
2.当算法遇到线性代数(二):矩阵特征值的意义
3.当算法遇到线性代数(三):实对称矩阵
4.当算法遇到线性代数(四):奇异值分解(SVD)

引言

奇异值分解(Singular Value Decomposition, SVD)是线性代数中一个极为重要的概念,它在数据科学、机器学习、信号处理等多个领域有着广泛的应用。本文将详细介绍SVD的背景、定义、性质、具体过程以及其在不同领域的应用,并总结其重要性。

在这里插入图片描述


一、背景

SVD的概念最早可以追溯到19世纪末期,当时数学家们开始研究矩阵的特征值和特征向量问题。然而,直到20世纪中期,随着计算机技术的发展,SVD才逐渐成为一种实用且高效的工具。特别是在图像压缩、推荐系统等领域,SVD因其能够揭示数据内部结构的能力而备受青睐。

二、定义与概念

对于任意 m × n m \times n m×n 的实矩阵 A A A,存在两个正交矩阵 U U U V V V,以及一个非负对角矩阵 Σ \Sigma Σ,使得:

A = U Σ V T A = U \Sigma V^T A=UΣVT

其中:

  • U U U 是一个 m × m m \times m m×m 的正交矩阵,称为左奇异向量。
  • V V V 是一个 n × n n \times n n×n 的正交矩阵,称为右奇异向量。
  • Σ \Sigma Σ 是一个 m × n m \times n m×n 的对角矩阵,对角元素为非负实数,称为奇异值,通常按降序排列。

三、性质

SVD具有以下重要性质:

  • 唯一性:如果 A A A 的所有奇异值都是不同的,则 U U U V V V 是唯一的(忽略符号变化)。
  • 最优低秩近似:根据Eckart–Young定理,截断后的SVD提供了原矩阵的最佳低秩近似。
  • 数值稳定性:SVD算法相对稳定,尤其适用于处理病态矩阵或接近奇异的矩阵。
  • 几何解释:SVD可以被理解为一系列旋转、缩放和平移操作,这些操作将原始空间中的点映射到新坐标系下。

由于上述性质,奇异值分解(SVD)具有许多显著的好处,这些优点使得它在多个学科和技术领域中成为一种极为有用的工具。以下是SVD的主要好处:

1. 数值稳定性
  • 处理病态矩阵:对于接近奇异或病态的矩阵,直接求解线性系统可能会导致严重的数值误差。而SVD提供了一种更加稳定的方法来处理这类问题。
  • 避免过拟合:在机器学习和统计建模中,SVD可以帮助防止模型对训练数据的过度拟合,从而提高泛化能力。
2. 最优低秩近似
  • 数据压缩:通过保留前几个最大的奇异值及其对应的左、右奇异向量,可以得到原矩阵的最佳低秩近似。这种方法不仅减少了存储需求,还能够去除噪声,保持数据的核心特征。
  • 降维:例如在主成分分析(PCA)中,SVD用于将高维数据投影到低维空间,同时尽可能地保留原始数据的方差信息。
    在这里插入图片描述
3. 几何与物理意义明确
  • 变换解释:SVD可以被直观地理解为一系列旋转、缩放和平移操作,这些操作将原始空间中的点映射到新坐标系下。这种几何解释有助于更好地理解数据结构和模式。
  • 正交基底:SVD提供了两组正交基底,分别对应于输入空间和输出空间,这使得计算过程更加清晰且易于实现。
4. 理论洞察力
  • 揭示内在结构:SVD能够揭示数据背后的潜在结构,这对于探索数据特性、发现隐藏模式非常有帮助。
  • 理论研究:在数学、物理学等多个基础科学领域,SVD为理论分析提供了强有力的支持,促进了新算法和理论的发展。

四、举个🌰

1. 矩阵SVD计算

考虑一个 3 × 2 3 \times 2 3×2 的矩阵 A A A

A = [ 1 2 2 3 3 4 ] A = \begin{bmatrix} 1 & 2 \\ 2 & 3 \\ 3 & 4 \end{bmatrix} A= 123234

为了求解 A A A 的SVD,我们需要执行以下步骤:

  1. 计算协方差矩阵 A A T AA^T AAT A T A A^TA ATA

    • A A T = [ 5 8 11 8 13 18 11 18 25 ] AA^T = \begin{bmatrix} 5 & 8 & 11 \\ 8 & 13 & 18 \\ 11 & 18 & 25 \end{bmatrix} AAT= 581181318111825
    • A T A = [ 14 20 20 29 ] A^TA = \begin{bmatrix} 14 & 20 \\ 20 & 29 \end{bmatrix} ATA=[14202029]
  2. 找到 A T A A^TA ATA 的特征值和特征向量

    • 特征值: σ 1 2 ≈ 43.6 \sigma_1^2 \approx 43.6 σ1243.6, σ 2 2 ≈ 0.37 \sigma_2^2 \approx 0.37 σ220.37
    • 特征向量: v 1 ≈ [ − 0.65 − 0.76 ] v_1 \approx \begin{bmatrix} -0.65 \\ -0.76 \end{bmatrix} v1[0.650.76], v 2 ≈ [ 0.76 − 0.65 ] v_2 \approx \begin{bmatrix} 0.76 \\ -0.65 \end{bmatrix} v2[0.760.65]
  3. 构造 Σ \Sigma Σ,并将特征值开平方根得到奇异值。

    • Σ = [ 43.6 0 0 0.37 0 0 ] \Sigma = \begin{bmatrix} \sqrt{43.6} & 0 \\ 0 & \sqrt{0.37} \\ 0 & 0 \end{bmatrix} Σ= 43.6 0000.37 0
  4. 找到 A A T AA^T AAT 的特征值和特征向量

    • 特征值:同上
    • 特征向量: u 1 ≈ [ − 0.38 − 0.57 − 0.76 ] u_1 \approx \begin{bmatrix} -0.38 \\ -0.57 \\ -0.76 \end{bmatrix} u1 0.380.570.76 , u 2 ≈ [ − 0.92 0.38 − 0.07 ] u_2 \approx \begin{bmatrix} -0.92 \\ 0.38 \\ -0.07 \end{bmatrix} u2 0.920.380.07
  5. 验证结果

    • A = U Σ V T ≈ [ − 0.38 − 0.92 ∗ − 0.57 0.38 ∗ − 0.76 − 0.07 ∗ ] [ 43.6 0 0 0.37 0 0 ] [ − 0.65 − 0.76 0.76 − 0.65 ] A = U \Sigma V^T \approx \begin{bmatrix} -0.38 & -0.92 & * \\ -0.57 & 0.38 & * \\ -0.76 & -0.07 & * \end{bmatrix} \begin{bmatrix} \sqrt{43.6} & 0 \\ 0 & \sqrt{0.37} \\ 0 & 0 \end{bmatrix} \begin{bmatrix} -0.65 & -0.76 \\ 0.76 & -0.65 \end{bmatrix} A=UΣVT 0.380.570.760.920.380.07 43.6 0000.37 0 [0.650.760.760.65]

注意:这里的 ∗ * 表示不相关的第三列元素,因为 A A A 只有两列。

2. 低秩近似

使用SVD对100x100物品相似度矩阵进行低秩近似的具体表示,我们将通过数学符号和公式来展示如何使用奇异值分解(SVD)对一个 100 × 100 100 \times 100 100×100 的物品相似度矩阵 A A A 进行低秩近似,并保留前5个最大的奇异值。

步骤 1: 准备数据

假设我们有一个 100 × 100 100 \times 100 100×100 的相似度矩阵 A A A,其中每个元素 a i j a_{ij} aij 表示物品 i i i 和物品 j j j 之间的相似度。由于这是一个相似度矩阵,它是对称的,即 A = A T A = A^T A=AT

步骤 2: 计算 SVD 分解

根据SVD理论,我们可以将矩阵 A A A 分解为:

A = U Σ V T A = U \Sigma V^T A=UΣVT

其中:

  • U U U 是一个 100 × 100 100 \times 100 100×100 的正交矩阵,称为左奇异向量矩阵。
  • Σ \Sigma Σ 是一个 100 × 100 100 \times 100 100×100 的对角矩阵,包含按降序排列的奇异值。
  • V V V 是一个 100 × 100 100 \times 100 100×100 的正交矩阵,称为右奇异向量矩阵。
步骤 3: 构建低秩近似矩阵

为了构建低秩近似矩阵 A 5 A_5 A5,我们只保留前5个最大的奇异值及其对应的左、右奇异向量。具体来说:

  • 选择前5个奇异值: σ 1 , σ 2 , σ 3 , σ 4 , σ 5 \sigma_1, \sigma_2, \sigma_3, \sigma_4, \sigma_5 σ1,σ2,σ3,σ4,σ5
  • 选择对应的左奇异向量: u 1 , u 2 , u 3 , u 4 , u 5 u_1, u_2, u_3, u_4, u_5 u1,u2,u3,u4,u5,构成 U 5 U_5 U5,这是一个 100 × 5 100 \times 5 100×5 的矩阵。
  • 选择对应的右奇异向量: v 1 , v 2 , v 3 , v 4 , v 5 v_1, v_2, v_3, v_4, v_5 v1,v2,v3,v4,v5,构成 V 5 V_5 V5,这也是一个 100 × 5 100 \times 5 100×5 的矩阵。

因此,新的对角矩阵 Σ 5 \Sigma_5 Σ5 将是一个 5 × 5 5 \times 5 5×5 的矩阵,仅包含前5个奇异值:

Σ 5 = [ σ 1 0 0 0 0 0 σ 2 0 0 0 0 0 σ 3 0 0 0 0 0 σ 4 0 0 0 0 0 σ 5 ] \Sigma_5 = \begin{bmatrix} \sigma_1 & 0 & 0 & 0 & 0 \\ 0 & \sigma_2 & 0 & 0 & 0 \\ 0 & 0 & \sigma_3 & 0 & 0 \\ 0 & 0 & 0 & \sigma_4 & 0 \\ 0 & 0 & 0 & 0 & \sigma_5 \end{bmatrix} Σ5= σ100000σ200000σ300000σ400000σ5

步骤 4: 构造低秩近似矩阵 A 5 A_5 A5

使用 U 5 U_5 U5 Σ 5 \Sigma_5 Σ5,和 V 5 V_5 V5 来构造低秩近似矩阵 A 5 A_5 A5

A 5 = U 5 Σ 5 V 5 T A_5 = U_5 \Sigma_5 V_5^T A5=U5Σ5V5T

这里:

  • U 5 U_5 U5 100 × 5 100 \times 5 100×5 的矩阵,由 U U U 的前五列组成。
  • Σ 5 \Sigma_5 Σ5 5 × 5 5 \times 5 5×5 的对角矩阵,包含前五个奇异值。
  • V 5 V_5 V5 100 × 5 100 \times 5 100×5 的矩阵,由 V V V 的前五列组成。
结果分析

比较原始矩阵 A A A 和低秩近似矩阵 A 5 A_5 A5

  • 误差评估:可以通过计算 Frobenius 范数误差 ∥ A − A 5 ∥ F \|A - A_5\|_F AA5F 来评估低秩近似的效果。
  • 可视化对比:可以绘制原始矩阵 A A A 和低秩近似矩阵 A 5 A_5 A5 的热图,直观地观察两者之间的差异。

通过这个过程,我们展示了如何使用SVD对一个 100 × 100 100 \times 100 100×100 的物品相似度矩阵进行低秩近似,并保留前5个最大的奇异值。这种方法不仅减少存储需求,还能够有效地处理大规模数据集,同时保持了数据的核心特征。通过选择适当的 k k k,可以在保持足够精度的同时显著减少计算复杂度

五、应用

数学领域应用
  • 低秩近似:通过保留前几个最大的奇异值及其对应的奇异向量,可以实现矩阵的有效压缩,同时保持尽可能多的信息。
  • 最小二乘问题:SVD可用于解决超定系统的最小二乘解,提供了一种稳健的方法来估计未知参数。
机器学习与深度学习应用
  • 主成分分析 (PCA):SVD是PCA的核心算法之一,用于降维和特征提取。
  • 大模型 LoRA 微调:LoRA 的关键在于引入低秩矩阵 A ∈ R m × r A \in \mathbb{R}^{m \times r} ARm×r B ∈ R r × n B \in \mathbb{R}^{r \times n} BRr×n 来近似更新原始权重矩阵 W ∈ R m × n W \in \mathbb{R}^{m \times n} WRm×n
  • 推荐系统:基于用户-物品评分矩阵的协同过滤方法中,SVD可以用来预测未观察到的评分并做出个性化推荐。
  • 图像处理:如图像压缩、去噪等任务中,利用SVD去除冗余信息,提高效率。
其他领域应用
  • 信号处理:用于频谱分析、滤波器设计等方面,帮助提取信号的主要成分。
  • 自然语言处理:例如主题模型LDA可以通过SVD进行优化,以更好地捕捉文档之间的关系。
  • 控制系统:在状态估计、模型简化等环节中,SVD有助于构建更精确和稳定的控制器。

六、总结

综上所述,SVD作为一种强大的数学工具,在多个学科和技术领域都展现出了巨大的价值。从理论上讲,它提供了深刻的洞察力,使我们能够理解和操作复杂的数据集;而在实践中,SVD不仅简化了许多复杂的计算任务,还提高了算法的性能和可靠性。无论是在学术研究还是工业应用中,掌握SVD的基本原理及其应用技巧都是非常有益的。

相关文章:

当算法遇到线性代数(四):奇异值分解(SVD)

SVD分解的理论与应用 线性代数系列相关文章(置顶) 1.当算法遇到线性代数(一):二次型和矩阵正定的意义 2.当算法遇到线性代数(二):矩阵特征值的意义 3.当算法遇到线性代数&#xff0…...

SASS 简化代码开发的基本方法

概要 本文以一个按钮开发的实例,介绍如何使用SASS来简化CSS代码开发的。 代码和实现 我们希望通过CSS开发下面的代码样式,从样式来看,每个按钮的基本样式相同,就是颜色不同。 如果按照传统的方式开发,需要开发btn &…...

40.TryParse尝试转化为int类型 C#例子

也许这个时候学有点晚,但是不管怎样都学了 尝试转化,不能转化就返回bool类型的假 它会直接给括号里面的int类型赋值 代码: using System; using System.Timers; public class Program {static void Main(){int a;bool i;while (true){Get…...

【微服务】2、网关

Spring Cloud微服务网关技术介绍 单体项目拆分微服务后的问题 服务地址问题:单体项目端口固定(如黑马商城为8080),拆分微服务后端口各异(如购物车808、商品8081、支付8086等)且可能变化,前端难…...

红队-shell编程篇(上)

声明 通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、建立Shell文件 1. Shell简介 Shell是一种命令行界面&am…...

电子价签会是零售界的下一个主流?【新立电子】

电子价签,作为一种能够替代传统纸质标签的数字显示屏,已经在零售行业中展现出其巨大的潜力。它具有实时更新、集中管理、高效节能的特点,实现价格的实时更新,大大减少更新价格的工作量和时间。为消费者带来更加便捷、准确的购物体…...

5 分布式ID

这里讲一个比较常用的分布式防重复的ID生成策略,雪花算法 一个用户体量比较大的分布式系统必然伴随着分表分库,分机房部署,单体的部署方式肯定是承载不了这么大的体量。 雪花算法的结构说明 如下图所示: 雪花算法组成 从上图我们可以看…...

SpringBoot | @Autowired 和 @Resource 的区别及原理分析

关注:CodingTechWork 引言 在Spring框架中,Autowired 和 Resource 是两种常用的依赖注入注解,它们都用于自动装配Bean,简化了开发者手动创建和管理Bean的繁琐工作。然而,它们的实现机制和使用方式有所不同。理解这两者…...

『SQLite』解释执行(Explain)

摘要:本节主要讲解SQL的解释执行:Explain。 在 sqlite 语句之前,可以使用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语,用于描述表查询的细节。 基本语法 EXPLAIN 语法: EXPLAIN [SQLite Query]EXPLAIN QUER…...

0基础学前端-----CSS DAY12

视频参考:B站Pink老师 今天是CSS学习的第十二天,今天开始的笔记对应Pink老师课程中的CSS第七天的内容。 本节重点:CSS高级技巧 本章目录 本节目标1. 精灵图1.1 为什么需要精灵图1.2 精灵图使用案例:拼出自己的名字 2. 字体图标2.…...

(概率论)无偏估计

参考文章:(15 封私信 / 51 条消息) 什么是无偏估计? - 知乎 (zhihu.com) 首先,第一个回答中,马同学图解数学讲解得很形象, 我的概括是:“注意,有一个总体的均值u。然后,如果抽样n个&…...

Minio-Linux-安装

文章目录 1.Linux安装1.下载源码包2.上传到/usr/local/minio1.进入目录2.上传 3.开放执行权限4.创建minio文件存储目录及日志目录5.编写启动的shell脚本1.脚本编写2.赋予执行权限 6.启动!1.执行run脚本2.查看日志3.开放9001和9000端口1.服务器2.安全组3.访问&#x…...

利用Java爬取1688商品详情API接口:技术与应用指南

引言 1688作为中国领先的B2B电子商务平台,拥有海量的商品信息。对于商家和市场研究人员来说,能够从1688获取商品详情信息,对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序,以合法、高效的方式获取…...

基于MATLAB的汽车热管理模型构建

一、引言 汽车热管理系统对汽车性能、部件寿命及驾乘体验至关重要。它能确保发动机、电池等关键部件在适宜温度工作。MATLAB 功能强大,为构建高精度热管理模型提供有效途径,助力优化系统设计与控制策略。 二、汽车热管理系统构成 2.1 发动机冷却系统&…...

LRU(1)

LRU是"Least Recently Used"(最近最少使用)的缩写,它是一种常用的页面置换算法和缓存淘汰策略。当计算机系统的内存或缓存资源有限时,LRU算法根据的历史访问记录来决定哪些数据应该被保留在内存或缓存中,哪些被淘汰。其核心思想是“…...

VSCode 使用鼠标滚轮控制字体

一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意:保存哦!ctrlS 三、测试 按住ctrl鼠标滚轮,控制字体大小...

数据库(3)--针对列的CRUD操作

1.Create 新增 语法: insert into 表名 (列名)values (列)... 创建一个学生表用于演示: create table if not exists student( id bigint comment 编号, name varchar(20) comment 姓名 ); 1.1直接增加…...

【Linux】记录一下考RHCE的学习过程(七)

年底了,公司接的北京地铁轨道交通的项目做不完了,一百多列地铁的设备都得调,派我出差了几周,这几天才回来,出差累死了实在是没办法更新。(YOASOBI的二开票还没抢到ToT,哭死,看看回滚…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 1:背景动机

目录 1 简单概括2 几个重要发现3 主要贡献4 背景知识5 方法简介 论文:Multi-Head Encoding for Extreme Label Classification 作者:Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位:山东大学 代码:https://gi…...

使用hardhat进行合约测试

演示源码:hardhat-demo: 演示基于hardhat的HelloWord合约测试案例。 环境 NodeJs 创建工程 1.创建一个hardhat工程根目录(hardhat-demo),然后进入该目录执行。 npx hardhat执行该命令,会进行hardhat工程初始化。 提示我们是否安装该版本h…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...