SVD分解及其应用

article/2025/9/26 19:23:17

  • SVD起源
    • 对角化概述
  • SVD
  • SVD应用
    • 图像压缩2
    • 数据去噪
    • LSA
    • 推荐系统
  • 注意
  • 参考资料

这里写图片描述

SVD可谓线性代数的登峰造极者。
其本质就是找到将任何一个矩阵对角化分解的两组标准正交的基底,同时对应的奇异值反映了对应基底变换的性质,为0表示对应的维度缺少信息,越大表明对应的维度容纳的信息方差越大。

SVD起源

认识一个问题总要追根究底,为什么要有SVD这个东西呢?
要了解这一点,必须知道矩阵对角化是个奇妙的东西,以及并不是所有的矩阵都可以对角化。同时引出了今天的重点——如何让每个矩阵都可以对角化?


对角化概述

矩阵分析中,我们都想要好的矩阵,好的矩阵的一大特点就是可以对角化。

对角化的对象矩阵有两类:

  1. 方矩阵的对角化
  2. 长方形矩阵的对角化

对角化的方法也有两类:

  1. 输入和输出空间的基完全一样,对应的特征值特征向量分解 A=SΛS1 。但是这种情况下 S 基中的向量不一定是正交的。当A是对称矩阵的话 S 中的基可以是标准正交的。同时基也不是一定存在的,只有有足够的特征向量,比如n×n的矩阵对角化的充要条件是有 n 个不相关的特征向量。
  2. 输入空间和输出空间的基不一样,这就对应了SVD,也就是 AV=US V,U 分别是输入和输出空间的基,这种情况下的对角化总是存在的。

所以,综合对角化对象矩阵的形状以及对角化的方法,有以下结论:

  1. 如果矩阵是 n 阶方阵,可以尝试同一组基下面的对角化,也就是特征值特征向量分解。这种情况下对角化存在当且仅当存在n个线性无关的特征向量。如果不存在的话说明不能找到同一组基使矩阵对角化。同时如果矩阵是对称矩阵的话,那么特征值肯定存在,肯定存在标准正交的特征向量。
  2. 其他矩阵可以采用不同的两组基底实现 SVD 对角化。
  3. 对于 n 阶方阵来说,eig分解与 svd 分解相等当且仅当矩阵是半正定矩阵,也就是方阵在同一组标准正交基上对角化并且特定维度上的方向不变。
  4. 特征值和奇异值分别表示对角化解耦后对应的基底的长度,从线性变换的角度上是对不同的基的延伸程度,从方差的角度上来说是方差的大小信息的多少。
  5. 特征值或奇异值如果等于0,说明矩阵存在某一个维度上的信息缺失。因此可以得到如果矩阵 Amn 的秩为 r ,那么它肯定有r个不等于0的特征值和奇异值。

对角化的优点是(以特征值分解举例):

  1. 可以进行对角化分解, A=SΛS1
  2. 矩阵的 k 次方Ak=SΛkS1
  3. 从对角化的矩阵中可以知道矩阵是不是缺失了某些维度的信息(特征值或者奇异值等于0),如果存在0的话那么矩阵不可逆(因为损失信息回不到以前了)。
  4. 如果基底是标准正交基,那么从特征值或者奇异值的绝对值上可以找到哪个维度上的方差最大,利用这个思路可以实现数据压缩。

那么,具体如何将一个矩阵分解成对角矩阵和标准正交矩阵的乘积?

SVD

## 公式描述
AmnAmnAmn=UmrSrrVnrT=UmmSmnVnnT=u1σ1v1T+u1σ2v2T++urσ1vrT
上面的分解计算了奇异值 σ 不为0的情况,中间的分解考虑了奇异值 σ 为0的情况,最后的分解拆成了 r 个列向量与行向量的乘积。其中,
UVeigenValue(U)i=eigenVector(AAT)=eigenVector(ATA)=eigenValue(V)i=(diag(Sr)i)2ir
## 几何描述
图片名称

SVD的几何意义是对于特定的矩阵 Amn ,寻找行空间 Rn 中的一组标准正交基,通过线性变换 A 得到列空间Rm中的一组标准正交基。 σi 也可以理解成变换到 AV 空间后的模 Avi=σiui

