执行PCA并知道保留了哪些列

时间:2020-05-03 04:14:55

标签: python machine-learning pca

在Python中对数据集执行PCA时,explained_variance_ratio_将为我们显示数据集中每个要素的不同方差。

我们如何知道哪个列与哪个结果方差相对应?

上下文:我正在研究一个项目,我需要知道哪些组件为我们提供了90%的PCA差异,以便稍后可以逐步进行特征选择。

from sklearn.decomposition import PCA
pcaObj = PCA(n_components=None)
X_train = pcaObj.fit_transform(X_train)
X_test = pcaObj.transform(X_test)
components_variance = pcaObj.explained_variance_ratio_
print(sum(components_variance))
print(components_variance)

2 个答案:

答案 0 :(得分:0)

pca.explained_variance_ratio_参数为您提供了每个维度的方差数组。因此,pca.explained_variance_ratio[i]将为您提供第i + 1维的方差。

我不认为有一种方法可以将方差与列的“名称”进行匹配,但是在for循环中遍历方差数组并注意具有90%的方差的索引应该可以让您匹配列名称的索引。

答案 1 :(得分:0)

编辑:我发现了类似的问题:Recovering features names of explained_variance_ratio_ in PCA with sklearn

答案有更详尽的解释。我已将此问题标记为重复,但暂时将保留此评论。

我相信您可以通过以下方式获得价值

pd.DataFrame(pcaObj.components_.T, index=X_train.columns)

如果X_train不是DataFrame而是numpy,请传入最初以列表形式出现的功能名称。

pd.DataFrame(pcaObj.components_.T, index=['column_a','column_b','column_c'], columns =['PC-1', 'PC-2'])

# column_x where the name of features

.componets_应该返回您需要的值。我们可以将它们放在列名称为Pandas pd上。