【问题标题】:PCA Dimensionality ReductionPCA 降维
【发布时间】:2013-12-31 05:54:10
【问题描述】:

我正在尝试执行 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;

labels1x699 字符 (1-26) 的标签。 trainingData699x900,699 个字符的图像的 900 维数据。 test225x900,225 个 900 维字符。

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

【问题讨论】:

    标签: java matlab machine-learning linear-algebra pca


    【解决方案1】:

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

    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 ,我将如何实现这一目标?
    • [V D]=eigs(covariancex,11); pctest=Xtest*V(:,2:11);
    【解决方案2】:

    从你的代码中看起来你正在服用labels,而不是trainingData。我相信PCA的点是在确定数据的子空间数量中的一些n(n = 10)中的最大方差。

    您的协方差矩阵应为900x900(如果900是每个图像的维度,则具有30x30像素图像的结果。样本,off对角线[i,j]为像素i和pixel @ 987654327提供协方差。这应该是[i,j] == [j,i].

    的对角矩阵

    此外,在调用eigs(covariancex,N)时,如果要将尺寸降低到10,则应为10而不是40。

    【讨论】:

    • 抱歉,我记得为什么我最初使用40(虽然我不需要那么多),因为根据我的讲师,最好占尺寸2:11而不是1:10,我将如何实现这个? span>
    猜你喜欢
    • 2019-07-21
    • 2021-04-04
    • 2018-01-28
    • 2018-08-27
    • 2017-08-05
    • 2013-03-06
    • 2013-03-03
    • 2015-02-28
    • 2017-08-19
    相关资源
    最近更新 更多