您的位置:首页 > 文旅 > 旅游 > 奇异值分解(SVD)

奇异值分解(SVD)

2024/10/7 2:25:14 来源:https://blog.csdn.net/blinkyou001/article/details/141141098  浏览:    关键词:奇异值分解(SVD)

1 奇异值分解(SVD)简介

Beltrami 和 Jordan 被认为是奇异值分解(Singular Value Decomposition,SVD)的共同开创者,二人于19世纪70年代相继提出了相关理论。奇异值分解主要解决的问题是数据降维。在高维度的数据中,数据往往是稀疏的,或者数据往往由几个重要的成分表达了大部分信息。因此,通过降维可以很好地化繁为简的解决问题,也可以降低数据的存储成本和运算成本。

奇异值分解有着比较广泛的应用,在图像处理、推荐系统中都有着比较重要的应用。

2 奇异值分解的基本原理

2.1 特征值与特征向量

对于eq?n阶方阵eq?A,若存在非零向量eq?%5Cbeta和非负值eq?%5Clambda,使得eq?A%5Cbeta%20%3D%5Clambda%20%5Cbeta,则eq?%5Clambda称为线性变换eq?A的特征值,eq?%5Cbeta称为特征值eq?%5Clambda的特征向量。

若方阵eq?A的所有特征值为eq?%5Clambda%20_%7B1%7D%2C%5Clambda%20_%7B2%7D%2C...%2C%5Clambda%20_%7Bn%7D,对应的一组特征向量为eq?%5Cbeta%20_%7B1%7D%2C%5Cbeta%20_%7B2%7D%2C...%2C%5Cbeta%20_%7Bn%7D

eq?S%3D%5Cbegin%7Bbmatrix%7D%20%5Clambda%20_%7B1%7D%20%26%20%26%20%26%20%5C%5C%20%26%20%5Clambda%20_%7B2%7D%20%26%20%26%20%5C%5C%20%26%20%26%20...%20%26%20%5C%5C%20%26%20%26%20%26%20%5Clambda%20_%7Bn%7D%20%5Cend%7Bbmatrix%7Deq?B%3D%5Cleft%20%28%5Cbeta%20_%7B1%7D%2C%5Cbeta%20_%7B2%7D%2C...%2C%5Cbeta%20_%7Bn%7D%20%5Cright%20%29

则有eq?AB%3DBS

eq?A为实对称阵时,存在单位正交向量eq?%5Cbeta%20_%7B1%7D%2C%5Cbeta%20_%7B2%7D%2C...%2C%5Cbeta%20_%7Bn%7D构成单位正交阵eq?B%3D%5Cleft%20%28%5Cbeta%20_%7B1%7D%2C%5Cbeta%20_%7B2%7D%2C...%2C%5Cbeta%20_%7Bn%7D%20%5Cright%20%29。对于正交阵eq?B%5E%7B-1%7D%3DB%5E%7BT%7D,从而eq?ABB%5E%7B-1%7D%3DBSB%5E%7B-1%7D%5CRightarrow%20A%3DBSB%5E%7B-1%7D%3DBSB%5E%7BT%7D

上式实际上是实现了将实对称阵eq?A对角化成eq?S

2.2 矩阵的秩

矩阵eq?A任意选取的行和列的形成eq?k阶矩阵,其行列式称为矩阵eq?Aeq?k阶子式。矩阵eq?A的不为零的子式的最大阶数称为矩阵eq?A的秩。

对于m \times n矩阵eq?A,其秩记为eq?rank%28A%29%3Dr

对于方阵,其秩等于大于0的特征值的个数。

这里的eq?r也等于后文中大于0的奇异值的个数。

2.3 矩阵分解

2.3.1 矩阵分解的概念

任意m*n矩阵eq?A都可分解为三个矩阵的乘积,即eq?A%3DUSV%5E%7BT%7D    ... (1)式。

