这个主要还是学的Andrew Ng的CS229课程,查阅了其他的很多资料,勉强理解了其中的思路;与诸位分享一下;
首先假设数据X已经做过白化处理(白化是一个很简单的过程,这里不做赘述);
那么PCA的目的就是找到一组正交基,使得数据X的方差尽可能的大;
即: max((X^T * U)^2);
U为线性变换的正交基;
(X^T * U)^2 = (U^T * X)*(X^T * U) = U^T*(X*X^T)*U
上面这个看起来好像U是(X*X^T)的特征向量?到底是不是呢?
上面这个问题可以用另一种表述:
max((X^T * U)^2);
s.t. U^T * U = 1;
这个是要用拉格朗日乘子啊!
L(U,lambda) = U^T*(X*X^T)U + lambda*(U^T U -1) ;
求U^T的偏导:
d(L(U,lambda))/d(U^T) = X*X^T*U - lambda * U = 0;
所以: (X*X^T) U = lambda U ;
这个就是 X*X^T 的特征值和特征向量的定义啊;
总结一下,对于任意数据x,先白化成X,再求(X*X^T)的特征向量,和特征值;对特征值依次排序;就是各个成分的排序了;