fit_transform PCA不一致的结果

时间:2016-12-06 14:24:07

标签: python machine-learning scikit-learn pca

我正试图PCA sklearnn_components = 5进行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,但结果是std::ifstream

1 个答案:

答案 0 :(得分:0)

查看,如何在sklearn中实施transform()方法: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