1、算法步骤
1)数据预处理---数据归一化处理
1-2步使得数据集的均值为0,3-4步将每个方差重新调整到单位方差。保证数据不同属性的数据规模相同。如果不同属性的数据规模相同,3-4步可以忽略。
2)在均值归一化和可选的特征scaling后
2、数学上的理解
我们想要将数据降维,例如从将某个向量从n维降到k维,我们需要找到一个空间中的k个方向,使得该向量投影到这k个方向上的值的方差到达最大,这就尽最大的能力保留了数据的方差(也可以理解为信息尽可能不被覆盖,或者数据点之间距离尽可能远)。
假设u是一个1个方向,则x
(i)在u上的投影就是x(i)与u的内积,即(x
(i))
T*u, 则使得投影后的x'
(i)的方差最大,因为均值归一化后,均值为0,所以有一下的公式:
其中中间的方阵是x的协方差矩阵(x均值已归为0),要想使上如较大,||u
T∑u||最大,由于∑u = λu,u是∑的特征值是λ时的特征向量。当||u
Tu|| = 1时(标准正交),则λ较大时x变换后的方差最大,此时u为λ较大时对应的特征向量,当要求一个k维的基底时,u则取前k个较大的λ对应的特征向量。
具体求解的时候用到奇异值分解,matlab或python中提供了相应的函数,svd()。该分解得到三个矩阵(u,s ,v),其中u的前k列即为所求的基底(投影方向),是标准正交的。
至于为什么前k个就是前k个较大的λ对应的特征向量,接下来会有一章内容讲解奇异值分解。
参考:
http://blog.codinglabs.org/articles/pca-tutorial.html