主成分分析原理与实现
主成分分析是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 n × m n×m n×m的矩阵转换成 n × k n×k n×k的矩阵,仅保留矩阵中所存在的主要特性,从而可以大大节省空间和数据量。最近课上学到这个知识,感觉很有意思,就在网上找一些博客进行学习,发现网上关于这方面的介绍很多,但是感觉都不太全面,单靠某一个介绍还是无法理解,当然这可能也跟个人基础有关。所以我在这里根据自己的理解写一个总结性的帖子,与大家分享同时也方便自己复习。对于主成分分析,可以参照以下几篇博客:
-
PCA的数学原理该博客介绍了主成分中的数学原理,给出了比较清晰的数学解释。简单易懂,但是有一些细节并没有涉及到,所以还是不能完全理解。
-
PCA 原理:为什么用协方差矩阵介绍了为什么在降维的时候采用协方差矩阵,但是对于协方差矩阵的解释不详细。
-
关于协方差矩阵的理解对协方差矩阵的进行了详细的推导,解释了为什么可以通过 A A T A A^T AAT来计算协方差矩阵。
-
矩阵求导、几种重要的矩阵及常用的矩阵求导公式对矩阵求导进行了介绍。提到了可能会用到的一些求导公式。
-
UFLDL 教程学习笔记(四)主成分分析对主成分的原理和使用进行了介绍。
1. 数学原理
数学原理的介绍部分可以参考文献1,该博客对主成分分析的数学原理进行了很直观的介绍。这里我根据自己的理解进行简单介绍。
对于一个坐标点 ( 3 , 2 ) (3,2) (3,2),我们知道其代表的意思是在二维坐标里其横坐标为3,纵坐标为2。其实这隐含了一个假设,即其横纵坐标的基为 ( 1 , 0 ) 和 ( 0 , 1 ) (1,0)和(0,1) (1,0)和(0,1)。对于一般的二维向量,这似乎是大家的默认情况,就像随便给出一个数字 10 10 10,大家会认为这是 10 10 10进制表示,除非特殊标明,不会把它当作其他进制来理解。对于任意一个坐标点 ( x , y ) (x,y) (x,y),我们可以将其表示为:
( 1 0 0 1 ) ⋅ ( x y ) = ( x y ) \begin{pmatrix} 1 & 0 \\ 0 & 1 \\ \end{pmatrix} \cdot \begin{pmatrix} x \\ y \\ \end{pmatrix} = \begin{pmatrix} x \\ y \\ \end{pmatrix} (1001)⋅(xy)=(xy)
其中 ( 1 0 0 1 ) \begin{pmatrix} 1 & 0 \\ 0 & 1 \\ \end{pmatrix} (1001)的每一个行向量代表一个基向量。
如果我想更换基向量怎么办呢,如上图所示,如果我想知道 ( 3 , 2 ) (3,2) (3,2)在 ( 2 / 2 , 2 / 2 ) 与 ( − 2 / 2 , 2 / 2 ) (\sqrt{2}/2,\sqrt{2}/2)与(-\sqrt{2}/2,\sqrt{2}/2) (2/2,2/2)与(−2/2,2/2)基下的坐标值,该如何计算呢?回顾基本的数学知识,我们发现对于一个向量在一个基上的值其实就是该向量在该基向量上的投影。所以,已知基向量,我们可以很容易求得,对于一个向量,如 ( 3 , 2 ) (3,2) (3,2),其在基 ( 2 / 2 , 2 / 2 ) 与 ( − 2 / 2 , 2 / 2 ) (\sqrt{2}/2,\sqrt{2}/2)与(-\sqrt{2}/2,\sqrt{2}/2) (2/2,2/2)与(−2/2,2