矩阵的分解:满秩分解和奇异值分解

本文主要介绍矩阵的两种经典的分解算法:满秩分解和奇异值分解。这两块内容很是基础,同时却又很是重要,在机器学习,模式识别,人工智能等领域有着很是普遍的应用。html

满秩分解

定义与性质

定义1 满秩分解:对于 m × n 的矩阵 A ,假设其秩为 r ,若存在秩一样为 r 两个矩阵: F m × r (列满秩)和 G r × n (行满秩),使得 A = F G ,则称其为矩阵 A 的满秩分解。web

定理1:满秩分解有两个性质,算法

  • 满秩分解不惟一:假设存在 r 阶可逆方阵 D ,则 A = F G = F ( D D 1 ) G = ( F D ) ( D 1 G ) = F G
  • 任何非零矩阵必定存在满秩分解。证实以下;

假设存在初等变换矩阵 B m × m ,使得机器学习

(1) B A = ( G O )

其中 G 是个 m × r 的行满秩矩阵。由上面的公式,能够推出,svg

(2) A = B 1 ( G O ) = ( F | S ) ( G O ) = F G

公式第二行中,咱们将 B 1 分块为 ( F | S ) ,其中 F m × r 矩阵(秩为 r ), G r × n 矩阵(秩为 r )。学习

满秩分解的计算

若是能理解上面的证实过程,那么计算满秩分解就很容易了,由于方法与证实思路是一致的。人工智能

举个例子来讲明,如今要计算下面矩阵 A 的满秩分解:atom

(3) A = ( 1 0 1 2 1 2 1 1 2 2 2 1 )

首先,对 A 进行初等变换,获得行满秩矩阵 G 和初等矩阵 B .spa

(4) A = ( 1 0 1 2 1 0 0 1 2 1 1 0 1 0 2 2 2 1 0 0 1 ) ( 1 0 1 2 1 0 0 0 2 0 3 1 1 0 0 0 0 0 1 1 1 )

可见,.net

(5) B = ( 1 0 0 1 1 0 1 1 1 ) , G = ( 1 0 1 2 0 2 0 3 )

接着,能够算出

(6) B 1 = ( 1 0 0 1 1 0 2 1 1 ) = ( F | S )

由于 r = 2 ,因此能够获得

(7) F = ( 1 0 1 1 2 1 )

所以

(8) A = F G = ( 1 0 1 1 2 1 ) ( 1 0 1 2 0 2 0 3 )

另外一种计算满秩分解的方法是用矩阵 A 的Hermite标准型。具体作法以下。

Hermite标准型

先给出Hermite标准型的定义。

定义2 Hermite标准型:对于 m × n 的矩阵 H ,假设其秩为 r ,若 H 知足如下3个条件,则称之为Hermite标准型。

  • H 的前 r 行中,每行都至少含一个非零元素,且每行的第一个非零元是1,然后 m r 行都是零元;
  • 假设第 i 行的第一个非零元(就是1)在第 j i 列,则 j 1 < j 2 < < j r
  • H j 1 , j 2 , , j r 列是单位矩阵 E m 的前 r 行(这个条件实际上覆盖了前2个条件);

由定义能够看出Hermite标准型就是将秩为 r m × n 矩阵经初等变换而成的阶梯型矩阵。因此也叫作Hermite最简型。

算出Hermite标准型后,对于矩阵的满秩分解 A = F G 来讲,矩阵 F 就是矩阵 A j 1 , j 2 , , j r 列构成的 m × r 矩阵,而 G 则是 H 的前 r 行构成的矩阵。

还举上面的例子,先变换获得矩阵 A 的Hermite标准型:

(9) A = ( 1 0 1 2 1 2 1 1 2 2 2 1 ) ( 1 0 1 2 0 1 0 3 / 2 0 0 0 0 ) = H

H 前两行第一个非零元所在的列号是1列和2列,因此

(10) F = ( 1 0 1 2 2 2 ) , G = ( 1 0 1 2 0 1 0 3 / 2 )

特征值分解(EVD)

特征值分解是对于对称矩阵的一个经典的分解算法,它也是后面我要说的奇异值分解的基础。因此有必要专门列一个小节,大体介绍一下。

正交矩阵

在介绍特征值分解以前,先科普一个概念——正交矩阵。

