2015-09-30 19 views
9

Guru,Python scikit imparare cutoff pca.explained_variance_ratio_

Quando si sceglie il numero dei componenti principali (k), abbiamo scelto k per essere il valore più piccolo in modo che, ad esempio, il 99% della varianza, viene mantenuta.

Tuttavia, nel Python Scikit si impara, non sono sicuro al 100% pca.explained_variance_ratio_ = 0.99 è uguale a "99% della varianza viene mantenuta"? Qualcuno potrebbe illuminare? Grazie.

  • Il Python Scikit imparare manuale PCA è qui

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

risposta

29

Sì, hai quasi ragione. Il parametro pca.explained_variance_ratio_ restituisce un vettore della varianza spiegato da ciascuna dimensione. Pertanto, pca.explained_variance_ratio_[i] fornisce la varianza spiegata esclusivamente dalla dimensione i + 1st.

Probabilmente si vuole fare pca.explained_variance_ratio_.cumsum(). Ciò restituirà un vettore x tale che x[i] restituisce la varianza cumulativa spiegata dalle prime dimensioni di i + 1.

import numpy as np 
from sklearn.decomposition import PCA 

np.random.seed(0) 
my_matrix = np.random.randn(20, 5) 

my_model = PCA(n_components=5) 
my_model.fit_transform(my_matrix) 

print my_model.explained_variance_ 
print my_model.explained_variance_ratio_ 
print my_model.explained_variance_ratio_.cumsum() 

[ 1.50756565 1.29374452 0.97042041 0.61712667 0.31529082] 
[ 0.32047581 0.27502207 0.20629036 0.13118776 0.067024 ] 
[ 0.32047581 0.59549787 0.80178824 0.932976 1.  ] 

Così i miei dati di giocattoli casuali, se ho preso k=4 vorrei mantenere il 93,3% della varianza.

+1

T ti amo tanto! Ottima spiegazione! A volte il manuale di Python è scarsamente documentato/spiegato. Sono totalmente illuminato! – Chubaka

+0

Un'altra domanda: quando eseguiamo PCA (n_components = 1), i comandi di scikit "PCA" eseguono la "matrice di covarianza di calcolo dai dati normalizzati" e "utilizza la decompressione a singolo valore (SVD) per calcolare gli autovettori"? Non vedo dove scegliere altri metodi per calcolare gli autovettori nel modulo PCA scikit Python. – Chubaka

+1

Ottima risposta! questo mi ha davvero aiutato – Mikim

3

Anche se questa domanda è più vecchia di 2 anni voglio fornire un aggiornamento su questo. Volevo fare lo stesso e sembra che sklearn ora fornisca questa funzionalità fuori dalla scatola.

Come indicato nelle docs

se 0 < n_components < 1 e svd_solver == 'piena', selezionare il numero di componenti in modo tale che la quantità di varianza che deve essere spiegata è superiore alla percentuale specificato da n_components

Così il codice necessario è ora

my_model = PCA(n_components=0.99, svd_solver='full') 
my_model.fit_transform(my_matrix)