首页 > 其他分享 >SVD分解的几何意义

SVD分解的几何意义

时间:2024-12-25 10:31:48浏览次数:4  
标签:格网 SVD 矩阵 正交 分解 vec bmatrix 几何 sigma

本文翻译自 https://www.ams.org/publicoutreach/feature-column/fcarc-svd
仅用于研究及学习

介绍

本文主题 singluar value decomposition (奇异值分解,下文简称 SVD ) 原本应当是本科课程的一部分, 但却总是被忽视。除却相当的直观性,这些分解同样极其拥有应用价值。如,在线电影租借公司 Netflix, 现在就在悬赏:只要能将他们的电影推荐系统的效率提升10%的人,就能获得1百万美元的奖金。令人惊讶的是,这个看起来简单的问题实际上却非常具有挑战性,参与其中的团队现在使用技术相当复杂。而这些技术的核心正是SVD。

线性变换的几何意义

让我们从一些简单的矩阵开始,也就是 2x2 的矩阵。我们的第一个例子就是对角矩阵:

\[M = \begin{bmatrix} 3 & 0\\ 0 & 1 \end{bmatrix} \]

几何上讲,我们可以把像这样的矩阵看作通过矩阵乘法将一个平面点 (x, y) 变换到另一个点的变换:

\[\begin{bmatrix} 3 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 3x \\ y \end{bmatrix} \]

这个变换的作用如下所示:平面被横向拉伸了3倍,同时纵向未发生变化

现在让我们来看另一个矩阵

\[M = \begin{bmatrix} 2 & 1\\ 1 & 2 \end{bmatrix} \]

它产生的变换是

这样很难清晰的表述矩阵产生的几何变换。但让我们把图中的格网旋转45°,再看看会怎么样。

啊哈,我们现在可以清晰的发现这个新格网就像前文中被对角矩阵变换的格网一样:在一个方向上被拉伸了3倍。

这种矩阵为对称矩阵的情况是一种特殊情况。如果我们有一个 2x2 的对称矩阵,我们就可以通过旋转格网来使得矩阵变换表现为在两个方向上的拉伸,或者反转。

用更数学严谨化的表述,给定一个对称矩阵M, 我们可以找到一组正交向量 \(\vec{v_i}\) , 使得 \(M \vec{v_i}\) 是 \(\vec{v_i}\) 的系数倍, 即 \(M \vec{v_i} = \lambda \vec{v_i}\) ,其中 \(\lambda\) 为一标量。

几何意义上,这意味着,当向量 \(\vec{v_i}\) 被矩阵 \(M\) 所乘时, 它仅仅进行了拉伸或反转。正是由于这个性质,我们将向量 \(\vec{v_i}\) 称为矩阵 \(M\) 的特征向量, 值 \(\lambda\) 称为特征值。这样我们可以很容易得出另一个结论:一个对称矩阵的对应不同特征值的特征向量彼此正交。

如果我们将格网与对称矩阵的特征向量对齐,那么矩阵就会像对特征向量一样对格网进行拉伸或反转。

我们对这种线性变换的几何表述很简单:格网被在一个方向上拉伸。而对更为一般情况下的矩阵,我们就会想,是否存在一个正交格网,使得矩阵变换后的格网依然正交。

让我们以一个非对称矩阵作为最后一个例子:

\[M = \begin{bmatrix}1 & 1 \\ 0 & 1\end{bmatrix} \]

它产生的几何变化可以被称为切变。

我们很容易就能发现沿水平轴方向的向量是矩阵的特征向量之一。但,上图明确表示,沿这个方向对齐的格网在变换后明显不再正交。
尽管如此,让我们先看看将格网旋转30°会怎么样。

我们可以注意到,右边的变换后平行四边形的较小夹角增大了。让我们旋转60°再看看。

嗯,现在右边的格网看起来基本正交了。事实上,当我们旋转格网58.28°时,两边的格网就都正交了。

奇异值分解

对 2x2 矩阵的奇异值分解的几何意义为:对任意 2x2 矩阵,我们可以找到一个正交的格网,使得变换后的格网依然正交。

用向量表示为:选择合适的正交单位向量 \(\vec{v_1}\) 和 \(\vec{v_2}\), 向量 \(M \vec{v_1}\) 和 \(M \vec{v_2}\) 依然正交。

