在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)
答案 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上。