当前位置: 首页 > article >正文

pytorch学习:矩阵分解:奇异值分解(SVD分解)

前言

矩阵分解(Matrix Decomposition)是将一个矩阵分解成多个矩阵的乘积的过程,这种分解方法在计算、机器学习和线性代数中有广泛应用。不同的分解方式可以简化计算、揭示矩阵的内在结构或提高算法的效率。

奇异值分解

奇异值分解(Singular Value Decomposition, SVD)是矩阵分解的一种重要形式,它将一个任意的矩阵分解为三个矩阵的乘积,从而揭示出原矩阵的内在结构。

对于任意一个m×n 的矩阵A,它的奇异值分解可以表示为:

A = U\sum V^{^{T}}

其中:

U 是一个 m×m 的正交矩阵,称为左奇异向量矩阵。

V 是一个 n×n 的正交矩阵,称为右奇异向量矩阵。

Σ 是一个 m×n 的对角矩阵,其中对角线上的元素是矩阵 A 的奇异值,其余元素为零。奇异值是非负实数,按降序排列,即 σ 1≥σ 2 ≥⋯≥σ r≥0,其中σ r 是方阵AA^{^{T}}的秩的根号值。

注:正交矩阵(Orthogonal Matrix)是指一种特殊的方阵,一个 n×n 的矩阵 Q 被称为正交矩阵,如果它满足Q TQ=QQ T =I其中Q T是 Q 的转置矩阵,I 是n×n 的单位矩阵。

求解步骤:

1.求矩阵AA^{^{T}}

2.求AA^{^{T}}矩阵的特征值和特征向量(正交化)。

3.求奇异值(特征值开方)和正交矩阵V^{_{T}}

4.求正交矩阵U。

实例

1.方阵的分解

代码实现:
import torch

a = torch.Tensor([[3,1],[1,3]])
u,s,v = torch.svd(a)
print(a)
print(u)
print(s)
print(v)
print(torch.svd(a))
运行结果:
tensor([[3., 1.],
        [1., 3.]])
tensor([[-0.7071, -0.7071],
        [-0.7071,  0.7071]])
tensor([4., 2.])
tensor([[-0.7071, -0.7071],
        [-0.7071,  0.7071]])
torch.return_types.svd(
U=tensor([[-0.7071, -0.7071],
        [-0.7071,  0.7071]]),
S=tensor([4., 2.]),
V=tensor([[-0.7071, -0.7071],
        [-0.7071,  0.7071]]))
 2.矩形阵的分解

代码实现:
import torch

a = torch.Tensor([[4,0],[3,0],[0,5]])
u,s,v = torch.svd(a)
print(a)
print(u)
print(s)
print(v)
print(torch.svd(a))
运行结果:
tensor([[4., 0.],
        [3., 0.],
        [0., 5.]])
tensor([[-0.8000,  0.0000],
        [-0.6000,  0.0000],
        [ 0.0000, -1.0000]])
tensor([5., 5.])
tensor([[-1., -0.],
        [-0., -1.]])
torch.return_types.svd(
U=tensor([[-0.8000,  0.0000],
        [-0.6000,  0.0000],
        [ 0.0000, -1.0000]]),
S=tensor([5., 5.]),
V=tensor([[-1., -0.],
        [-0., -1.]]))


http://www.kler.cn/a/382108.html

相关文章:

  • 游戏测试|超越QA的常规:我们如何自动化回归测试
  • 光伏无人机踏勘,照亮光伏未来!
  • Python | Leetcode Python题解之第528题按权重随机选择
  • 网络安全认证的证书有哪些?
  • Redis常见面试题概览——针对实习面试
  • 为啥学习数据结构和算法
  • DevOps-课堂笔记
  • 服了!这波大选,赚最肥的居然是搞AI写作的
  • 深入浅出:解读注意力机制,让神经网络更“聪明”
  • ubuntu 安装go和vscode
  • 二次封装 el-pagination 组件存在的问题
  • Mac使用记事
  • JAVA基础:多重循环、方法、递归 (习题笔记)
  • 看到你还在用Maven,Gradle难道不香吗?
  • 霍尼韦尔测厚仪51000372怎么工作
  • stm32 挂死定位(死循环)
  • 【LeetCode】【算法】160.相交链表
  • 微信小程序寓言童话创作APP设计与实现
  • mysql error:1449权限问题 及 用户授权
  • 备战百天,准备机考【机考笔记】
  • Spring MVC 入门案例:开启 Web 开发之旅
  • http-server:Node.js下的轻量级静态服务器工具
  • SpringBoot配置Rabbit中的MessageConverter对象
  • 【spark面试题】RDD和DataFrame以及DataSet有什么异同
  • 链表-单链表
  • [MySQL]DCL语句