Wie wähle ich einen Kernel für Kernel PCA?


11

Wie kann ausgewählt werden, welcher Kernel zu einer guten Datentrennung bei der endgültigen Datenausgabe durch die Kernel-PCA (Hauptkomponentenanalyse) führen würde, und wie können die Parameter des Kernels optimiert werden?

Wenn möglich, wären Laienbegriffe sehr willkommen, und Links zu Artikeln, die solche Methoden erklären, wären ebenfalls nett.


1
Worauf beziehen Sie sich genau, wenn Sie "gute Datentrennung" sagen? Welche Anwendung von Kernel-PCA haben Sie im Sinn? Wenn es etwas mit "Datentrennung" zu tun hat, sollten Sie dann möglicherweise eine Klassifizierungstechnik (wie die Kernel-Support-Vektor-Maschine) anstelle von kPCA verwenden? Abgesehen davon, gute Frage, +1. Ich habe keine Erfahrung mit der Kernelauswahl und kann Ihnen hier nicht weiterhelfen.
Amöbe sagt Reinstate Monica

@amoeba Wird zur Reduzierung der nichtlinearen Dimensionalität verwendet. Mein Wissen über Support-Vektoren ist etwas begrenzt, da ich noch nie an CS-Kursen teilgenommen habe. Ich bin ein Student und habe durch Online-Papiere gelernt. Mit "guter Datentrennung" meine ich, was die dargestellten Beispiele in diesem Artikel zeigen . Ich arbeite mit Matlab und mein Kernel-PCA-Code ist für einfache, poly-, radiale und sigmoidale Kernel verfügbar, aber es wäre hilfreich zu wissen, wann welche verwendet werden müssen, um die besten Ergebnisse zu erzielen.
Schnittlauch

Ich denke, der beste (einzige?) Weg, einen Kernel auszuwählen, ist die Verwendung der Kreuzvalidierung. Siehe hier: Wie wähle ich einen Kernel für SVM aus? Sie benötigen nur ein Leistungsmaß für Ihre kPCA, um die Kreuzvalidierung verwenden zu können. Klasse Trennung kann ein anständiges Maß sein , wenn das ist , was Sie nach, aber beachten Sie, dass PCA / KPCA nicht ausgelegt ist , überhaupt in einem guten Klassentrennung zu führen; Es maximiert einfach die erfasste Varianz.
Amöbe sagt Reinstate Monica

Ich habe etwas gelesen und könnte Ihre Frage vielleicht doch beantworten. Aber es könnte einige Zeit (Tage) dauern.
Amöbe sagt Reinstate Monica

@amoeba Das Maximieren der Varianz macht für mich jetzt Sinn, da Sie es erwähnen. Ich werde mich selbst mit der Kreuzvalidierung befassen, aber es wäre großartig, wenn Sie sich auch ein wenig damit befassen könnten, wenn Sie die Zeit finden könnten! Vielen Dank.
Schnittlauch

Antworten:


7

Der allgemeine Ansatz zur Auswahl eines optimalen Kernels (entweder der Kerneltyp oder der Kernelparameter) in einer kernelbasierten Methode ist die Kreuzvalidierung. Hier finden Sie Erläuterungen zur Kernelauswahl für Support-Vektor-Maschinen: Wie wähle ich den Kernel für SVM aus?

Die Idee hinter der Kreuzvalidierung ist, dass wir einige "Test" -Daten weglassen, unseren Algorithmus ausführen, um das Modell an die verbleibenden "Trainings" -Daten anzupassen, und dann überprüfen, wie gut das resultierende Modell die Testdaten beschreibt (und wie groß der Fehler ist ist). Dies wird für verschiedene ausgelassene Daten wiederholt, Fehler werden gemittelt, um einen durchschnittlichen kreuzvalidierten Fehler zu bilden, und dann können verschiedene Algorithmen verglichen werden, um einen auszuwählen, der den niedrigsten Fehler ergibt. In SVM kann man zB verwenden Klassifizierungsgenauigkeit (oder verwandte Kennzahlen) als Maß für die Modellleistung verwenden. Dann würde man einen Kernel auswählen, der die beste Klassifizierung der Testdaten liefert.

