14

Quando si esegue la regressione o la classificazione, qual è il modo corretto (o migliore) di preelaborare i dati?Prima PCA o normalizzazione prima?

  1. Normalizzare i dati -> PCA -> formazione
  2. PCA -> normalizzare uscita PCA -> formazione
  3. normalizzare i dati -> PCA -> normalizzare uscita PCA -> formazione

Quale di questi è più corretto, o è il modo "standardizzato" per preelaborare i dati? Per "normalizzare" intendo sia la standardizzazione, il ridimensionamento lineare o altre tecniche.

risposta

23

È necessario normalizzare i dati prima di eseguire PCA. Ad esempio, considera la seguente situazione. Creo un data set X con una nota matrice di correlazione C:

>> C = [1 0.5; 0.5 1]; 
>> A = chol(rho); 
>> X = randn(100,2) * A; 

Se ora effettuo PCA, ho correttamente trovare che i componenti principali (le righe dei pesi vettore) sono orientati ad angolo agli assi coordinati :

>> wts=pca(X) 
wts = 
    0.6659 0.7461 
    -0.7461 0.6659 

Se ora mi scala la prima caratteristica del set di dati da 100, intuitivamente pensiamo che i componenti principali non dovrebbe cambiare:

>> Y = X; 
>> Y(:,1) = 100 * Y(:,1); 

Tuttavia, ora trovano che i componenti principali sono allineati con gli assi coordinati:

>> wts=pca(Y) 
wts = 
    1.0000 0.0056 
    -0.0056 1.0000 

Per risolvere questo, ci sono due opzioni. In primo luogo, ho potuto ridimensionare i dati:

>> Ynorm = bsxfun(@rdivide,Y,std(Y)) 

(La strana bsxfun la notazione è usato per fare vettore-matrice aritmetica in Matlab - tutto quello che sto facendo è sottraendo la media e dividendo per la deviazione standard di ogni caratteristica) .

Ora ottenere risultati sensibili dal PCA:

>> wts = pca(Ynorm) 
wts = 
    -0.7125 -0.7016 
    0.7016 -0.7125 

Sono leggermente diverso per il PCA sui dati originali, perché ora abbiamo garantito che le nostre caratteristiche sono unità di deviazione standard, che non era caso originale.

L'altra alternativa è rappresentata PCA utilizzando la matrice di correlazione dei dati, invece del prodotto esterno:

>> wts = pca(Y,'corr') 
wts = 
    0.7071 0.7071 
    -0.7071 0.7071 

In realtà questo è completamente equivalente alla standardizzazione del data sottraendo la media e dividendo per la deviazione standard. È solo più conveniente. Secondo me dovresti sempre fare questo, a meno che tu non abbia una buona ragione per non farlo (ad esempio, se tu vuoi raccogliere differenze nella variazione di ciascuna caratteristica).

5

È necessario prima normalizzare i dati sempre. In caso contrario, la PCA o altre tecniche utilizzate per ridurre le dimensioni daranno risultati diversi.