在PCA之后提取哪些功能?

时间:2016-08-04 03:59:55

标签: matlab matlab-guide pca feature-extraction feature-selection

我正在尝试使用PCA提取功能。现在我从StackExchange获得了一个MATLAB代码,如下所示,它选择了PCA之后最相关的前100个功能。现在,当我执行代码时,我发现特征值已经在第一个语句中排序了。为什么我们需要再次按降序对其进行排序?

[eigenvectors, projected_data, eigenvalues] = princomp(proteingene);
[foo, feature_idx] = sort(eigenvalues, 'descend');
selected_projected_data = projected_data(:, feature_idx(1:100));

另一个问题是,根据我的功能集,projected_data变量显示值为0的列(要素)。这意味着这些功能没有多大意义。我对吗?

最后一个问题是,我怎么知道哪些是PCA中提取的功能?

1 个答案:

答案 0 :(得分:2)

  

我发现特征值已经在第一个中排序了   声明。为什么我们需要再次按降序对其进行排序?

您不需要再次排序,因为princomp默认情况下会这样做。但是,princomp现在是不推荐使用的函数,因此您应该使用内置函数PCA

我只能推测代码的作者包含了对完整性进行排序的调用,因此很清楚他在做什么(作为sort返回feature_idx)。 例如,以下代码段实现了相同的结果,但对于读者来说并不清楚:

[eigenvectors, projected_data, eigenvalues] = princomp(proteingene);
selected_projected_data = projected_data(:, 1:100);

对于学习PCA的人来说,1:100是什么意思?

  

根据我的功能集,另一个问题是projected_data   变量显示值为0的列(要素)。这意味着   这些功能没有多大意义。我是对的吗?

我认为一个安全的答案是,如果相应的特征值的值接近于0,那么您的特征就不具有重要意义。您可以通过查看eigenvalue(feature_idx)来检查该特征,如果是你发布的代码。条目为0的列(要素)仅表示它们不跨越您空间的某个维度。您可以将它们视为标准实数向量空间中的向量。

  

最后一个问题是,我怎么知道哪些是功能   在PCA中提取?

这些是projected_data给出的!该变量包含沿特征向量方向投影的数据。 你看,特征提取实际上是对PCA分解的解释。 PCA没有"提取"任何功能,它只是更改描述您的数据的矢量基础(您可以看到视觉解释here)。基数由proteingene的特征向量组成。 提取"提取"功能您必须决定您的投影数据的哪一列与您相关。在代码示例中,提取了100个功能"任意地,没有任何标准判断它们对特定问题的重要性。

selected_projected_data = projected_data(:, feature_idx(1:100));

事实上,如果您的数据proteingene的维度少于100个,那么您甚至会尝试使用PCA从中提取100个要素时出错。