Pracuję nad konkursem danych, dla którego rozkład mojego zestawu testowego różni się od zestawu treningowego. Chcę podpróbować obserwacje z zestawu treningowego, który bardzo przypomina zestaw testowy.
W jaki sposób mogę to zrobić?
Pracuję nad konkursem danych, dla którego rozkład mojego zestawu testowego różni się od zestawu treningowego. Chcę podpróbować obserwacje z zestawu treningowego, który bardzo przypomina zestaw testowy.
W jaki sposób mogę to zrobić?
Odpowiedzi:
Świetne pytanie, to jest to, co znane jest w paradygmacie uczenia maszynowego jako „zmiana współzmienna”, „dryf modelu” lub „niestacjonarność” i tak dalej.
Jednym z krytycznych założeń, jakie można by zbudować, by model uczenia maszynowego był przewidziany w przyszłości, jest to, że niewidoczne dane (test) pochodzą z tej samej dystrybucji co dane szkoleniowe! Jednak w rzeczywistości to dość proste założenie łatwo się psuje, a nadchodzące dane (ich dystrybucja) zmieniają się w czasie z wielu powodów. Dla tych, którzy mogą nie być zaznajomieni z tym bardzo ważnym problemem, zachęcam do szukania tutaj lub wpisu !
Dla mnie twoje pytanie należy do tej samej kategorii. Chociaż nie mam idealnego rozwiązania (implementacja do zaoferowania), ale myślę, że możesz wyglądać:
SZYBKA aktualizacja (dobre rozwiązanie) : znalazłem implementację w Pythonie algorytmu KLIEP tego artykułu badawczego (ostatni punkt), aby znaleźć te wagi. Raczej wydaje się łatwy w użyciu! Zasadniczo ponownie modeluje trening poprzez ustalanie ciężarów (za pomocą algorytmu KLIEP), aby założenie o podobnym rozkładzie pociągu i testu było jak najbardziej prawdziwe.
Chcę podpróbować obserwacje z zestawu treningowego, który bardzo przypomina zestaw testowy.
Nie jestem pewien, czy chcesz to zrobić. Głównym celem jest raczej wyszkolenie algorytmu, aby dobrze uogólniał na niewidzialne dane.
Zwykle należy dostosować dane testowe do danych pociągu (np. Standaryzację danych testowych zgodnie z danymi pociągu ), a nie odwrotnie. W praktyce nie znasz swoich danych testowych.
Podpróbkowanie zestawu pociągów może nie być najlepszym rozwiązaniem!
Różnice między zestawem testowym / wykonawczym a rozkładem / funkcjami zestawu szkoleniowego są bardzo częste w nadzorowanych zadaniach edukacyjnych (jest to jeden z powodów, dla których konkursy takie jak Kaggle są trudne). Dlatego mówimy, że wyniki z przeszłości można (tylko) wykorzystać jako wskazówkę do oszacowania przyszłych wyników, ale nie wskazuje to / nie gwarantuje . Dlatego uogólnione modele zawsze były preferowane w stosunku do modeli precyzyjnych, które mogą bardzo dobrze działać na zestawie (pod) pociągu, ale źle sobie radzą z niewidzialnymi danymi.
Chociaż taka różnica jest normalna, zbyt dużą lukę między przeszłością a przyszłą próbką można nazwać przykładami znoszenia koncepcji, która sama jest aktywną dziedziną badań. Biorąc pod uwagę twoje pytanie, nie mogę ocenić, czy twoja sprawa jest normalną sprawą ML, czy też rzeczywistość się zmienia.
Oto moje sugestie:
Przećwicz kilka modeli o wysokiej zdolności generalizacji. Korzystając z próbkowania bootstrap z zestawu danych pociągu, możesz łatwo obliczyć składniki błędu i wariancji błędów. Przypomnij sobie, że szukasz modelu o niskiej wariancji (w którym zmiany danych miałyby marginalny wpływ na jego wydajność), a nie modeli o niskiej tendencyjności, ale o dużej wariancji (które mogłyby pasować do Twojego zestawu (pod) treningów). Teraz możesz wybrać najlepsze algorytmy i ocenić je względem zestawu testowego. Pamiętaj, że w czasie szkolenia nie powinniśmy patrzeć na zestaw testowy!
Zamiast kilku losowych próbkowania w dół, poszukaj standaryzacji / normalizacji i wyboru / inżynierii funkcji. Techniki te mogą być praktyczne w nauce bardziej ogólnych modeli. Na przykład czasami zakres domeny funkcji może się zmieniać w czasie, podczas gdy kształt rozkładu (cokolwiek to jest) pozostaje prawie taki sam (np. Ten sam rozkład, który jest przesunięty w lewo lub w prawo). W takim przypadku prosta standaryzacja (tj. Mapowanie pociągu i próbek testowych do predefiniowanej przestrzeni, takiej jak [0,1] przy użyciu różnych funkcji mapowania) może zmniejszyć objawy.
Systematyczne próbkowanie w dół może być właściwym rozwiązaniem tylko wtedy, gdy wykonujesz je w oparciu o pewną wiedzę na temat problemu (nie tylko w celu uzyskania większej dokładności zestawu danych testowych). Na przykład możesz wiedzieć, że niektóre rekordy w danych pociągu są próbkowane dawno temu, z dalekiego pola, lub pod wpływem określonych czynników, których żaden z nich nie wydarzy się w przyszłości (podczas gromadzenia danych testowych). W takim przypadku możesz usunąć te próbki, które mogą być nieistotne, ponieważ masz pewność, że nie zobaczysz takich wzorców w przyszłości (to znaczy powinieneś mieć uzasadnienie wyboru podzbioru szkolenia, zamiast patrzeć na zestaw testów, który w rzeczywistości nie masz do niego dostępu). W takim przypadku nazywam to usuwanie wartości odstających zamiast próbkowania w dół.
W Pythonie jest dobry pakiet (scikit learn)
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
Za pomocą tego pakietu możesz podpróbować swoje obserwacje z zestawu treningowego.