Ist die Verwendung derselben Daten für die Merkmalsauswahl und Kreuzvalidierung voreingenommen oder nicht?

8

Wir haben einen kleinen Datensatz (ca. 250 Beispiele * 100 Features), auf dem wir nach Auswahl der besten Feature-Teilmenge einen binären Klassifikator erstellen möchten. Nehmen wir an, wir partitionieren die Daten in:

Schulung, Validierung und Prüfung

Für die Merkmalsauswahl wenden wir ein Wrapper-Modell an, das auf der Auswahl von Merkmalen basiert, die die Leistung der Klassifizierer X, Y und Z separat optimieren. In diesem Vorverarbeitungsschritt verwenden wir Trainingsdaten zum Trainieren der Klassifizierer und Validierungsdaten zum Bewerten jeder Kandidaten-Feature-Teilmenge.

Am Ende wollen wir die verschiedenen Klassifikatoren (X, Y und Z) vergleichen. Natürlich können wir den Testteil der Daten verwenden, um einen fairen Vergleich und eine faire Bewertung zu erhalten. In meinem Fall wären die Testdaten jedoch sehr klein (etwa 10 bis 20 Stichproben), und daher möchte ich eine Kreuzvalidierung zur Bewertung der Modelle anwenden.

Die Verteilung der positiven und negativen Beispiele ist sehr unausgewogen (ca. 8: 2). Eine Kreuzvalidierung könnte uns also bei der Bewertung der Leistung verfehlen. Um dies zu überwinden, planen wir, den Testteil (10-20 Proben) als zweite Vergleichsmethode zu verwenden und die Kreuzvalidierung zu validieren.

Zusammenfassend teilen wir Daten in Schulungen, Validierungen und Tests auf. Schulungs- und Validierungsteile sind für die Merkmalsauswahl zu verwenden. Anschließend muss eine Kreuzvalidierung über dieselben Daten angewendet werden, um die Modelle zu schätzen. Schließlich wird das Testen verwendet, um die Kreuzvalidierung angesichts des Ungleichgewichts der Daten zu validieren.

Die Frage ist: Wenn wir dieselben Daten (Training + Validierung) verwenden, die bei der Auswahl der Merkmale verwendet werden, die die Leistung der Klassifizierer X, Y und Z optimieren, können wir die Kreuzvalidierung auf dieselben Daten (Training + Validierung) anwenden, die für die Merkmalsauswahl verwendet werden um die endgültige Leistung zu messen und die Klassifikatoren zu vergleichen?

Ich weiß nicht, ob diese Einstellung zu einer voreingenommenen Kreuzvalidierungsmaßnahme führen und zu einem ungerechtfertigten Vergleich führen könnte oder nicht.

Soufanom
quelle
4
Crossvalidated.com behandelt genau diese Art von Fragen. Ich schlage vor, dieses Q dorthin zu verschieben.
Roman Luštrik
Ein Vorschlag besteht darin, Bootstrapping (nur von Training + Validierung) auf die Daten anzuwenden, anstatt eine Kreuzvalidierung durchzuführen. Würde dies das in der Frage angegebene Verzerrungsproblem lösen? Immernoch nicht sicher !!
Soufanom
3
Ja, es ist voreingenommen - durchsuchen Sie die Fragen im Feature-Auswahl- Tag auf dieser Website, insbesondere auf dieser oder sogar auf der Wikipedia-Seite zum Lebenslauf .
1
Einverstanden. Sie können das Design auf zufällig simulierte Datensätze anwenden und abschätzen, wie stark die Verzerrung ist. Aber ich würde LOOCV empfehlen, wie eine Antwort nahelegt.
Steve P

Antworten:

5

Ich denke, es ist voreingenommen. Was ist mit dem Anwenden von FS in der N-1-Partition und dem Testen auf der letzten Partition? und kombinieren Sie die Merkmale aus allen Falten auf irgendeine Weise (Vereinigung / Kreuzung / oder eine problemspezifische Weise).

Tanvir
quelle
Das Verlassen eines Teils zum Testen wurde in der Post erklärt. Wie bereits erläutert, ist zum Vergleich der Modelle eine Kreuzvalidierung erforderlich. Daher ist es nicht möglich, es für die Merkmalsauswahl anzuwenden, es sei denn, wir verwenden die Idee der verschachtelten Kreuzvalidierung. Der Datensatz ist jedoch so klein und es ist schwierig, die verschachtelte Kreuzvalidierung anzuwenden.
Soufanom
6

Die einfache Antwort lautet, dass Sie die Funktionsauswahl für einen anderen Datensatz als für das Training durchführen sollten (Sie tun dies bereits, ändern Sie dies also nicht). Wenn Sie dies nicht tun, werden Sie Ihre Trainingsdaten überanpassen. Sie dürfen auch keine Funktionsauswahl für Ihr Test-Set vornehmen, da dies die Schätzungen der Leistung Ihrer Modelle erhöht (ich denke, Sie erkennen dies bereits, aber ich fand es ein wenig schwierig, die Frage genau zu verstehen).

Wenn Sie Ihren Testsatz bereits in Training, Validierung und Test unterteilt haben, gibt es keinen besonderen Grund für eine Kreuzvalidierung, es sei denn, Sie haben so wenig Daten, dass Ihr Testsatz zu klein ist, um daraus starke Schlussfolgerungen zu ziehen. Viele Forscher haben eine Abneigung gegen Kreuzvalidierung, weil Sie effektiv Zugriff auf Ihren Test haben, wenn Sie die Modellentwicklung vorantreiben (was bedeutet, dass Sie Dinge optimieren, dann Kreuzvalidierung durchführen, um zu sehen, wie sie funktionieren, und sie dann noch weiter optimieren usw.) Daten und dies kann dazu führen, dass Sie Ihre Leistung bei wirklich unsichtbaren Daten überschätzen. Wenn Ihre Daten so klein sind, dass Sie keine andere Wahl haben, als eine Kreuzvalidierung durchzuführen, besteht der richtige Weg, dies mit Trainings-, Entwicklungs- und Testsätzen zu tun, darin, Ihre Daten für jede Falte explizit in drei Teile aufzuteilen - die Mehrheit sollte verwendet werden für das Training, einige für die Entwicklung (Funktionsauswahl in Ihrem Fall sowie alle anderen freien Parameter, die angepasst werden müssen) und schließlich sollten Sie den Testabschnitt testen. Sie können dann die Durchschnittswerte für diese Testabschnitte mitteln, um eine Schätzung der Modellleistung zu erhalten. Beachten Sie jedoch, dass Sie, wenn diese Ergebnisse als Leitfaden für Ansätze dienen, die Sie für Ihr Problem verwenden möchten, nicht damit rechnen sollten Dieselbe Punktzahl für unsichtbare Daten, die Sie bei Ihrer Kreuzvalidierung erzielt haben.


quelle
finally you should test on the test portion. You can then average scores across these test portions to get an estimate of model performance Um die Leistung eines Klassifikators zu verstehen, sollte er für Testdaten verwendet werden, die zuvor noch nicht gesehen oder verwendet wurden. So wie ich es sehe, wenn Sie eine Entscheidung basierend auf der Algorithmusleistung für einen Datensatz treffen, handelt es sich bei diesem Datensatz entweder um Training oder Kreuzvalidierung. Unter keinen Umständen sollte er als Testdatensatz bezeichnet werden.
Ivan
Beachten Sie, dass ich nicht gesagt habe, dass Sie eine Funktionsauswahl für Ihre Testdaten vornehmen sollten - für jede Falte erstellen Sie Trainings-, Entwicklungs- und Testteile. Sie trainieren Ihr Training, legen freie Parameter fest und wählen Funktionen für Ihre Entwicklung aus. Anschließend wenden Sie die endgültig erlernten Modelle auf die Testdaten an. Wie ich oben besprochen habe, ist diese Vorgehensweise nicht ideal, aber Sie verwenden die Testdaten nicht explizit, um Parameter festzulegen (für jede Falte sind die Testdaten blind, bis die Modelle repariert sind, Sie kriechen nur über die Falten)
Ich denke, wir sind uns einig, ich wollte nur die Unterscheidung zwischen Test- und C / V-Daten klarstellen. Die Modellauswahl ähnelt der Parameterauswahl. Daher ist es am besten, wenn die Testdaten beiseite gelegt und überhaupt nicht verwendet werden. Wenn Sie dies getan haben, können Sie sicher über die erwartete Leistung des ausgewählten Modells für alle neuen unsichtbaren Daten berichten.
Ivan
1

Hast du LOOCV ausprobiert? Ich denke, es ist geeignet zu trainieren, wenn Sie sehr wenig Trainingsdaten haben. Um Ihre Frage zu beantworten, würden Sie nicht die besten Ergebnisse erzielen, nur weil dies zu einer Überanpassung und zu irreführenden Ergebnissen führen könnte, sodass Ihr Klassifikator bei anderen Daten, die er nicht gesehen hat, keine hervorragende Leistung erbringt.

madCode
quelle
LOOCV am Ende ist nur eine Art Kreuzvalidierung. Wir brauchen eine Lösung für das Problem, bei dem wir über kleine Daten verfügen, gute Funktionen auswählen und schließlich ein repräsentatives Maß für die Bewertung der Leistung haben möchten.
Soufanom
0

Sie können Folgendes tun, um die Leistung der Klassifizierer zu vergleichen

Nehmen Sie Ihr Trainingsset und trainieren Sie es mit allen möglichen Funktionen. Minimieren Sie für jeden Funktionsumfang die Parameter und erstellen Sie das Modell so, dass es gut zum Trainingssatz passt. Sobald die Modelle für alle Feature-Sets erstellt wurden, dh Sie haben ein Modell für jeden Feature-Set, validieren Sie die Modelle (basierend auf verschiedenen Feature-Sets) im Validierungssatz und wählen Sie das Modell aus (erstellt für eine bestimmte Teilmenge des Feature-Sets ), die den minimalen Fehler im Validierungssatz angibt. Auf diese Weise stellen Sie sicher, dass das erstellte Modell nicht nur zum Trainingssatz, sondern auch zum Validierungssatz passt.

Nehmen Sie nun dieses gebaute Modell und testen Sie es am Test-Set. Hier erfahren Sie, wie gut der Klassifizierer funktioniert, wenn er für einen Datensatz ausgeführt wird, der weder für das Training noch für die Validierung verwendet wurde. Außerdem haben Sie den Funktionsumfang ausgewählt, der gut zum Trainingssatz und auch zum Validierungssatz passt.

Londoner Typ
quelle
1
Für das Wrapper-Modell der Feature-Auswahl sollten sowohl Trainings- als auch Validierungsdatensätze unterstützt werden. Im Wrapper-Modell trainieren und testen wir einen Klassifikator anhand einer Teilmenge von Kandidatenmerkmalen. Daher reicht es nicht aus, diesem Modell nur einen Trainingssatz zu geben. Die Frage ist: Wenn dieselben Daten, die für die Merkmalsauswahl verwendet wurden, zum Vergleich verwendet werden, aber der Lebenslauf verwendet wird, sind wir dann immer noch voreingenommen und um welchen Grad?
Soufanom
0

Wenn möglich, ist es am besten, einige Daten für eine zusätzliche Kreuzvalidierung zurückzuhalten. Sie können es beispielsweise verwenden, um Ihre Algorithmen zu validieren, indem Sie Lernkurven erstellen. Diese Kurven müssen auf einem Datensatz basieren, der zuvor noch nicht verwendet wurde.

Selbst wenn Sie einfach einen Algorithmus auswählen möchten, der Ihnen die höchste F1-Punktzahl liefert, müssen Sie dazu einen zusätzlichen Kreuzvalidierungsdatensatz verwenden. Der Testsatz muss reserviert werden, um die endgültige Genauigkeit Ihrer Lösung zu melden (erwartete Leistung des ausgewählten Klassifikators bei unsichtbaren Daten).

Ivan
quelle
Ihre Antwort wird in meiner Frage als eine Technik angegeben, die mir bekannt ist. Bei der Frage geht es darum, dieselben Daten für die Auswahl von Funktionen und die Kreuzvalidierung zu verwenden.
Soufanom
@soufanom Ich habe geschrieben, dass Sie einen zusätzlichen Kreuzvalidierungsdatensatz benötigen, um den Klassifikator mit der besten Leistung auszuwählen, da Ihre Ergebnisse sonst nicht zuverlässig sind. Wie können Sie die Leistung eines Modells beurteilen, indem Sie es in einem Datensatz ausführen, der entweder zum Trainieren des Modells oder zum Auswählen von Parametern verwendet wurde? IMHO ist die einzige zuverlässige Möglichkeit, die Leistung eines Klassifikators zu beurteilen, die Ausführung auf zuvor nicht sichtbaren Daten. Ich hoffe, dies beantwortet Ihre Frage. Wenn nicht, verfeinern Sie sie bitte und fügen Sie weitere Informationen hinzu.
Ivan
0

Es kann sehr stark voreingenommen sein, siehe Kapitel zur Modellvalidierung in "Elemente des statistischen Lernens". Es kann eine Genauigkeit des Modell-Lebenslaufs von über 70% erreichen, während die tatsächliche Fehlerrate eines Modells 50% betragen sollte (Merkmale sind unabhängig von der Klasse ).

Lily Long
quelle