PCA:获得前20个最重要的维度

时间:2017-07-06 17:31:42

标签: python pca

我正在做一些机器学习并尝试使用PCA找到重要的维度。这是我到目前为止所做的:

from sklearn.decomposition import PCA
pca = PCA(n_components=0.98)
X_reduced = pca.fit_transform(df_normalized)
X_reduced.shape
(2208, 1961)

因此,在运行PCA后,我有2,208行由1,961列组成,解释了我的数据集中98%的差异。但是,我担心解释力最小的维度实际上可能会影响我的预测尝试(我的模型可能只是在数据中发现虚假的相关性)。

SciKit-Learn是否按重要性对列进行排序?如果是这样,我可以这样做:

X_final = X_reduced[:, :20],对吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

From the documentation它表示输出按解释的方差排序。所以,是的,你应该能够做你建议的事情,只需要输出前N个维度。您还可以打印输出变量explained_variance_(或甚至explained_variance_ratio_)以及components_输出以仔细检查订单。

文档中的示例显示了如何访问解释的差异金额:

import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
pca = PCA(n_components=2)
pca.fit(X)


print(pca.explained_variance_ratio_) 

所以在你的情况下,你可以print(X_reduced.components_)print(X_reduced.explained_variance_ratio_)来获得两者。然后在找到N解释y%的方差后,从X_reduced.components_中取出你想要的第一个N.

请注意!在建议的解决方案中,您可以混合尺寸。 X_reduced.components_的形状为[n_components, n_features],因此,例如,如果您需要前20个组件,我应该使用X_reduced.components[:20, :]我相信。

相关问题