奇异值分解SVD
SVD性质
- 矩阵的奇异值分解一定存在,但不唯一;
- 奇异值唯一,但矩阵
不唯一; - 矩阵
和 的秩相等,等于正奇异值数量(包含重复的奇异值);
SVD具体介绍
特征值、特征向量、特征值分解
特征值分解和奇异值分解(Singular Value Decomposition)在机器学习中都是很常见的矩阵分解算法。两者有着很紧密的关系,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。
特征值、特征向量
如果一个向量
思考:为什么一个向量和一个数相乘的效果与一个矩阵和一个向量相乘的效果是一样的呢?
答案:矩阵
特征值与特征向量的几何意义
一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的这个矩阵:
它其实对应的线性变换如下图所示:

因为这个矩阵M乘以一个向量
上面的矩阵是对称的,所以这个变换是一个对x、y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值大于1时是拉伸,当值小于1时是缩短),如图2所示。当矩阵不是对称的时候,假如说矩阵是下面的样子:
它所描述的变换是下面的样子:

这其实是在平面上对一个轴进行的拉伸变换,如图3蓝色的箭头所示,蓝色的箭头是一个最主要的变换方向(变换的方向可能不止一个)。如果想要描述好一个变换,那我们就需要描述好这个变换主要的变化方向。
特征值分解
对于矩阵
其中,
我们来分析一下特征值分解的式子,分解得到的
当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变换可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变化方向,我们通过特征值分解得到的前
总结:特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多么重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多事情。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。
特征值分解的例子
这里我们用一个简单的方阵来说明特征值分解的步骤。我们的方阵
首先,由方阵A的特征方程,求出特征值。
特征值为
然后,把每个特征值
当
解得
当
最后,方阵
SVD分解
特征值分解矩阵的缺点
我们前面讲了很多特征值、特征向量和特征值分解,而且基于我们以前学习的线性代数知识,利用特征值分解提取特征矩阵是一个容易理解且便于实现的方法。但是为什么还存在奇异值分解呢?特征值分解最大的问题是只能针对方阵,即
奇异值分解
奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵
假设

思考:虽说上面奇异值分解等式成立,但是如何求得左奇异向量、右奇异向量和奇异值呢?
答案:由上面的奇异值分解等式,我们是不知道如何拆分矩阵
首先,我们用矩阵
其次,我们将
思考:上面我们说
因为
可以看到上下两个形式保持了一致,当限定了特征值的顺序后,这样的组合是唯一的,所以
补充定义:
此外,我们还可以得到奇异值,奇异值求法有两种:
a) 第一种:
b)第二种:
通过上面证明,我们还可以看出,特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:
这里的
思考:我们已经知道如何用奇异值分解任何矩阵了,那么问题又来了,一个
答案:在奇异值分解矩阵中
其中
SVD计算举例
这里我们用一个简单的矩阵来说明奇异值分解的步骤。我们的矩阵A定义为:
首先,我们先求出
然后,求出
其次,我们利用
当然,这一步也可以用
SVD分解的应用
异值分解的应用有很多,比如:用SVD解PCA、潜在语言索引也依赖于SVD算法。可以说,SVD是矩阵分解、降维、压缩、特征学习的一个基础的工具,所以SVD在机器学习领域相当的重要。
降维
通过奇异值分解的公式,我们可以很容易看出来,原来矩阵A的特征有n维。经过SVD分解后,可以用前r个非零奇异值对应的奇异向量表示矩阵A的主要特征,这样就把矩阵A进行了降维。
压缩
通过奇异值分解的公式,我们可以看出来,矩阵A经过SVD分解后,要表示原来的大矩阵A,我们只需要存储
紧奇异值分解与截断奇异值分解
紧奇异值分解:与原始矩阵等秩的奇异值分解;
截断奇异值分解:比原始矩阵低秩的奇异值分解;