其中eq?Um*m的正交矩阵,eq?Sm*n的非负对角阵,eq?Vn*n的正交矩阵。eq?U被称为左奇异向量,eq?S称为奇异值,eq?V称为右奇异向量。

其中eq?U%3D%5Cbegin%7Bbmatrix%7D%20u_%7B11%7D%20%26%20u_%7B21%7D%20%26%20...%26u_%7Bm1%7D%20%5C%5C%20u_%7B12%7D%26%20u_%7B22%7D%20%26...%20%26u_%7Bm2%7D%20%5C%5C%20.%26%20.%20%26%20...%26%20.%5C%5C%20u_%7B1m%7D%26%20u_%7B2m%7D%20%26...%20%26%20u_%7Bmm%7D%20%5Cend%7Bbmatrix%7D_%7Bm%5Ctimes%20m%7Deq?S%3D%5Cbegin%7Bbmatrix%7D%20%5C%20%5Csigma%20_%7B1%7D%20%26%20%26%20%26%20%5C%5C%20%26%20...%20%26%20%26%20%5C%5C%20%26%20%26%20%5Csigma%20_%7Br%7D%26%20%5C%5C%20%26%20%26%20...%26%200%5Cend%7Bbmatrix%7D_%7Bm%5Ctimes%20n%7Deq?V%5E%7BT%7D%3D%5Cbegin%7Bbmatrix%7D%20v_%7B11%7D%20%26%20v_%7B12%7D%20%26%20...%26v_%7B1n%7D%20%5C%5C%20v_%7B21%7D%26%20v_%7B22%7D%20%26...%20%26v_%7B2n%7D%20%5C%5C%20.%26%20.%20%26%20...%26%20.%5C%5C%20v_%7Bn1%7D%26%20v_%7Bn2%7D%20%26...%20%26%20v_%7Bnn%7D%20%5Cend%7Bbmatrix%7D_%7Bn%5Ctimes%20n%7D,并且eq?%5Csigma%20_%7B1%7D%5Cgeqslant%20%5Csigma%20_%7B2%7D%5Cgeqslant%20...%5Csigma%20_%7Br%7D%5Cgeqslant%200

当如上进行矩阵分解后,我们选择奇异值eq?%5Csigma%20_%7B1%7D%2C%5Csigma%20_%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D中的前eq?k个奇异值eq?%5Csigma%20_%7B1%7D%2C%5Csigma%20_%7B2%7D%2C...%2C%5Csigma%20_%7Bk%7D,对应的eq?U%2CV选择前eq?k列的元素,得到的eq?U_%7Bm%5Ctimes%20k%7DS_%7Bk%5Ctimes%20k%7DV_%7Bn%5Ctimes%20k%7D%5E%7BT%7D称为矩阵eq?A的截断奇异值分解。

截断奇异值分解可以看作对数据eq?A的降维,即eq?A%5Capprox%20U_%7Bm%5Ctimes%20k%7DS_%7Bk%5Ctimes%20k%7DV_%7Bn%5Ctimes%20k%7D%5E%7BT%7D

2.3.2 奇异值分解的推导

对于矩阵eq?A的奇异值分解,假设存在满足前述条件的eq?U%2CS%2CV,使得eq?A%3DUSV%5E%7BT%7D则有

eq?A%5E%7BT%7DA%3D%28USV%5E%7BT%7D%29%5E%7BT%7DUSV%5E%7BT%7D%3DVS%5E%7BT%7DU%5E%7BT%7DUSV%5E%7BT%7D%3DVS%5E%7BT%7DSV%5E%7BT%7D

由于eq?S为对角阵,因此eq?S%5E%7BT%7D 仍为对角阵,eq?S%5E%7BT%7DSeq?n%5Ctimes%20n阶对角阵。

