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

gc5*_*gc5 25 python machine-learning pca feature-selection scikit-learn

我试图在维度为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)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

eic*_*erg 30

您的PCA对象在拟合期间确定的功能是pca.components_.与被跨越的矢量空间正交的矢量空间pca.components_被丢弃.

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

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

  • 竖起大拇指理解PCA;) - 为了能够回答你的问题,我们需要非常清楚*feature*和*dimension*的含义.两者都有可能混淆.您指定的功能是矩阵的列.为了查看PCA组件0是否使用了功能`i`,您可以将`pca.components_ [0,i]`与`pca.components_ [0]`的其余部分进行比较.因此,如果我正确理解您的问题,那么答案是查看给定的PC并查看哪些功能具有最强的权重. (6认同)
  • 免责声明:如果您根据主要组件的重量选择功能,您可能会或可能不会获得有趣的内容.再一次,PCA不是为了丢弃规范轴定义的特征而制造的.为了确定你在做什么,尝试使用`sklearn.feature_selection.f_classif`或`sklearn.feature_selection.f_regression`使用`sklearn.feature_selection.SelectKBest`选择`k`功能,具体取决于你的目标是数字还是分类 (5认同)
  • 我终于明白了PCA的所作所为(希望如此).是否有任何首选的相关函数来计算特征是否与主成分相关?通过这种方式,我认为能够在我的数据集中找到最具代表性的维度..(如果我错了,请纠正我)..我可以只使用Pearson或余弦相似度吗? (2认同)