我尝试使用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
值?
谢谢!
答案 0 :(得分:2)
这"看似神奇的维度"实际上是所有维度的线性组合。 PCA的工作原理是将原始列空间的基础更改为数据协方差矩阵的特征向量所跨越的空间。 您不需要Y值,因为PCA只需要数据协方差矩阵的特征值和特征向量。