如何使用scikit-learn的PCA进行特征降维并知道哪些特征被舍弃了。

27

我试图在一个大小为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
特征并非被丢弃,而是被投影到较小的维度,并且应该揭示不同特征之间的有趣联系。 - Tom Ron
1
谢谢Tom,我在想PCA是否可以用于特征选择,但(如果我错了请纠正)它只用于在主成分上重新缩放数据。当你看到这条消息时,我想我会关闭这个问题。 - gc5
1
你的输出矩阵应该是形状为(n, nf),而不是(nf, n) - eickenberg
3个回答

32
您的PCA对象在拟合过程中确定的特征存储在pca.components_中。与由pca.components_跨越的向量空间正交的向量空间将被丢弃。
请注意,PCA并未“丢弃”或“保留”您预定义的任何特征(由您指定的列编码)。它通过加权求和混合所有特征,以找到最大方差的正交方向。
如果这不是您要寻找的行为,则PCA降维不是正确的方法。对于一些简单的通用特征选择方法,您可以查看sklearn.feature_selection

3
我终于(希望)理解了主成分分析的作用。如果想要计算一个特征与主成分之间的相关性,是否有一种首选的相关函数呢?通过这种方式,我认为可以找到数据集中最具代表性的维度...(如果我错了,请纠正我)...是否可以只使用Pearson或余弦相似性来做到这一点? - gc5
7
理解主成分分析(PCA)点赞 ;) -- 为了能够回答你的问题,我们需要非常清楚地了解“特征”和“维度”的含义。这两个术语都存在混淆的可能性。你指定的特征是矩阵的列。要想查看PCA组件0是否使用了特征“i”,可以将pca.components_[0, i]pca.components_[0]的其余部分进行比较。因此,如果我正确理解了你的问题,那么答案就是查看给定的PC,并确定哪些特征具有最强的权重。 - eickenberg
5
免责声明:如果您根据主成分权重选择功能,则可能会获得有趣的结果,也可能不会。再次强调,PCA 不是用于根据规范轴定义抛弃特征的。为了确保您所做的选择正确,请尝试使用 sklearn.feature_selection.SelectKBestsklearn.feature_selection.f_classifsklearn.feature_selection.f_regression 来选择 k 个特征,具体取决于您的目标是数值还是分类。 - eickenberg
1
好的,我会看一下这些。回答你之前的问题,我认为组件是伪样本,这样说对吗?我将特征和维度互换使用。然而,为了获得k个特征(作为一种特征选择),我认为我必须交换样本和特征,以获得伪特征(而不是伪样本)的主成分。我不知道这是否清楚。在这种情况下,我可以将每个特征与每个主成分相关联,以查看它是否在所有样本中显示相同的行为。无论如何,感谢你的努力 :) - gc5
1
好的,也许再往前一步:PC不是伪样本,而是每个主成分上特征投影的数组。因此,如果我做得正确,如果某些特征在一个PC中一起超过了某个阈值(例如A = 0.75和B = 0.9),并且在其他PC中不相关(比如A = 0.1和B = 0.05),也许我们可以说它们可以用B来概括(如果我们的目标是特征选择)。 - gc5
显示剩余2条评论

2

投影到主成分上的特征将会保留重要信息(方差最大的轴)并丢弃小方差的轴。这种行为类似于压缩(不是丢弃)。

X_projX_new 更好的名称,因为它是对 X 投影到 主成分 上的结果。

你可以通过以下方式重构 X_rec

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

在这里,X_rec接近于X,但是PCA会丢弃掉不太重要的信息。所以我们可以说X_rec是被去噪了。
在我看来,我可以说噪音被丢弃了。

1

components_ 数组按照解释方差进行排序,这意味着 components_[0] 是 PC1,components_[1] 是 PC2,以此类推,从最高到最低的解释方差。如果我理解正确,上面的答案表明您可以使用它们来选择哪些输入特征对每个 PC 有最高的权重。 - Sos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接