如何使用PCA和scikit-learn进行标准化

8 python scikit-learn

让我简短地说一下.基本上我想知道的是:我应该这样做,

pca.fit(normalize(x))
new=pca.transform(normalize(x))
Run Code Online (Sandbox Code Playgroud)

或这个

pca.fit(normalize(x))
new=pca.transform(x)
Run Code Online (Sandbox Code Playgroud)

我知道我们应该在使用PCA之前规范化我们的数据,但上面的哪一个程序与sklearn一致?

eic*_*erg 19

通常,您可能希望使用第一个选项.

您的规范化将数据放置在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)
Run Code Online (Sandbox Code Playgroud)

然后,前置缩放器将始终将其转换应用于数据,然后再转到PCA对象.

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