2017-02-23 5 views
3

私はPCAをやっていますが、私は元の機能が最も重要であることに興味があります。私は一例でこれを説明してみましょう:主成分分析の最も重要な元の特徴

import numpy as np 
from sklearn.decomposition import PCA 
X = np.array([[1,-1, -1,-1], [1,-2, -1,-1], [1,-3, -2,-1], [1,1, 1,-1], [1,2,1,-1], [1,3, 2,-0.5]]) 
print(X) 

出力する:

[[ 1. -1. -1. -1. ] 
[ 1. -2. -1. -1. ] 
[ 1. -3. -2. -1. ] 
[ 1. 1. 1. -1. ] 
[ 1. 2. 1. -1. ] 
[ 1. 3. 2. -0.5]] 

直観的には、すでに機能1及び機能4は、その低い分散に非常に重要ではないと言うことができます。のは、このセットにPCAを適用してみましょう:

pca = PCA(n_components=2) 
pca.fit_transform(X) 
comps = pca.components_ 

出力:

array([[ 0.  , 0.8376103 , 0.54436943, 0.04550712], 
     [-0.  , 0.54564656, -0.8297757 , -0.11722679]]) 

この出力は、2つの主要コンポーネント(参照用thisを参照)のそれぞれについて、それぞれのオリジナル機能の重要性を表しています。言い換えれば、第1の主成分では、特徴2が最も重要であり、次に特徴3である。第2の主成分では、特徴3が最も重要に見える。

質問は、どの機能が最も重要なのですか。これにcomponent_属性を使用できますか?あるいは、私は間違っていて、PCAはそのような分析を行うための正しい方法ではありません(代わりに機能選択方法を使用すべきですか)。

答えて

2

component_属性は、機能の重要性を探す適切な場所ではありません。 2つの配列(2つのコンポーネントPC1とPC2)の読み込みによって、オリジナルの行列が各フィーチャによってどのように変換されるかがわかります(まとめて、それらは回転行列を形成します)。しかし、それぞれのコンポーネントが変換されたフィーチャスペースの記述にどのくらい貢献しているかは分かりません。したがって、2つのコンポーネント間のローディングを比較する方法はまだ分かりません。

ただし、実際にリンクしているanswerは、explained_variance_ratio_属性の代わりに何を使用するかを指示します。

In [5]: pca.explained_variance_ratio_ 
Out[5]: array([ 0.98934303, 0.00757996]) 

これは最初のprinicpalコンポーネントは、分散のほぼ99パーセントをexplainesことを意味します。この属性は、各主成分によって説明されてどのくらいのあなたの特徴空間における分散のかを示します。 components_から、PC1は2番目のフィーチャの読み込み量が最も高いことがわかります。したがって、フィーチャ2はデータ空間で最も重要な機能です。機能3は、PC1で2番目に高い負荷を持つ次の最も重要な機能です。

PC2では、絶対ローディングはフィーチャ2とフィーチャ3の間でほぼ入れ替えられますが、PC2では全体的な分散の次に説明があるため、これは無視できます。

+0

フィーチャー2のこの機能の重要性に関する尺度を教えてください。 0.9893 * 0.8376のようなもの? – Guido

+0

私はあなたがそれを説明する方法で、説明された分散とそれに対する負荷を誰も使用したことがありません。あなたがやっていることは、基本的には、コンポーネントの貢献によって荷重を測ることです。これは珍しいことですが、うまくいくはずです。 – Schmuddi

+0

あなたはそれが珍しいと言いますので、私はこの問題に関する他の人の意見に非常に興味があります – Guido

関連する問題