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, :]
我相信。
我正在做一些机器学习,并尝试使用 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, :]
我相信。