eq?S%5E%7BT%7DS%3D%5Cbegin%7Bbmatrix%7D%20%5Csigma%20_%7B1%7D%5E%7B2%7D%20%26%20%26%20%26%20%5C%5C%20%26%20...%20%26%20%26%20%5C%5C%20%26%20%26%20%5Csigma%20_%7Br%7D%5E%7B2%7D%20%26%20%5C%5C%20%26%20%26%20...%20%26%200%20%5Cend%7Bbmatrix%7D_%7Bn%5Ctimes%20n%7D,不妨将其记为eq?S%5E%7B2%7D

eq?A%5E%7BT%7DA%3DVS%5E%7B2%7DV%5E%7BT%7D

由于eq?V为正交矩阵,eq?V%5E%7BT%7DV%3DE,因此将上式右侧同乘以eq?V,得到

eq?A%5E%7BT%7DAV%3DVS%5E%7B2%7D

由于eq?A%5E%7BT%7DA为实对称阵,一定存在一组非负特征值和对应的特征向量(单位正交向量),不妨记该eq?n个特征值为eq?%5Csigma%20_%7B1%7D%5E%7B2%7D%2C%5Csigma%20_%7B2%7D%5E%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D%5E%7B2%7D%2C0%2C...%2C0eq?%5Csigma%20_%7B1%7D%5Cgeqslant%20%5Csigma%20_%7B2%7D%5Cgeqslant%20...%5Csigma%20_%7Br%7D%3E0)。对应的特征向量(单位正交向量)分别记为eq?v_%7B1%7D%2Cv_%7B2%7D%2C...%2Cv_%7Bn%7D

将特征值开方后得到eq?%5Csigma%20_%7B1%7D%2C%5Csigma%20_%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D%2C0%2C...%2C0

eq?S%3D%5Cbegin%7Bbmatrix%7D%20%5C%20%5Csigma%20_%7B1%7D%20%26%20%26%20%26%20%5C%5C%20%26%20...%20%26%20%26%20%5C%5C%20%26%20%26%20%5Csigma%20_%7Br%7D%26%20%5C%5C%20%26%20%26%20...%26%200%5Cend%7Bbmatrix%7D_%7Bm%5Ctimes%20n%7Deq?V%3D%28v_%7B1%7D%2Cv_%7B2%7D%2C...%2Cv_%7Bn%7D%29

则正好找到了对应的eq?Seq?V,使得(1)式成立。

对于实对称阵eq?AA%5E%7BT%7D,其非零特征值与eq?A%5E%7BT%7DA的特征值相同,也为eq?%5Csigma%20_%7B1%7D%5E%7B2%7D%2C%5Csigma%20_%7B2%7D%5E%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D%5E%7B2%7Deq?%5Csigma%20_%7B1%7D%5Cgeqslant%20%5Csigma%20_%7B2%7D%5Cgeqslant%20...%5Csigma%20_%7Br%7D%3E0),其余eq?m-r个特征值为0。对应的特征向量(单位正交向量)分别记为eq?u_%7B1%7D%2Cu_%7B2%7D%2C...%2Cu_%7Bm%7D

将特征值开方后得到eq?%5Csigma%20_%7B1%7D%2C%5Csigma%20_%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D%2C0%2C...%2C0

同理,有eq?AA%5E%7BT%7DV%3DUS%5E%7B2%7D

eq?S%3D%5Cbegin%7Bbmatrix%7D%20%5C%20%5Csigma%20_%7B1%7D%20%26%20%26%20%26%20%5C%5C%20%26%20...%20%26%20%26%20%5C%5C%20%26%20%26%20%5Csigma%20_%7Br%7D%26%20%5C%5C%20%26%20%26%20...%26%200%5Cend%7Bbmatrix%7D_%7Bm%5Ctimes%20n%7Deq?U%3D%28u_%7B1%7D%2Cu_%7B2%7D%2C...%2Cu_%7Bm%7D%29

则正好找到了对应的eq?Seq?U,使得(1)式成立。

