前言


奇异值分解(SVD)在降维,数据压缩,推荐系统等有广泛的应用,任何矩阵都可以进行奇异值分解,本文通过正交变换不改变基向量间的夹角循序渐进的推导SVD算法,以及用协方差含义去理解行降维和列降维,最后介绍了SVD的数据压缩原理 。

目录


1. 正交变换

2. 特征值分解含义

3. 奇异值分解

4. 奇异值分解例子

5. 行降维和列降维

6. 数据压缩

7. SVD总结

1. 正交变换

正交变换公式:

【机器学习】奇异值分解(SVD)原理总结_java

上式表示:X是Y的正交变换 ,其中U是正交矩阵,X和Y为列向量 。

下面用一个例子说明正交变换的含义:

假设有两个单位列向量a和b,两向量的夹角为θ,如下图:

【机器学习】奇异值分解(SVD)原理总结_人工智能_02

现对向量a,b进行正交变换:

【机器学习】奇异值分解(SVD)原理总结_python_03

【机器学习】奇异值分解(SVD)原理总结_java_04


【机器学习】奇异值分解(SVD)原理总结_python_05

的模:

【机器学习】奇异值分解(SVD)原理总结_人工智能_06

由上式可知

【机器学习】奇异值分解(SVD)原理总结_人工智能_07


【机器学习】奇异值分解(SVD)原理总结_java_08

的模都为1。

【机器学习】奇异值分解(SVD)原理总结_人工智能_09


【机器学习】奇异值分解(SVD)原理总结_机器学习_10

的内积:

【机器学习】奇异值分解(SVD)原理总结_算法_11

由上式可知,正交变换前后的内积相等。

【机器学习】奇异值分解(SVD)原理总结_机器学习_12


【机器学习】奇异值分解(SVD)原理总结_机器学习_13

的夹角

【机器学习】奇异值分解(SVD)原理总结_java_14


【机器学习】奇异值分解(SVD)原理总结_人工智能_15

比较(2)式和(3)式得:正交变换前后的夹角相等,即:

【机器学习】奇异值分解(SVD)原理总结_java_16

因此,正交变换的性质可用下图来表示:

【机器学习】奇异值分解(SVD)原理总结_机器学习_17

正交变换的两个重要性质:

1)正交变换不改变向量的模。

2)正交变换不改变向量的夹角。

如果向量

【机器学习】奇异值分解(SVD)原理总结_python_18


【机器学习】奇异值分解(SVD)原理总结_机器学习_19

是基向量,那么正交变换的结果如下图:

【机器学习】奇异值分解(SVD)原理总结_人工智能_20

上图可以得到重要结论:基向量正交变换后的结果仍是基向量 。基向量是表示向量最简洁的方法,向量在基向量的投影就是所在基向量的坐标,我们通过这种思想去理解特征值分解和推导SVD分解。

2. 特征值分解的含义

对称方阵A的特征值分解为:

【机器学习】奇异值分解(SVD)原理总结_python_21

其中U是正交矩阵,

【机器学习】奇异值分解(SVD)原理总结_java_22

是对角矩阵。为了可视化特征值分解,假设A是2×2的对称矩阵,

【机器学习】奇异值分解(SVD)原理总结_机器学习_23


【机器学习】奇异值分解(SVD)原理总结_java_24

。(2.1)式展开为:

【机器学习】奇异值分解(SVD)原理总结_算法_25

用图形表示为:

【机器学习】奇异值分解(SVD)原理总结_python_26

由上图可知,矩阵A没有旋转特征向量,它只是对特征向量进行了拉伸或缩短(取决于特征值的大小),因此,对称矩阵对其特征向量(基向量)的变换仍然是基向量(单位化) 。

特征向量和特征值的几何意义:若向量经过矩阵变换后保持方向不变,只是进行长度上的伸缩,那么该向量是矩阵的特征向量,伸缩倍数是特征值。

3. SVD分解推导

我们考虑了当基向量是对称矩阵的特征向量时,矩阵变换后仍是基向量,但是,我们在实际项目中遇到的大都是行和列不相等的矩阵,如统计每个学生的科目乘积,行数为学生个数,列数为科目数,这种形成的矩阵很难是方阵,因此SVD分解是更普遍的矩阵分解方法 。

先回顾一下正交变换的思想:基向量正交变换后的结果仍是基向量 。

我们用正交变换的思想来推导SVD分解:

假设A是M*N的矩阵,秩为K,Rank(A)=k。

存在一组正交基V:

【机器学习】奇异值分解(SVD)原理总结_机器学习_27

矩阵对其变换后仍是正交基,记为U:

【机器学习】奇异值分解(SVD)原理总结_python_28

