用matlab做PCA和美白

时间:2017-10-08 08:45:59

标签: matlab pca image-whitening

我的任务是用给定的2dimentional 5000data进行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.903923357227459,而[-0.999423951036524,-0.033937679569230]的特征向量是第二个对应项。

之后,因为它是两维数据,我让cos(theta)为-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)

我的算法有问题吗?有人可以证明是否有错误或误解吗?非常感谢你提前。

1 个答案:

答案 0 :(得分:1)

由于数据是二维的,因此您计算出的协方差矩阵不准确。如果仅计算相对于一个轴的协方差(例如x),则假定沿y轴的协方差是恒等。这显然是不正确的。尽管您尝试解决此问题,但是可以使用一个合理的过程(我在下面进行了解释)。

不幸的是,这是一个常见的错误。看一下this paper,其中将详细说明应如何计算协方差。

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