机器学习笔记——14 矩阵谱分解与奇异值分解及其背后的线性算子理论 (实战项目:利用SVD进行图像压缩)

article/2025/9/1 18:30:06

机器学习笔记——14 矩阵谱分解与奇异值分解及其背后的线性算子理论 (实战项目:利用SVD进行图像压缩)

本篇文章介绍矩阵的谱分解与奇异值分解 (Singular Values Decomposition,SVD),为了对其有一个更为本质性地认识,本文从线性算子的理论讲起,我们介绍算子的实谱定理和奇异值分解定理,然后在此基础上,借用线性算子的理论对矩阵的两个分解进行解释。
对矩阵分解的理论进行讨论后,我们将着眼于具体的操作,对于一个矩阵,如何找到其分解形式。最后我们利用讨论完的结果,利用SVD实现对一幅图像的压缩,实际上图像可以视为一个矩阵,因此可以通过找到该矩阵的分解形式,保留主要成分实现压缩。

线性算子理论与对称矩阵的谱分解

线性算子即是我们常说的线性变换,关于线性变换的定义与理论,可详见线性代数,本文只介绍与SVD有关的部分。
首先我们关注地更多是内积空间中的算子 (operator),在众多的算子,有一些算子性质优良,那么什么样的算子性质比较好?
首先为了处理的方便,我们常常会选择一组规范正交基,如此一来,我们通过一组选定的基,就可以建立相应维度的矩阵与线性算子的同构,而所谓的性质良好的算子 ϕ \phi ϕ,指的即是:
在内积空间中存在一组规范正交基u,使得该算子 ϕ \phi ϕ对应到一个对角矩阵 Σ \Sigma Σ,即 ϕ ( u x u ) = u Σ x u \phi(ux_u) = u \Sigma x_u ϕ(uxu)=uΣxu
由此我们引出线性代数中一个很好的定理:
实谱定理:在实数域R中,具有上述性质的算子的充要条件为: &lt; ϕ ( v ) , w &gt; = &lt; v , ϕ ( w ) &gt; &lt;\phi(v),w&gt; = &lt;v,\phi(w)&gt; <ϕ(v),w>=<v,ϕ(w)>,满足该条件的算子称为自伴算子。
注:本文所述定理的证明,可以参考《liner Algebra done right》
至此为止,我们就可以从算子理论的角度来解释为何实对称矩阵一定可以对角化。 若A是对称矩阵,则我们在内积空间中随意选择规范正交基 v v v,则A唯一对应到一个线性算子,记之为 ϕ \phi ϕ。可以证明算子 ϕ \phi ϕ是自伴算子,由此根据算子的实谱定理,我们能够找到由该算子的特征向量构成的规范正交基,记之为 v v v,使得自伴算子 ϕ \phi ϕ在该基 u u u下,其对应矩阵是对角阵,记之为 Σ \Sigma Σ。从而对于一个内积空间中的元素 x x x,记其在基 u u u下的坐标为 x u x_u xu,在基 v v v下的坐标为 x v x_v xv,从而有x的两个表示:
u x u = v x v u x_u = v x_v uxu=vxv即从基 u u u到基 v v v的转换矩阵为 U U U,易知 U U U是一个正交矩阵,从而有
u = v U u = v U u=vU x v = U x u x_v = Ux_u xv=Uxu利用此二式,代入下式
v A x v = u Σ x u v A x_v = u \Sigma x_u vAxv=uΣxu则有 A U = U Σ AU = U\Sigma AU=UΣ利用正交矩阵的性质,即有
A = U Σ U T A = U\Sigma U^T A=UΣUT此即实对称矩阵的谱分解:
A = ∑ i = 1 n λ i u i u i T A = \sum_{i = 1}^{n}\lambda_i u_iu_i^T A=i=1nλiuiuiT
以上是对谱分解的理论分析,我们从借助算子理论来分析,从而可以看到更为本质的原因,即对称阵在规范正交基下对应于自伴算子。

实际操作中,我们可以选择基 v v v为标准正交基。从而对于对称阵A,我们找出他的所有特征值,形成对角阵 Σ \Sigma Σ,然后找出相应的特征向量,将其规范正交化,形成正交阵U,从而完成谱分解。

线性算子理论与一般矩阵的奇异值分解

