奇异值矩阵分解(Singular Value Decomposition)的一些感想

写在前面的话:

最近的大半年一直在和矩阵分解和数值运算打交道,基本功不扎实吃了很多亏。
主要是在做算法的研究和优化。核心算法里需要用到矩阵分解的思想,目前广泛应用的分解方式有整数分解,特征值分解(eigen value),奇异值分解(SVD),非负矩阵分解(non-negative matrix fatorization)等等。我整个学习和使用的过程比较艰辛,走了很多弯路,因为之前完全把分解算法当做黑盒来处理,并没有深入进去算法的本质。而本文作为一个记录,回顾一下我学习过程的一些思考,以及一部分自己的见解。

本文主要分为五部分,在目录中有介绍,正文部分写的比较凌乱,因为记录了自己思考的整个过程,思维混乱是做研究的大忌,所以以后要改正,特别是需要静下心来慢慢梳理的部分。好在SVD的学习曲线不算非常陡峭,因而可以充分的边学边思考。目前许多大型的算法在建立之后(比如大部分的推荐算法以及计算广告等)都会划归为矩阵的操作,这里面有普通的数值运算,也有复杂的分解和变换。而奇异值分解(SVD)就是这其中效果很好并广为使用的一种,SVD的一个代数特性就是它用到了几乎所有的线性代数知识,把线性代数从入门到进阶的基础知识完美的串联了起来,推导逐层深入,理解逐渐细化。所以当你对SVD了然于心的时候,不知不觉之间,线性代数的基础知识也更加稳固了。

--------------------------------------------------------------------------------------------------------------------
content
背景
1. 什么是SVD
     - concept
     - geometry/physical  aspect
2. SVD实现
     - conventional algorithm
3. 算法优化
     - modify: compute the largest singular value
4. MATLAB的实现
5. SVD的应用
     - Rank
     - PCA
     - image denoise
     - video deblocking 
     - recommender system
--------------------------------------------------------------------------------------------------------------------
背景

最近几个月一直在做一些有关奇异值分解(SVD,Singular Value Decomposition)的东西,并没有从理论上创新的修改奇异值的计算方法,只是在学习和了解的过程中逐渐明白了SVD的一些意义和实际的应用场景。学习的过程中间走了很多弯路,也有了很多不理解的地方,到现在也不敢说是完全明白,但是我觉得有必要总结一下这一系列的东西,顺便也梳理一下研究的思路,不要因为走得太远而忘记了为了什么而出发。同时在知乎上也有一个这类的问题[1],但是个人觉得高票的几个回答从不同的角度在解释这个问题,所以尝试自己写一个比较简单的问题。

1. 什么是SVD

1.1 概念
SVD是Singular Value Decomposition的缩写,翻译成中文一般是奇异值分解。这是一种矩阵分解形式,它将一个矩阵(可以是实矩阵也可以是复矩阵,我们只讨论实矩阵)分解为三个子矩阵,分别代表了左奇异向量,奇异值矩阵以及右奇异向量。直接说概念可能会比较抽象,后面会详细的介绍各个矩阵的左右以及物理意义。除了奇异值分解,目前常用的矩阵分解方式还有根据特征值分解以及非负矩阵分解(Non-negative Matrix Factorization, NMF)。如果需要回忆一些线性代数的基础知识的话,可以参考[2]网易公开课上MIT的线性代数课程, Gilbert Strang将很多线性代数的基础知识讲的深入浅出,个人强推。


那么,奇异值的数学表达式是什么呢?对于矩阵X,总能找到一个正交矩阵U和一个正交矩阵V,以及一个对角矩阵 Σ,使得:
X = UΣV T
式子成立。其中,U被称为的左奇异向量,V被称为右奇异向量,而对角矩阵 Σ的主对角线上的值称为矩阵X的奇异值,并按照从大到小降序排列。

1.2 几何意义

