使用 SKLearn 和 Python 的 PCA - 使用给定的组件/基本向量计算 PCA 值

PCA with SKLearn and Python - computing PCA values with given components / basis vectors

我想了解 sklearn 在 运行 和 PCA 时在做什么。不幸的是,我对 PCA 了解不多,所以我的理解可能是错误的。

让我们用 iris 数据集做一个简单的例子:

iris = datasets.load_iris()
X = iris.data
pca.fit(X)
Xfit = pca.transform(X)

Xfit 现在看起来像这样:

[[-2.68412563e+00,  3.19397247e-01, -2.79148276e-02, -2.26243707e-03], ...

我认为要获得这些投影值,我基本上只需要构建原始值和转置的 basic vectors/components 点积 .所以我假设这应该给出相同的结果:

np.dot(X, np.transpose(pca.components_))

但不幸的是这是结果:

[[ 2.81823951e+00,  5.64634982e+00, -6.59767544e-01, 3.10892758e-02],..

所以我的问题是:

为什么会有差异?我认为来自 pca.transform(X) 的那个是正确的,但我做错了什么,但是如果我只有组件并且想自己计算主成分值,我需要做什么?

好的,我找到问题了。在应用 np.dot 之前,我必须 mean-center 原始值。因此,当仅使用 pd.DataFrame 时,mean-center 变得非常容易,它看起来像这样:

np.dot(pd.DataFrame(X)-pd.DataFrame(X).mean(), np.transpose(pd.DataFrame(pca.components_)))

并且结果与使用拟合函数时的结果相同:

[[-2.68412563e+00,  3.19397247e-01, -2.79148276e-02, -2.26243707e-03], ...