同时,如果矩阵的秩为 r ,那么行空间、零空间、列空间、左零空间的示意与转换如上图所示。

采用matlab中的eigshow函数,可以得到类似的解释:

图片名称 图片名称

通过选择一组合适的正交基V,使得 AV=US 也是正交的。然后分别以这两组正交且单位化的 V,U 为基, S 中包含了他们的比例系数,构建了对角化的矩阵S,实现了对角化解耦的线性变换。

SVD应用

##图像压缩 我们的目标就是这位美女——蒋勤勤,将对这幅图片实现压缩。
图片名称

首先,先来看看原来的RGB图片以及RGB分量的灰度图片:

图片名称

SVD之后,先来看看SVD的奇异值大小的分布情况和累计分布比率:

图片名称图片名称

接着,看一看选择不同数量的奇异值的结果。

这里写图片描述

最后,看一看图像的压缩比,原图像是 686×482 ,选择最大的100个奇异值已经能够得到相当好的结果了。这时候奇异值的累积比例为 89.6% ,压缩比是

686×482(686+482)×100=2.83

具体代码如下:

% 读入图像RGB数据,并从Uint8转换成double类型方便之后的处理。
p = imread('/Users/yangguangyao/Desktop/test/p.jpg');
pr = p(:,:,1);
pg = p(:,:,2);
pb = p(:,:,3);
pr = double(pr);
pg = double(pg);
pb = double(pb);% 可视化图像
figure()
subplot(2,2,1);
imshow(p)
title('原来的RGB图像')
subplot(2,2,2);
imshow(mat2gray(pr))
title('R分量的灰度图像')
subplot(2,2,3);
imshow(mat2gray(pg))
title('G分量的灰度图像')
subplot(2,2,4);
imshow(mat2gray(pb))
title('B分量的灰度图像')% SVD分解
[Ur,Sr,Vr] = svd(pr);
[Ug,Sg,Vg] = svd(pg);
[Ub,Sb,Vb] = svd(pb);% 分析SVD,计划选取1 3 5 10 30 50 100 150
svdD = diag(Sr);
cumsumD = cumsum(svdD);
plot(svdD,'LineWidth',2)
plot(cumsumD,'LineWidth',2)% 分解后按照singular value从大到小选择
fr = @(n) Ur(:,1:n)*Sr(1:n,1:n)*Vr(:,1:n)';
fg = @(n) Ug(:,1:n)*Sg(1:n,1:n)*Vg(:,1:n)';
fb = @(n) Ub(:,1:n)*Sb(1:n,1:n)*Vb(:,1:n)';param = [1,3,5,10,30,50,100,150];
figure()
for i = 1:8subplot(2,4,i);n = param(i);pnew(:,:,1) = fr(n);pnew(:,:,2) = fg(n);pnew(:,:,3) = fb(n);pnew = uint8(pnew);imshow(pnew)title(strcat(num2str(param(i)),'个奇异值'))
end

图像压缩2

这里写图片描述

上图是一个 15×25 的图像,其本质上是 15×25 的矩阵,白色的元素代表相应位置上是1,黑色代表相应位置上是0。其一共有三种模式:

这里写图片描述

这个矩阵的特征值有3,对应了三种的模式,选择最大的三个奇异值进行SVD后的结果是:

这里写图片描述

代码如下:

% 构建目标图像矩阵X
x1 = ones(25,1);
x2 = [ones(5,1);zeros(15,1);ones(5,1);];
x3 = [ones(5,1);zeros(3,1);ones(9,1);zeros(3,1);ones(5,1);];
X = [repmat(x1,1,2),repmat(x2,1,3),repmat(x3,1,5),repmat(x2,1,3),repmat(x1,1,2)];% 查看矩阵的秩
r = rank(X);% 进行SVD
[U,S,V] = svd(X);
Xnew = U(:,1:r)*S(1:r,1:r)*V(:,1:r)';% 分析画图
figure()
subplot(1,2,1)
imshow(X)
title('原始的图像')
subplot(1,2,2)
imshow(Xnew)
title('选择秩数量3的奇异值分解')

数据去噪

SVD总能找到标准化正交基后方差最大的维度,因此可以用它进行降维去噪等等。

下面分别用SVDlinear regression去拟合直线,结果如下,看来效果还不错哦。
这里写图片描述

