如何使用scikit学习PCA进行特征约简,并知道哪些特征被丢弃



我正试图在维度为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,它的形状是nxnf。有可能知道哪些特征被丢弃了还是保留了吗?

感谢

PCA对象在拟合过程中确定的特征在pca.components_中。与CCD_ 6所跨越的向量空间正交的向量空间被丢弃。

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

如果这不是你想要的行为,那么PCA降维就不是一条路。对于一些简单的通用特性选择方法,您可以查看sklearn.feature_selection

投影到主分量上的特征将保留重要信息(方差最大的轴),并丢弃方差较小的轴。此行为类似于compression(不丢弃)。

X_projX_new的更好的名称,因为它是Xprincipal components 上的投影

您可以将X_rec重建为

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

这里,X_rec接近X,但是less important信息被PCA丢弃。所以我们可以说X_rec是去噪的。

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

上面标记的答案不正确。sklearn站点明确表示components_数组已排序。因此它不能用于识别重要特征。

components_:数组,[n_components,n_features]特征空间中的主轴,表示数据中最大方差的方向。组件按explained_variance_进行排序。

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

相关内容

  • 没有找到相关文章

最新更新