1
Scikit-LearnのPCA transformメソッドに関する質問があります。コードはhereです。スクロールしてtransform()
メソッドを見つけてください。Scikit学習変換メソッド - 手動計算?
彼らはこのsimple exampleの手順を示した - 手順は、変換後、最初のフィット感にあると:
pca.fit(X) #step 1: fit()
X_transformed = fast_dot(X, self.components_.T) #step 2: transform()
私は次のように手動でこれを行うにしようとしています:
期待import numpy as np
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.utils.extmath import fast_dot
iris = load_iris()
X = iris.data
y = iris.target
pca = PCA(n_components=3)
pca.fit(X)
Xm = X.mean(axis=1)
print pca.transform(X)[:5,:] #Method 1 - expected
X = X - Xm[None].T # or can use X = X - Xm[:, np.newaxis]
print fast_dot(X,pca.components_.T)[:5,:] #Method 2 - manual
:
[[-2.68420713 -0.32660731 0.02151184]
[-2.71539062 0.16955685 0.20352143]
[-2.88981954 0.13734561 -0.02470924]
[-2.7464372 0.31112432 -0.03767198]
[-2.72859298 -0.33392456 -0.0962297 ]]
マニュアル
[[-0.98444292 -2.74509617 2.28864171]
[-0.75404746 -2.44769323 2.35917528]
[-0.89110797 -2.50829893 2.11501947]
[-0.74772562 -2.33452022 2.10205674]
[-1.02882877 -2.75241342 2.17090017]]
ご覧のとおり、2つの結果が異なります。 transform()
メソッドのどこかにステップがありませんか?
おかげ
はここソリューションです。これはsomewherre - 'axis = 0'ですか? –
私はそれをソースコードで見ました:sklearn.decomposition.pcaの 'self.mean_ = np.mean(X、axis = 0)' – Shovalt