私はそれを理解しているかどうかを確認するためにPCAの実装をチェックしようとしていましたが、MNISTデータセット(私はそれを正規化したテンソルフローインターフェイスを使っています)で12コンポーネントを使ってPCAを実行しようとしました。私は次のようにsklearnによって与え主成分とその後作ら再構成を得た:マニュアルPCAの再構成が、pythonのsklearnの再構成と一致しないのはなぜですか?
pca = PCA(n_components=k)
pca = pca.fit(X_train)
X_pca = pca.transform(X_train)
X_reconstruct = pca.inverse_transform(X_pca)
と、エラーをチェック:
pca = PCA(n_components=k)
pca = pca.fit(X_train)
X_pca = pca.transform(X_train)
# do manual PCA
U = pca.components_
my_reconstruct = np.dot( U.T , np.dot(U, X_train.T)).T
は、私は次のように再構築しようとするsklearnによって与えられる再構成インタフェースを使用しました(行がデータポイントと列の機能なので)次のように:
print 'X_recon - X_my_reconstruct', (1.0/X_my_reconstruct.shape[0])*LA.norm(X_my_reconstruct - X_reconstruct)**2
#X_recon - X_my_reconstruct 1.47252586279
あなたが見ることができるように、エラーがゼロと実際には非常に顕著です。それはなぜです?彼らの復興は私のものとどう違うのですか?
自分でPCAを実装したことはありませんが、ソースを調べることを検討しましたか?彼らの操作は非常に異なっている(リンク:https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/decomposition/pca.py)(これは、さまざまなアルゴリズム/内部データ構造についてのヒントを与える)。 – sascha