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.
Antworten:
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).
quelle
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.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.
quelle
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.
quelle
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).
quelle
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 ).
quelle