Inny zestaw testów i rozkład zestawu treningowego


15

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ć?


Losowe niepełne pobieranie próbek, losowe nadmierne pobieranie próbek, pobieranie próbek oparte na klastrach, informowanie o pobieraniu próbek: technika nadmiernego pobierania próbek mniejszości syntetycznych, zmodyfikowana technika nadpróbkowania mniejszości syntetycznych (MSMOTE) itp.
Aditya

Lepiej zaznacz jedną z odpowiedzi jako „Odpowiedź zaakceptowana”, jeśli jesteś zadowolony z którejkolwiek z nich.
TwinPenguins,

Odpowiedzi:


17

Ś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ć:

  • Ten post na blogu oferuje prosty sposób obsługi podpróbkowania danych szkoleniowych za pomocą kodu dostarczonego w języku Python!
  • Sprawdź ten artykuł badawczy . Proponują, aby rozwiązać ten problem ponownego ważenia danych treningowych tak, że rozkład szkoleń jest bliżej do podziału testu przy użyciu Kullback-Leiblera znaczenie Oszacowanie Procedura bazę na „ dywergencja kullbacka-leiblera ” twierdzenia. Nie wiem, czy zapewniają implementację, czy można ją łatwo wdrożyć, ale myślę, że warto ją kopać, ponieważ wydaje się to profesjonalnym sposobem radzenia sobie z niedopasowaniem dystrybucji.

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.


5

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.


3

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:

  1. 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!

  2. 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.

  3. 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ół.


1
Zmiana zestawu danych w uczeniu maszynowym to dobry, rygorystyczny przegląd tej dziedziny. „ Przesunięcie współzmienne (wejściowe) oznacza, że ​​zmienia się tylko rozkład wejściowy, podczas gdy rozkład warunkowy wyjść przy danych wejściowych pozostaje niezmieniony.” p(y|x)
ijoseph,

-1

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.


1
O ile rozumiem pytanie, rozkłady pociągów / testów są różne, co jeśli nie zostanie wzięte pod uwagę, prowadzi do tak zwanego „przesunięcia współzmiennego”. Prosta podpróbka wykorzystująca implementację „train_test_split” w scikit learn wspomniana tutaj nie będzie uwzględniać dystrybucji podczas podziału! Zatem odpowiedź nie jest istotna.
TwinPenguins
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.