定义3 正交矩阵:指知足 A A T = E 的矩阵 A ,其中 E 为单位矩阵。

正交矩阵是欧式空间的叫法,在酉空间(即复数域上的欧式空间)叫酉矩阵。从定义也能看出正交矩阵有着不少特殊的性质:

  • A 的各行(列)是单位向量且两两正交;
  • A 在任意一组标准正交基下对应的线性变换为正交变换(即只旋转向量,却不改变向量之间的夹角和向量长度)
  • | A | = ± 1
  • A T = A 1

正交阵的概念先摆在这,后面用到我再提。

特征值与特征向量

定义4 特征值与特征向量:设 A 为数域P上的线性空间V的一个线性变换,若是对于P中一数 λ 0 ,存在非零向量 ξ ,使得下式成立,那么 λ 0 称为 A 的一个特征值,而 ξ 称为 A 的属于特征值 λ 0 的一个特征向量,即

(11) A ξ = λ 0 ξ

计算一个线性变换 A 的特征值与特征向量的方法能够分为如下三步。

  1. 指定线性空间内的一组基,并写出 A 在这组基下的矩阵 A
  2. 求出 A 的特征多项式 | λ E A | 在数域P的所有根(几重根就算几个),这些根就是 A 的所有特征值;
  3. 把所得的特征值逐个带入 A X = λ i X ,求出关于每一个特征值的一组基础解系,也就是所有的线性无关的特征向量;

我举例解释一下:假设有线性变换 A 在基 ε 1 , ε 2 , ε 3 下的矩阵是 A ,如今求它的特征值和特征向量。

(12) A = ( 1 2 2 2 1 2 2 2 1 )

其特征多项式 | λ E A | = ( λ + 1 ) 2 + ( λ 5 ) ,解得 λ 1 = 1 (二重), λ 2 = 5 。将 λ 1 = 1 代入方程组 A X = X ,解得基础解系是:

(13) ( 1 0 1 ) , ( 0 1 1 )

所以,能够获得属于特征值-1的两个线性无关的特征向量: ξ 1 = ε 1 ε 3 , ξ 2 = ε 2 ε 3 .
同理,也能够求出属于特征值5的特征向量 ξ 3 = ε 1 + ε 2 + ε 3 .

了解了特征值和特征向量,能够给出特征子空间和矩阵迹的概念了,以下。

定义5 特征子空间:咱们把属于特征值 λ 0 的全部特征向量加上零向量构成的空间称为 λ 0 对应的特征子空间(记为 V λ 0 ), V λ 0 的维数就是属于 λ 0 的全部线性无关的特征向量的个数

定义6 矩阵的迹:矩阵 A 的全体特征值的和为 A 的迹,记为 T r ( A ) 。实际上,经过证实咱们还能够知道 T r ( A ) 也等于 A 的主对角线上全部元素的和,即 T r ( A ) = a 11 + a 22 + + a n n

下面我再补充一个重要的概念——类似矩阵。

类似矩阵

定义7 类似矩阵 A , B 为两个 n 阶矩阵,若是存在 n 阶矩阵 X 使得 B = X 1 A X 成立,则 A , B 被称为是类似的,记为 A ~ B

上面说到每个线性变换在不一样基下对应着不一样的矩阵,那这些矩阵有什么关系呢?有以下定理:

定理2:线性变换在不一样的基下所对应的矩阵是类似的,反之,若两个矩阵类似,则它们能够被看做是同一个线性变换在不一样基下的矩阵。

理解了类似矩阵的概念,咱们接着探究类似矩阵与特征多项式的关系,有以下定理:

定理3:类似的矩阵有相同的特征多项式。证实以下,

咱们知道,若 A ~ B ,则有可逆矩阵 X ,使得 B = X 1 A X ,那能够作出以下的推导:

(14) | λ E B | = | λ E X 1 A X | = | X 1 ( λ E A ) X | = | X 1 | | λ E A | | X | = | λ E A |

根据定理2,咱们知道,同一个线性变换在不一样的基下所对应的矩阵是类似的,而定理3告诉咱们类似的矩阵有相同的特征多项式,那也就说明了一个问题:即线性变换矩阵的特征多项式与选择的基是无关的。

对角矩阵