由正交基定义,得:

【机器学习】奇异值分解(SVD)原理总结_java_29

上式展开:

【机器学习】奇异值分解(SVD)原理总结_python_30

【机器学习】奇异值分解(SVD)原理总结_java_31

【机器学习】奇异值分解(SVD)原理总结_机器学习_32

∴ (3.2)式得:

【机器学习】奇异值分解(SVD)原理总结_算法_33

即假设成立 。

图形表示如下:

【机器学习】奇异值分解(SVD)原理总结_python_34

正交向量的模:

【机器学习】奇异值分解(SVD)原理总结_java_35

单位化正交向量,得:

【机器学习】奇异值分解(SVD)原理总结_算法_36

结论:当基向量是

【机器学习】奇异值分解(SVD)原理总结_机器学习_37

的特征向量时,矩阵A转换后的向量也是基向量 。

用矩阵的形式表示(3.3)式:

【机器学习】奇异值分解(SVD)原理总结_java_38

【机器学习】奇异值分解(SVD)原理总结_算法_39

【机器学习】奇异值分解(SVD)原理总结_python_40

V是N*K矩阵,U是M*K矩阵,

【机器学习】奇异值分解(SVD)原理总结_算法_41

是M*K的矩阵,需要扩展成方阵形式:将正交基

【机器学习】奇异值分解(SVD)原理总结_机器学习_42

扩展

【机器学习】奇异值分解(SVD)原理总结_java_43

空间的正交基,即U是M*M方阵 。将正交基

【机器学习】奇异值分解(SVD)原理总结_人工智能_44

扩展成

【机器学习】奇异值分解(SVD)原理总结_机器学习_45

空间的正交基,其中

【机器学习】奇异值分解(SVD)原理总结_机器学习_46

是矩阵A的零空间,即:

【机器学习】奇异值分解(SVD)原理总结_机器学习_47

对应的特征值

【机器学习】奇异值分解(SVD)原理总结_机器学习_48

=0,

【机器学习】奇异值分解(SVD)原理总结_人工智能_49

是M*N对角矩阵,V是N*N方阵

因此(3.4)式写成向量形式为:

【机器学习】奇异值分解(SVD)原理总结_算法_50

得:

【机器学习】奇异值分解(SVD)原理总结_机器学习_51

【机器学习】奇异值分解(SVD)原理总结_算法_52

【机器学习】奇异值分解(SVD)原理总结_java_53

(3.5)式写成向量形式:

【机器学习】奇异值分解(SVD)原理总结_人工智能_54

令:

【机器学习】奇异值分解(SVD)原理总结_人工智能_55

【机器学习】奇异值分解(SVD)原理总结_算法_56

则:

A = XY

因为X和Y分别是列满秩和行满秩,所以上式是A的满秩分解。

(3.5)式的奇异矩阵

【机器学习】奇异值分解(SVD)原理总结_人工智能_57

的值

【机器学习】奇异值分解(SVD)原理总结_机器学习_58


【机器学习】奇异值分解(SVD)原理总结_java_59

特征值的平方根,下面推导奇异值分解的U和V:

【机器学习】奇异值分解(SVD)原理总结_人工智能_60

即V是

【机器学习】奇异值分解(SVD)原理总结_java_61

的特征向量构成的矩阵,称为右奇异矩阵。

【机器学习】奇异值分解(SVD)原理总结_算法_62

即U是

【机器学习】奇异值分解(SVD)原理总结_python_63

的特征向量构成的矩阵,称为左奇异矩阵 。

小结:矩阵A的奇异值分解:

【机器学习】奇异值分解(SVD)原理总结_机器学习_64

其中U是

【机器学习】奇异值分解(SVD)原理总结_机器学习_65

的特征向量构成的矩阵,V是

【机器学习】奇异值分解(SVD)原理总结_java_66

的特征向量构成的矩阵,奇异值矩阵

【机器学习】奇异值分解(SVD)原理总结_python_67

的值是

【机器学习】奇异值分解(SVD)原理总结_python_68

特征值的平方根 。

3. 奇异值分解的例子

本节用一个简单的例子来说明矩阵是如何进行奇异值分解的。矩阵A定义为:

【机器学习】奇异值分解(SVD)原理总结_python_69

【机器学习】奇异值分解(SVD)原理总结_机器学习_70

【机器学习】奇异值分解(SVD)原理总结_机器学习_71

【机器学习】奇异值分解(SVD)原理总结_人工智能_72

【机器学习】奇异值分解(SVD)原理总结_算法_73

【机器学习】奇异值分解(SVD)原理总结_人工智能_74

【机器学习】奇异值分解(SVD)原理总结_人工智能_75

