1

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

[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中提取的功能?

+0

@beaker已添加指向代码的链接 – girl101

回答

2

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

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

我只能推测,代码的作者包括调用排序的完整性,所以他很清楚自己在做什么(如排序返回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种功能的错误。