用matlab进行PCA和白化处理



我的任务是对给定的2个5000数据进行PCA和白化变换。

我对PCA的理解是用协方差矩阵的特征向量分析数据的主轴,并将主轴旋转到x轴!

我就是这么做的。

[BtEvector,BtEvalue]=eig(MYCov);% Eigen value and vector using built-in function

我首先计算了特征值和向量。结果是

BtEvalue=[4.027487815706757,0;0,8.903923357227459] 

BtEvector=[0.033937679569230,-0.999423951036524;-0.999423951036524,-0.033937679569230]

因此,我计算出主轴的本征值为8.90392337227459,本征向量为[-0.999423951036524,-0.033937679569230],这是第二个对应项。

然后,因为它是二维数据,我让cos(θ)为-0.9994.和sin(theta)=-0.033937。因为我认为数据的主轴(本征矢量[-0.999423951036524,-0.033937679569230])必须是x轴,所以我做了旋转轴R= [cos(-Theta)-sin(-theta);sin(-theta) cos(-theta)]。让原始数据集A=>2*5000,我做了A*R来获得旋转数据。

另外,对于白化情况,使用Cholesky白化,我制作了白化转换矩阵为inv(Covariance Matrix)

我的算法有问题吗?如果有错误或误解,有人能作证吗?提前非常感谢。

由于数据是二维的,因此计算的协方差矩阵不准确。如果你只计算关于一个轴(比如x)的协方差,你就假设沿着y轴的协方差是恒等式。这显然不是真的。尽管您已经尝试过解决这个问题,但您可以使用一个合理的过程(我在下面解释过)。

不幸的是,这是一个常见的错误。看看这篇论文,它准确地解释了协方差应该如何计算。

总之,您可以计算沿每个轴(Sx和Sy)的协方差。然后将矢量化矩阵的2D协方差近似为kron(Sx,Sy)。这将是2D协方差的更好近似。

最新更新