如此,求出了(1)式所需的eq?U%2CS%2CV,问题得解。

3 奇异值分解的步骤

3.1 计算奇异值

计算矩阵乘积eq?A%5E%7BT%7DA,求解eq?%5Cleft%20%7C%20%5Csigma%20E-A%5E%7BT%7DA%20%5Cright%20%7C%3D0,得到大于零的特征值eq?%5Csigma%20_%7B1%7D%5E%7B2%7D%2C%5Csigma%20_%7B2%7D%5E%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D%5E%7B2%7D%28%5Csigma%20_%7B1%7D%5Cgeqslant%20%5Csigma%20_%7B2%7D%5Cgeqslant%20...%5Csigma%20_%7Br%7D%3E0%29

eq?S%3D%5Cbegin%7Bbmatrix%7D%20%5C%20%5Csigma%20_%7B1%7D%20%26%20%26%20%26%20%5C%5C%20%26%20...%20%26%20%26%20%5C%5C%20%26%20%26%20%5Csigma%20_%7Br%7D%26%20%5C%5C%20%26%20%26%20...%26%200%5Cend%7Bbmatrix%7D_%7Bm%5Ctimes%20n%7D,得到奇异矩阵。

3.2 求解右奇异向量

将特征值eq?%5Csigma%20_%7B1%7D%5E%7B2%7D%2C%5Csigma%20_%7B2%7D%5E%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D%5E%7B2%7D代入eq?%28%5Csigma%20E-A%5E%7BT%7DA%29V%3D0,求解得eq?A%5E%7BT%7DA的特征向量,并将其单位化,记为eq?v_%7B1%7D%2Cv_%7B2%7D%2C...%2Cv_%7Bn%7D

eq?V%3D%28v_%7B1%7D%2Cv_%7B2%7D%2C...%2Cv_%7Bn%7D%29,得右奇异向量。

3.3 求解左奇异向量

将特征值eq?%5Csigma%20_%7B1%7D%5E%7B2%7D%2C%5Csigma%20_%7B2%7D%5E%7B2%7D%2C...%2C%5Csigma%20_%7Br%7D%5E%7B2%7D代入eq?%28%5Csigma%20E-AA%5E%7BT%7D%29U%3D0,求解得eq?AA%5E%7BT%7D的特征向量,并将其单位化,记为eq?u_%7B1%7D%2Cu_%7B2%7D%2C...%2Cu_%7Bm%7D

eq?U%3D%28u_%7B1%7D%2Cu_%7B2%7D%2C...%2Cu_%7Bm%7D%29,得左奇异向量。

矩阵的奇异值分解完成。

4 奇异值分解的实例

numpy模块中有自带的奇异值分解函数。

import numpy as np
# 创建矩阵A
A = np.array([[3, 0, 0, 0],[0, 0, 0, 4],[0, 5, 0, 0],[0, 0, 0, 2],[2, 0, 0, 0]])# 进行奇异值分解
U, S, V = np.linalg.svd(A)
# 打印结果
print("U:\n", U)
print("S:", S)
print("V:\n", V)
U:[[ 0.          0.         -0.83205029 -0.         -0.5547002 ][ 0.          0.89442719  0.          0.4472136   0.        ][-1.          0.          0.          0.          0.        ][ 0.          0.4472136   0.         -0.89442719  0.        ][ 0.          0.         -0.5547002   0.          0.83205029]]
S: [5.         4.47213595 3.60555128 0.        ]
V:[[-0. -1. -0. -0.][ 0.  0.  0.  1.][-1. -0. -0. -0.][-0. -0. -1. -0.]]

5 奇异值分解的总结

(1)奇异值分解的原理和步骤比较简单;

(2)奇异值分解非常适合对高维数据的处理;

(3)奇异值分解一种非常重要的降维技术,尤其是在图像处理和推荐系统中有着重要的应用;

(4)奇异值分解后的结果不易直观理解。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com