首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用matlab实现PCA和白化

用matlab实现PCA和白化
EN

Stack Overflow用户
提问于 2017-10-08 16:45:59
回答 1查看 814关注 0票数 1

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

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

这就是我所做的。

代码语言:javascript
运行
复制
[BtEvector,BtEvalue]=eig(MYCov);% Eigen value and vector using built-in function

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

代码语言:javascript
运行
复制
BtEvalue=[4.027487815706757,0;0,8.903923357227459] 

代码语言:javascript
运行
复制
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)

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

EN

回答 1

Stack Overflow用户

发布于 2018-07-11 13:19:31

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46629171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档