2016-12-06 3 views
0

PCAsklearnからn_components = 5に変更しようとしています。 fit_transform(data)を使用してデータに次元削減を適用します。fit_transform PCAの一貫性のない結果

最初に、pca.components_の値とx_featuresのデータの間の古典的な行列乗算を試みましたが、結果は異なります。だから私は間違って私の倍増をやっているより湿っているか、またはfit_transformの仕組みを理解できませんでした。以下は

は、古典的な行列の乗算と fit_transformを比較するために、モックアップである:私は mdl_FitTrans == mdl_FitTrans_manualを期待してい

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() 

が、結果はFalseです。

答えて

0

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 
+0

ので、基本的に、私はちょうど行う前に、私のデータをセンタリングするために必要な乗算。ありがとう。 – Roxanne

関連する問題