目录
老饼讲解:一步一步上手学习

【介绍】矩阵分解之- SVD分解

作者 : 老饼 发表日期 : 2025-12-28 20:45:07 更新日期 : 2026-05-11 23:35:36
老饼讲解-简单易懂,干货满满,爽过嗦螺!


我们都知道,方阵可以进行特征值分解,从而剖析出方阵所对应的变换是什么,对应地,对于非方阵则可以使用奇异值分解(Singular Value Decomposition,SVD分解)来剖析矩阵对应的变换是什么。那下面我们就一起来看看奇异值分解(SVD分解)是什么,以及如何理解它背后的意义。

一、SVD分解

SVD(Singular Value Decomposition)也称为奇异值分解,它一般被认为是"方阵特征值分解"在非方阵上的拓展,简单来说,"对角化"是方阵的特征值分解方式,而SVD就是非方阵的特征值分解方式。

1.1. SVD分解的定义

好了,我们先来看看SVD分解的定义和表示。

SVD分解是指:对于矩阵A,将其分解为、 和 三个矩阵,如下

           

其中,         

 的酉矩阵         

 半正定对角矩阵

 :的酉矩阵            

(1) 通常 对角元素由大到小排序,这样  和是唯一的。

(2) 对角线上的元素称为A的奇异值。

备注:U和V都是酉矩阵,酉矩阵基本特点是,即酉矩阵的转置就是它的逆

可以看到,SVD分解与方阵特征值分解是很相似,毕竟它就是仿着方阵特征值分解造出来的东西。

1.2. 玩一玩SVD分解

好了,我们先来用python玩一玩SVD分解,在python中可以通过numpy的linalg.svd()函数来对矩阵进行SVD分解,具体代码示例如下:

'''
本代码展示在python中如何进行SVD分解
本代码来自《老饼讲解-机器学习》www.bbblearn.com
'''
import numpy as np
A = np.array([[2,3,4], [5,1, 1]])   # 要分解的矩阵A
U,S,VT = np.linalg.svd(A)           # 对矩阵A进行SVD分解
print('U:',U)                       # 分解后的U
print('S:',S)                       # 分解后的S
print('VT:',VT)                     # 分解后的V^T

代码运行结果如下:

代码运行结果

可以看到,我们把矩阵A分解成了USV,进一步可以验证它们的积就是A,如下:

所以SVD简单来说,就是把A分解成三个矩阵,UV都是酉矩阵,而中间是一个对角矩阵。

二、SVD分解-UΣV的意义

好了,我们知道SVD大概是怎么一回事了,下面我们再来深入理解一下SVD分解后得到的UΣV三个矩阵到底是什么,这样会更加深刻一些。

易得:

 值得注意的是:

    1. 与 都是对称方阵。

    2.  分别是的对角矩阵。

仔细观察上面的两个式子,就会发现:

    分别是  的  对角化矩阵。

     对角元素是是 的特征值的开方。

也就是,  是由的特征向量组成的矩阵,则是由 的特征向量组成的矩阵。而则是由的特征值的开方组成的对角矩阵。

三、SVD的几何意义

与方阵的对角化相对应,SVD也提供了以变换的角度来看待非方阵矩阵A的本质。下面我们从几何的角度来理解一下SVD分解把变换A拆成了什么变换。

3.1. 知识准备

从 可得:

(1)      

(2)  

(2)式的推导过程如下

 

需要注意的是,

1. U和V都是酉矩阵,都可以代表一组正交标准基。

2. U 代表一个m维空间的正交标准基。

3. V 代表一个n维空间的正交标准基。

3.2. A作为变换的意义

从  可知,

A把V所代表的n维空间的每个基,映射到U所代表的m维空间中m个基中的n个基,并作伸缩:

svd的几何意义

这就意味着所作的变换就是,把在中的坐标为,映射为在的坐标为 

3.3.作为变换的意义

同样的,从可知,把 U  所代表的m维空间的m个基,映射到 V 所代表的n维空间的每个基,其中,在 U中只有前n个基,分别一一对应 V中的n个基,并且 作 伸缩,而其余的则映射到0中。

总结

总的来说,方阵有特征值分解,而对应地,非方阵就造出了一个SVD奇异值分解,从数学角度来说,SVD把矩阵A分解为两个酉矩阵与对角矩阵的积,而从几何角度来说,则是把变换A拆解为从空间V到空间U的伸缩变换。



图标 评论
添加评论