2014-04-25 9 views
22

Sto provando a eseguire un PCA su una matrice di dimensioni m x n dove m è il numero di funzioni e il numero di campioni.Come utilizzare scikit-learn PCA per la riduzione delle funzionalità e sapere quali funzionalità vengono scartate

Supponiamo di voler conservare le funzioni nf con la varianza massima. Con scikit-learn sono in grado di farlo in questo modo:

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) 

Ora, ottengo una nuova matrice X_new che ha una forma di n x nf. È possibile sapere quali caratteristiche sono state scartate o quelle mantenute?

Grazie

+3

Caratteristica non vengono scartati vengono proiettati a dimensione più piccola e supponiamo per rivelare interessanti connessioni tra le diverse caratteristiche. –

+0

Grazie Tom, pensavo che il PCA potesse essere usato per la selezione delle funzionalità, ma (corretto se ho torto) è usato solo per ridimensionare i dati sui componenti principali. Mentre lo leggi, penso che chiuderò la domanda. – gc5

+1

La matrice di output dovrebbe essere di forma '(n, nf)', non '(nf, n)'. – eickenberg

risposta

24

Le funzioni che l'oggetto PCA ha determinato durante il montaggio sono in pca.components_. Lo spazio vettoriale ortogonale a quello con spanning di pca.components_ viene scartato.

Si prega di notare che PCA non "scartare" o "conservare" nessuna delle funzioni predefinite (codificate dalle colonne specificate). Li mescola tutti (in somme ponderate) per trovare le direzioni ortogonali della massima varianza.

Se questo non è il comportamento che stai cercando, la riduzione della dimensionalità PCA non è la strada da percorrere. Per alcuni semplici metodi di selezione delle caratteristiche generali, è possibile dare un'occhiata a sklearn.feature_selection

+1

Ho finalmente capito cosa fa il PCA (si spera). Esiste una funzione di correlazione preferita da calcolare se una funzionalità è correlata a un componente principale? In questo modo penso di riuscire a trovare le dimensioni più rappresentative nel mio set di dati .. (correggimi se sbaglio). Posso usare solo Pearson o la somiglianza del coseno? – gc5

+5

Thumbs up per capire PCA;) - Per essere in grado di rispondere alla tua domanda, dobbiamo essere molto chiari su cosa si intende per * funzionalità * e * dimensione *. C'è potenziale per la confusione con entrambi. Le funzioni che hai specificato sono le colonne della tua matrice. Per vedere se il componente 0 di PCA utilizza la funzione 'i', puoi confrontare' pca.components_ [0, i] 'con il resto di' pca.components_ [0] '. Quindi se ho capito bene la tua domanda, allora la risposta è guardare un dato PC e vedere quali delle tue caratteristiche hanno i pesi più forti. – eickenberg

+5

Declinazione di responsabilità: se si selezionano le funzionalità in base ai pesi nei componenti principali, è possibile o meno ottenere qualcosa di interessante. Ancora una volta, PCA non è fatto per buttare via funzionalità come definite dagli assi canonici. Per essere sicuri di ciò che stai facendo, prova a selezionare le caratteristiche di 'k' usando' sklearn.feature_selection.SelectKBest' usando 'sklearn.feature_selection.f_classif' o' sklearn.feature_selection.f_regression' a seconda che il tuo target sia numerico o categoriale – eickenberg

2

Le caratteristiche proiettate su componenti principali mantengono le informazioni importanti (assi con variazioni massime) e goccia assi con piccole variazioni. Questo comportamento equivale a compression (Non scarto).

E X_proj è il nome migliore di X_new, perché è la proiezione di X sul principal components

È possibile ricostruire la X_rec come

X_rec = pca.inverse_transform(X_proj) # X_proj is originally X_new 

Qui, X_rec è vicino al X, ma il less important le informazioni sono state eliminate da PCA. Quindi possiamo dire che X_rec è stato disattivato.

A mio parere, posso dire che the noise è scartato.

0

La risposta indicata sopra non è corretta. Il sito sklearn afferma chiaramente che l'array components_ è ordinato. quindi non può essere usato per identificare le caratteristiche importanti.

components_: array, [n_components, n_features] Principali assi nello spazio caratteristica, che rappresentano le direzioni di massima varianza dei dati. I componenti sono ordinati da explain_variance_.

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

Problemi correlati