奇异值分解(SVD)基础概念及MATLAB仿真

奇异值分解(SVD)基础概念及MATLAB仿真

奇异值分解(singular value decomposition,简称SVD)不仅广泛应用于机器学习领域,也在控制理论中有着广泛的应用。本文主要介绍SVD的基本原理。

文章目录

一、预备知识

1.1 特征值与特征向量

1.2 幺正矩阵(酉矩阵)(Unitary Matrix)

酉矩阵的性质:

1.3 特征分解

二、SVD定义

2.1 求矩阵V

2.2 求矩阵U

2.3 求矩阵Σ

三、SVD计算举例

四、MATLAB仿真训练

五、SVD优势

六、小结

1.1 特征值与特征向量

设 A 是n阶方阵,如果存在数λ和非零n维列向量 x,使得 Aα=λα 成立,则称 λ 是矩阵A的一个特征值(characteristic value),而α是矩阵A对应于特征值λ的特征向量(Eigenvector)。

1.2 幺正矩阵(酉矩阵)(Unitary Matrix)

泛泛来讲,如果一个n阶方阵,它的列向量构成一组标准正交基,那么这个矩阵就是幺正矩阵,或称酉矩阵。

一个简单的充分必要判别准则是:方阵U的共扼转置乘以U等于单位阵,则U是酉矩阵。即酉矩阵的逆矩阵与其伴随矩阵相等。

对于实数矩阵而言,共轭转置等于其转置。

酉矩阵的性质:

① 矩阵U为酉矩阵的充要条件是它的共轭转置矩阵等于其逆矩阵,

U

?

=

U

?

1

U^{*}=U^{-1}

U?=U?1 或

U

?

U

=

U

U

?

=

I

U^{*}U=UU^{*}=I

U?U=UU?=I

② 若酉矩阵的元素全是实数,则其为正交矩阵;

正交矩阵的性质:转置等于伴随,即

U

T

=

U

?

U^{T}=U^{*}

UT=U?

③ 酉矩阵的行列式的绝对值为1;

④ U=VΣV*

其中V是酉矩阵,Σ 是主对角线上元素绝对值为1的对角阵。

在查找相关文献时,遇到了一个问题:共轭转置矩阵与伴随矩阵为什么都用A*表示?

关于详细解答,请参考:https://zhuanlan.zhihu.com/p/87330558

这里只总结一句:当A为酉矩阵时,伴随矩阵等于其共轭转置矩阵。

1.3 特征分解

求出特征值和特征向量之后,就可以对方阵A进行特征分解。

A

=

W

Σ

W

?

1

A=WΣW^{-1}

A=WΣW?1

其中W是这n个特征向量所张成的n x n维酉矩阵(

W

T

=

W

?

1

W^{T}=W^{-1}

WT=W?1)。

因此也可以写成:

A

=

W

Σ

W

T

A=WΣW^{T}

A=WΣWT

【注意】:要进行特征分解,矩阵A必须是方阵。如果A不是方阵,即行和列不相同时,就不能用这种方法对矩阵进行分解,由此引入SVD的概念。

SVD也是对矩阵进行分解,但是与特征分解不同,SVD并不要求分解的矩阵为方阵。

定义矩阵A的SVD为:

A

=

U

Σ

V

T

A=UΣV^{T}

A=UΣVT

其中U是一个m x m的矩阵,Σ是一个m x n的矩阵,除了对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,V是一个n x n的矩阵。U和V都是酉矩阵,即满足

U

T

U

=

I

U^{T}U=I

UTU=I,

V

T

V

=

I

V^{T}V=I

VTV=I

那么我们如何求出SVD分解后的U,Σ,V这三个矩阵呢?

2.1 求矩阵V

将矩阵A的转置与A作矩阵乘法,得到一个n x n的方阵

A

T

A

A^{T}A

ATA。由于

A

T

A

A^{T}A