上部分的实谱定理表明,只有自伴算子可以达到我们的目的, 从几何直观上看,相当于找到一个直角坐标系,使得该算子在该坐标系上的表现为各分量的伸缩变换。 当时,对于更多的不是自伴算子的算子而言,如何能够找到好的算子理论,使得对该算子有更好的理解呢。我们陈述算子的奇异值分解定理
对于任何一个算子 ϕ \phi ϕ,都能找到两组规范正交基,记之为 v v v u u u,并能够对应到一个对角阵 Σ \Sigma Σ,从而使得 ϕ ( v x v ) = u Σ x v \phi(vx_v) = u\Sigma x_v ϕ(vxv)=uΣxv
注意到与之前实谱定理中要求的不一样,我们这里允许使用两组规范正交基,几何上讲,允许使用两个直角坐标系。其中对角阵 Σ \Sigma Σ的对角元素为算子 ϕ \phi ϕ的奇异值,即自伴算子 ϕ ∗ ϕ \sqrt{\phi^*\phi} ϕϕ 的特征值。
至此,我们就可以来解释为何任何一个矩阵均可以做奇异值分解。对于矩阵A,在内积空间中,先随意选择一组规范正交基,记之为 e e e,则A矩阵对应到一个线性算子,记之为 ϕ \phi ϕ。根据算子的奇异值分解,我们可以找到两组规范正交基,记之为 u u u v v v。内积空间中的元素 x x x,在三个坐标系下的坐标分别记为 x e x_e xe x u x_u xu x v x_v xv。则有基转换矩阵 U U U V V V(军事正交矩阵),使得
u = e U u = e U u=eU v = e V v = e V v=eV
对于坐标,有
x e = V x v x_e = V x_v xe=Vxv x e = U x u x_e = U x_u xe=Uxu
利用算子的奇异值分解定理,有
ϕ ( x ) = ϕ ( v x v ) = u Σ x v = e U Σ x v \phi(x) = \phi(v x_v) = u \Sigma x_v = e U \Sigma x_v ϕ(x)=ϕ(vxv)=uΣxv=eUΣxv
而根据矩阵A,有 ϕ ( x ) = ϕ ( e x e ) = e A x e = e A V x v \phi(x) = \phi(e x_e) = e A x_e = e A V x_v ϕ(x)=ϕ(exe)=eAxe=eAVxv
从而有 U Σ = A V U \Sigma = A V UΣ=AV此即 A = U Σ V T A = U \Sigma V^T A=UΣVT
注意,以上从理论上证明了任何矩阵奇异值分解的存在性,实际操作中,根据算子理论,则 Σ \Sigma Σ的对角元素 λ \lambda λ是矩阵 A T A \sqrt{A^TA} ATA 的特征值,我们可以计算 A T A A^TA ATA的特征值,然后进行开平方即可。对于 U U U V V V的找,有 A T A = V Σ 2 V T A^TA = V \Sigma^2V^T ATA=VΣ2VT A A T = U Σ 2 U T AA^T = U \Sigma^2U^T AAT=UΣ2UT从而U与V分别是对称矩阵 A A T AA^T AAT A T A A^TA ATA的特征向量规范正交化后的矩阵。至此得到一般矩阵A的奇异值分解过程。

利用SVD进行图像压缩(python实现)

一些说明与注意事项:

  • 压缩比例分析:假设图像原来的像素点为mn,则总共需要存储mn个数据。现在通过SVD,假设我们保留了前k个奇异值,此时只需要保留km + k*n + k = k(m+n+1)个数据,比例为 r a t e = k ( m + n + 1 ) m n ≈ k ( 1 m + 1 n ) rate = \frac{k(m+n+1)}{mn} \approx k(\frac{1}{m}+\frac{1}{n}) rate=mnk(m+n+1)k(m1+n1)本例中的像素点为512 * 512,如果保留16个主要奇异值的话,其压缩比例rate = 6.25%,保留64个奇异值的话,压缩比为rate = 25%。
  • 奇异值的意义:SVD相当于把矩阵分解为各个秩一小矩阵的和,其中奇异值代表着这个矩阵的重要程度,通过归一化可以更直观地看到这一点。于是我们保留的顺序应当是从大到小。除了压缩图像之外,SVD还要很多用途,比如图像去噪,通过去除一些较小的奇异值,可以有效去除一些干扰因素。
  • SVD压缩图像的与kmean压缩图像的比较:SVD在恢复出图像时,需要比较大量的计算,而kmean不需要,但SVD压缩图像是稳定的,过程也不需要迭代。此外,SVD的压缩效果同kmean是很不同的,其是模糊铺开的,随着成分的加入更加清晰,而kmean是通过颜色聚块的,因此根据需求选择不同的压缩方法。
  • 压缩结果展示:
    保留成分数:1,rate = 0.39%
    k = 1
    保留成分数:8,rate = 3.125%
    k = 8
    保留成分数:16,rate = 6.25%
    k = 16
    保留成分数:32,rate = 12.5%
    k = 32
    保留成分数:64,rate = 25%
    k = 64
