ML Atlas

03 · Nadzorowane · 5 min czytania · aktualizacja

Jak działa analiza dyskryminacyjna (LDA, QDA) i kiedy wygrywa z regresją logistyczną?

W skrócie

LDA i QDA modelują każdą klasę rozkładem normalnym i klasyfikują z twierdzenia Bayesa. Na zbiorze Wine LDA trafia w 99,4%, regresja logistyczna w 98,3%.

Co to jest

Liniowa analiza dyskryminacyjna (LDA, linear discriminant analysis) to klasyfikator, który zakłada, że cechy w każdej klasie mają wielowymiarowy rozkład normalny o tej samej macierzy kowariancji, a różnią się tylko średnią. Kwadratowa analiza dyskryminacyjna (QDA) pozwala każdej klasie mieć własną macierz kowariancji. Obie metody wybierają klasę o największym prawdopodobieństwie a posteriori, liczonym z twierdzenia Bayesa.

Intuicja: każda klasa to „chmura” punktów w kształcie elipsy. LDA zakłada, że wszystkie chmury mają ten sam kształt i nachylenie, a leżą tylko w różnych miejscach. Wtedy granica między dwiema chmurami jest prostą (w wielu wymiarach — hiperpłaszczyzną). QDA pozwala, by jedna chmura była okrągła, a druga wydłużona i przekrzywiona; granica staje się wtedy krzywą stożkową: elipsą, parabolą albo hiperbolą.

LDA ma też drugie oblicze: metodę redukcji wymiaru. Fisher (1936) szukał kierunku, na którym średnie klas są jak najdalej od siebie, a rozrzut wewnątrz klas jak najmniejszy. Przy K klasach takich kierunków jest co najwyżej K − 1, więc trzy gatunki irysów czy trzy odmiany wina da się narysować na płaszczyźnie bez utraty informacji, której LDA używa do klasyfikacji.

Mechanizm — dlaczego tak działa

wspólny kształt chmur czy własnyLDAten sam kształtgranica: prostaQDAwłasny kształtgranica: krzywa
Schemat: wspólny kształt chmur czy własny

Klasyfikator bayesowski wybiera klasę k maksymalizującą P(k) · f_k(x), gdzie f_k to gęstość cech w klasie k. Jeśli f_k jest normalna ze średnią μ_k i kowariancją Σ_k, to po zlogarytmowaniu dostajemy funkcję dyskryminacyjną z członem kwadratowym xᵀΣ_k⁻¹x. W QDA ten człon jest inny dla każdej klasy — stąd granice kwadratowe. W LDA wszystkie klasy mają wspólne Σ, więc człon kwadratowy skraca się przy porównaniu klas. Zostaje funkcja liniowa: δ_k(x) = xᵀΣ⁻¹μ_k − ½ μ_kᵀΣ⁻¹μ_k + log P(k).

Uczenie to tylko liczenie: częstości klas, średnie w klasach i macierz kowariancji (dla LDA wspólna, uśredniona po klasach; dla QDA osobna w każdej klasie). Nie ma iteracyjnej optymalizacji ani hiperparametru do strojenia.

Cena elastyczności QDA jest w liczbie parametrów. Macierz kowariancji p cech ma p(p + 1)/2 niezależnych wartości. Dla 13 cech zbioru Wine to 91 liczb — LDA szacuje je raz, QDA trzy razy (273), każdą z danych jednej klasy. Gdy w klasie jest nie więcej przykładów niż cech, macierz kowariancji tej klasy jest osobliwa i nie da się jej odwrócić. QDA ma niskie obciążenie i dużą wariancję, LDA odwrotnie. Rozwiązaniem pośrednim jest regularyzacja: ściąganie kowariancji ku macierzy diagonalnej albo wspólnej (Friedman, 1989).

