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

PCA: Get Top 20 Most Important Dimensions

我正在做一些机器学习,并尝试使用 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],正确吗?

感谢您的帮助!

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, :] 我相信。