奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石.
1.SVD的定义及相关概念
SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:
假设有 m×n的矩阵 A,那么 SVD 就是要找到如下式的这么一个分解,将 A 分解为 3 个矩阵的乘积:
其中U和V都是正交矩阵, 在复数域内的话就是酉矩阵(Unitary Matrix),即
换句话说,就是说U的转置等于U的逆,V的转置等于V的逆:
而 Σ就是一个非负实对角矩阵。
那么 U和 V 以及Σ是如何构成的呢?
2.求解
U 和 V 的列分别叫做 A 的 左奇异向量(left-singular vectors)和 右奇异向量(right-singular vectors),Σ 的对角线上的值叫做 A 的奇异值(singular values)。
其实整个求解 SVD 的过程就是求解这 3 个矩阵的过程,而求解这 3 个矩阵的过程就是求解特征值和特征向量的过程,问题就在于求谁的特征值和特征向量。
U 的列由 A^T * A的单位化过的特征向量构成
V 的列由 A^T * A的单位化过的特征向量构成
Σ 的对角元素来源于 A^T * A或 A * A^T 的特征值的平方根,并且是按从大到小的顺序排列
知道了这些,那么求解 SVD 的步骤就显而易见了:
求 A * A^T的特征值和特征向量,用单位化的特征向量构成U
求 A * A^T的特征值和特征向量,用单位化的特征向量构成V
将 A * AT或者AT * A的特征值求平方根,然后构成 Σ
3.举例
假设
那么可以计算得到
接