ATA是方阵,因此可以进行特征分解,而且得到特征值λi与特征向量vi。将该方阵的所有特征向量张成一个n x n的矩阵V,这就是SVD中的矩阵V了。

一般,将V中的每个特征向量叫做A的右特征向量。

2.2 求矩阵U

相反,将矩阵A与A的转置作矩阵乘法,得到一个m x m的方阵

A

A

T

AA^{T}

AAT。由于

A

A

T

AA^{T}

AAT是方阵,因此可以进行特征分解,而且得到特征值λi与特征向量ui。将该方阵的所有特征向量张成一个n x n的矩阵U,这就是SVD中的矩阵U了。

一般,将U中的每个特征向量叫做A的左特征向量。

2.3 求矩阵Σ

A

=

U

Σ

V

T

?

A

V

=

U

Σ

V

T

V

?

A

V

=

U

Σ

?

A

v

i

=

σ

i

u

i

?

σ

i

=

A

v

i

/

u

i

A=UΣV^{T} ? AV=UΣV^{T}V ? AV=UΣ ?Av_i=σ_iu_i?σ_i=Av_i/u_i

A=UΣVT?AV=UΣVTV?AV=UΣ?Avi?=σi?ui??σi?=Avi?/ui?

A

=

λ

1

u

1

(

v

1

)

T

+

λ

2

u

2

(

v

2

)

T

+

.

.

.

A=λ_1u_1(v_1)^T+λ_2u_2(v_2)^T+...

A=λ1?u1?(v1?)T+λ2?u2?(v2?)T+...

通过上式就可以求出每个奇异值σi,进而求出奇异值矩阵Σ。

【证明】:

因为:

U

T

U

=

I

U^{T}U=I

UTU=I,

Σ

T

Σ

=

Σ

2

Σ^{T}Σ=Σ^2

ΣTΣ=Σ2

A

=

U

Σ

V

T

?

A

T

=

V

Σ

T

U

T

?

A

T

A

=

V

Σ

T

U

T

U

Σ

V

T

=

V

Σ

2

V

T

A=UΣV^{T} ? AT=VΣ^{T}U^{T} ? A^TA=VΣ^TU^TUΣV^T=VΣ^2V^T

A=UΣVT?AT=VΣTUT?ATA=VΣTUTUΣVT=VΣ2VT

由此可以看出,ATA的特征向量组成的的确是V矩阵,同理也可证明U矩阵。

同时,我们发现,特征值矩阵等于奇异值矩阵的平方,也可以说:

σ

i

=

λ

i

σ_i=\sqrt{λ_i}

σi?=λi?

?

这也是一个十分有用的公式。

例:求矩阵A=

(

1

0

0

2

0

0

)

\left( \begin{array}{lcr} 1 & 0 & 0 \\ 2 & 0 & 0 \end{array} \right)

(12?00?00?) 的奇异值分解。

解:我们首先求出ATA和AAT:

A

T

A

=

(

1

2

0

0

0

0

)

(

1

0

0

2

0

0

)

=

(

5

0

0

0

0

0

0

0

0

)

A^TA=\left( \begin{array}{lcr} 1 & 2 \\ 0 & 0 \\ 0 & 0 \end{array} \right) \left( \begin{array}{lcr} 1 & 0 & 0 \\ 2 & 0 & 0 \end{array} \right)= \left( \begin{array}{lcr} 5 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{array} \right)

ATA=???100?200????(12?00?00?)=???500?000?000????,

A

A

T

=

(

1

0

0

2

0

0

)

(

1

2

0

0

0

0

)

=

(

1

2

2

4

)

AA^T= \left( \begin{array}{lcr} 1 & 0 & 0 \\ 2 & 0 & 0 \end{array} \right) \left( \begin{array}{lcr} 1 & 2 \\ 0 & 0 \\ 0 & 0 \end{array} \right)= \left( \begin{array}{lcr} 1 & 2 \\ 2 & 4 \\ \end{array} \right)

