Kernel PC A.el
Σύνοψη
- Ο 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)):
Κατασκευή του πίνακα πυρήνα (Gram)
$$ K_{ij} = \langle \phi(x_i), \phi(x_j) \rangle = k(x_i, x_j) $$Δεν χρειάζεται ρητή (\phi) αρκεί να μπορούμε να αξιολογήσουμε τη συνάρτηση πυρήνα.
Επίλυση του ιδιοπροβλήματος
$$ 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()
Σε σύγκριση με τον γραμμικό PCA, οι ομόκεντροι κύκλοι είναι πλέον σαφώς διαχωρίσιμοι.
5. Συμβουλές #
- Μη γραμμικότητα: επιλέξτε πυρήνες (RBF, πολυωνυμικός) που αντικατοπτρίζουν τον τύπο καμπυλότητας στα δεδομένα σας.
- Κλιμάκωση: τυποποιήστε τα χαρακτηριστικά πριν κατασκευάσετε τον πίνακα πυρήνα ώστε το (\gamma) να έχει νόημα.
- Υπολογισμός: ο πίνακας Gram είναι (O(n^2))· η μνήμη γίνεται το σημείο συμφόρησης για μεγάλο (n).
- Μοντέλα κατάντη: οι ίδιες ιδέες πυρήνα εμφανίζονται στα SVMs· ο Kernel PCA μπορεί να είναι χρήσιμο διερευνητικό βήμα.
Σημειώσεις #
- Kernel PCA = τέχνασμα πυρήνα + PCA· διατηρεί μη γραμμικές πολλαπλότητες που ο συνηθισμένος PCA δεν μπορεί.
- Ελέγξτε πόσες συνιστώσες χρειάζεστε πραγματικά—μεγάλο (k) μπορεί να προσαρμόσει θόρυβο.
- Αν η επεκτασιμότητα αποτελεί πρόβλημα, εξετάστε προσεγγιστικούς πυρήνες (Nyström, τυχαία χαρακτηριστικά Fourier).