PCA und der Zug / Test Split

35

Ich habe einen Datensatz, für den ich mehrere Sätze von binären Bezeichnungen habe. Für jeden Etikettensatz trainiere ich einen Klassifikator und bewerte ihn durch Kreuzvalidierung. Ich möchte die Dimensionalität mithilfe der Hauptkomponentenanalyse (PCA) reduzieren. Meine Frage ist:

Ist es möglich, die PCA einmal für den gesamten Datensatz durchzuführen und dann den neuen Datensatz mit niedrigerer Dimensionalität für die Kreuzvalidierung zu verwenden, wie oben beschrieben? Oder muss ich für jeden Trainingssatz eine separate PCA erstellen (was bedeutet, dass für jeden Klassifikator und für jede Kreuzvalidierungsfalte eine separate PCA erstellt wird)?

Einerseits verwendet die PCA die Etiketten nicht. Auf der anderen Seite werden die Testdaten für die Transformation verwendet, sodass ich befürchte, dass die Ergebnisse dadurch verzerrt werden könnten.

Ich sollte erwähnen, dass das einmalige Durchführen der PCA für den gesamten Datensatz nicht nur einige Arbeit erspart, sondern es mir auch ermöglicht, den Datensatz für alle Etikettensätze gleichzeitig zu visualisieren. Wenn ich für jeden Etikettensatz einen anderen PCA habe, muss ich jeden Etikettensatz separat visualisieren.

Bitweise
quelle
Zum späteren Nachschlagen. In dieser Frage erfahren Sie, wie Sie eine Kreuzvalidierung mit PCA in R mit caretPaket: PCA und k-fache Kreuzvalidierung in Caret durchführen .
Amöbe sagt Reinstate Monica
Siehe auch Nullzentrierung des Testsets nach PCA auf dem Trainingsset .
Amöbe sagt Reinstate Monica
Siehe auch Ist es tatsächlich in Ordnung, vor der Kreuzvalidierung eine unbeaufsichtigte Funktionsauswahl durchzuführen? , insbesondere die Antwort von @cbeleites.
Amöbe sagt Reinstate Monica

Antworten:

34

Um den Generalisierungsfehler zu messen, müssen Sie letzteres durchführen: eine separate PCA für jeden Trainingssatz (was bedeuten würde, eine separate PCA für jeden Klassifikator und für jede CV-Falte durchzuführen).

Sie wenden dann dieselbe Transformation auf das Test-Set an: dh Sie führen keine separate PCA für das Test-Set durch! Sie subtrahieren den Mittelwert (und dividieren ihn gegebenenfalls durch die Standardabweichung) des Trainingssatzes, wie hier erläutert: Nullzentrierung des Testsatzes nach PCA auf dem Trainingssatz . Anschließend projizieren Sie die Daten auf die PCs des Trainingssets.


  • Sie müssen ein automatisches Kriterium für die Anzahl der zu verwendenden PCs definieren.
    Da es nur ein erster Schritt zur Datenreduzierung vor der "tatsächlichen" Klassifizierung ist, wird die Leistung wahrscheinlich nicht beeinträchtigt, wenn einige zu viele PCs verwendet werden. Wenn Sie eine Erwartung haben, wie viele PCs aus Erfahrung gut wären, können Sie diese vielleicht einfach verwenden.

  • Sie können auch nachträglich testen, ob für jedes Ersatzmodell eine erneute Wiederherstellung der PCA erforderlich war (Wiederholung der Analyse mit nur einem PCA-Modell). Ich denke, das Ergebnis dieses Tests ist eine Meldung wert.

  • Ich habe einmal die Abweichung gemessen, dass die PCA nicht wiederholt wurde, und festgestellt, dass ich mit meinen spektroskopischen Klassifizierungsdaten nur die Hälfte der Verallgemeinerungsfehlerrate feststellte, wenn ich die PCA nicht für jedes Ersatzmodell wiederholte.

Abgesehen davon können Sie ein zusätzliches PCA-Modell des gesamten Datensatzes für beschreibende Zwecke (z. B. Visualisierungszwecke) erstellen. Stellen Sie einfach sicher, dass die beiden Ansätze voneinander getrennt sind.


Ich finde es immer noch schwierig, ein Gefühl dafür zu bekommen, wie eine anfängliche PCA für den gesamten Datensatz die Ergebnisse beeinflussen würde, ohne die Klassenbeschriftungen zu sehen.

