如何使用scikit-learn PCA进行功能简化并知道哪些功能被丢弃
machine-learning
python
scikit-learn
10
0

我正在尝试在尺寸为mxn的矩阵上运行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)

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

谢谢

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

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

X_proj是的更好的名字X_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已被丢弃。

收藏
评论

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

请注意,PCA不会“丢弃”或“保留”您的任何预定义功能(由您指定的列编码)。它混合所有它们(按加权总和)以找到最大方差的正交方向。

如果这不是您要寻找的行为,那么降低PCA尺寸是不可行的。对于一些简单的常规功能选择方法,可以看看sklearn.feature_selection

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题