SciKit-Learn:基本的 PCA 混淆

SciKit-Learn: Basic PCA Confusion

我正在尝试使用 SciKit-Learn 对我的数据集执行 PCA。我目前有 2,208 行和 53,741 列(特征)。所以我想使用 PCA 来降低这个数据集的维度。

我正在关注 Hands-On Machine Learning with SciKit-Learn and TensorFlow:

from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)
X_reduced = pca.fit_transform(X)

据我了解,这应该会减少列的数量,以便它们总共可以解释我数据集中 95% 的方差。

现在我想看看X_reduced还剩多少特征(列):

X_reduced.shape
(2208, 1)

所以看起来单个特征占我数据集中至少 95% 的方差...

1) 这非常令人惊讶,所以我查看了最重要的维度对方差的贡献有多大:

pca = PCA(n_components = 1)
X2D = pca.fit_transform(X)
print pca.explained_variance_ratio_

[ 0.98544046]

原来是 98.5%!

如何弄清楚这个看似神奇的维度是什么?

2) 做 PCA 时不需要包括我的目标 Y 值吗?

谢谢!

这个"seemingly magical dimension"其实是你所有维度的线性组合。 PCA 的工作原理是将原始列 space 的基础更改为数据协方差矩阵的特征向量所跨越的 space。 您不需要 Y 值,因为 PCA 只需要数据协方差矩阵的特征值和特征向量。