奇异值分解SVD

主要参考https://www.cnblogs.com/pinard/p/6251584.html
https://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

奇异值分解(Singular Value Decomposition,SVD),用于降维算法的特征分解、推荐系统、NLP等

1.特征值和特征向量

Ax=λx A x = λ x

方阵A:n×n
特征向量x:1×n—— w1,w2,...,wn w 1 , w 2 , . . . , w n
特征值 λ λ —— λ1λ2...λn λ 1 ≤ λ 2 ≤ . . . ≤ λ n

A=WΣW1 A = W Σ W − 1

W:n×n,上述特征向量集合
Σ Σ :n×n,主对角线为n个特征值的对角矩阵
标准化得 wi2=1 ‖ w i ‖ 2 = 1 ,则 wTiwi=1 w i T w i = 1 ,则 WTW=I W T W = I ,则 WT=W1 W T = W − 1 ,则W为酉矩阵

A=WΣWT A = W Σ W T

补充:取topK个特征值对应的特征向量即可实现降维,特征值表示特征的重要性
限制:A必须为方阵

2.奇异值分解SVD

特点:不要求分解的矩阵为方阵

A=UΣVT A = U Σ V T

待分解矩阵A:m×n
U:m×m,由左奇异向量组成
Σ Σ :m×n,主对角线为奇异值,其他为0
V:n×n,由右奇异向量组成
U和V均为酉矩阵,即 UTU=I,VTV=I U T U = I , V T V = I

求解上述三个矩阵:

(ATA)vi=λivi ( A T A ) v i = λ i v i

用n×n的方阵 ATA A T A 做特征值分解,得到n个特征值和特征向量v,作为右奇异向量,得到右侧的V矩阵;
(AAT)ui=λiui ( A A T ) u i = λ i u i

用m×m的方阵 AAT A A T 做特征值分解,得到n个特征值和特征向量u,作为左奇异向量,得到左侧的U矩阵;

求解奇异值:

A=UΣVTAV=UΣVTVAV=UΣAvi=σiuiσi=Avi/ui A = U Σ V T ⇒ A V = U Σ V T V ⇒ A V = U Σ ⇒ A v i = σ i u i ⇒ σ i = A v i / u i

另外:
A=UΣVTAT=VΣTUTATA=VΣTUTUΣVTVΣ2VT A = U Σ V T ⇒ A T = V Σ T U T ⇒ A T A = V Σ T U T U Σ V T ⇒ V Σ 2 V T

ATA A T A 的特征向量组成V,同理 AAT A A T 的特征向量组成U。且特征值是奇异值的平方,即
σi=λi σ i = λ i

3.例子

这里写图片描述
这里写图片描述

4.性质

奇异值和特征值类似,且奇异值减少很快,“在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。”。所以可以用topK个奇异值近似描述矩阵

Am×n=Um×mΣm×nVTn×nUm×kΣk×kVTk×n A m × n = U m × m Σ m × n V n × n T ≈ U m × k Σ k × k V k × n T

则实现用三个小矩阵近似描述大矩阵A,如灰色部分
这里写图片描述
如:在PCA中,需要先计算样本协方差矩阵 XTX X T X ,再计算最大的d个特征向量,样本数和特征数多的时候计算量很大。一些SVD实现算法不需要先求出协方差矩阵 XTX X T X 也可以求出右奇异矩阵,sklearn就是使用SVD。另外,左奇异矩阵可以用于行数的压缩


按照参考2的解释,矩阵乘法就是线性变换的过程,特征值大小反映了变换方向的重要性
这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值