Załóżmy, że chcę nauczyć się klasyfikatora, który przyjmuje wektor liczb jako dane wejściowe i podaje etykietę klasy jako dane wyjściowe. Moje dane treningowe składają się z dużej liczby par przepływów międzygałęziowych.
Jednak kiedy przechodzę do testowania niektórych nowych danych, dane te są zwykle tylko częściowo kompletne. Na przykład, jeśli wektor wejściowy ma długość 100, tylko 30 elementów może otrzymać wartości, a pozostałe są „nieznane”.
Jako przykład tego zastanów się nad rozpoznawaniem obrazu, gdy wiadomo, że część obrazu jest zasłonięta. Lub rozważ klasyfikację w sensie ogólnym, gdy wiadomo, że część danych jest uszkodzona. We wszystkich przypadkach wiem dokładnie, które elementy w wektorze danych są nieznanymi częściami.
Zastanawiam się, jak mogę nauczyć się klasyfikatora, który działałby dla tego rodzaju danych? Mógłbym po prostu ustawić „nieznane” elementy na liczbę losową, ale biorąc pod uwagę, że często jest więcej nieznanych elementów niż znane, nie brzmi to jak dobre rozwiązanie. Mogę też losowo zmieniać elementy danych treningowych na „nieznane” i trenować z nimi zamiast z kompletnymi danymi, ale może to wymagać wyczerpującego próbkowania wszystkich kombinacji znanych i nieznanych elementów.
W szczególności myślę o sieciach neuronowych, ale jestem otwarty na inne klasyfikatory.
Jakieś pomysły? Dzięki!
źródło
Odpowiedzi:
Myślę, że jest rozsądny sposób, aby działał z sieciami neuronowymi.
Niech twoja wartość dla nieznanego wynosi 0. Teraz podczas treningu wybierasz dane wejściowe i losowo ustawiasz niektóre z ich wartości na 0 z prawdopodobieństwem , gdzie p jest oczekiwanym ułamkiem brakujących danych wejściowych w czasie testu. Zauważ, że to samo wejście w różnych iteracjach będzie miało zera w różnych pozycjach.p
Nie widziałem tego wcześniej, ale byłoby to bardzo podobne do wykonywania Dropout (dobrze znanej metody regularyzacji w sieciach neuronowych) w neuronach wejściowych zamiast w ukrytych neuronach. Nie sądzę, że to dobry pomysł, aby to zrobić ogólnie, ale jeśli jesteś zmuszony (podobnie jak Twoja sprawa), przynajmniej teoretycznie jest wystarczająco blisko do czegoś, o czym wiadomo, że działa.
źródło
Myślę, że istnieją pewne opcje, które działają z dowolnym klasyfikatorem:
Oprócz tego możesz użyć klasyfikatorów opartych na drzewach (np. Losowe lasy), a jeśli drzewo musi ocenić podział brakującej funkcji, może po prostu przekazać dane do obu węzłów potomnych.
Trzecią opcją jest użycie generatywnego klasyfikatora, który modeluje pełny rozkład połączeń gdzie to dane wejściowe, etykieta klasyfikacji. Dzięki temu idealnie zmarginalizowałbyś nieznane części , tj. Wypróbowałbyś dowolną wartość dla nieznanych części i uśrednił wyniki ważone prawdopodobieństwem tej imputacji. Można to zrobić w formie analitycznej w formie zamkniętej dla niektórych klasyfikatorów, np. Modelu liniowej analizy dyskryminacyjnej, lub w przybliżeniu przez próbkowanie niewiadomych, np. Dla ograniczonej maszyny Boltzmanna lub jej głębokich wariantów (które są powiązane z sieciami neuronowymi przesyłającymi dane z wyprzedzeniem).x y x xp(x,y) x y x x
źródło