【问题标题】:Which features were extracted after PCA?在 PCA 之后提取了哪些特征?
【发布时间】:2016-08-04 03:59:55
【问题描述】:

我正在尝试使用 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 中提取了哪些特征?

【问题讨论】:

  • @beaker 已将链接添加到代码

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


【解决方案1】:

我发现特征值已经排在第一个 陈述。为什么要再次降序排序?

您不需要再次排序,因为princomp 默认会这样做。但是,princomp 现在是一个已弃用的函数,因此您应该使用内置函数 PCA

我只能推测代码的作者为了完整性包括了对 sort 的调用,所以很清楚他在做什么(因为 sort 返回 feature_idx)。 例如,下面的代码 sn-p 实现了相同的结果,但对读者来说不是很清楚:

[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 的特征向量组成。 要“提取”功能,您必须确定projected_data 的哪些列与您相关。在代码示例中,100 个特征被任意“提取”,没有任何标准来判断它们对特定给定问题的重要性。

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

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

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2014-06-12
    • 1970-01-01
    • 2014-06-11
    • 2019-08-22
    相关资源
    最近更新 更多