用于降维 MATLAB 的 PCA

PCA for dimensionality reduction MATLAB

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

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

我尝试使用 MATLAB 的内置 pca 函数 [V U]=pca(X) 并通过 X_rec= U(:, 1:n)*V(:, 1:n)' 重构数据,n 是我选择的维度。 returns 一个 4096 x 180 的矩阵。

现在我有3个问题:

  1. 如何获取降维?
  2. 当我将 n 设为 200 时,随着矩阵维数的增加,它给出了一个错误,这让我假设我们不能减少小于样本大小的维数。这是真的吗?
  3. 如何找到合适的降维数?

我必须使用降维特征集来进一步分类。

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

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

这里是一些简化的代码:

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

这里,pca_scores 是 pca 分量,每个分量在 var_explained 中具有各自的方差。您不需要在 运行 宁 pca 之后进行任何显式乘法运算。 Matlab 会直接给你组件。

在您的情况下,考虑数据 X 是一个 4096-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