我们用单位向量 \(\vec{u_1}\) 和 \(\vec{u_2}\) 来表示 \(M\vec{v_1}\) 和 \(M\vec{v_2}\) 的方向。\(\sigma_1\) 和 \(\sigma_2\) 表示 \(M\vec{v_1}\) 和 \(M\vec{v_2}\) 的长度,也是格网在特定方向上的拉伸倍数。这些数(\(\sigma_1\) 和 \(\sigma_2\))被称为 \(M\) 的奇异值。

因此,我们有

\[M \vec{v_1} = \sigma_1 \vec{u_1} \]

\[M \vec{v_2} = \sigma_2 \vec{u_2} \]

我们现在可以简单描述矩阵 \(M\) 如何作用于向量 \(x\)

\[\vec{x} = (\vec{v_1} \cdot \vec{x}) \vec{v_1} + (\vec{v_2} \cdot \vec{x}) \vec{v_2} \]

这表明:

\[M \vec{x} = (\vec{v_1} \cdot \vec{x})M\vec{v_1} + (\vec{v_2} \cdot \vec{x})M\vec{v_2} \]

\[M \vec{x} = (\vec{v_1} \cdot \vec{x})\sigma_1\vec{u_1} + (\vec{v_2} \cdot \vec{x})\sigma_2\vec{u_2} \]

即:

\[M \vec{x} = \vec{u_1}\sigma_1\vec{v_1^T}\vec{x} + \vec{u_2}\sigma_2\vec{v_2^T}\vec{x} \]

\[M = \vec{u_1}\sigma_1\vec{v_1^T} + \vec{u_2}\sigma_2\vec{v_2^T} \]

通常写作:

\[M = U \Sigma V^T \]

上述说明了如何将一个矩阵分解为三个矩阵的乘积,其中 \(V\) 为域内正交基,\(\Sigma\) 为特征值对角阵, \(U\)为变换后域内正交基。

如何找到矩阵的奇异分解

矩阵奇异分解的强大之处在于它可以用于任何矩阵。但如何我们要怎么去分解呢?让我们看看前面的例子,向域内加入单位圆,而它的变换后对应域内变成了椭圆,其长、短半轴分别规定了新的正交格网。

换句话说,就是方程 \(|M\vec{x}|\) 在单元圆中在 \(\vec{v_1}\) 处取得极大值,在 \(\vec{v_2}\) 处取得极小值。这就将问题降低到了标准的数学计算,我们只需要找到方程在单位圆上的极值。而这个方程的驻点正是在矩阵 \(M^TM\) 的特征向量上。而这个矩阵又是对称的,那么它不同特征值的特征向量是正交的。这就得出了 $\vec{v_i} 的取值。

奇异值可以由 \(\sigma_i = | M\vec{v_i} |\) 求得, 向量 \(\vec{u_i}\) 为 \(M\vec{v_i}\) 方向上的特征向量。但是,为什么向量组 \(\vec{u_i}\) 两两正交呢?

为了证明,我们先假定 \(\sigma_i\) 和 \(\sigma_j\) 为奇异值。则有

\[M \vec{v_i} = \sigma_i \vec{u_i} \]

\[M \vec{v_j} = \sigma_j \vec{u_j} \]

让我们先观察这个式子 \(M \vec{v_i} \cdot M \vec{v_j}\) ,为了方便起见,我们先假定奇异值均为非零值。一方面,前式显然为0,因为 \(\vec{v_i}\) 彼此正交。

\[M \vec{v_i} \cdot M \vec{v_j} = \vec{v_i^T}M^TM\vec{v_j} = \lambda_j \vec{v_i^T} \vec{v_j} = 0 \]

另一方面,我们有

\[M \vec{v_i} \cdot M \vec{v_j} = \sigma_i \vec{u_i} \cdot \sigma_j \vec{u_j} \]

因此,\(\vec{u_i}\) 彼此正交。

另一个例子

现在让我们来看这个奇异矩阵

\[M = \begin{bmatrix} 1 & 1 \\ 2 & 2 \end{bmatrix} \]

该矩阵的几何意义如下:

在这种情况下,矩阵的第二个奇异值为0,此时我们可以认为 \(M\) 的分解为:

\[M = \vec{u_1} \sigma_1 \vec{u_2} \]

换句话说,如果某些奇异值为0, 那么它相关的向量不会在矩阵分解中出现。此时,我们可以发现,矩阵的秩就是非零奇异值的数量。

应用

译者注:此处的应用部分举例均较为常见, 如数据压缩、噪声过滤,数据分析等,故不对此部分进行翻译。若对此部分感兴趣,请参考原文。

总结

