Kernel PC A.el

Kernel PC A.el

Ενημέρωση 2026-02-24 Ανάγνωση 3 λεπτά
Σύνοψη
  • Ο Kernel PCA εκτελεί PCA σε έναν σιωπηρό μη γραμμικό χώρο χαρακτηριστικών χρησιμοποιώντας πυρήνες.
  • Η επιλογή πυρήνα και οι παράμετροι (π.χ. RBF gamma) καθορίζουν ποια μη γραμμική δομή γίνεται διαχωρίσιμη.
  • Είναι χρήσιμος όταν ο γραμμικός PCA αδυνατεί να εντοπίσει καμπύλα ή αλληλεπιδραστικά μοτίβα.

Εισαγωγή #

Ο Kernel PCA αλλάζει τη γεωμετρία ομοιότητας πριν εξάγει τις κύριες συνιστώσες. Μοτίβα που είναι μη γραμμικά στον χώρο εισόδου μπορούν να γίνουν γραμμικά διαχωρίσιμα στον χώρο του πυρήνα.

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

1. Γιατί να υπερβούμε τον απλό PCA; #

  • Ο τυπικός PCA βλέπει μόνο γραμμική διακύμανση κατά μήκος των αρχικών αξόνων, οπότε η μη γραμμική δομή ισοπεδώνεται λανθασμένα.
  • Πολλά πραγματικά σύνολα δεδομένων βρίσκονται σε καμπύλες επιφάνειες· θα θέλαμε να καταγράψουμε αυτή την καμπυλότητα ενώ εξακολουθούμε να απολαμβάνουμε την ερμηνευσιμότητα του PCA.
  • Ο Kernel PCA χρησιμοποιεί μια μη γραμμική απεικόνιση χαρακτηριστικών (\phi(x)) και υπολογίζει εσωτερικά γινόμενα μέσω πυρήνων, επιτρέποντας ανάλυση τύπου PCA σε αυτόν τον πλουσιότερο χώρο.

2. Διατύπωση #

Δεδομένων δειγμάτων (x_i \in \mathbb{R}^d) και μιας απεικόνισης χαρακτηριστικών (\phi(x)):

  1. Κατασκευή του πίνακα πυρήνα (Gram)

    $$ K_{ij} = \langle \phi(x_i), \phi(x_j) \rangle = k(x_i, x_j) $$

    Δεν χρειάζεται ρητή (\phi) αρκεί να μπορούμε να αξιολογήσουμε τη συνάρτηση πυρήνα.

  2. Επίλυση του ιδιοπροβλήματος

    $$ K v = \lambda v $$

    Τα ιδιοδιανύσματα δίνουν τις κύριες συνιστώσες στον χώρο χαρακτηριστικών. Μετά την κανονικοποίηση μπορούμε να προβάλλουμε δείγματα με τον ίδιο τρόπο όπως στον PCA.

Τυπικοί πυρήνες:

  • Πυρήνας RBF $$k(x, x') = \exp(-\gamma \lVert x - x' \rVert^2)$$
  • Πολυωνυμικός πυρήνας $$k(x, x') = (\langle x, x' \rangle + c)^d$$

3. Δημιουργία συνόλου δεδομένων παιχνιδιού #

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

X, y = make_circles(n_samples=400, factor=0.3, noise=0.15)

plt.figure(figsize=(8, 8))
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title("Concentric circles")
plt.show()

Σύνολο δεδομένων δύο κύκλων


4. Εκτέλεση Kernel PCA #

from sklearn.decomposition import KernelPCA

kpca = KernelPCA(kernel="rbf", gamma=3)
X_kpca = kpca.fit_transform(X)

plt.figure(figsize=(8, 8))
plt.scatter(X_kpca[:, 0], X_kpca[:, 1], c=y)
plt.title("2-D embedding via Kernel PCA")
plt.show()

Αποτέλεσμα Kernel PCA

Σε σύγκριση με τον γραμμικό PCA, οι ομόκεντροι κύκλοι είναι πλέον σαφώς διαχωρίσιμοι.


5. Συμβουλές #

  • Μη γραμμικότητα: επιλέξτε πυρήνες (RBF, πολυωνυμικός) που αντικατοπτρίζουν τον τύπο καμπυλότητας στα δεδομένα σας.
  • Κλιμάκωση: τυποποιήστε τα χαρακτηριστικά πριν κατασκευάσετε τον πίνακα πυρήνα ώστε το (\gamma) να έχει νόημα.
  • Υπολογισμός: ο πίνακας Gram είναι (O(n^2))· η μνήμη γίνεται το σημείο συμφόρησης για μεγάλο (n).
  • Μοντέλα κατάντη: οι ίδιες ιδέες πυρήνα εμφανίζονται στα SVMs· ο Kernel PCA μπορεί να είναι χρήσιμο διερευνητικό βήμα.

Σημειώσεις #

  • Kernel PCA = τέχνασμα πυρήνα + PCA· διατηρεί μη γραμμικές πολλαπλότητες που ο συνηθισμένος PCA δεν μπορεί.
  • Ελέγξτε πόσες συνιστώσες χρειάζεστε πραγματικά—μεγάλο (k) μπορεί να προσαρμόσει θόρυβο.
  • Αν η επεκτασιμότητα αποτελεί πρόβλημα, εξετάστε προσεγγιστικούς πυρήνες (Nyström, τυχαία χαρακτηριστικά Fourier).