SVD在机器学习中是非常重要的,利用神奇的矩阵变换可以实现很多功能,比如图像压缩、降维等等。 本篇介绍SVD的原理、应用、以及在Python代码中的使用。
SVD(Singular Value Decomposition)奇异值分解分解是机器学习中最重要的矩阵分解方法。
它能够将一个任意形状的矩阵分解成一个正交矩阵和一个对角矩阵以及另一个正交矩阵的乘积。
SVD分解具有非常深刻的几何含义。矩阵实际上对应着一种线性变换,一个矩阵作用到一个向量上,会得到一个新的向量。任何一个矩阵的操作效果可以分解成一次旋转,一次拉伸和维度改变,以及另外一次旋转三者作用效果的合成。
SVD分解通常用于数据压缩和数据降维。用于数据降维时,既可以对列降维,也可以对行降维,其中对列的降维等价于PCA的降维。
不仅如此,SVD算法还可以用于在声音和图像处理中剥离背景信号,在推荐算法中也经常出现它的身影。
一、SVD矩阵分解简介
SVD分解将任意矩阵分解成一个正交矩阵和一个对角矩阵以及另一个正交矩阵的乘积。
对角矩阵的对角元称为矩阵的奇异值,可以证明,奇异值总是大于等于0的。
当对角矩阵的奇异值按从大到小排列时,SVD分解是唯一的。
假定是维的,则是维的,是维的,是维的。
SVD分解有着非常深刻的几何含义。
矩阵实际上是对应着一种线性变换。一个矩阵作用到一个向量上,会得到一个新的向量。任何一个矩阵的操作效果可以分解成一次旋转,一次拉伸和维度改变,以及另外一次旋转三者作用效果的合成。
注意正交矩阵和作用到向量后是不会改变向量长度的,所以对应着旋转变换。
二、SVD分解的数学推演
可以推出
依然是对角矩阵,又U为正交矩阵。