【问题标题】:Using PCA to project onto a lower dimensional space in Octave使用 PCA 投影到 Octave 中的低维空间
【发布时间】:2016-01-10 13:39:45
【问题描述】:

我有以下大小为 300 x 2 的矩阵,其中包含最小-最大标准化数据:

# Pre-Process data
scaled_acc = preprocess(mtx_accuracy);

# PCA on mtx_accuracy
[pcvars pcvecs] = princomp(scaled_acc);

preprocess是一个缩放函数:

function zScore = preprocess(data)
    means = ones(length(data),1);
    means = means * mean(data);
    stds = ones(length(data),1);
    stds = stds * std(data);
    zScore = (data - means) ./ stds;
endfunction

我怎样才能减少(到一维)和投影数据,以便我有一个单列向量?

【问题讨论】:

    标签: matlab machine-learning octave pca dimensionality-reduction


    【解决方案1】:

    第二个输出变量pcvecs 已经包含n 维度中的投影数据,其中n 是数据矩阵中的总列数。因此,如果您想看到您的数据投影到m < nm 维度的子集上,您只需提取pcvecs 的前m 列。

    在你的情况下,m=1,因此它只是:

    reduced = pcvecs(:,1);
    

    【讨论】:

    • 嗨,感谢您的回复,我有点想通了。我正在尝试导出我的新数据集,我猜这是通过转置缩放矩阵并将其与缩减向量相乘来完成的?
    • @Alex - 正确。要进行完整的重建,只需:pcavecs*pcvars.'。但是,这会在所有维度完好无损的情况下进行完全重建。如果你想用减少的维度进行重建,你会这样做:pcavecs(:,1:m)*pcvars(:,1:m).' 其中m 是减少的维度的数量......但这是未居中。您需要记住每个变量的含义,以便将它们添加回未居中的数据。
    • 是的,非常感谢,这就是我一直在寻找的!我敢问,不居中是什么意思(一个链接就足够了)?
    • @Alex - 刚刚编辑了我的评论。 princomp 默认情况下 uncenters 您的数据 - 这意味着从数据中减去数据矩阵中每个特征的平均值。因此,如果你想进行重建,一旦你做了我上面链接到你的乘法,你必须读取每个特征的方法回到重建中。但是,由于您已经删除了均值,因此不需要此步骤。因此,只需进行我上面链接到您的乘法就足够了。顺便说一句,不客气 :) 祝你好运!
    • 太好了,我不需要重建,所以这正是我需要的,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2014-05-11
    • 1970-01-01
    • 2015-03-06
    • 2016-08-02
    相关资源
    最近更新 更多