Związek z regresją logistyczną jest bliski. Przy wspólnej kowariancji logarytm ilorazu szans dwóch klas w LDA jest dokładnie liniową funkcją cech — tą samą postacią, którą zakłada regresja logistyczna. Różnią się sposobem szacowania wag. LDA bierze je z modelu całego rozkładu cech (model generatywny), regresja logistyczna dobiera je wprost pod klasyfikację (model dyskryminacyjny). Gdy normalność naprawdę zachodzi, LDA wykorzystuje dane wydajniej: według Efrona (1975) regresja logistyczna ma wtedy od połowy do dwóch trzecich jej wydajności asymptotycznej. Ng i Jordan (2001) pokazali podobny wzór dla naiwnego Bayesa: model generatywny szybciej dochodzi do swojego błędu, dyskryminacyjny wygrywa przy dużych danych. Gdy normalność jest wyraźnie złamana (cechy binarne, silnie skośne, wartości odstające), regresja logistyczna jest bezpieczniejsza.

Gdzie to się psuje: przy wartościach odstających (średnie i kowariancje są na nie wrażliwe), przy klasach złożonych z kilku skupisk, przy wielu cechach i małej liczbie przykładów oraz przy silnie współliniowych cechach (macierz kowariancji bliska osobliwej daje niestabilne wagi).

Na przykładzie

Zbiór Wine: 178 win z trzech odmian, 13 cech chemicznych. W 5-krotnej walidacji krzyżowej LDA trafia odmianę w 99,4% przypadków, QDA w 98,9%, a regresja logistyczna w 98,3%. Na irysach Fishera (150 kwiatów, 4 cechy) kolejność jest podobna: 98,0%, 96,7% i 96,0%. Przy tak małych zbiorach jedna pomyłka to 0,6–0,7 punktu procentowego, więc różnice mieszczą się w granicach przypadku. Prosty model generatywny jest tu co najmniej tak dobry jak regresja logistyczna.

Rzut LDA na dwie osie dobrze widać na irysach: pierwsza oś niesie 99,1% rozrzutu między gatunkami, druga 0,9%. Na Wine podział jest bardziej wyrównany: 68,7% i 31,3%. Hasło o pułapkach PCA podaje dla Wine 98,3% przy LDA z dwiema osiami — to inne ustawienie (regresja logistyczna na rzucie LDA, foldy nietasowane), w którym regresja na 13 cechach też ma 98,3%.

Słabość QDA widać przy małych danych. Gdy model uczy się na 30 lub 45 winach, w najmniejszej klasie jest 8 lub 12 przykładów na 13 cech i QDA nie daje się dopasować w żadnym z 20 losowań. Przy 60 winach zawodzi w 3 z 20 losowań, a w pozostałych 17 trafia średnio w 86,9% przypadków wobec 97,5% dla LDA. Dopiero przy 90 winach treningowych QDA dochodzi do 96,8%.

Jak to policzono
  • Dane: load_wine (178 win, 13 cech, klasy 59/71/48) i load_iris (150 kwiatów, 4 cechy); scikit-learn 1.9.1.
  • Walidacja: StratifiedKFold(5, shuffle=True, random_state=0); LinearDiscriminantAnalysis() i QuadraticDiscriminantAnalysis() z ustawieniami domyślnymi; regresja logistyczna w potoku z StandardScaler, max_iter=5000.
  • Wine: LDA 99,4%, QDA 98,9%, regresja logistyczna 98,3%; średnio po 10 ziarnach tasowania (0–9): 98,9%, 98,9%, 97,9%.
  • Iris: LDA 98,0%, QDA 96,7%, regresja logistyczna 96,0%; po 10 ziarnach: 97,9%, 97,0%, 95,9%.
  • explained_variance_ratio_ LDA dopasowanej na całym zbiorze: Iris 99,1% i 0,9%, Wine 68,7% i 31,3%.
  • Ustawienie z hasła o PCA: cv=5 (foldy warstwowe bez tasowania), potok StandardScaler → LDA (2 osie) → regresja logistyczna: 98,3%; regresja logistyczna na 13 cechach: 98,3%; sama LDA: 96,6%.
  • Małe próby: 20 losowań train_test_split(train_size=n, stratify=y, random_state=0…19), reszta win jako test. Przy 30 i 45 winach (najmniejsza klasa 8 i 12) QDA zgłasza LinAlgError (macierz kowariancji niepełnego rzędu) w każdym losowaniu. Przy 60 winach (najmniejsza klasa 16) błąd w 3 z 20 losowań (ziarna 6, 10, 15) — macierz jest tam numerycznie niepełnego rzędu; w pozostałych 17: QDA 86,9%, LDA 97,5%, regresja logistyczna 97,5% (po wszystkich 20: LDA i regresja logistyczna 97,4%). Przy 90 winach: QDA 96,8%, LDA 98,2%, regresja logistyczna 97,8%.

