fit_transform PCA 结果不一致

fit_transform PCA inconsistent results

我正在尝试用 n_components = 5sklearnPCA。我使用 fit_transform(data) 对我的数据应用降维。

最初我尝试在 pca.components_ 值和我的 x_features 数据之间进行经典矩阵乘法,但结果不同。所以我是不是做错了我的乘法或者我不明白fit_transform是如何工作的。

下面是比较经典矩阵乘法和fit_transform:

的模型
import numpy as np
from sklearn import decomposition
np.random.seed(0)
my_matrix = np.random.randn(100, 5)`

mdl = decomposition.PCA(n_components=5)
mdl_FitTrans = mdl.fit_transform(my_matrix)
pca_components = mdl.components_
mdl_FitTrans_manual = np.dot(pca_components, my_matrix.transpose())
mdl_FitTrans_manualT = mdl_FitTrans_manual.transpose()

我期待 mdl_FitTrans == mdl_FitTrans_manual 但结果是 False

看看,transform()方法在sklearn中是如何实现的:https://github.com/scikit-learn/scikit-learn/blob/a5ab948/sklearn/decomposition/base.py#L101

据此,手动减少如下:

import numpy as np
from sklearn import decomposition
np.random.seed(0)
data = np.random.randn(100, 100)
mdl = decomposition.PCA(n_components=5)
mdl_fit = mdl.fit(data)
data_transformed = mdl_fit.transform(data)
data_transformed_manual = np.dot(data - mdl_fit.mean_, mdl.components_.T)

np.all(data_transformed == data_transformed_manual)

True