AAT=(12?00?00?)???100?200????=(12?24?),

根据特征值:λ1=5,λ2=λ3=0对应的特征向量为:

v1=[1,0,0]T,v2=[0,1,0]T,v3=[0,0,1]T

从而

V

=

(

1

0

0

0

1

0

0

0

1

)

V=\left( \begin{array}{lcr} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right)

V=???100?010?001????,

根据特征值:λ1=5,λ2=0对应的特征向量为:

u1=[

1

/

5

,

2

/

5

1/\sqrt5,2/\sqrt5

1/5

?,2/5

?]T,u2=[

?

2

/

5

,

1

/

5

-2/\sqrt5,1/\sqrt5

?2/5

?,1/5

?]T

从而

U

=

(

1

/

5

?

2

/

5

2

/

5

1

/

5

)

U=\left( \begin{array}{lcr} 1/\sqrt5 & -2/\sqrt5 \\ 2/\sqrt5 & 1/\sqrt5 \\ \end{array} \right)

U=(1/5

?2/5

???2/5

?1/5

??)。

根据非零特征值λ1=5,则A的奇异值为σ1=

5

\sqrt5

5

?,故D=

5

\sqrt5

5

?。

最终得到A的奇异值分解:

A

=

U

Σ

V

T

=

U

(

5

0

0

0

0

0

)

V

T

=

(

1

/

5

?

2

/

5

2

/

5

1

/

5

)

(

5

0

0

0

0

0

)

(

1

0

0

0

1

0

0

0

1

)

A=UΣV^{T}=U\left( \begin{array}{lcr} \sqrt5 & 0 & 0\\ 0 & 0 & 0 \\ \end{array} \right)V^T= \left( \begin{array}{lcr} 1/\sqrt5 & -2/\sqrt5 \\ 2/\sqrt5 & 1/\sqrt5 \\ \end{array} \right)\left( \begin{array}{lcr} \sqrt5 & 0 & 0\\ 0 & 0 & 0 \\ \end{array} \right) \left( \begin{array}{lcr} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right)

A=UΣVT=U(5

?0?00?00?)VT=(1/5

?2/5

???2/5

?1/5

??)(5

?0?00?00?)???100?010?001????

MATLAB提供了svd函数用于奇异值分解,其代码如下:

A=[1,0,0;2,0,0];

[U,S,V]=svd(A)

输出结果:

SVD为什么值得这么关注呢?

我们来看一个引例:

奇异值分解可用于高效地表示数据。例如,假设我们希望传输以下图像,该图像由15个25个黑色或白色像素的阵列组成。

由于该图像中只有三种类型的列,如下所示,因此应该可以以更紧凑的形式表示数据。

这样就大大减少了要记录的数据数量。

SVD作为一个很基本的算法,在机器学习和控制理论等领域有着广泛的应用。

当然,SVD的缺点是分解出的矩阵解释性往往不强,有点黑盒子的味道,不过这不影响它的使用。

参考:http://www.ams.org/publicoutreach/feature-column/fcarc-svd

奇异值分解(SVD)基础概念及MATLAB仿真相关教程

蓝桥秘密冲刺计划(9.26)数的分解

蓝桥秘密冲刺计划(9.26)数的分解 定位:2019年第十届蓝桥杯省赛C/C++ B组试题D 原题: 属性:枚举 难度:破壳 独白: 相比20年的试题D这题简直不知道简单了几倍。 较为简单的模拟题,只需要循环枚举就可以了,当然最好在模拟判断的时候,添加一个功能函数来

C语言 strtok函数分解字符串为一组字符串

C语言 strtok函数分解字符串为一组字符串 C语言 strtok函数分解字符串为一组字符串 一、SYNOPSIS #include string.h char *strtok(char *str, const char *delim); 二、DESCRIPTION The strtok() function breaks a string into a sequence of zero or more n

矩阵奇异值分解及伪逆

