Lda.el

Lda.el

Ενημέρωση 2026-02-24 Ανάγνωση 2 λεπτά
Σύνοψη
  • Ο LDA είναι μια επιβλεπόμενη μέθοδος μείωσης διαστάσεων που μεγιστοποιεί τη μεταξύ-κλάσεων διακύμανση ενώ ελαχιστοποιεί την εντός-κλάσεων διακύμανση.
  • Επειδή χρησιμοποιούνται ετικέτες, ο LDA αποτελεί συχνά ένα ισχυρό βήμα προεπεξεργασίας για εργασίες ταξινόμησης.
  • Η απόδοση εξαρτάται από την κατανομή κλάσεων και τις υποθέσεις συνδιακύμανσης.

Εισαγωγή #

Σε αντίθεση με τον PCA, ο LDA βελτιστοποιεί τη διαχωρισιμότητα κλάσεων, όχι απλώς τη συνολική διασπορά. Αναζητά κατευθύνσεις προβολής όπου οι κλάσεις είναι συμπαγείς και καλά διαχωρισμένες.

Αναλυτική Επεξήγηση #

1. PCA έναντι LDA #

  • PCA: μη επιβλεπόμενος, διατηρεί τις κατευθύνσεις μέγιστης διακύμανσης ανεξάρτητα από τις ετικέτες κλάσης.
  • LDA: επιβλεπόμενος, αναζητά κατευθύνσεις που μεγιστοποιούν τον λόγο της μεταξύ-κλάσεων διακύμανσης προς την εντός-κλάσεων διακύμανση.

2. Μαθηματική Διατύπωση #

Με ετικετοποιημένες κλάσεις (C_1, \dots, C_k):

  1. Εντός-κλάσεων διασπορά $$ S_W = \sum_{j=1}^k \sum_{x_i \in C_j} (x_i - \mu_j)(x_i - \mu_j)^\top $$
  2. Μεταξύ-κλάσεων διασπορά $$ S_B = \sum_{j=1}^k n_j (\mu_j - \mu)(\mu_j - \mu)^\top $$
  3. Βελτιστοποίηση $$ J(w) = \frac{w^\top S_B w}{w^\top S_W w} $$ Τα ιδιοδιανύσματα του (S_W^{-1} S_B) δίνουν τις διαχωριστικές κατευθύνσεις. Το πολύ (k-1) συνιστώσες μεταφέρουν πληροφορία.

3. Κατασκευή συνόλου δεδομένων #

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_blobs

X, y = make_blobs(
    n_samples=600,
    n_features=3,
    random_state=11711,
    cluster_std=4,
    centers=3,
)

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection="3d")
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y)
ax.set_xlabel("$x_1$")
ax.set_ylabel("$x_2$")
ax.set_zlabel("$x_3$")

Τρισδιάστατα blobs


4. Εφαρμογή LDA #

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

lda = LDA(n_components=2).fit(X, y)
X_lda = lda.transform(X)

plt.figure(figsize=(8, 8))
plt.scatter(X_lda[:, 0], X_lda[:, 1], c=y, alpha=0.5)
plt.xlabel("LD1")
plt.ylabel("LD2")
plt.title("2-D embedding via LDA")
plt.show()

Προβολή LDA


5. Σύγκριση με PCA #

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

plt.figure(figsize=(8, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, alpha=0.5)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("2-D embedding via PCA")
plt.show()

Σύγκριση PCA

Ο PCA αναμειγνύει τις κλάσεις επειδή αγνοεί τις ετικέτες· ο LDA τις διατηρεί χωρισμένες.


6. Πρακτικές σημειώσεις #

  • Ο αριθμός χρήσιμων διαχωριστικών στοιχείων είναι το πολύ n_classes - 1.
  • Τυποποιήστε τα χαρακτηριστικά πριν την εκπαίδευση, ιδίως όταν αναμειγνύονται διαφορετικές μονάδες.
  • Ο LDA υποθέτει περίπου ίση συνδιακύμανση εντός κλάσεων· όταν αυτό παραβιάζεται, σκεφτείτε QDA ή κανονικοποιημένο LDA.