PCA降维

问题描述 投票:4回答:2

我正在尝试执行PCA,将900尺寸减小到10。到目前为止,我具有:

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是字符(1-26)的1x699标签。 trainingData是用于699个字符的图像的900维数据。 699x900test,225 900个维字符。

基本上,我想将其减小到225x900,即10维,但此时有点卡住。

java matlab machine-learning linear-algebra pca
2个回答
8
投票

协方差应该在您的225x10中实现:

trainingData

1
投票

从您的代码看来,您好像是在采用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; 而不是labels的协方差。我相信PCA的目的是确定数据的N个子空间(此处N = 10)中的最大方差。

您的协方差矩阵应为900x900(如果每个图像的尺寸为900,则我假设具有30x30像素图像的结果。)其中trainingData的对角元素[i,i]给出了所有训练样本的像素方差,对角线covaraincex给出像素[i,j]和像素i之间的协方差。这应该是一个对角矩阵,因为j

此外,在调用[i,j] == [j,i].时,如果要将尺寸减小到10,则N应该是10,而不是40。

© www.soinside.com 2019 - 2024. All rights reserved.