矩阵奇异值分解及伪逆 矩阵A的奇异值分解 矩阵A的伪逆 python计算矩阵的奇异值分解和伪逆 a = np.matrix([[2, -1, 0],[4,3,-2]])u, s, vt = np.linalg.svd(a, full_matrices=True)np.linalg.pinv(a) Computing SVD and pseudoinverse

【动手学MVG】矩阵分解与线性方程组的关系,求解线性方程组实战

【动手学MVG】矩阵分解与线性方程组的关系,求解线性方程组实战代码 文章目录 本文解决的问题 QR分解 投影矩阵分解得到内外参 SVD分解 最小二乘问题 最小二乘问题的求解方法 (列)满秩最小二乘问题 正规化方法 QR分解方法 SVD 分解方法 亏秩最小二乘问题 齐次

最长树链 ( dfs + 质因数分解 )

最长树链 ( dfs + 质因数分解 ) 题目链接 解题报告: 我们不妨枚举最长树链 gcdgcdgcd , 那么该条树链上所有的点的权值可表示成 k?gcdk*gcdk?gcd 同样也可表示成 k?gcd′(gcdk*gcd'(gcdk?gcd′(gcd%gcd′==0)gcd'==0)gcd′==0) ,因此我们可以用质因子对这些点

Pairs Forming LCM LightOJ - 1236 唯一分解+组合数(数论专题)

