我正在做一些机器学习并尝试使用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]
,对吗?
感谢您的帮助!
答案 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, :]
我相信。