SVD矩阵奇异值分解
前言
为了使计算机理解实际问题体中目标各项特征,通常使用方阵来储存这些特征值,例如一个人的年龄,身高,体重可以使用[32,185,75][32,185,75][32,185,75]进行表示。但是对于有些问题,其特征矩阵是稀疏矩阵,矩阵内部许多向量都为0,例如矩阵 OOO。这即造成储存空间的浪费,同时消耗了计算资源,那能不能即压缩矩阵的大小,且保留矩阵的重要信息呢?这时候可以用到SVD矩阵奇异值分解。
O=[00⋯000⋯0⋮⋮⋱⋮00⋯0] O=\begin{bmatrix} 0 & 0 & \cdots & 0 \\ 0 & 0 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 \end{bmatrix} O= 00⋮000⋮0⋯⋯⋱⋯00⋮0
SVD矩阵奇异值分解
SVD可以将任意一个矩阵分解为一个正交矩阵、一个对焦矩阵和另外一个对角矩阵的乘积。对角矩阵的对角元称为矩阵的奇异值,可以证明,奇异值总是大于等于0的。当对角矩阵的奇异值按从大到小排列时,SVD分解是唯一的。
特征值与特征向量
理解SVD之前必需搞懂两个概念,特征值与特征向量,假设存在一个n∗nn*nn∗n矩阵AAA,存在一个nnn维矩阵xxx和一个特征值λ\lambdaλ,使得式(1)(1)(1)成立。
Ax=λx(1) Ax = \lambda x\tag{1} Ax=λx(1)
则λ\lambdaλ即为AAA的特征值,xxx为AAA的特征向量。那如何求取矩阵AAA的特征值和特征向量呢?计算如下:
Ax−λx=0(A−λE)x=0 \begin{align} Ax-\lambda x = 0\tag{2} \\ (A - \lambda E)x = 0 \tag{3}\\ \end{align} Ax−λx=0(A−λE)x=0(2)(3)