以2x2的矩阵为例,因为二阶矩阵可以使用平面在直角坐标系来表示,主要参考了[3]。SVD在2x2矩阵上的作用的几何意义主要是可以将二维空间下两个互相正交(也就是垂直)的向量,通过矩阵分解,变换为另一个二维空间下互相正交的两个向量。具体的过程如下图所示。

上图的含义是,我们在左图首先选定了两个单位正交基向量 V 1 V 。那么此时,通过矩阵M的作用下,左图中的一个二维空间(左图正方形格子)下的正交向量 V 1 V 。就变换成为了另一个二维空间(右图长方形格子)下的正交向量Mv 1 Mv 2   。然后我们在 Mv 1 Mv 2 的方向上分别选择两个单位向量 u1 u2 同时设 Mv 1
  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 奇异值分解(Singular Value Decomposition,SVD)是一种矩阵分解的方法,将一个矩阵分解为三个矩阵的乘积,其中一个矩阵是正交矩阵,另外两个矩阵是对角矩阵。SVD在数据分析、信号处理、图像处理等领域有广泛的应用。它可以用于降维、数据压缩、矩阵近似、特征提取等任务。 ### 回答2: 奇异值分解(Singular Value Decomposition,SVD)是矩阵分解的一种方法,它可以将一个复杂的数据矩阵分解成三个简单的矩阵的乘积的形式。这三个矩阵包括:左奇异向量矩阵、奇异值矩阵和右奇异向量矩阵。 在SVD中,奇异值是矩阵的特征值,奇异向量是矩阵的特征向量,而左奇异向量和右奇异向量分别代表数据矩阵在两个不同空间上的特殊变换。在数据处理和分析中,SVD可以用于减少噪声,压缩数据,以及解决线性方程组等问题。 SVD最初由数学家Eckart和Young在1936年提出,而在20世纪60年代和70年代,它才得到了广泛的应用。目前,SVD已经成为了很多数据分析、机器学习和人工智能领域中最常用的技术之一。 在实际应用中,SVD可以用于图像处理、推荐系统、自然语言处理、文本分类、维度约简和信号处理等领域。例如,在推荐系统中,SVD可以用于预测用户对产品的评分,从而为用户推荐最符合他们兴趣的商品。在文本分类中,SVD可以将高维的单词向量映射到低维空间中,从而提高分类的性能。 虽然SVD在许多应用中取得了成功,但其计算代价很高,因此通常需要进行优化以提高效率。一些优化技术包括截断SVD(Truncated SVD)、随机SVD(Randomized SVD)和增量SVD(Incremental SVD)等。这些技术可以降低计算复杂度和内存消耗,提高SVD的速度和可用性。 ### 回答3: 奇异值分解(singular value decomposition, 简称SVD)是一种用于矩阵分解的数学方法,它将一个复杂的矩阵分解成三个部分:U、Σ、V。其中U和V都是正交矩阵,而Σ是一个对角矩阵,对角线上的元素称为奇异值。SVD的应用广泛,例如在图像压缩、信号处理、语音识别、推荐系统等领域都有重要的作用。 SVD的本质目标是将矩阵M表示为下述的累加形式: M = UΣV^T 其中,U和V都是矩阵,Σ是一个对角线上元素按从大到小排列的矩阵,它们的关系是这样的:矩阵M的秩r等于Σ中非零元素的个数。因此,奇异值从大到小表示了矩阵中的信号能量大小,而U和V则表示了信号在不同的方向上的分解。 SVD可以应用于很多问题中。例如,在图像压缩中,可以使用SVD对图像矩阵进行分解,并选取前k个奇异值对应的列向量,再把它们相乘,得到一个近似于原图像的低维矩阵,从而实现图像的压缩。在推荐系统中,SVD可以用来将用户评价和物品特征分解成低维矩阵,从而实现对用户和物品的推荐。此外,SVD还被广泛地应用于语音识别、图像识别等领域。 总的来说,SVD是一种强有力的数学工具,它可以对矩阵进行分解,并提取出有用的信息。由于它的广泛应用和独特的分解方式,SVD也成为了计算机科学和应用数学中的一个热门研究领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值