2013-11-15 4 views
6

Sto tentando di utilizzare kaggle.com's digit recognizer competition utilizzando Python e scikit-learn.Dimensione dei dati prima e dopo l'esecuzione di PCA

Dopo aver rimosso le etichette dai dati formazione, aggiungo ogni riga CSV in una lista come questa:

for row in csv: 
    train_data.append(np.array(np.int64(row))) 

faccio lo stesso per i dati di test.

ho pre-processo di questi dati con PCA al fine di eseguire la riduzione dimensione (e estrazione delle caratteristiche?):

def preprocess(train_data, test_data, pca_components=100): 
    # convert to matrix 
    train_data = np.mat(train_data) 

    # reduce both train and test data 
    pca = decomposition.PCA(n_components=pca_components).fit(train_data) 
    X_train = pca.transform(train_data) 
    X_test = pca.transform(test_data) 

    return (X_train, X_test) 

Ho quindi creare un classificatore kNN e in forma con i dati X_train e fare previsioni utilizzando il X_test dati.

Utilizzando questo metodo, è possibile ottenere un'accuratezza del 97%.

La mia domanda riguarda la dimensionalità dei dati prima e dopo PCA viene eseguita

Quali sono le dimensioni di train_data e X_train?

In che modo il numero di componenti influenza la dimensionalità dell'output? Sono la stessa cosa?

risposta

11

L'algoritmo PCA trova gli autovettori della matrice di covarianza dei dati. Cosa sono gli autovettori? Nessuno lo sa, e a nessuno importa (sto scherzando!). Ciò che è importante è che il primo autovettore sia un vettore parallelo alla direzione lungo la quale i dati hanno la varianza maggiore (intuitivamente: diffusione). Il secondo indica la seconda direzione migliore in termini di massima diffusione, e così via. Un altro fatto importante è che questi vettori sono ortogonali tra loro, quindi formano un basis.

Il parametro pca_components racconta l'algoritmo di quanti migliori vettori di base ti interessano Quindi, se si passa 100 significa che si desidera ottenere 100 vettori di base che descrivono (statistico direbbe: spiegano). La maggior parte delle la varianza dei tuoi dati.

I transform trasforma funzione (srsly ?;)) i dati dalla base originale di base formato dai componenti PCA prescelte (in questo esempio - i primi migliori100 vettori). Puoi visualizzarlo come una nuvola di punti che viene ruotata e con alcune delle sue dimensioni ignorate. Come correttamente sottolineato da Jaime nei commenti, questo è equivalente a projecting the data sulla nuova base.

Per il caso 3D, se si desidera ottenere una base costituita dai primi autovettori 2, quindi di nuovo, la nuvola di punti 3D verrà prima ruotata, quindi la maggior parte della varianza sarebbe parallela agli assi delle coordinate. Quindi, l'asse in cui la varianza è più piccola viene scartato, lasciandovi dati 2D.

Quindi, per rispondere direttamente alla domanda: sì, il numero dei componenti PCA desiderati è la dimensionalità dei dati di uscita (dopo la trasformazione).