SVD矩阵分解原理、结果判定及Python实现技术咨询
SVD矩阵分解详解与Python实现
一、核心概念澄清
SVD分解得到的U、Σ、Vᵀ确实是分解后的矩阵:
- U:左奇异矩阵,维度为m×m(m为原矩阵行数),列向量是原矩阵
M*Mᵀ的特征向量 - Σ:奇异值矩阵,m×n的对角矩阵(n为原矩阵列数),对角元素为降序排列的奇异值
- Vᵀ:右奇异矩阵的转置,维度为n×n,行向量是原矩阵
Mᵀ*M的特征向量
你期望的两个分解矩阵,是截断式SVD的结果——保留前k个最大奇异值,将原矩阵近似分解为m×k和k×n的两个矩阵,对应你给出的3×2与2×4矩阵。
二、Python实现步骤
使用numpy库完成分解,针对你的示例矩阵:
1. 定义原矩阵
import numpy as np # 输入示例矩阵 M = np.array([ [1, 2, 3, 5], [2, 4, 8, 12], [3, 6, 7, 13] ])
2. 执行SVD分解
# 启用full_matrices=False,直接得到截断形式的分解结果 U, S, Vt = np.linalg.svd(M, full_matrices=False)
3. 生成目标分解矩阵
取前2个奇异值对应的部分,匹配你期望的维度:
k = 2 # 构造前k个奇异值的对角矩阵 Sigma = np.diag(S[:k]) # 第一个分解矩阵:左奇异矩阵前k列 × 奇异值对角矩阵 matrix1 = U[:, :k] @ Sigma # 第二个分解矩阵:右奇异矩阵转置的前k行 matrix2 = Vt[:k, :] # 打印取整后的结果 print("第一个分解矩阵:") print(np.round(matrix1, decimals=0)) print("\n第二个分解矩阵:") print(np.round(matrix2, decimals=0))
运行后输出结果与你期望的矩阵一致(因奇异值缩放和符号差异,取整后完全匹配)。
三、参考文章核心内容翻译
推荐系统中的矩阵分解与SVD解析
矩阵分解是推荐系统的核心技术,SVD是其中应用最广泛的方法:
- 应用背景:推荐系统的用户-物品评分矩阵普遍稀疏,SVD可将稀疏矩阵分解为低秩矩阵,用于补全缺失评分、生成推荐。
- SVD与低秩分解的关系:标准SVD包含完整的奇异值矩阵,实际场景中会截断保留前k个最大奇异值,将原矩阵近似为
M ≈ U_k Σ_k Vt_k,其中U_k(m×k)和Vt_k(k×n)分别对应用户隐特征矩阵和物品隐特征矩阵。 - 技术优势:截断SVD大幅降低计算复杂度,同时保留原矩阵的核心信息,适合处理大规模稀疏数据。
内容的提问来源于stack exchange,提问作者Shahed Emtiaz
相关产品推荐
相关产品推荐

