Ich las den Bericht über die Siegerlösung eines Kaggle-Wettbewerbs ( Malware Classification ). Der Bericht ist in diesem Forumsbeitrag zu finden . Das Problem war ein Klassifizierungsproblem (neun Klassen, die Metrik war der logarithmische Verlust) mit 10000 Elementen in der Zugmenge, 10000 Elementen in der Testmenge.
Während des Wettbewerbs wurden die Modelle mit 30% des Testsatzes bewertet. Ein weiteres wichtiges Element ist, dass die Modelle sehr gut abschnitten (nahezu 100% Genauigkeit).
Die Autoren verwendeten die folgende Technik:
Eine weitere wichtige Technik, die wir entwickeln, ist semisupervised learning. Wir generieren zuerst Pseudo-Labels von Testmengen, indem wir die maximale Wahrscheinlichkeit unseres besten Modells wählen. Dann prognostizieren wir den Testsatz erneut in einer Kreuzvalidierungsweise mit sowohl Zugdaten als auch Testdaten. Beispielsweise wird der Testdatensatz in 4 Teile A, B, C und D aufgeteilt. Wir verwenden die gesamten Trainingsdaten und die Testdaten A, B, C mit ihren Pseudomarkierungen zusammen als neuen Trainingssatz und sagen den Test voraus set D.
Die gleiche Methode wird verwendet, um A, B und C vorherzusagen. Dieser von Xiaozhou erfundene Ansatz funktioniert überraschend gut und reduziert den Verlust der lokalen Kreuzvalidierung, den Verlust der öffentlichen LB und den Verlust der privaten LB. Das beste teilüberwachte Lernmodell kann einen privaten LB-Protokollverlust von 0,0023 erzielen. Dies ist die beste Punktzahl für alle unsere Lösungen.
Ich sehe wirklich nicht, wie es die Ergebnisse verbessern kann. Liegt es daran, dass 30% des Testsatzes "durchgesickert" waren und diese Informationen auf diese Weise verwendet wurden?
Oder gibt es einen theoretischen Grund, warum es funktioniert?
Es ist nicht grob überpassend (abhängig von der Definition). Die Zielinformationen des Testsatzes bleiben erhalten. Halbüberwachtes Erstellen eines zusätzlichen synthetischen Datensatzes zum Trainieren des Modells. Bei dem beschriebenen Ansatz werden ursprüngliche Trainingsdaten ungewichtet mit synthetischen im Verhältnis 4: 3 gemischt. Wenn also die Qualität der synthetischen Daten schlecht ist, würde sich der Ansatz als katastrophal herausstellen. Ich vermute, für jedes Problem, bei dem Vorhersagen unsicher sind, wäre der synthetische Datensatz von geringer Genauigkeit. Wenn die zugrunde liegende Struktur sehr komplex ist und das System ein geringes Rauschen aufweist, kann es wahrscheinlich hilfreich sein, synthetische Daten zu generieren. Ich denke, dass semi-betreutes Lernen innerhalb des Tiefenlernens ziemlich groß ist (nicht meine Expertise), wo die Repräsentation von Merkmalen auch erlernt werden soll.
Ich habe versucht, eine erhöhte Genauigkeit mit halbüberwachtem Training an mehreren Datensätzen mit RF und XGBOOST zu reproduzieren, ohne dass dies zu einem positiven Ergebnis geführt hätte. [Fühlen Sie sich frei, meinen Code zu bearbeiten.] Ich stelle fest, dass die tatsächliche Verbesserung der Genauigkeit bei Verwendung von halbüberwachtem Code im Kaggle-Bericht recht bescheiden ist, vielleicht zufällig?
quelle
Nach dieser Definition: "Überanpassung tritt auf, wenn ein statistisches Modell zufällige Fehler oder Rauschen anstelle der zugrunde liegenden Beziehung beschreibt." (Wikipedia) ist die Lösung nicht überanpassend.
Aber in dieser Situation:
- Testdaten sind ein Datenstrom von Elementen und keine feste Menge von Elementen.
ODER
- Vorhersageprozess sollte keine Lernphase enthalten (z. B. aufgrund von Leistungsproblemen)
Die erwähnte Lösung ist überpassend. Weil die Genauigkeit der Modellierung mehr ist als reale Situationen.
quelle