Stavo usando Linear Discriminant Analysis (LDA) dalla scikit-learn
libreria di machine learning (Python) per la riduzione della dimensionalità ed ero un po 'curioso dei risultati. Mi chiedo ora cosa scikit-learn
stia facendo l'ADL in modo che i risultati appaiano diversi, ad esempio, da un approccio manuale o da un ADL fatto in R. Sarebbe bello se qualcuno potesse darmi alcune intuizioni qui.
La cosa sostanzialmente più preoccupante è che scikit-plot
mostra una correlazione tra le due variabili in cui dovrebbe esserci una correlazione 0.
Per un test, ho usato il set di dati Iris e i primi 2 discriminanti lineari si presentavano così:
IMG-1. LDA via scikit-learn
Ciò è sostanzialmente coerente con i risultati che ho trovato nella documentazione di scikit-learn qui.
Ora, ho seguito l'ADL passo dopo passo e ho ottenuto una proiezione diversa. Ho provato diversi approcci per scoprire cosa stava succedendo:
IMG-2. LDA su dati grezzi (nessun centraggio, nessuna standardizzazione)
E qui sarebbe l'approccio graduale se standardizzassi (normalizzazione del punteggio z; varianza dell'unità) i dati per primi. Ho fatto la stessa cosa solo con la centratura dei media, il che dovrebbe portare alla stessa immagine di proiezione relativa (e che in effetti ha fatto).
IMG-3. LDA dettagliata dopo centraggio della media o standardizzazione
IMG-4. LDA in R (impostazioni predefinite)
LDA in IMG-3 in cui ho centrato i dati (che sarebbe l'approccio preferito) sembra esattamente lo stesso di quello che ho trovato in un post da qualcuno che ha fatto l'LDA in R
Codice di riferimento
Non volevo incollare tutto il codice qui, ma l'ho caricato come un notebook IPython qui suddiviso nei vari passaggi che ho usato (vedi sotto) per la proiezione LDA.
- Passaggio 1: calcolo dei vettori della media d-dimensionale
Passaggio 2: calcolo delle matrici a dispersione
3.1. Ordinamento degli autovettori diminuendo gli autovalori