【机器学习】奇异值分解(SVD)原理总结_java_76

【机器学习】奇异值分解(SVD)原理总结_机器学习_77

【机器学习】奇异值分解(SVD)原理总结_人工智能_78

4. 行降维和列降维

本节通过协方差的角度去理解行降维和列降维,首先探讨下协方差的含义:

单个变量用方差描述,无偏方差公式:

【机器学习】奇异值分解(SVD)原理总结_python_79

【机器学习】奇异值分解(SVD)原理总结_机器学习_80

两个变量用协方差描述,协方差公式:

【机器学习】奇异值分解(SVD)原理总结_人工智能_81

多个变量(如三个变量)之间的关系可以用协方差矩阵描述:

【机器学习】奇异值分解(SVD)原理总结_算法_82

相关系数公式:

【机器学习】奇异值分解(SVD)原理总结_算法_83

由上式可知,协方差是描述变量间的相关关系程度:

1)协方差cov(x,y) > 0时,变量x与y正相关;

2)协方差cov(x,y)<0时,变量x与y负相关;

3)协方差cov(x,y)=0时,变量x与y不相关;

变量与协方差关系的定性分析图:

【机器学习】奇异值分解(SVD)原理总结_python_84

现在开始讨论

【机器学习】奇异值分解(SVD)原理总结_python_85


【机器学习】奇异值分解(SVD)原理总结_机器学习_86

的含义:

假设数据集是n维的,共有m个数据,每一行表示一例数据,即:

【机器学习】奇异值分解(SVD)原理总结_python_87

【机器学习】奇异值分解(SVD)原理总结_java_88

表示第i个样本,

【机器学习】奇异值分解(SVD)原理总结_python_89

表示第j维特征,

【机器学习】奇异值分解(SVD)原理总结_人工智能_90

表示第i个样本的第j维特征 。

【机器学习】奇异值分解(SVD)原理总结_人工智能_91

【机器学习】奇异值分解(SVD)原理总结_人工智能_92

由上式可知,

【机器学习】奇异值分解(SVD)原理总结_人工智能_93

是描述各特征间相关关系的矩阵,所以

【机器学习】奇异值分解(SVD)原理总结_机器学习_94

的正交基V是以数据集的特征空间进行展开的。

数据集A在特征空间展开为:

【机器学习】奇异值分解(SVD)原理总结_python_95

由上一篇文章可知,特征值表示了

【机器学习】奇异值分解(SVD)原理总结_人工智能_96

在相应特征向量的信息分量。特征值越大,包含矩阵

【机器学习】奇异值分解(SVD)原理总结_算法_97

的信息分量亦越大。

若我们选择前r个特征值来表示原始数据集,数据集A在特征空间展开为:

【机器学习】奇异值分解(SVD)原理总结_java_98

(4.2)式对列进行了降维,即右奇异矩阵V可以用于列数的压缩,与PCA降维算法一致。

行降维:

【机器学习】奇异值分解(SVD)原理总结_java_99

【机器学习】奇异值分解(SVD)原理总结_人工智能_100

由上式可知:

【机器学习】奇异值分解(SVD)原理总结_算法_101

是描述样本数据间相关关系的矩阵,因此,左奇异矩阵U是以样本空间进行展开,原理与列降维一致,这里不详细介绍了 。

若我们选择前r个特征值来表示原始数据集,数据集A在样本空间展开为:

【机器学习】奇异值分解(SVD)原理总结_java_102

因此,上式实现了行降维,即左奇异矩阵可以用于行数的压缩 。

5. 数据压缩

本节介绍两种数据压缩方法:满秩分解和近似分解

矩阵A的秩为k,A的满秩分解:

【机器学习】奇异值分解(SVD)原理总结_java_103

满秩分解图形如下:

【机器学习】奇异值分解(SVD)原理总结_算法_104

由上图可知,存储X和Y的矩阵比存储A矩阵占用的空间小,因此满秩分解起到了数据压缩作用。

若对数据再次进行压缩,需要用到矩阵的近似分解。

矩阵A的奇异值分解:

【机器学习】奇异值分解(SVD)原理总结_python_105

若我们选择前r个特征值近似矩阵A,得:

【机器学习】奇异值分解(SVD)原理总结_机器学习_106

如下图:

【机器学习】奇异值分解(SVD)原理总结_java_107

我们用灰色部分的三个小矩阵近似表示矩阵A,存储空间大大的降低了。

6. SVD总结

任何矩阵都能进行SVD分解,SVD可以用于行降维和列降维,SVD在数据压缩、推荐系统和语义分析有广泛的应用,SVD与PCA的缺点一样,分解出的矩阵解释性不强 。