代码如下:

% 模拟线性数据,加上一定的高斯噪声
X = 1:10;
Xb = ones(1,10);
Y = 2*X + random('Normal',0,1,1,10);% 进行SVD分解并选择原输入空间的一个奇异值比较大的基,实现了数据降维
M = [X;Y];
[U,S,V] = svd(M);U1 = U(:,1);
u1 = U1(1);
u2 = U1(2);
k = (u2/u1);% 进行线性回归
w = pinv([X;Xb])'*Y';% 分别是SVD和线性回归拟合的数据
Y1 = k*X;
Y2 = w(1)*X+w(2);% 画图并比较
figure()
% 注释蛮方便的函数ezplot('y-2*x-1')
% refline(u2/u1,0) 
hold on
plot(X,Y,'ko','LineWidth',2)
plot(X,Y1,'r-','LineWidth',1)
plot(X,Y2,'b-','LineWidth',1)
legend('数据点','SVD拟合','线性回归拟合')

LSA

LSA(Latent Semantic Analysis也叫作Latent Semantic Indexing)分析文档发现潜在的概念意义。

推荐系统

注意

  1. USVT 分解和 SΛS1 分解等价当且仅当矩阵是半正定(对称矩阵,有大于等于0的特征值)。
  2. 介绍下几种矩阵分解

    • A=USVT U,V 都是标准正交的,S是对角化的上面按照由大到小的顺序存放着奇异值。
    • A=QHR Q 是标准正交的,R对角线上是1, H 是对角化的上面存放着高度hi
    • A=LDU L,U 的对角线上是1,主元存放在 D 中。

A的行列式的绝对值等于奇异值的乘积,等于主元乘积的绝对值,等于高度hi乘积的绝对值,等于特征值的乘积。

参考资料

  1. 关于SVD很棒的包含几何解释的资料
  2. 关于LSA的很棒的文章

http://chatgpt.dhexx.cn/article/5qZg8YlC.shtml

相关文章

机器学习 - SVD分解算法的物理意义

机器学习-SVD分解算法的物理意义 奇异值分解(Singular Value Decomposition),以下简称SVD。 奇异值分解算法是一种在机器学习中经常使用到的一个算法,SVD主要用于数据压缩和数据降维,在图像压缩、推荐系统有着极其重…

SVD分解的理解

原文地址:http://www.bfcat.com/index.PHP/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视。实际上,SVD分解不但很直观,而且极其有用。SVD分解提供了一…

矩阵的 SVD 分解方法,几何意义

转自: https://liam.page/2017/11/22/SVD-for-Human-Beings/ 更多信息请读者移步原文阅读。 推荐中国台湾周志成老师的线性代数博客 https://ccjou.wordpress.com/ 以及书籍《矩阵分析及应用》-- 张贤达 还可参考: https://www.cnblogs.com/endlesscodin…

SVD分解(奇异值分解)求旋转矩阵

参考文献:http://igl.ethz.ch/projects/ARAP/svd_rot.pdf 一 问题描述 假设P{p1,p2,...,pn}和Q{q1,q2,...,qn}是两组Rd空间中的对应点集,现在想要根据这个两个点集的数据来计算出它们之间的刚性转置信息,可以知道这其实是一个最小二乘求优问题…

详解SVD(奇异值分解)

1、特征值分解(EVD) 实对称矩阵 在理角奇异值分解之前,需要先回顾一下特征值分解,如果矩阵是一个的实对称矩阵(即),那么它可以被分解成如下的形式 其中为标准正交阵,即有&#xff…

SVD分解原理及基于SVD分解的图像压缩和去噪

SVD分解是矩阵论中的一个知识点,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干…

矩阵分解SVD

《矩阵分解SVD》   本来是做了一个MobileNetV2中的关于ReLU的一个实验,大体用到的知识是对一个 n ∗ 2 n*2 n∗2 的矩阵通过 2 ∗ m 2*m 2∗m 的随机矩阵映射到 n ∗ m n*m n∗m ,经过ReLU函数后再映射回 n ∗ 2 n*2 n∗2 ,那么就需要…

t-svd张量分解算法详解