对角矩阵即除了主对角线中的元素外,其余元素都为0的矩阵。对角矩阵和线性变换的结合很是紧密,有以下定理存在:

定理4:线性变换 A 在某一组基下式对角矩阵的充要条件是, A n 个线性无关的特征向量。

定理5:属于不一样特征值的特征向量是线性无关的。

特征值分解的计算

咱们知道对于一个 n × n 的对称矩阵 A 来讲(即 A T = A ),它与对角矩阵是类似的(证实我略了),那他能够被看做是一个对角阵对应的线性变换 A 在另外一组基下的矩阵,由于对角阵有 n 个线性无关的特征向量,而属于不一样特征值的特征向量是线性无关的,因此咱们说对称阵 A 必定有 n 个特征值(重根算多个)。

综上,能够获得:

(31) A X 1 = λ 1 X 1 A X 2 = λ 1 X 2 A X n = λ 1 X n

化简一下,上式能够写成: A U = U Λ ,其中 U = ( X 1 , X 2 , , X n )

(16) Λ = ( λ 1 0 0 0 λ 2 0 0 0 λ n )

由于对称阵有一个性质:不一样特征值对应的特征向量两两正交。因此此处 U 即为正交阵(正交阵的概念上面说了,至于正交阵的每一列是单位向量的问题,你对特征值作处理就完了)。

综上,一个对称阵的特征值分解能够写成: A = U Λ U 1 = U Λ U T ,其中 U 是正交矩阵,每一个列向量有 A 对应的归一化的特征向量构成。

如今对于任意的 n 维向量 Y 来讲,能够经过矩阵 A 实现相应的线性变换。

(17) A Y = U Λ U T Y

其中 U T Y 至关因而对 Y 作了一个正交变换。根据前面介绍的正交变换相关知识,正交变换至关因而对向量 Y 换了一个坐标系,而新坐标系的基就是 A 的全部特征向量(即 U 的全部列向量),所以, U T Y = ( a 1 , , a n ) a 1 , , a n 至关因而 Y 在新坐标系下的坐标.

继续化简上面的公式,

(18) A Y = U Λ U T Y = U Λ ( a 1 , , a n ) = U ( λ 1 0 0 0 λ 2 0 0 0 λ n ) ( a 1 , , a n ) = U ( λ 1 a 1 λ 2 a 2 λ 1 a 1 )

λ i a i 至关因而对向量 y 在新的坐标系下沿对应的轴方向进行了拉伸或者压缩,并无改变向量实际的方向,最后再左乘 U 至关于对当前的向量再次进行正交变换,由于 U U T 的逆矩阵,因此这是一个与 U T 的变换相反的变换。综上,对阵矩阵 A 所对应的变换实际上能够将一组正交基映射为另外一组正交基。

奇异值分解(SVD)

奇异值

上面说了一大推,其实就是介绍了对阵矩阵的一个性质:即把一组正交基映射为另外一组正交基。对于任意的 m × n 的矩阵 A A 能够将 n 维空间中的向量映射到 k 维空间中( k m ),那么如今来探究可否找到这样一组 n 维正交基,使之通过 A 的变换后,仍是正交基。寻找这样正交基的过程,就是SVD的核心思路。

好了,先假设存在这样的正交基 ( V 1 , V 2 , , V n ) | V i | = 1 ,通过 A 映射后变为 ( A V 1 , A V 2 , , A V n ) (实际上,这里的 A V i 都是 m 维向量)。既然他们两两正交,那么就得知足下面的公式。

(19) ( A V i ) ( A V j ) = ( A V i ) T A V j = V i T ( A T A ) V j = 0

如今来证实这个公式是成立的(成立的话表示正交基找到了)。由于我在假设中,设置的 ( V 1 , V 2 , , V n ) 是一组正交基,因此, V i T V j = 0 。我把这个结论先放这(下面的公式要用)。接着想,如今 A T A 是个 n × n 的对称矩阵。由于对称矩阵必定有 n 个特征值,其特征向量两两正交,那我就假设 ( V 1 , V 2 , , V n ) A T A 的特征向量,能够获得

(20) V i T ( A T A ) V j = V i T λ j V j = λ j V i T V j = 0

