PCA后提取了哪些特征?
Which features were extracted after PCA?
我正在尝试使用 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 中提取了哪些特征?
I found that the eigenvalues were already sorted in the first
statement. Why do we need to again sort it in descending order?
您不需要再次排序,因为 princomp
默认会这样做。但是,princomp
现在已被弃用,因此您应该使用内置函数 PCA
。
我只能推测代码的作者为了完整性而包含了对 sort 的调用,所以很清楚他在做什么(如 sort returns feature_idx
)。
例如,下面的代码片段实现了相同的结果,但对于 reader:
来说不是很清楚
[eigenvectors, projected_data, eigenvalues] = princomp(proteingene);
selected_projected_data = projected_data(:, 1:100);
对于学习 PCA 的人来说,1:100 是什么意思?
Another question is, according to my feature set, the projected_data
variable shows columns (features) which have a value of 0. This means
that these features do not have much significance. Am I right?
我认为一个安全的答案是,如果相应的特征值的值接近于 0,则您的特征没有多大意义。您可以通过查看 eigenvalue(feature_idx)
来检查,在这种情况下您发布的代码。条目为 0 的列(特征)仅表示它们不跨越 space 的某个维度。您可以将它们视为标准实数向量中的向量 space.
Last question is, how would I know which were the features that were
extracted in the PCA?
projected_data
中给出了这些!该变量包含沿特征向量方向投影的数据。
你看,特征提取实际上是对 PCA 分解的解释。 PCA 没有 "extract" 任何特征,它只是更改描述数据的向量基(您可以看到直观的解释 here)。底由 proteingene
的特征向量组成。
对于 "extract" 功能,您必须决定 projected_data 的哪些列与您相关。在代码示例中,100 个特征是 "extracted" 任意的,没有任何标准来判断它们对特定给定问题的重要性。
selected_projected_data = projected_data(:, feature_idx(1:100));
事实上,如果您的数据 proteingene
的维度少于 100,您甚至会在尝试使用 PCA 从中提取 100 个特征时遇到错误。
我正在尝试使用 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 中提取了哪些特征?
I found that the eigenvalues were already sorted in the first statement. Why do we need to again sort it in descending order?
您不需要再次排序,因为 princomp
默认会这样做。但是,princomp
现在已被弃用,因此您应该使用内置函数 PCA
。
我只能推测代码的作者为了完整性而包含了对 sort 的调用,所以很清楚他在做什么(如 sort returns feature_idx
)。
例如,下面的代码片段实现了相同的结果,但对于 reader:
[eigenvectors, projected_data, eigenvalues] = princomp(proteingene);
selected_projected_data = projected_data(:, 1:100);
对于学习 PCA 的人来说,1:100 是什么意思?
Another question is, according to my feature set, the projected_data variable shows columns (features) which have a value of 0. This means that these features do not have much significance. Am I right?
我认为一个安全的答案是,如果相应的特征值的值接近于 0,则您的特征没有多大意义。您可以通过查看 eigenvalue(feature_idx)
来检查,在这种情况下您发布的代码。条目为 0 的列(特征)仅表示它们不跨越 space 的某个维度。您可以将它们视为标准实数向量中的向量 space.
Last question is, how would I know which were the features that were extracted in the PCA?
projected_data
中给出了这些!该变量包含沿特征向量方向投影的数据。
你看,特征提取实际上是对 PCA 分解的解释。 PCA 没有 "extract" 任何特征,它只是更改描述数据的向量基(您可以看到直观的解释 here)。底由 proteingene
的特征向量组成。
对于 "extract" 功能,您必须决定 projected_data 的哪些列与您相关。在代码示例中,100 个特征是 "extracted" 任意的,没有任何标准来判断它们对特定给定问题的重要性。
selected_projected_data = projected_data(:, feature_idx(1:100));
事实上,如果您的数据 proteingene
的维度少于 100,您甚至会在尝试使用 PCA 从中提取 100 个特征时遇到错误。