Ich habe die lineare Diskriminanzanalyse (LDA) aus der scikit-learn
maschinellen Lernbibliothek (Python) zur Dimensionsreduktion verwendet und war ein wenig neugierig auf die Ergebnisse. Ich frage mich jetzt, was die LDA scikit-learn
tut, damit die Ergebnisse anders aussehen als beispielsweise ein manueller Ansatz oder eine in R durchgeführte LDA. Es wäre großartig, wenn mir jemand hier einige Einblicke geben könnte.
Was im Grunde am meisten betrifft, ist, dass das scikit-plot
eine Korrelation zwischen den beiden Variablen zeigt, wobei es eine Korrelation 0 geben sollte.
Für einen Test habe ich den Iris-Datensatz verwendet und die ersten beiden linearen Diskriminanten sahen folgendermaßen aus:
IMG-1. LDA via Scikit-Learn
Dies stimmt im Wesentlichen mit den Ergebnissen überein, die ich in der Dokumentation zu scikit-learn hier gefunden habe.
Nun ging ich Schritt für Schritt die LDA durch und bekam eine andere Projektion. Ich habe verschiedene Ansätze ausprobiert, um herauszufinden, was los war:
IMG-2. LDA auf Rohdaten (keine Zentrierung, keine Standardisierung)
Und hier wäre der schrittweise Ansatz, wenn ich zuerst die Daten standardisieren würde (z-Score-Normalisierung; Einheitsvarianz). Ich habe dasselbe nur mit Mittelwertzentrierung gemacht, was zu demselben relativen Projektionsbild führen sollte (und was es tatsächlich tat).
IMG-3. Schrittweise LDA nach Mittelwertzentrierung oder Standardisierung
IMG-4. LDA in R (Standardeinstellungen)
LDA in IMG-3, in dem ich die Daten zentriert habe (was der bevorzugte Ansatz wäre), sieht genauso aus wie der, den ich in einem Beitrag von jemandem gefunden habe, der die LDA in R durchgeführt hat
Code als Referenz
Ich wollte nicht den gesamten Code hier einfügen, habe ihn jedoch als IPython-Notizbuch hier hochgeladen und in die verschiedenen Schritte unterteilt (siehe unten), die ich für die LDA-Projektion verwendet habe.
- Schritt 1: Berechnen der d-dimensionalen Durchschnittsvektoren
Schritt 2: Berechnen der Streumatrizen
2.1 Die Streumatrix wird nach folgender Gleichung berechnet:
2.2 Die Zwischenklassen-Streumatrix wird durch die folgende Gleichung berechnet: wobei der Gesamtmittelwert ist.S B = c ≤ i = 1 n i ( m i - m ) ( m i - m ) T m
Schritt 3. Lösen des verallgemeinerten Eigenwertproblems für die Matrix
3.1. Sortieren der Eigenvektoren durch Verringern der Eigenwerte
3.2. Auswahl von k Eigenvektoren mit den größten Eigenwerten. Kombinieren der beiden Eigenvektoren mit den höchsten Eigenwerten, um unsere dimensionale Eigenvektormatrix zu konstruierenW
Schritt 5: Transformieren der Samples in den neuen Unterraum