如文首所言, 奇异值分解应当作为本科主要线性代数课程的主要部分之一。并且,由于其及其简单的几何解释,奇异值分解可以非常高效的将线性代数理论付诸实践。但大多数时候,这份重要性在本科线性代数中被忽视了。

这篇文章应该多少给大家留下一些印象。我旨在提供奇异值分解内核心概念的直观理解,并举例表明如何在实践中进行应用。更加深入的学习应该会变得简单些。

标签:格网,SVD,矩阵,正交,分解,vec,bmatrix,几何,sigma
From: https://www.cnblogs.com/Keaton/p/18609491

相关文章

  • Jordan-Chevalley 分解
    设\(F\)是代数闭域,\(V\)是\(F\)上的\(n\)维线性空间.对于\(V\)上的线性算子\(\mathcalA\),\[\mathcalA=\mathcalA_s+\mathcalA_n\]称为\(\mathcalA\)的Jordan-Chevalley分解,如果\(\mathcalA_s\)是可对角化算子,\(\mathcalA_n\)是幂零算子,且\(\mathcalA......
  • 二维计算几何基础
    二维计算几何基础单位圆以原点为圆心,1为半径的圆称为单位圆。单位圆的解析式为\(x^2+y^2=1\)。从角度到弧度角度:把一圆周分为360等分,每等分为\(1^{\circ}\)。弧度:记一圆周弧度的值为\(2\pi\)。一个角弧度在数值上等于单位圆上这个角所对弧的弧长。弧度的单位为rad,一......
  • 计算几何模板1(点,直线,线段以及之间的相互关系)
    带样例测试可以直接拿来用#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constdoublepi=acos(-1);//圆周率π精确到15位小数3.141592653589793constdoubleeps=1e-8;//控制精度视题目情况具体情况具体取有的要取到1e-91e-10不......
  • 6093. 不互质子序列 DP 分解质因数
    #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=1e5+10;intn;intf[N];//动态规划数组,用于记录以每个质因子为结尾的最长子序列长度intmain(){cin>>n;if(n==1){......
  • 奇异值分解(SVD)在图像压缩中的应用
    引言   奇异值分解(SingularValueDecomposition,简称SVD)是线性代数中一种重要的矩阵分解方法,广泛应用于数据降维、信号处理、图像压缩等领域。本文将通过一个具体的Python代码示例,展示如何利用SVD对图像进行压缩,并分析其压缩效果。什么是奇异值分解(SVD)?奇异值分解......
  • 【Tensor Computation for Data Analysis】T-SVD(Tensor Singular Value Decomposition
    什么是T-SVD?T-SVD(TensorSingularValueDecomposition)是针对三维张量的一种奇异值分解方法,类似于我们熟悉的矩阵的SVD(奇异值分解)。T-SVD是基于t-product的分解,可以将张量分解为三个部分:正交张量、对角张量和另一个正交张量。它在信号处理、图像修复、视频分析等多维......
  • 【eCognition初学3】基于分割对象提取特征(图层值特征,几何特征,自定义特征/如NDVI,纹理特
            eCognition中常用的对象特征有自定义特征(如计算NDVI等植被指数),图层值特征,几何特征,纹理特征。(1)ImageObjectInformation中显示从影像分割后生成的影像对象(图像区域)的详细静态属性数据或特征。  (2)FeatureView提供了一个交互式的可视化环境,帮助用户筛选、......
  • 看板助力年末总结规划:任务分解与进度跟踪全攻略
    一、年末规划的重要性每年的年末,企业都需要做一次深度的反思和总结,分析过去一年的业务发展、财务状况、市场表现以及团队协作等方面的成绩与不足。年末规划不仅是对过去一年的回顾,更是为来年制定清晰目标和行动计划的基础。具体来说,年末规划的核心要素包括:总结过去一年的成就和......
  • 【机器学习与数据挖掘实战】案例03:基于k近邻算法的非侵入式电力负荷监测与分解的电力
    【作者主页】FrancekChen【专栏介绍】⌈⌈⌈机器学习与数据挖掘实战案例⌋......
  • 鸿蒙UI系统组件14——几何图形(Shape)
    1、概述上篇文章中,我们讨论了在鸿蒙系统中如何显示一张图片,鸿蒙UI系统组件13——图片显示(Image),在鸿蒙开发中,除了使用静态图片展示外,我们还可以自己使用代码画一些几何图形,例如:三角形、矩形、圆形、多边形等。此时,我们就需要用到Shape组件来完成我们的需求。2、创建绘制组件绘......