Dane: Iris (irysy Fishera) Wine (wina z Piemontu)

W praktyce

  • LinearDiscriminantAnalysis() i QuadraticDiscriminantAnalysis() z sklearn.discriminant_analysis; obie mają predict_proba, a LDA także transform do rzutu na K − 1 osi.
  • Przy wielu cechach i małej próbie: LinearDiscriminantAnalysis(solver="lsqr", shrinkage="auto") (ściąganie Ledoita–Wolfa) albo QuadraticDiscriminantAnalysis(reg_param=...) z wartością dobraną walidacją.
  • Skalowanie cech nie zmienia klasyfikacji LDA (bez ściągania) ani QDA, ale ułatwia czytanie współczynników.
  • LDA jako krok potoku: make_pipeline(LinearDiscriminantAnalysis(n_components=2), LogisticRegression()) — dopasowywana w każdym foldzie osobno, bo używa etykiet.
  • Do porównań z regresją logistyczną używaj tych samych foldów i kilku ziaren — przy setkach przykładów różnice rzędu 1 punktu procentowego to zwykle szum.

Najczęstsze pytania

Czym LDA różni się od PCA?
PCA nie zna etykiet i szuka kierunków największego rozrzutu wszystkich danych. LDA zna etykiety i szuka kierunków, które najlepiej rozdzielają klasy. Kierunek o dużej wariancji może być bezużyteczny do klasyfikacji, a kierunek o małej wariancji — kluczowy.
Czy LDA wymaga normalności danych?
Do wyprowadzenia reguły tak, do sensownej klasyfikacji nie zawsze: kryterium Fishera (rozsunąć średnie przy małym rozrzucie wewnątrz klas) ma sens bez żadnego rozkładu. Przy cechach mocno nienormalnych cierpią przede wszystkim prawdopodobieństwa.
Kiedy wybrać QDA zamiast LDA?
Gdy klasy mają wyraźnie różne kształty rozrzutu (np. jedna zwarta, druga rozlana) i masz dużo przykładów w każdej klasie w stosunku do liczby cech. Przy małych klasach QDA szybko się przeucza albo w ogóle nie daje się dopasować.
Czy LDA to to samo co LDA w analizie tekstu?
Nie. W przetwarzaniu tekstu skrót LDA oznacza *latent Dirichlet allocation*, model tematów bez nadzoru. Zbieżność skrótów jest przypadkowa.

Źródła

  • Fisher R. A. „The Use of Multiple Measurements in Taxonomic Problems”, Annals of Eugenics 7(2), 1936, s. 179–188. https://doi.org/10.1111/j.1469-1809.1936.tb02137.x
  • Efron B. „The Efficiency of Logistic Regression Compared to Normal Discriminant Analysis”, Journal of the American Statistical Association 70(352), 1975, s. 892–898. https://doi.org/10.1080/01621459.1975.10480319
  • Friedman J. H. „Regularized Discriminant Analysis”, Journal of the American Statistical Association 84(405), 1989, s. 165–175. https://doi.org/10.1080/01621459.1989.10478752
  • Ng A. Y., Jordan M. I. „On Discriminative vs. Generative Classifiers: A comparison of logistic regression and naive Bayes”, Advances in Neural Information Processing Systems 14 (NIPS 2001), s. 841–848.
  • Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., Springer, 2009, rozdz. 4.3.
  • Dokumentacja scikit-learn, „Linear and Quadratic Discriminant Analysis”: https://scikit-learn.org/stable/modules/lda_qda.html

Zobacz też