简体   繁体   English

fit_transform PCA结果不一致

[英]fit_transform PCA inconsistent results

I am trying to do PCA from sklearn with n_components = 5 . 我正在尝试使用sklearnn_components = 5进行PCA I apply the dimensionality reduction on my data using fit_transform(data) . 我使用fit_transform(data)在我的数据上应用fit_transform(data)维。

Initially I tried to do the classical matrix multiplication between pca.components_ values and my x_features data, but the results are different. 最初,我尝试在pca.components_值和我的x_features数据之间进行经典矩阵乘法,但是结果有所不同。 So I am wether doing my multiplication incorrectly or I did not understand how fit_transform work. 所以我不正确地进行乘法运算,或者我不明白fit_transform如何工作的。

Below is a mock-up to compare classic matrix multiplication and 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()

I am expecting mdl_FitTrans == mdl_FitTrans_manual but the result is False . 我期望mdl_FitTrans == mdl_FitTrans_manual但结果为False

Check out, how the transform() method is implemented in sklearn: https://github.com/scikit-learn/scikit-learn/blob/a5ab948/sklearn/decomposition/base.py#L101 看看如何在sklearn中实现transform()方法: https : //github.com/scikit-learn/scikit-learn/blob/a5ab948/sklearn/decomposition/base.py#L101

According to it, manual reduction is done as following: 据此,手动减少操作如下:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM