Sollte die Funktionsauswahl nur für Trainingsdaten (oder alle Daten) durchgeführt werden?

10

Sollte die Merkmalsauswahl nur für Trainingsdaten (oder alle Daten) durchgeführt werden? Ich habe einige Diskussionen und Artikel wie Guyon (2003) und Singhi und Liu (2006) durchgearbeitet, bin mir aber immer noch nicht sicher, ob ich die richtige Antwort finden soll.

Mein Versuchsaufbau ist wie folgt:

  • Datensatz: 50 gesunde Kontrollpersonen und 50 Patienten mit Krankheit (ca. 200 Merkmale, die für die Vorhersage von Krankheiten relevant sein können).
  • Aufgabe ist es, Krankheiten anhand der verfügbaren Funktionen zu diagnostizieren.

Was ich tue ist

  1. Nehmen Sie den gesamten Datensatz und führen Sie die Funktionsauswahl (FS) durch. Ich behalte nur ausgewählte Funktionen zur weiteren Verarbeitung
  2. Aufteilen, um zu testen und zu trainieren, Zugklassifizierer anhand von Zugdaten und ausgewählten Funktionen. Wenden Sie dann den Klassifikator auf die Testdaten an (wiederum unter Verwendung nur ausgewählter Funktionen). Es wird eine einmalige Validierung verwendet.
  3. Klassifizierungsgenauigkeit erhalten
  4. Mittelwertbildung: 1) -3) N-mal wiederholen. (100).N=50

Ich würde zustimmen, dass das Durchführen von FS für den gesamten Datensatz zu einer gewissen Verzerrung führen kann, aber meiner Meinung nach wird es während der Mittelwertbildung "gemittelt" (Schritt 4). Ist das korrekt? (Die Genauigkeitsvarianz beträgt )<2%

1 Guyon, I. (2003) "Eine Einführung in die Variablen- und Merkmalsauswahl", The Journal of Machine Learning Research, Vol. 3, S. 1157-1182
2 Singhi, SK und Liu, H. (2006) "Feature Subset Selection Bias for Classification Learning", Fortsetzung von ICML '06 Proceedings der 23. internationalen Konferenz über maschinelles Lernen, S. 849-856

pedro29
quelle

Antworten:

12

Das von Ihnen verwendete Verfahren führt zu optimistisch verzerrten Leistungsschätzungen, da Sie anhand der Daten aus dem in den Schritten 2 und 3 verwendeten Testsatz entscheiden, welche Funktionen in Schritt 1 verwendet werden. Durch Wiederholen der Übung wird die Varianz der Leistungsschätzung verringert, nicht die Bias, so dass die Bias nicht gemittelt wird. Um eine unvoreingenommene Leistungsschätzung zu erhalten, dürfen die Testdaten in keiner Weise verwendet werden, um Entscheidungen über das Modell zu treffen, einschließlich der Auswahl von Features.

Ein besserer Ansatz ist die Verwendung einer verschachtelten Kreuzvalidierung, sodass die äußere Kreuzvalidierung eine Schätzung der Leistung liefert, die mit einer Methode zur Erstellung des Modells (einschließlich Merkmalsauswahl) erzielt werden kann, und die innere Kreuzvalidierung verwendet wird, um die Merkmale unabhängig voneinander auszuwählen in jeder Falte der äußeren Kreuzvalidierung. Erstellen Sie dann Ihr endgültiges Vorhersagemodell unter Verwendung aller Daten.

Da Sie mehr Funktionen als Fälle haben, ist es sehr wahrscheinlich, dass Sie die Daten einfach durch Auswahl der Funktionen überanpassen. Es ist ein Mythos, dass die Auswahl von Features die Vorhersageleistung verbessert. Wenn Sie also daran interessiert sind (anstatt die relevanten Features als Selbstzweck zu identifizieren), ist es wahrscheinlich besser, die Ridge-Regression zu verwenden und keine Features auszuführen Auswahl. Dies ergibt wahrscheinlich eine bessere Vorhersageleistung als die Merkmalsauswahl, vorausgesetzt, der Ridge-Parameter wird sorgfältig ausgewählt (ich verwende die Minimierung der PRESS-Statistik von Allen - dh die ausgelassene Schätzung des mittleren quadratischen Fehlers).

Für weitere Details siehe Ambroise und McLachlan und meine Antwort auf diese Frage .

Dikran Beuteltier
quelle
Danke für die Antwort. Tatsächlich interessiert mich beides, um die relevanten Funktionen zu finden und die Vorhersageleistung zu verbessern. In meinen Experimenten (SVM zur Klassifizierung) hat die Merkmalsauswahl die Vorhersagegenauigkeit erheblich verbessert (wie Sie jedoch festgestellt haben, kann dies auf eine Überanpassung der Daten zurückzuführen sein). Ich nehme an, dass Sie mit Gratregression etwas meinen, das auch als Tikhonov-Regularisierung bekannt ist?
pedro29
Ja, die Gratregression ist nur eine normale lineare Regression mit einem Strafbegriff, der auf der quadratischen Norm der Gewichte basiert. Bei den meisten Problemen funktioniert es genauso gut wie die SVM, ist jedoch einfacher zu implementieren (und Sie können den ausgelassenen Kreuzvalidierungsfehler im Wesentlichen kostenlos berechnen, der zum Einstellen der Hyperparameter verwendet werden kann).
Dikran Marsupial
Übrigens, was ist der Unterschied zwischen Ridge-Regularisierung und Merkmalsauswahl? Ich meine, am Ende des Tages geben beide "die beste Teilmenge" von Prädiktoren aus einer bestimmten Menge von Prädiktoren an.
pedro29
Die Ridge-Regression identifiziert keine Teilmenge von Merkmalen, die LASSO- oder LARS-Form der bestraften Regression jedoch. Dies wäre meine Wahl der Merkmalsauswahlmethode, da diese weniger anfällig für Überanpassungen ist, da der Strafbegriff eine Reihenfolge für die Merkmale vorschreibt, die in das Modell ein- und aus dem Modell austreten. Daher gibt es weniger Freiheitsgrade als nur die erschöpfende Suche nach dem besten Satz von Eigenschaften.
Dikran Marsupial
3