from matplotlib.image import imread
import matplotlib.pyplot as plt
import numpy as npdef main():# 读取图片的矩阵数据Image = imread('C:/Users/Administrator/Desktop/MLCourseOfWSQ/pythonProject/mlData/svd/mandrill-large.tiff')Image = Image.astype(np.float64)# 图像的层数repeat = Image.shape[2]# 保留的成分数saveK = 100# 建立压缩后的图像数组ImageCompress = np.zeros(Image.shape,dtype = np.uint8)for i in range(repeat):ImageCompress[:,:,i] = svd(Image[:,:,i],saveK)plt.imshow(ImageCompress)plt.show()def svd(Image,saveK):'''本函数利用矩阵SVD,按照saveK保留成分数'''U,singularValue,V = np.linalg.svd(Image)# 利用奇异值建立对角阵S = np.diag(singularValue)ImageCompress = U[:,:saveK].dot(S[:saveK,:saveK]).dot(V[:saveK,:])return ImageCompressif __name__ == '__main__':main()

http://chatgpt.dhexx.cn/article/Ri9X2hkL.shtml

相关文章

从矩阵谱分解到矩形的最少正方形剖分

上次听AK讲到谱分解的时候&#xff0c;若有所思&#xff0c;下面将对思考稍作记录。 矩阵谱分解 关于谱分解有很多定义&#xff0c;主要区别在于条件的强弱&#xff0c;有的要求一个 n n n阶矩阵不仅要求可对角化&#xff0c;而且加强条件至其 n n n个特征值 λ 1 , λ 2 , .…

谱本征正交分解 (SPOD)附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

通信基础 7 —— 遍历保密速率、谱分解物理意义

目录 遍历保密速率&#xff08;ergodic secrecy rate&#xff09;闭式解&#xff08;解析解&#xff09;和数值解闭式解数值解 拉普拉斯变换谱分解/正交分解 遍历保密速率&#xff08;ergodic secrecy rate&#xff09; 说遍历容量不十分准确&#xff0c;应该叫各态历经性容量…

【推荐系统】特征值分解(谱分解)和奇异值分解(SVD),即在PCA上的应用

特征值分解&#xff08;谱分解EVD&#xff09;和奇异值分解&#xff08;SVD&#xff09;&#xff0c;即在PCA上的应用 1. 概念 特征值分解和奇异值分解在机器学习领域都有着广泛的应用。两者有着很紧密的关系&#xff0c;二者的目的都是一样&#xff0c;就是提取出一个矩阵最…

R语言主成分分析PCA谱分解、奇异值分解预测分析运动员表现数据和降维可视化

最近我们被客户要求撰写关于主成分分析PCA的研究报告&#xff0c;包括一些图形和统计输出。 本文描述了如何 使用R执行主成分分析 ( PCA )。您将学习如何 使用 PCA预测 新的个体和变量坐标。我们还将提供 PCA 结果背后的理论。 主成分分析PCA降维方法和R语言分析葡萄酒可视化实…

【矩阵论】2. 矩阵分解——单阵谱分解

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵&#xff0c;二次型&#xff0c;矩阵合同&#xff0c;正定阵&#xff0c;幂0阵&#xff0c;幂等阵&#xff0c;矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

可对角化和谱分解的区别

内容为个人理解&#xff0c;才疏学浅&#xff0c;如有错误&#xff0c;欢迎指正。 谱分解定理&#xff1a;向量空间V上的任意正规算子M&#xff0c;在V的某个标准正交基下可以对角化。反之&#xff0c;任意可对角化的算子都是正规的。 理解&#xff1a; &#xff08;1&#x…

R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据

最近我们被客户要求撰写关于特征值分解的研究报告&#xff0c;包括一些图形和统计输出。 R语言是一门非常方便的数据分析语言&#xff0c;它内置了许多处理矩阵的方法。 作为数据分析的一部分&#xff0c;我们要在有价证券矩阵的操作上做一些工作&#xff0c;只需几行代码。 …

【矩阵论】2. 矩阵分解——正规谱分解

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵&#xff0c;二次型&#xff0c;矩阵合同&#xff0c;正定阵&#xff0c;幂0阵&#xff0c;幂等阵&#xff0c;矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

