【问题标题】:Finding principal components with maximum variance in matlab在matlab中找到具有最大方差的主成分
【发布时间】:2014-01-24 14:57:02
【问题描述】:

我使用以下代码计算 PCA:

    function [signals,PC,V] = pca2(data) 
    [M,N] = size(data); 
    % subtract off the mean for each dimension 
    mn = mean(data,2); 
    data = data - repmat(mn,1,N); 
    % construct the matrix Y 
    Y = data’ / sqrt(N-1); 
    % SVD does it all 
    [u,S,PC] = svd(Y); 
    % calculate the variances 
    S = diag(S); 
    V = S .* S; 
    % project the original data 
    signals = PC’ * data;

我想保留具有最大方差的主成分,比如可能有助于最大方差的前 10 个主成分。我该怎么做?

【问题讨论】:

    标签: matlab pca svd


    【解决方案1】:
    function [signals,V] = pca2(data) 
        [M,N] = size(data); 
        data = reshape(data, M*N,1);
        % subtract off the mean for each dimension 
        mn = mean(data,2); 
        data = bsxfun(@minus, data, mean(data,1));     
        % construct the matrix Y 
        Y = data'*data / (M*N-1); 
        [V D] = eigs(Y, 10);   % reduce to 10 dimension
        % project the original data 
        signals = data * V;
    

    【讨论】:

    • Lennon 我试过了,但是 Y = data'*data / (N-1);给出了一个错误。我会再次检查,并以确切的错误回复您。
    • Sid,你的数据应该是一个向量。如果不是,请使用 data=reshape(data,M*N,1);查看我的更新答案,谢谢
    • 列侬,它奏效了。减去我使用的平均值: mn = mean(data,2);数据 = 数据 - repmat(mn,1,N);
    • 不过我还有一个疑问,从这个函数我得到两个输出“信号”和“V”。尺寸(信号)=65536*10 和尺寸(V)=21*10。您能否向我解释一下输出的确切含义?我知道“V”是特征空间/新坐标,“信号”是数据到特征空间/新坐标的投影。对吗?
    • 席德。你的理解是正确的。 V是前10个特征值对应的特征向量,signals是数据在V上的投影。训练的时候用signals代替V。谢谢
    【解决方案2】:

    我猜svds 可以为你完成这项工作。

    在文档中,它说:

    s = svds(A,k) 计算 k 个最大奇异值并关联 矩阵 A 的奇异向量。

    本质上是k个最大的特征值和特征向量。这些按特征值降序排列。

    所以对于 10 个主成分,只需使用 [eigvec eigval] = svds(Y, 10);

    【讨论】:

    • 谢谢雷,我会试试这个。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多