让我简短地说明一下。基本上我想知道的是:我应该这样做,
pca.fit(normalize(x))
new=pca.transform(normalize(x))
或者
pca.fit(normalize(x))
new=pca.transform(x)
我知道我们应该在使用PCA之前规范化我们的数据,但上面的哪一个程序与sklearn一致?
答案 0 :(得分: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)
然后,前置缩放器将始终将其转换应用于数据,然后再转到PCA对象。
正如@larsmans指出的那样,您可能希望使用sklearn.preprocessing.Normalizer
代替StandardScaler
,或者类似地,通过传递关键字参数{{1}来删除StandardScaler
的平均居中位置}}