Lda.el
Σύνοψη
- Ο LDA είναι μια επιβλεπόμενη μέθοδος μείωσης διαστάσεων που μεγιστοποιεί τη μεταξύ-κλάσεων διακύμανση ενώ ελαχιστοποιεί την εντός-κλάσεων διακύμανση.
- Επειδή χρησιμοποιούνται ετικέτες, ο LDA αποτελεί συχνά ένα ισχυρό βήμα προεπεξεργασίας για εργασίες ταξινόμησης.
- Η απόδοση εξαρτάται από την κατανομή κλάσεων και τις υποθέσεις συνδιακύμανσης.
Εισαγωγή #
Σε αντίθεση με τον PCA, ο LDA βελτιστοποιεί τη διαχωρισιμότητα κλάσεων, όχι απλώς τη συνολική διασπορά. Αναζητά κατευθύνσεις προβολής όπου οι κλάσεις είναι συμπαγείς και καλά διαχωρισμένες.
Αναλυτική Επεξήγηση #
1. PCA έναντι LDA #
- PCA: μη επιβλεπόμενος, διατηρεί τις κατευθύνσεις μέγιστης διακύμανσης ανεξάρτητα από τις ετικέτες κλάσης.
- LDA: επιβλεπόμενος, αναζητά κατευθύνσεις που μεγιστοποιούν τον λόγο της μεταξύ-κλάσεων διακύμανσης προς την εντός-κλάσεων διακύμανση.
2. Μαθηματική Διατύπωση #
Με ετικετοποιημένες κλάσεις (C_1, \dots, C_k):
- Εντός-κλάσεων διασπορά $$ S_W = \sum_{j=1}^k \sum_{x_i \in C_j} (x_i - \mu_j)(x_i - \mu_j)^\top $$
- Μεταξύ-κλάσεων διασπορά $$ S_B = \sum_{j=1}^k n_j (\mu_j - \mu)(\mu_j - \mu)^\top $$
- Βελτιστοποίηση $$ 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$")
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()
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 αναμειγνύει τις κλάσεις επειδή αγνοεί τις ετικέτες· ο LDA τις διατηρεί χωρισμένες.
6. Πρακτικές σημειώσεις #
- Ο αριθμός χρήσιμων διαχωριστικών στοιχείων είναι το πολύ
n_classes - 1. - Τυποποιήστε τα χαρακτηριστικά πριν την εκπαίδευση, ιδίως όταν αναμειγνύονται διαφορετικές μονάδες.
- Ο LDA υποθέτει περίπου ίση συνδιακύμανση εντός κλάσεων· όταν αυτό παραβιάζεται, σκεφτείτε QDA ή κανονικοποιημένο LDA.