SVD原理及代码实现

本文详细介绍了奇异值分解(SVD)的概念,包括实对称方阵的矩阵分解,SVD的数学表达,并给出了Python代码实现,包括欧式距离、皮尔逊相关系数和余弦相似度的计算,以及基于SVD的推荐引擎和图像压缩应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的矩阵分解算法,这里对SVD原理 应用和代码实现做一个总结。

1 实对称方阵的矩阵分解

对于一个\(n\times n\)实对称方阵\(A\),如果存在一个向量\(v\)是矩阵\(A\)的特征向量,可以表示成下面的形式:\(Av=\lambda v\)
其中,\(\lambda\)是特征向量\(v\)对应的特征值。如果矩阵\(A\)\(n\)个线性无关的特征向量,那么矩阵\(A\)可以分解为: \(A=Q\Sigma Q^{-1}\)
其中,\(Q\)是矩阵\(A\)的特征向量组成的\(n\times n\)的方阵,\(\Sigma\)是对角矩阵,每一个对角线元素就是一个特征值。注意到,特征值分解是有局限的,这里的矩阵是方阵,实际应用中,常见矩阵并不全是方阵。下面介绍SVD,SVD可以对任意矩阵进行分解。

2 奇异值分解(SVD)

假设矩阵\(A\)\(m\times n\)的矩阵,则\(AA^{T}\)\(m\times m\)的方阵,\(A^{T}A\)\(n\times n\)的方阵,对这两个方阵矩阵分解:\(AA^{T}=U\Lambda _{1}U^{T}\) \(A^{T}A=V\Lambda _{2}V^{T}\)
其中,\(\Lambda _{1}\)\(\Lambda _{2}\)是对角矩阵,且对角线上非零元素均相同,也就是说两个方阵有相同的非零特征值,令非零特征值为\(\sigma _{1},\sigma _{2},\cdots ,\sigma _{k}\),注意,\(k\leq m\)\(k\leq n\)。根据\(\sigma _{1},\sigma _{2},\cdots ,\sigma _{k}\)可以得到矩阵\(A\)的特征值为:\(\lambda _{1}=\sqrt{\sigma _{1}},\lambda _{2}=\sqrt{\sigma _{2}},\cdots ,\lambda _{k}=\sqrt{\sigma _{k}}\)
下面就可以得到奇异值分解的表达式为: \[A=U\Lambda V^{T}\]
其中,\(U\)是一个\(m\)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值