Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PCA降维_Java_Matlab_Machine Learning_Linear Algebra_Pca - Fatal编程技术网

Java PCA降维

Java PCA降维,java,matlab,machine-learning,linear-algebra,pca,Java,Matlab,Machine Learning,Linear Algebra,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; 其中标签是1x699字符标签(1-26)trainingData是699

我正在尝试将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;
其中
标签
1x699
字符标签(1-26)
trainingData
699x900
,用于699个字符图像的900维数据<代码>测试为225x900,尺寸为225900个字符


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

从您的代码中,似乎您是在获取
标签的协方差,而不是
培训数据。我相信主成分分析的意义在于确定数据的某些N(这里N=10)子空间中的最大方差

协方差矩阵应该是900x900(如果900是每个图像的维数,我假设是30x30像素图像的结果)。其中
covaraincex
的对角元素
[I,I]
给出所有训练样本的该像素的方差,非对角
[I,j]
给出像素
i
和像素
j
之间的协方差。这应该是一个对角矩阵,如
[i,j]=[j,i]。


此外,当调用
EIG(协方差x,N)
时,如果您想将维度减少到10,N应该是10而不是40。

协方差应该在您的
培训数据中实现:

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;

抱歉,还有一件事,我记得为什么我最初使用40(虽然我不需要那么多),因为根据我的讲师,维度2:11比1:10更好,我如何实现这一点?[vd]=EIG(协方差x,11);pcatest=Xtest*V(:,2:11);对不起,我记得为什么我最初使用40(虽然我不需要那么多),因为根据我的讲师的说法,维度2:11比1:10更好,我如何实现这一点?