svd奇异值分解

SVD(奇异值分解)

定义

奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,奇异值分解则是特征分解在任意矩阵上的推广。在信号处理、统计学等领域有重要应用。SVD对矩阵进行分解,并不要求分解的矩阵为方阵。其数学公式如下:
M = U Σ V T M=U\Sigma{V^T} M=UΣVT其中U是m阶正交矩阵,V是n阶正交矩阵,Σ是m×n阶对角矩阵其对角元素非负,且按降序排列。
在这里插入图片描述

几何意义

对于二维矩阵M,我们总能找到一直标准正交基 v 1 ⃗ \vec{v_1} v1 v 2 ⃗ \vec{v_2} v2 通过线性变换,使得 M v 1 ⃗ M\vec{v_1} Mv1 M v 2 ⃗ M\vec{v_2} Mv2 也是正交的,其中我们用另一组正交基 u 1 ⃗ \vec{u_1} u1 u 2 ⃗ \vec{u_2} u2 来表示 M v 1 ⃗ M\vec{v_1} Mv1 M v 2 ⃗ M\vec{v_2} Mv2 的方向, σ 1 \sigma_1 σ1 σ 2 \sigma_2 σ2来表示伸缩比例。
在这里插入图片描述
大家可以参考SVD几何意义这篇文章

应用

SVD分解有很多应用,可用于矩阵的特征分解,求伪逆,最小二乘问题求解,图像压缩…
在矩阵 Σ \Sigma Σ中奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。对角矩阵 Σ \Sigma Σ中的奇异值可以用来表示原始矩阵中的信息量大小,也就是说,我们可以用前k个大的奇异值来近似描述矩阵,而奇异值较小的部分则可以看作是噪声。通过将奇异值较小的部分清零,就可以去除噪声,从而达到去噪的效果。
M = U m × m Σ m × n V n × n T ≈ U m × k Σ k × k V k × n T M=U_{m×m}\Sigma_{m×n}V^T_{n×n}\approx U_{m×k}\Sigma_{k×k}V^T_{k×n} M=Um×mΣm×nVn×nTUm×kΣk×kVk×nT由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。PCA算法的作用是把数据集映射到低维空间中去。 数据集的特征值(在SVD中用奇异值表征)按照重要性排列,降维的过程就是舍弃不重要的特征向量的过程,而剩下的特征向量组成的空间即为降维后的空间。

代码

以下代码为matlab实现简单去噪功能。

clc;
clear;
% 构造一个原始信号
x = 0:0.1:9.9;
y = sin(x);
% 添加噪声
y_noise = y + 0.1*randn(size(x));
Y_noise=reshape(y_noise,10,10); 
% SVD分解
[U,S,V] = svd(Y_noise);
% 保留前k个奇异值
k=2;
S(k+1:end,k+1:end) = 0;
% 重构信号
Y_denoised = U*S*V';
y_denoised=reshape(Y_denoised,1,100);
% 绘制信号图
figure;
subplot(3,1,1);
plot(y);
title('原始信号');
subplot(3,1,2);
plot(y_noise);
title('添加噪声后的信号');
subplot(3,1,3);
plot(y_denoised);
title('去噪后的信号');
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值