我的任务是对给定的二维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.903923357227459,特征向量为[-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来得到旋转后的数据。
此外,对于白化情况,使用乔列斯基白化,我将白化变换矩阵作为inv(Covariance Matrix)。
我的算法有问题吗?如果有错误或误解,有人能作证吗?在此之前,非常感谢。
发布于 2018-07-11 13:19:31
由于您的数据是二维的,所以您计算的协方差矩阵不准确。如果你只计算关于一个轴的协方差(比如x),你假设沿y轴的协方差是恒等的。这显然不是真的。尽管您已尝试解决此问题,但仍有一个合理的过程可以使用(我在下面解释过)。
不幸的是,这是一个常见的错误。看看this paper,它准确地解释了应该如何计算协方差。
总之,您可以计算沿每个轴(Sx和Sy)的协方差。然后将向量化矩阵的2D协方差近似为kron(Sx,Sy)。这将是2D协方差的更好近似值。
https://stackoverflow.com/questions/46629171
复制相似问题