Nur als Ergänzung zu den Antworten hier habe ich zwei Links, die mir wirklich geholfen haben zu verstehen, warum dies kein gutes Verfahren ist:

Bearbeiten: wie gewünscht eine kurze Erläuterung des Inhalts der Links:

Angenommen, ich trainiere einen Klassifikator und habe einen Datensatz von 1000 Proben mit jeweils 1 Million Merkmalen. Ich kann nicht alle verarbeiten, daher benötige ich weniger Funktionen (z. B. kann ich 300 Funktionen berechnen). Ich habe auch einen Testsatz mit 100 Proben, um meine tatsächliche Genauigkeit außerhalb der Probe genau abzuschätzen.

Wenn ich meine 1 Million Features auf 300 filtere, indem ich die Features mit der höchsten Korrelation zu den Zielen meines gesamten Datensatzes auswähle, mache ich einen Fehler (weil ich eine Überanpassung einführe, die später durch Cross Validation nicht erkannt werden kann). Mein durchgehaltenes Set zeigt dies, indem es einen schlechten Genauigkeitswert zurückspuckt.

Gemäß den obigen Links besteht die richtige Vorgehensweise darin, meinen Datensatz in einen Trainingssatz und einen Kreuzvalidierungssatz zu unterteilen und dann mein Modell (Herausfiltern von Funktionen usw.) basierend auf diesem Trainingssatz und der zugehörigen Lebenslaufbewertung zu optimieren. Wenn ich K-Folds verwende, muss ich jedes Mal, wenn ich einen Split / Fold mache, von Grund auf neu einstellen und dann die Ergebnisse mitteln.

Programmatisch machen Sie Folgendes:

  • Bewahren Sie einen Teil Ihres Datensatzes als Hold-Out-Set auf.
  • Teilen Sie den Rest Ihres Datensatzes (im Folgenden T1 genannt) in K-Falten auf.
  • Gehen Sie in einer for-Schleife von i = 1 bis K wie folgt vor:
    • Wählen Sie die i-te Falte als Ihren Lebenslaufsatz und die verbleibenden Proben als Ihren Trainingssatz (im Folgenden als Ti bezeichnet).
    • Führen Sie das gewünschte Feature-Engineering und die gewünschte Feature-Auswahl durch: Filtern Sie Features, kombinieren Sie sie usw.
    • Konvertieren Sie sowohl Ihren Lebenslaufsatz (die aktuelle Falte, CVi genannt) als auch Ihren aktuellen Trainingssatz Ti in einen mit den entsprechenden Funktionen.
    • Trainieren Sie Ihr Modell auf dem Trainingsset Ti
    • Holen Sie sich die Punktzahl aus der aktuellen Falte, CVi. Fügen Sie diese Punktzahl einer Liste mit allen Punktzahlen hinzu.
  • Jetzt hat Ihre Liste die Punktzahl jeder Falte, also mitteln Sie sie und erhalten die K-Falz-Punktzahl.

Es ist wirklich wichtig, dass Sie das Feature-Engineering innerhalb der Schleife auf dem Unter-Trainingssatz Ti und nicht auf dem vollständigen Trainingssatz T1 durchführen.

Der Grund dafür ist, dass Sie beim Fit / Feature Engineer für Ti auf CVi testen, was für dieses Modell nicht sichtbar ist. Wenn Sie dagegen auf T1 passen / Feature Engineer sind, muss jeder Lebenslauf, den Sie auswählen, eine Teilmenge T1 sein. Sie sind also optimistisch voreingenommen, dh Sie passen zu viel, weil Sie an denselben Datenproben trainieren und testen.

Eine wirklich gute Antwort von StackExchange ist diese , die sie ausführlicher und anhand eines Beispiels für den Code erklärt. Sehen Sie dies auch als Nachtrag.

Abhishek Divekar
quelle
1
Könnten Sie eine kurze Zusammenfassung des Inhalts dieser Links hinzufügen? Wir bevorzugen in sich geschlossene Antworten, andernfalls können sie sehr anfällig für "Linkrot" sein, wenn Links ihren Standort ändern. Alternativ können wir dies in einen Kommentar für Sie umwandeln.
Silberfischchen
@ Silberfisch fertig
Abhishek Divekar
Innerhalb der for-Schleife könnte man also verschiedene ausgewählte Merkmale für verschiedene Falten haben?
Stackunderflow
2

Der Efron-Gong "Optimismus" Bootstrap ist dafür sehr gut. Die Idee ist, alle verfügbaren Daten für die Entwicklung des Vorhersagemodells und alle Daten für die Schätzung der wahrscheinlichen zukünftigen Leistung desselben Modells zu verwenden. Und Ihre Stichprobengröße ist um den Faktor 100 zu klein, als dass ein Ansatz mit geteilten Stichproben funktionieren könnte.

Um den Bootstrap richtig zu verwenden, müssen Sie alle Schritte, die verwendet haben, programmieren und bei jedem Resample erneut wiederholen. Mit Ausnahme der Merkmalsauswahl ist hier ein gutes Beispiel: Interpretation eines logistischen Regressionsmodells mit mehreren PrädiktorenY

Frank Harrell
quelle