Czytałem raport o zwycięskim rozwiązaniu konkursu Kaggle ( klasyfikacja złośliwego oprogramowania ). Raport można znaleźć w tym poście na forum . Problemem był problem z klasyfikacją (dziewięć klas, metryką była strata logarytmiczna) ze 10000 elementami w zestawie pociągów, 10000 elementów w zestawie testowym.
Podczas zawodów modele były oceniane w stosunku do 30% zestawu testowego. Kolejnym ważnym elementem jest to, że modele działały bardzo dobrze (blisko 100% dokładności)
Autorzy zastosowali następującą technikę:
Kolejną ważną techniką, którą wymyśliliśmy, jest Semisupervised Learning. Najpierw generujemy pseudo etykiety zestawu testowego, wybierając maksymalne prawdopodobieństwo naszego najlepszego modelu. Następnie przewidujemy zestaw testowy ponownie w sposób krzyżowy z danymi pociągu i danymi testowymi. Na przykład zestaw danych testowych jest podzielony na 4 części A, B, C i D. Używamy całych danych treningowych, a dane testowe A, B, C wraz z ich pseudo etykietami, razem jako nowy zestaw szkoleniowy i przewidujemy test zestaw D.
Ta sama metoda jest stosowana do przewidywania A, B i C. To podejście, wynalezione przez Xiaozhou, działa zaskakująco dobrze i zmniejsza lokalną utratę krzyżowej walidacji, publiczną utratę LB i prywatną utratę LB. Najlepszy model uczenia się z półprzewodnikiem może osiągnąć 0,0023 straty w prywatnym dzienniku LB, co jest najlepszym wynikiem dla wszystkich naszych rozwiązań.
Naprawdę nie rozumiem, jak może poprawić wyniki. Czy to dlatego, że 30% zestawu testowego „wyciekło” i był to sposób na wykorzystanie tych informacji?
Czy może jest jakiś teoretyczny powód wyjaśniający, dlaczego to działa?
Nie jest to rażące dopasowanie (w zależności od definicji). Informacje docelowe zestawu testowego są zachowane. Częściowo nadzorowany pozwala wygenerować dodatkowy zestaw danych syntetycznych do trenowania modelu. W opisywanym podejściu oryginalne dane treningowe są mieszane nieważone z syntetycznym w stosunku 4: 3. Tak więc, jeśli jakość danych syntetycznych jest niska, podejście okazałoby się katastrofalne. Myślę, że w przypadku jakiegokolwiek problemu, w którym prognozy są niepewne, syntetyczny zestaw danych byłby słabej dokładności. Jeśli podstawowa struktura jest bardzo złożona, a system ma niski poziom hałasu, może to pomóc w generowaniu syntetycznych danych. Myślę, że częściowo nadzorowane uczenie się jest dość duże w ramach głębokiego uczenia się (nie mojej wiedzy specjalistycznej), gdzie należy nauczyć się reprezentacji funkcji.
Próbowałem odtworzyć zwiększoną dokładność z częściowo nadzorowanym treningiem na kilku zestawach danych zarówno z rf, jak i xgboost, bez żadnego pozytywnego wyniku. [Nie wahaj się edytować mojego kodu.] Zauważyłem, że faktyczna poprawa dokładności za pomocą częściowo nadzorowanego jest dość skromna w raporcie kaggle, może przypadkowym?
źródło
Zgodnie z tą definicją: „Nadmierne dopasowanie występuje, gdy model statystyczny opisuje losowy błąd lub szum zamiast podstawowej relacji.” (Wikipedia), rozwiązanie nie jest nadmierne.
Ale w tej sytuacji:
- Dane testowe to strumień przedmiotów, a nie stały zestaw przedmiotów.
LUB
- Proces prognozowania nie powinien zawierać fazy uczenia się (na przykład z powodu problemów z wydajnością)
. Wspomniane rozwiązanie jest zbyt dobre. Ponieważ dokładność modelowania to coś więcej niż rzeczywiste sytuacje.
źródło