Pairs Forming LCM LightOJ - 1236 唯一分解+组合数(数论专题) Find the result of the following code: long long pairsFormLCM( int n ) { long long res = 0; for( int i = 1; i = n; i++ ) for( int j = i; j = n; j++ ) if( lcm(i, j) == n ) res++; /

手把手教你 javap 反编译分解代码,授人以鱼不如授人以渔

手把手教你 javap 反编译分解代码,授人以鱼不如授人以渔 Class文件结构 Class魔数和版本 常量池 访问标志 类索引、父类索引与接口索引集合 字段表集合 字段访问标志 方法表集合 属性表集合 属性表之异常表 我之前写了一篇关于class文件重要性的,并且从宏观

具象业务需求再抽象分解——系统设计

具象业务需求再抽象分解——系统设计 经过前篇需求梳理,商场停车收费业务需求情况已经十分明了,本节就依据前文的输出做为输入,开始系统设计工作,包括功能模块设计、存储设计、架构设计等,为后面的编码提供良好的基础保障。 有同学可能会有疑问,都使用敏

奇异值分解的反变换matlab程序,奇异值分解(SVD)基础概念及MATLAB仿真相关推荐

  1. 时间基础概念及Linux中的时间函数

    时间基础概念及Linux中的时间函数 时间相关概念 GMT 时间 UTC 时间 时区 `Time Zone` 夏令时 `DST` 本地时间 `localtime` Linux 系统中的时间 时钟基础概 ...

  2. 转 RabbitMQ 基础概念及 Spring 的配置和使用 推荐好文 举例讲解

    从不知道到了解-RabbitMQ 基础概念及 Spring 的配置和使用 转: sumile.cn  »  从不知道到了解-RabbitMQ 基础概念及 Spring 的配置和使用 序言 你在系统中是 ...

  3. 去噪matlab程序奇异值分解,奇异值分解去噪matlab

    清华大学研究生高等数值分析计算实验奇异值分解SVD以及图像压缩matlab源程序代码_理学_高等教育_教育专区.第 1 部分方法介绍 奇异值分解(SVD)定理: 设 A ? R m...... 介绍奇 ...

  4. matlab程序设计基础教程 刘国良,MATLAB程序设计基础教程 刘国良 西安电子科技大学出版社...

    商品描述: [图书描述]: 本书以MATLABR2010a为基础,较全面.系统地介绍了MATLAB的理论和应用,内容包括MArLAB的基本知识和基本程序设计.数值分析.科学计算.符号运算和图形绘制等. ...

  5. 线性最小二乘法拟合 matlab程序,曲线拟合的线性最小二乘法及其MATLAB程序

    1 曲线拟合的线性最小二乘法及其MATLAB 程序 例7.2.1 给出一组数据点),(i i y x 列入表7–2中,试用线性最小二乘法求拟合曲线,并用(7.2),(7.3)和(7.4)式估计其误差, ...

  6. 离子注入的matlab程序,等离子体离子注入pic仿真的matlab实现picnumericalsimulation.pdf...

    等离子体离子注入pic仿真的matlab实现picnumericalsimulation 等离子体离子注入PIC 仿真的MATLAB 实现 * 裴宪军, 巩春志, 汪志健, 田修波, 杨士勤 ( 哈尔 ...

  7. 心电图数据读取matlab程序,心电信号的提取及matlab编程.doc

    MIT-BIH ECG 信号的数据读取方法和Matlab程序 收藏 ? ? 最近在写一篇基于小波变换的ECG信号压缩算法的论文,遇到了怎样获取ECG信号测试数据的问题,在百度和专业论坛里搜索了一番,发 ...

  8. matlab程序结构分为哪三种,matlab程序结构

    如何优化程序? 一言以蔽之:全部使用函数! 如何优化文件? 一言以蔽之:做成工具箱! 今天师姐要我上次matlab做的后处理文件,当时是用脚本写的,根本没用心修改过.洋洋洒洒500多行,现在看起来都头 ...

  9. 数模-化验结果判别及matlab程序,数模-化验结果判别及matlab程序.doc

    地贫患者的基因筛查问题 摘 要 地中海贫血(简称"地贫")是全球广为流行.危害极为严重的遗传性溶血性疾病,全世界至少有3.45亿人携带地中海贫血的致病基因.医学上通过大人群的基因筛 ...

最新文章

  1. 必看!清华大学刘洋教授“浅谈研究生学位论文选题”方法,3月7日1小时视频公开课(附视频PPT下载)...
  2. linux alpine 提示'/bin/sh: rc-service: not found'解决方案
  3. mysql锁等待问题
  4. 面向对象思想 常说的OOP五大原则就是指1、单一职责原则; 2、开放闭合原则; 3、里氏替换原则; 4、依赖倒置原则; 5、接口隔离原则。...
  5. Hadoop 副本存储策略的源码修改和设置
  6. pb11 打印 自定义纸张_pb自定义纸张(连续走纸)
  7. jedis mysql 数据结构_Redis的数据结构和内部编码
  8. Python序列基本操作(二)
  9. 图解红黑树和JAVA实现
  10. git diff与git status
  11. 华硕AURA无法启动问题或者AURA解压缩支持文件时出错,灾难性故障
  12. 局域网考勤python_Python pyftpdlib 实现局域网文件互传
  13. Ubuntu 22.04 下安装uhd和gnuradio的快捷方法
  14. linux让grep带颜色,在linux下给grep命令添加颜色
  15. 【转】现学现用WPS,小技巧大帮助
  16. MySQL 8.0.16 告别mysql_upgrade升级方式
  17. [原题复现]HCTF 2018 Warmup
  18. Linux curl 常用示例
  19. adb shell bugreport分析
  20. pymysql mysql 1064_python使用pymysql操作MySQL错误代码1054和1064处理

热门文章

  1. react 关于RangePicker组件的时间重置采坑
  2. linux下unmount了移动硬盘之后,硬盘灯还是常亮并且硬盘还在一直转动
  3. Jenkins中参数的使用
  4. mac 建立软链接_Mac下终端pip与pip3配置(软链接)
  5. (完美)华为荣耀6 H60-L03的Usb调试模式在哪里开启的经验
  6. Mysql 连接方式
  7. GBase8s连接方式
  8. 第8章 KafkaConsumer重置offset
  9. 给hmailserver添加DKIM签名
  10. 各种小知识点(笔记本)