t-svd张量分解算法详解 讲解论文所需基础知识背景知识介绍什么是svd分解?定义1:svd分解 什么是张量? t-svd分解详解正式定义t-svd!疑惑问题解惑前需要学习的定义:定义2.1:张量t积 疑惑解答: 讲解…

【机器学习中的矩阵分解】LU分解、QR分解、SVD分解

学习总结 文章目录 学习总结一、三角分解(LU分解)1.1 高斯消元1.2 LU分解原理1.3 LU分解python代码1.4 LU分解算法 二、QR分解2.1 Schmid 正交化2.2 使用 Schmid 施密特正交化过程求 QR 分解2.3 QR分解的栗子 三、SVD分解3.1 SVD定义3.2 SVD基本理论&…

【六】SVD分解

SVD分解在很多经典应用中都有用到,比如数据压缩,降噪等,PCA也和SVD有着紧密联系,这里记录自己关于SVD分解求解最小二乘解的学习笔记,若有错误请指出,谢谢。 在实践中,由于存在测量误差和多次测…

SVD分解原理详解

在介绍SVD之前,先补充一些基础知识 1.酉矩阵: 2.正规(正定)矩阵 3.谱分解: 表示正规矩阵,可经由酉变换,分解为对角矩阵;这种矩阵分解的方式,称为谱分解(spec…

矩阵分解(四)——SVD分解

目录 矩阵相关术语共轭矩阵(Hermite阵)特征值相似矩阵A^H^A^H^A酉矩阵酉相抵(正交相抵)奇异值奇异值分解式特征分解 奇异值分解python代码实现验证结果 np.linalg.svd 利用Python进行SVD分解对图像压缩 矩阵相关术语 共轭矩阵&am…

聊聊特征分解和SVD分解

矩阵分解 矩阵分解(decomposition,factorization):将矩阵拆分为多个矩阵的乘积的运算。矩阵的分解包括以下几种: 特征分解SVD分解PCAQR分解LU分解极分解 矩阵分解在数据压缩、推荐系统以及NLP等都有着比较广泛的应用。 特征分解 特征分解(eigendeco…

SVD奇异值分解

SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章。本节讨论SVD分解相关数学问题&#xf…

矩阵分解 SVD分解

在认识SVD之前,先来学习两个相关的概念:正交矩阵和酉矩阵。 如果,则阶实矩阵称为正交矩阵。而酉矩阵是正交矩阵往复数域上的推广。 判断正交矩阵和酉矩阵的充分必要条件是:。或者说正交矩阵和酉矩阵的共轭转置和它的 …

SVD分解的推导,理解SVD分解及矩阵奇异值的几何意义

文章目录 SVD分解的证明推导从本质上理解SVD分解矩阵奇异值的几何意义 SVD分解的证明推导 理解SVD分解要解决的问题是什么? 从本质上理解SVD分解 从线性映射的矩阵表示角度,即从“抽象”->“具体”的角度去理解SVD分解。 矩阵奇异值的几何意义…

矩阵分解SVD原理

常用的经典矩阵分解算法: 经典算法PCA、SVD主题模型算法LDA概率矩阵分解PMF,由深度学习大牛Ruslan Salakhutdinov所写,主要应用于推荐系统中,在大规模的稀疏不平衡性Netflix数据集上取得较好的效果;非负矩阵分解&#…

精简易懂,30 分钟学会 SVD 矩阵分解,很强!

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达SVD(Singular Value Decomposition)奇异值分解分解是机器学习中最重要的矩阵分解方法。 它能够将一个任意形状的矩阵分解成一个正交矩阵和一个对角矩阵以及另一个正交矩阵…

矩阵(一):SVD分解

文章目录 0 参考链接(尊重原著)1 SVD分解原理2 SVD分解意义3 SVD分解的应用4 SVD数学举例5 为什么Ax0的解为最小奇异值对应的向量? 0 参考链接(尊重原著) 下面这个讲的很好很全面 视觉SLAM常见的QR分解SVD分解等矩阵分…

详解SVD分解过程

转 如何让奇异值分解(SVD)变得不“奇异”? 红色石头 发布于 2018-08-29 分类:机器学习 阅读(144) 评论(0) 如何让奇异值分解(SVD)变得不“奇异”?-红色石头的个人博客 http://redstonewill.com/1529/ 在之前的一篇文章:通俗解…