首页
学习
活动
专区
圈层
工具
发布

PCA降维
EN

Stack Overflow用户
提问于 2013-12-12 17:19:31
回答 2查看 6.4K关注 0票数 3

我正在尝试执行PCA,将900个维度降到10个。到目前为止,我已经:

代码语言:javascript
复制
covariancex = cov(labels);
[V, d] = eigs(covariancex, 40);

pcatrain = (trainingData - repmat(mean(traingData), 699, 1)) * V;
pcatest = (test - repmat(mean(trainingData), 225, 1)) * V;

其中labels是字符的1x699标签(1-26)。trainingData699x900,为699个字符的图像提供900维数据.test225x900,225900维字符.

基本上,我想把它降到225x10,即10个维,但是在这一点上我有点卡住了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-12 18:44:15

协方差应该在trainingData中实现。

代码语言:javascript
复制
X = bsxfun(@minus, trainingData, mean(trainingData,1));           
covariancex = (X'*X)./(size(X,1)-1);                 

[V D] = eigs(covariancex, 10);   % reduce to 10 dimension

Xtest = bsxfun(@minus, test, mean(trainingData,1));  
pcatest = Xtest*V;
票数 8
EN

Stack Overflow用户

发布于 2013-12-12 18:38:28

从您的代码来看,您似乎接受的是labels的协变性,而不是trainingData。我相信PCA的要点是确定数据的某些N(这里的N= 10 )子空间的最大方差。

你的协方差矩阵应该是900×900(如果900是每幅图像的维数,那是我假设的30×30像素图像的结果)。其中对角线元素[i,i] of covaraincex给出了所有训练样本的像素方差,而非对角线[i,j]给出了像素i和像素j之间的协方差。这应该是[i,j] == [j,i].的对角线矩阵。

此外,当调用eigs(covariancex,N)时,如果要将维度降到10,则N应该是10而不是40。

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

https://stackoverflow.com/questions/20549969

复制
相关文章

相似问题

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