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?