如何用PCA和scikit-learn进行归一化



我长话短说。基本上我想知道的是:我应该这样做吗,

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,或者类似地,通过传递关键字参数with_mean=False来删除StandardScaler的平均居中。

相关内容

  • 没有找到相关文章

最新更新