Die Frage lautet dann: Welches Maß für die Modellleistung kann man in kPCA verwenden?Wenn Sie eine "gute Datentrennung" erreichen möchten (vermutlich eine gute Klassentrennung), können Sie diese irgendwie an den Trainingsdaten messen und diese verwenden, um den besten Kernel zu finden. Beachten Sie jedoch, dass PCA / KPCA nicht gut Datentrennung zu erhalten entworfen (sie nehmen nicht Klasse Etiketten berücksichtigt überhaupt ). Im Allgemeinen möchte man also ein anderes, klassenunabhängiges Maß für die Modellleistung.

In Standard-PCA kann man verwenden Rekonstruktionsfehler als Leistungsmaß für den Testsatz verwendet werden. In der Kernel-PCA kann man auch einen Rekonstruktionsfehler berechnen, aber das Problem ist, dass er nicht zwischen verschiedenen Kerneln vergleichbar ist: Der Rekonstruktionsfehler ist die Entfernung, die im Zielmerkmalsraum gemessen wird; und verschiedene Kernel entsprechen verschiedenen Zielräumen ... Wir haben also ein Problem.

Eine Möglichkeit, dieses Problem anzugehen, besteht darin, den Rekonstruktionsfehler im ursprünglichen Raum und nicht im Zielraum zu berechnen. Offensichtlich befindet sich der ausgelassene Testdatenpunkt im ursprünglichen Raum. Aber seine kPCA-Rekonstruktion lebt im [niedrigdimensionalen Unterraum] des Zielraums. Was man jedoch tun kann, ist, einen Punkt ("Vorbild") im ursprünglichen Raum zu finden, der so nahe wie möglich an diesem Rekonstruktionspunkt abgebildet wird, und dann den Abstand zwischen dem Testpunkt und diesem Vorbild zu messen als Rekonstruktionsfehler.

Ich werde hier nicht alle Formeln angeben, sondern Sie auf einige Artikel verweisen und hier nur einige Zahlen einfügen.

Die Idee des "Pre-Image" in kPCA wurde anscheinend in diesem Artikel vorgestellt:

Mika et al. führen keine Kreuzvalidierung durch, benötigen jedoch Vorbilder zum Entrauschen, siehe folgende Abbildung:

kPCA-Entrauschen von Mika et al.

Entrauschte (dicke) Punkte sind Vorbilder von kPCA-Projektionen (hier gibt es keinen Test und kein Training). Es ist keine triviale Aufgabe, diese Vorbilder zu finden: Man muss den Gradientenabstieg verwenden, und die Verlustfunktion hängt vom Kernel ab.

Und hier ist ein kürzlich veröffentlichtes Papier, in dem Vorbilder für Kreuzvalidierungszwecke und zur Auswahl von Kernel / Hyperparametern verwendet wurden:

Dies ist ihr Algorithmus:

Alam und Fukumizu

Und hier sind einige Ergebnisse (die meiner Meinung nach ziemlich selbsterklärend sind):

Alam und Fukumizu


1
(+1) Es kann nützlich sein zu beachten, dass dieses Vorbild die Menge der Fréchet / Karcher-Mittelwerte der Punkte ist, die einem bestimmten Cluster zugewiesen sind, und nicht, dass dies notwendigerweise bei irgendetwas hilft.
Dougal

xxyyzz

Beim zweiten Gedanken habe ich wohl vorher nicht genug aufgepasst; Mein Kommentar gilt für den Kernel k-means, nicht für kPCA. Das Vorbild hängt definitiv mit diesem Konzept zusammen, ist aber überhaupt nicht dasselbe. Entschuldigung für den Lärm. :)
Dougal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.