2017-07-06 57 views
2

我正在尝试使用SciKit-Learn在我的数据集上执行PCA。我目前有2,208行和53,741列(特征)。所以我想用PCA来减少这个数据集的维数。SciKit-Learn:基本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值吗?

谢谢!

回答

2

这个“看似神奇的维度”实际上是所有维度的线性组合。 PCA的工作原理是将原始列空间的基础改变为数据协方差矩阵的特征向量所跨越的空间。 您不需要Y值,因为PCA只需要数据协方差矩阵的特征值和特征向量。

+0

因此,如果98.5%的方差是由我的维度的这一个线性组合解释的,那么在使用'X_reduced'作为我的数据集而不是'X'时,我不应该期待类似的性能吗? – bclayman

+1

不幸的是:http://blog.explainmydata.com/2012/07/should-you-apply-pca-to-your-data.html。例如,您可以采用与一组噪音特征高度相关的无噪音特征(想象一个人的真实重量和10个重量的不利估计),并且线性组合现在将具有比真实重量更多的噪音。 –