让我保持简短。基本上我想知道的是:我应该这样做吗?

pca.fit(normalize(x))
new=pca.transform(normalize(x))

或这个
pca.fit(normalize(x))
new=pca.transform(x)

我知道我们应该在使用PCA之前对数据进行归一化,但是上述哪一个步骤对于sklearn是正确的?

最佳答案

通常,您将要使用第一个选项。

规范化会将数据放置在PCA可以看到的新空间中,并且其转换基本上希望数据位于同一空间中。

Scikit-learn通过串联管道中的估算器,提供了透明而方便地执行此操作的工具。尝试:

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline

import numpy as np

data = np.random.randn(20, 40)

pipeline = Pipeline([('scaling', StandardScaler()), ('pca', PCA(n_components=5))])

pipeline.fit_transform(data)

然后,前置缩放器将始终将其转换应用于数据,然后再传递给PCA对象。

正如@larsmans指出的那样,您可能希望使用sklearn.preprocessing.Normalizer而不是StandardScaler,或者类似地,通过传递关键字参数StandardScaler来除去with_mean=False的均值中心。

关于python - 如何使用PCA和scikit-learn进行标准化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25475465/

10-12 00:32
查看更多