这样我就证实了 ( A V 1 , A V 2 , , A V n ) 是一组正交向量。再对这组正交向量作归一化处理,构成一组新的正交基。先计算每一个 A V i 的模数:

(21) | A V i | 2 = λ i V i T V i = λ i

取单位向量后,获得 u i = 1 λ i A V i ,其中 σ i = λ i 被称为是矩阵 A 的奇异值,它实际上就是对称阵 A T A 的特征值的算数平方根。而 ( u 1 , , u n ) 则是一组通过归一化处理的,两两正交的 m 维向量的集合,在这个集合当中,咱们固然能够找到一组 k 维空间的正交基( k m , k n )。

上一段的最后一句话能够这样理解:假设 m = 3 , k = 2 , n = 3 u 1 = ( 1 , 0 , 0 ) , u 2 = ( 0 , 1 , 0 ) , u 3 = ( 0 , 0 , 0 ) u 1 , u 2 , u 3 两两正交,咱们天然能够找到 k = 2 维空间的正交基: u 1 = ( 1 , 0 ) , u 2 = ( 0 , 1 )

分解过程

上面获得的正交基对咱们很是重要,它能够用来作奇异值分解。咱们先明确这样一个关系: σ i u i = A V i , i { 1 , , k } ,如今我作以下两组正交基的拓展工做:

  • 生成 ( u 1 , , u m ) 。它是由 ( u 1 , , u k ) 拓展生成的 m 维空间的正交基
  • 已知 ( V 1 , , V n ) n 维空间中一组两两正交的向量,其中, ( V k + 1 , , V n ) 使得 A V i = 0 , i { k + 1 , , n }

那么,有下面的公式成立:

(22) A ( V 1 , , V k | V k + 1 , , V n ) = ( A V 1 , , A V k | O , , O ) = ( u 1 , , u k | u k + 1 , , u m ) ( σ 1 O σ k O O )

继而能够获得奇异值分解的公式:

(23) A = U Σ V T = ( u 1 , , u m ) ( σ 1 σ k O ) ( V 1 V n )

其中 U m × m 的正交阵, Σ m × n 的对角阵, V n × n 的正交阵。

更具体地说, U 是由 A T A 的特征向量通过 A 变换而来的标准化的 m × m 正交阵, Σ 是由矩阵 A T A 的特征值构成的的算数平方根构成的 m × n 的对角阵(秩为 k ), V 是由 A T A 的特征向量构成的 n × n 的正交阵。

计算实例

我举个例子,看看SVD究竟是如何计算的。如今分解矩阵

(24) A = ( 0 1 1 1 1 0 )

根据 A ,可知参数 m = 3 , n = 2 , k = 2 .

先计算 A T A 的特征值和对应的特征向量:

(25) λ 1 = 3 , V 1 = ( 1 2 1 2 ) , λ 2 = 1 , V 2 = ( 1 2 1 2 )

根据上面的分析,这里 V 1 , V 2 构成了奇异值分解中的矩阵 V

再计算奇异值,也就是 A T A 的特征值,解得 λ 1 = 3 , λ 2 = 1 , λ 3 = 0 。其中 λ 1 , λ 2 构成了对角矩阵主对角线上的元素。

最后计算 V 1 , V 2 通过 A 变换后的向量。固然,此时只有 k = 2 m 维向量,而咱们须要 m m 维向量去构造矩阵 U ,你能够计算 A V i ,而后再使用正交基的扩充方法,可是有点复杂,一种更简单的思路是,既然 A A T m × m 对称阵,而 u 1 , , u m A A T 的特征向量,因此直接计算 A A T 的特征向量,再作归一化处理便可:

(26) u 1 = ( 1 6 2 6 1 6 ) , u 2 = ( 1 2 0 1 2 ) , u 3 = ( 1 3 1 3 1 3 )

u 1 , u 2 , u 3 构成了奇异值分解中的矩阵 U .

综上,矩阵 A 被以下分解:

(27) A = ( 1 6 1 2 1 3 2 6 0 1 3 1 6 1 2 1 3 ) ( 3 0 0 1 0 0 ) ( 1 2 1 2 1 2 1 2 )

结论:最后再把奇异值分解总结一下,任意 m × n 矩阵 A ,能够被分解为 A = U Σ V T ,其中,

  • U m × m 矩阵,每一个列向量由对称阵