次元m x nの行列でPCAを実行しようとしています。ここで、mはフィーチャの数、nはサンプルの数です。
nf
特徴を最大分散で保持したいとします。 scikit-learn
私はこの方法でそれを行うことができます:
from sklearn.decomposition import PCA
nf = 100
pca = PCA(n_components=nf)
# X is the matrix transposed (n samples on the rows, m features on the columns)
pca.fit(X)
X_new = pca.transform(X)
これで、新しい行列X_new
形状がn x nfです。破棄された機能や保持されている機能を知ることは可能ですか?
ありがとう
PCA
オブジェクトがフィッティング中に決定した機能は、pca.components_
にあります。 pca.components_
がまたがるベクトル空間に直交するベクトル空間は破棄されます。
PCAは、事前に定義された機能(指定した列でエンコードされたもの)を「破棄」または「保持」しないことに注意してください。それらのすべてを(重み付き和で)混合して、最大分散の直交方向を見つけます。
これが探している動作でない場合、PCA次元削減は進むべき方法ではありません。いくつかの簡単な一般的な機能選択方法については、sklearn.feature_selection
をご覧ください
主成分に投影されたフィーチャは、重要な情報(最大の分散を持つ軸)を保持し、小さな分散を持つ軸をドロップします。この動作はcompression
(破棄しない)に似ています。
X_proj
はX_new
のより良い名前です。なぜなら、principal components
へのX
の投影だからです
X_rec
は次のように再構築できます。
X_rec = pca.inverse_transform(X_proj) # X_proj is originally X_new
ここで、X_rec
はX
に近いですが、less important
情報はPCAによって削除されました。したがって、X_rec
はノイズ除去されていると言えます。
私の意見では、the noise
は破棄であると言えます。
上記でマークされた答えは間違っています。 sklearnサイトは、components_配列がソートされていることを明確に述べています。そのため、重要な機能を識別するために使用することはできません。
components_:配列、[n_components、n_features]データの最大分散の方向を表す、特徴空間の主軸。コンポーネントは、explained_variance_によってソートされます。
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html