如何使用scikit-learn PCA减少功能并知道哪些功能被丢弃

时间:2014-04-25 13:30:11

标签: python machine-learning scikit-learn pca feature-selection

我正在尝试在尺寸为m x n的矩阵上运行PCA,其中m是要素数量和n个样本数量。

假设我想保留具有最大差异的nf个功能。使用scikit-learn我可以这样做:

from sklearn.decomposition import PCA

nf = 100
pca = PCA(n_components=nf)
# X is the matrix transposed (n samples on the rows, m features on the columns)
pca.fit(X)

X_new = pca.transform(X)

现在,我得到一个新的矩阵X_new,其形状为n x nf。是否可以知道哪些功能已被丢弃或保留哪些功能?

由于

3 个答案:

答案 0 :(得分:27)

PCA对象在拟合期间确定的功能位于pca.components_。与被pca.components_跨越的向量空间正交的向量空间将被丢弃。

请注意,PCA不会"丢弃"或"保留"任何预定义的功能(由您指定的列编码)。它混合所有这些(通过加权和)来找到最大方差的正交方向。

如果这不是您正在寻找的行为,那么PCA维度降低不是可行的方法。对于一些简单的一般特征选择方法,您可以查看sklearn.feature_selection

答案 1 :(得分:2)

主要组件上的投影特征将保留重要信息(具有最大方差的轴)和具有小差异的下降轴。此行为类似于compression(不丢弃)。

X_projX_new的更好名称,因为它是Xprincipal components的预测

您可以将X_rec重建为

X_rec = pca.inverse_transform(X_proj) # X_proj is originally X_new

此处X_rec接近X,但PCA删除了less important信息。所以我们可以说X_rec被去噪了。

在我看来,我可以说the noise是丢弃的。

答案 2 :(得分:0)

上面标明的答案不正确。 sklearn站点明确指出components_ array已排序。所以它无法用于识别重要的特征。

  

components_:array,[n_components,n_features]   特征空间中的主轴,表示数据中最大方差的方向。组件按explain_variance _。

排序

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html