引言
最近要用到PCA获取目标点云的BoundingBox,但是网上给出的有关PCA的代码大都太简洁了,我觉得可能是大佬觉得比较简单,没有详细描述。这里记录一下自己的探究结果,方便大家理解。欢迎留言讨论,如有错误,请批评指正。
理论
PCA(Principal Component Analysis)是一种十分常用的数据降维方法,其主要思想是通过线性变换的方法,将一组高维数据投影成互不相关的低维数据,保留原始数据最关键、最具代表性的数据,以压缩数据量、加速运算过程。
通过问题概述PCA推导过程:
-
PCA的目标是对原始数据进行降维,怎么降维呢?
由于数据是基于一组N维正交基表示的,因此可以将原始数据进行重新投影,投影到新的一组K维正交基上,当K<N时,即可达到降维的目的。 -
那么新的正交基需要满足哪些条件呢?
为了最大程度保留原始数据的信息,需要使降维以后的数据尽可能的分散。也就是说,新的正交基需要保证降维数据的分散程度达到最大。而数据的分散程度通常使用方差来描述,即新的正交基要保证降维后数据的方差和达到最大。当然,还需要保证基之间相互正交。 -
具体怎么求呢?
在实际求目标正交基的时候,需要同时保证降维后数据的方差和最大、基之间相互正交。在数学上,数据的协方差矩阵的对角线元素描述的是数据的方差,非对角线元素描述的是数据的协方差,即变量之间的相互关系。因此上述两条件可以统一到协方差矩阵里,而且降维前后协方差矩阵满足关系: D = P C P T D=PCP^T D=PCPT, D D D为降维后数据协方差矩阵, C C C为原数据协方差矩阵。因此,目标就变成了求解矩阵 P P P,使得上述等式中 D D D为对角阵(对 C C C进行对角化),且 P P P为 P C P T PCP^T PCPT中最大的前 K K K个(保证方差和最大)对角线元素对应的特征向量组成的矩阵。 -
算法步骤
1)求原数据协方差矩阵 C = 1 / m ∗ X X T C=1/m*XX^T C=1/m∗XXT;
2)求出协方差矩阵 C C C的特征值及对应的特征向量;
3)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 K K K行组成矩阵;
4) Y = P X Y=PX Y=PX即为降维到