用于降维的PCA MATLAB

时间:2017-12-19 17:30:06

标签: matlab pca

我有一个大小为[4096 x 180]的特征向量,其中180是样本数,4096是每个样本的特征向量长度。

我想使用PCA降低数据的维度。

我尝试使用MATLAB [V U]=pca(X)的内置pca函数,并按X_rec= U(:, 1:n)*V(:, 1:n)'重建数据,n是我选择的维度。这将返回4096 x 180的矩阵。

现在我有3个问题:

  1. 如何获得缩小的尺寸?
  2. 当我将n设为200时,它会在矩阵尺寸增加时产生错误,这让我假设我们不能减小尺寸小于样本尺寸。这是真的吗?
  3. 如何找到合适数量的缩小尺寸?
  4. 我必须使用缩小尺寸特征集进行进一步分类。

    如果有人能为此提供详细的pca代码详细解释,我将不胜感激。我看过很多地方,但我的困惑仍然存在。

1 个答案:

答案 0 :(得分:3)

您可能需要参考Matlab example来分析城市数据。

以下是一些简化的代码:

load cities;
[~, pca_scores, ~, ~, var_explained] = pca(ratings);

此处,pca_scores是pca组件,其中var_explained中的每个组件各自有差异。运行pca后,您无需进行任何显式乘法运算。 Matlab将直接为您提供组件。

在您的情况下,请考虑数据X4096-by-180矩阵,即您拥有4096个样本和180个功能。您的目标是降低维度,以便拥有p个功能,其中p < 180。在Matlab中,您只需运行以下命令,

p = 100;    
[~, pca_scores, ~, ~, var_explained] = pca(X, 'NumComponents', p);

pca_scores将是4096-by-p矩阵,var_explained将是长度为p的向量。

回答你的问题:

  1. 如何获得缩小的尺寸? 我在上面的示例中,pca_scores是缩减尺寸数据。
  2. 当我将n设为200时,随着矩阵尺寸的增加,它给出了一个错误,这给了我一个假设,即我们不能减小尺寸小于样本尺寸。这是真的? 您不能使用200,因为缩小的尺寸必须小于180。
  3. 如何找到合适数量的缩小尺寸? 您可以通过查看var_explained向量来做出此决定。通常,您希望保留约99%的功能差异。您可以阅读有关此here的更多信息。