Aber es sieht die Daten. Und wenn die Varianz zwischen den Klassen im Vergleich zur Varianz innerhalb der Klasse groß ist, beeinflusst die Varianz zwischen den Klassen die PCA-Projektion. Normalerweise wird der PCA-Schritt ausgeführt, weil Sie die Klassifizierung stabilisieren müssen. Das heißt, in einer Situation , in weiteren Fällen tun das Modell beeinflussen.

Wenn die Varianz zwischen den Klassen gering ist, ist diese Verzerrung nicht groß, aber in diesem Fall hilft PCA auch nicht bei der Klassifizierung: Die PCA-Projektion kann dann nicht helfen, die Trennung zwischen den Klassen hervorzuheben.

cbeleites unterstützt Monica
quelle
Vielen Dank, genau das habe ich mir gedacht, es ist also gut, es von einer unabhängigen Quelle zu hören. Ich finde es immer noch schwierig, ein Gefühl dafür zu bekommen, wie eine anfängliche PCA für den gesamten Datensatz die Ergebnisse beeinflussen würde, ohne die Klassenbeschriftungen zu sehen.
Bitweise
@ Bitwise: Bitte sehen Sie meine Bearbeitung
cbeleites unterstützt Monica
Hallo @cbeleites, ich möchte diesen Thread zu einem "kanonischen" Thread für die Fragen zu PCA und Train / Test-Splitting machen (es gibt viele!) Und diese als Duplikate markieren. Ich habe mir erlaubt, Ihrer Antwort einen Satz hinzuzufügen, der ein Missverständnis ausräumen könnte, das häufig in den doppelten Fragen auftaucht. Hoffe du bist zufrieden mit meiner Bearbeitung, aber bitte überprüfe! +1, übrigens
Amöbe sagt Reinstate Monica
@amoeba, vielen Dank. Ja, das ist ein wichtiger Punkt, den Sie hinzugefügt haben. Vielen Dank für die Arbeit, die Sie beim Aufräumen der Fragensammlung geleistet haben.
cbeleites unterstützt Monica
1
@FelipeAlmeida: yes
cbeleites unterstützt Monica
2

Die Antwort auf diese Frage hängt von Ihrem experimentellen Design ab. PCA kann für den gesamten Datensatz durchgeführt werden, solange Sie Ihr Modell nicht im Voraus erstellen müssen, um die Daten zu kennen, die Sie vorhersagen möchten. Wenn Sie über ein Dataset mit einer Reihe von Stichproben verfügen, von denen einige bekannt und einige unbekannt sind, und Sie die Unbekannten vorhersagen möchten, einschließlich der Unbekannten in der PCA, erhalten Sie einen besseren Überblick über die Datenvielfalt und können die Leistung verbessern des Modells. Da PCA nicht überwacht wird, ist es kein "Peaking", da Sie mit den unbekannten Samples dasselbe tun können wie mit den bekannten.

Wenn Sie andererseits einen Datensatz haben, in dem Sie das Modell jetzt erstellen müssen, und in der Zukunft neue Beispiele erhalten, die Sie anhand dieses vorgefertigten Modells vorhersagen müssen, müssen Sie in jeder Falte eine separate PCA durchführen um sicher zu sein, wird es verallgemeinern. Da wir in diesem Fall nicht wissen, wie die neuen Features aussehen könnten, und wir das Modell nicht neu erstellen können, um die neuen Features zu berücksichtigen, wäre es "peaking", PCA für die Testdaten durchzuführen. In diesem Fall sind sowohl die Funktionen als auch die Ergebnisse für die unbekannten Stichproben nicht verfügbar, wenn das Modell in der Praxis verwendet werden würde. Sie sollten daher beim Trainieren des Modells nicht verfügbar sein.

Barker
quelle
0

Letzteres tun, PCA auf Training setzen jedes Mal

In PCA lernen wir die reduzierte Matrix: U, die uns hilft, die Projektion zu erhaltenZ_train = U x X_train

Zur Testzeit verwenden wir dasselbe U , das wir in der Trainingsphase gelernt haben, und berechnen dann die ProjektionZ_test = U x X_test

Im Wesentlichen projizieren wir den Testsatz auf den reduzierten Merkmalsraum , der während des Trainings erhalten wurde.

Die zugrunde liegende Annahme ist, dass der Test und der Zugsatz aus derselben Verteilung stammen sollten, was die obige Methode erklärt.

Vamshi G
quelle