SVD奇异值分解案例

目录

一、引言

1、什么是SVD?

2、特点和应用:

3、所需库

二、代码实现


一、引言

1、什么是SVD?

SVD(奇异值分解,Singular Value Decomposition)是一种常用的矩阵分解方法。它将一个矩阵分解为三个矩阵的乘积:U、Σ和Vᵀ。

对于一个 m×n 的实数矩阵 A,它的 SVD 分解可以表示为:A = UΣVᵀ

其中,U 是一个 m×m 的正交矩阵,Σ 是一个 m×n 的对角矩阵,Vᵀ 是一个 n×n 的正交矩阵。

矩阵 U 的列向量是 AAᵀ 的特征向量,矩阵 V 的列向量是 AᵀA 的特征向量。Σ 的对角元素通常称为奇异值,表示 A 在这些方向上的奇异性。

2、特点和应用:

一般而言,SVD 分解有以下特点和应用:

  1. 降维:通过 SVD,可以选择保留的奇异值来实现对矩阵的降维处理。保留较大奇异值对应的列,可以有效地减少数据的维度,提取主要特征。

  2. 数据压缩:SVD 分解可以将原始数据压缩为较低维度的表示,同时尽量保留原始数据的信息。这在存储和传输大规模数据时非常有用。

  3. 矩阵逆和伪逆:SVD 分解可以用于计算矩阵的逆和伪逆。对于奇异值为零的情况,可以通过将这些奇异值取倒数来实现伪逆的计算。

  4. 数据去噪:SVD 可以用于去除噪音对数据的影响。通过保留较大奇异值对应的列,可以滤除与噪音相关的低能量奇异值所对应的信息。

  5. 推荐系统:在推荐系统中,SVD 分解可以用于对用户-物品评分矩阵进行分解,从而进行用户的兴趣预测和物品的推荐。

在实际应用中,可以使用一些数值计算库(如NumPy和SciPy)来进行矩阵的 SVD 分解。这些库通常提供了相应的函数或方法来计算矩阵的奇异值、左奇异向量和右奇异向量。

3、所需库

pip install numpy

用控制台指令下载Numpy库

二、代码实现

这段代码使用了NumPy库进行了矩阵x的SVD分解,并打印了矩阵U、奇异值Sigma和矩阵V的转置。

import numpy as np
x = np.array([[0, 1, 0], [1, 1, 1], [1, 0, 1]])
u, sigma, vt = np.linalg.svd(x)#svd是属于numpy中的算法
print(u)
print(sigma)
print(vt)

在执行这段代码之后,您可以得到以下结果:

[[-0.30628172  0.85065081 -0.4253254 ]
 [-0.89052726 -0.27602622  0.35805777]
 [-0.33771647 -0.4472136  -0.82612283]]
[2.15588593 1.41421356 0.39444856]
[[-0.57735027 -0.57735027 -0.57735027]
 [ 0.33333333 -0.66666667  0.66666667]
 [-0.74878987  0.4707393   0.46854445]]

在这里,矩阵U代表左奇异向量,是一个3x3的矩阵;奇异值Sigma是一个一维数组,按降序排列;矩阵V的转置代表右奇异向量,是一个3x3的矩阵。

请注意,SVD分解结果中的奇异值通常以降序排列。在这个示例中,奇异值按从大到小的顺序排列,而U和V的列向量对应的奇异值顺序相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值