【线性代数】矩阵的特征值分解(对角化、谱分解)

目录 1 前言2 矩阵的特征值分解2.1 从定义的角度理解2.2 从变换的角度理解(来自参考文献[3]) 3 对角矩阵&#xff08;补充&#xff09;3.1 对角矩阵的定义3.2 对角矩阵线性变换的几何意义 4 矩阵对角化5 相似矩阵与特征值6 参考文献 1 前言 矩阵的特征值分解又可以称作矩阵的对…

矩阵的谱分解 (详细推导步骤~~~特征值分解特征向量

所谓矩阵的分解&#xff0c;就是将一个矩阵写成结构比较简单的或性质比较熟悉的另一些矩阵的乘积。矩阵的分解方法有很多种&#xff0c;包括三角分解、QR&#xff08;正交三角&#xff09;分解、最大秩分解、奇异值分解和谱分解&#xff0c;所有这些分解在数值代数和最优化问题…

c语言-gotoxy实现先全部输出再做全部输入操作

需要用到的头文件&#xff1a; #include<windows.h> #include <iostream>代码&#xff1a; gotoxy(a,b)光标控制函数 a为行&#xff0c;b为列&#xff0c;坐标原点在左上角向右是行正方向&#xff0c;向下为列正方向 中文符号汉字在列方向为2个空间&#xff0c;英…

C语言 时钟模拟(gotoxy函数的运用)

时钟模拟&#xff0c;运用gotoxy()函数和Sleep()函数。 效果&#xff1a; #include <stdio.h> #include <windows.h> #include <time.h> #define XHOUR 40 //打印小时的起始x坐标&#xff0c;即a&#xff0c;g交点横坐标 #define YHOUR 27 #define HOUR 1 …

一些神奇的小函数(一)——gotoxy篇

一、gotoxy 1.作用&#xff08;1&#xff09;控制输出的位置① 样例 2.实现&#xff08;1&#xff09;c版 1.作用 &#xff08;1&#xff09;控制输出的位置 ① 样例 : 在代码中写上一句gotoxy(1,1)&#xff0c;然后cout<<“噢&#xff01;这个函数真有用&#xff01;…

Matlab sim函数的用法

一、引言 最近用Simulink做仿真的时候&#xff0c;需要从m文件里运行Simulink模型&#xff0c;而且需要在m文件中传递一些参数到Simulink模型&#xff0c;也需要将Simulink模型的运行结果发送回m文件&#xff0c;所以要用到sim函数。 查看了sim函数的help文档&#xff0c;并百…

CUDA10.0官方文档的翻译与学习之硬件实现

背景 在之前的文章中&#xff0c;我翻译了cuda10.0官方文档的前三章&#xff0c;这次就来翻译第四章——硬件实现 英伟达GPU架构通过由多线程的流式多处理器(SM)组成的可变数组编译&#xff0c;当一个主机CPU上的cuda程序调用了一个核网格&#xff0c;网格内的线程块将会被枚…

近距离看GPU计算(3)

在先前文章《近距离看GPU计算&#xff08;2&#xff09;》中&#xff0c;我们谈到现代GPU发展出SIMT(Single Instruction Multiple Thread)的执行结构&#xff0c;硬件线程池的线程们有相对独立的运行上下文&#xff0c;以Warp为单位分发到一组处理单元按SIMD的模式运行。这些W…

CPU线程与超线程技术

文章目录 一、CPU线程与OS线程1. CPU中的thread2. OS中的thread 二、HT/SMT技术1. 定义2. 原理3. 带来的问题 三、SIMT与SIMD1. SIMT2. SIMD3. 对比 一、CPU线程与OS线程 1. CPU中的thread CPU中的线程来自同步多线程&#xff08;SMT&#xff0c;Simultaneous Multi-threadin…

GPU 软硬件基本概念

术语: single instruction, multiple thread (SIMT)&#xff1a; a single instruction is executed on several function units in parallel GPU的硬件结构中与CUDA相关的几个概念&#xff1a;thread block grid warp sp sm streaming processor(sp): 最基本的处理单元&…

GPU异构计算基础知识

CUDA Toolkit Documentation (nvidia.com) host CPU和内存 (host memory)Device GPU和显存 (device memory) SIMT模型与SIMD模型的区别 SIMD(Single Instruction Multi Data&#xff0c;单指令多数据)模型要求同一个向量中的所有元素要在统一的同步组中一起执行&#xff0c;…