2014-01-19 34 views
17

私は、個々の変数と主成分の間の相関をPythonで求めたいと思います。 私はsklearnでPCAを使用しています。私はデータを分解した後にどのようにローディングマトリックスを達成することができますか分かりませんか?私のコードはここにあります。sklearnを使用した因子の負荷

iris = load_iris() 
data, y = iris.data, iris.target 
pca = PCA(n_components=2) 
transformed_data = pca.fit(data).transform(data) 
eigenValues = pca.explained_variance_ratio_ 

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.htmlは、これがどのように達成されるかについて言及していない。

+0

説明_variance_ratio_は、共分散行列/相関行列の固有値を返します。元のサンプル変数と主成分との間の相関関係は、別の場所にあります。それが私が探しているものです。 – Riyaz

+0

データを主成分にベクトル投影すると、その方向の分散が得られます(つまり、このPCとの相関)。 – BartoszKP

+0

あなたはそれを説明していただけますか? – Riyaz

答えて

5

@RickardSjogrenは固有ベクトルを記述していますが、@ BigPandaは負荷を与えています。大きな違いがあります:Loadings vs eigenvectors in PCA: when to use one or another?

loadingsメソッドでthis PCA classを作成しました。

荷重は、pca.components_ * np.sqrt(pca.explained_variance_)で与えられ、より多くの線形回帰の係数に似ています。上記でリンクされたPCAクラスでは、コンポーネントは既に転置されているので、ここでは.Tを使用しません。 numpy.linalg.svdu, s, and vtを生成します。vtはHermetian Transposeですので、先にvに戻してvt.Tに戻す必要があります。

つの他の重要な詳細がある:

In sklearn.decomposition.PCA, why are components_ negative?sklearn.PCAのコンポーネントおよび負荷に符号(正/負)は、ここでその上R. 詳細としてパッケージ異なっていてもよいです。

11

this blogによれば、pca.components_のローはローディングベクターである。だから、:

loadings = pca.components_ 
+0

しないでください。私の分野(ケモメトリクス)では、荷重は単位ベクトルとして定義され、その代わりに観測値を固有値にしたがってスケーリングして観測スコアを形成します。単位ベクトルに制限されたベクトルの読み込みは、PCA(https://en.wikipedia.org/wiki/Principal_component_analysis#Details)のwikipediaの項目にも記載されています。これについては、あなたの答え(https://stats.stackexchange.com/a/143949)にリンクしている回答のコメントでも説明しました。 – RickardSjogren

6

乗算、それに対応する固有値の平方根により、各コンポーネント:

pca.components_.T * np.sqrt(pca.explained_variance_) 

これはあなたの負荷行列を生成する必要があります。

関連する問題