Sieci neuronowe: jedna zmienna przytłaczająca ciągła?

13

Mam surowe dane, które mają około 20 kolumn (20 funkcji). Dziesięć z nich to ciągłe dane, a 10 z nich ma charakter kategoryczny. Niektóre dane jakościowe mogą mieć 50 różnych wartości (stany USA). Po wstępnym przetworzeniu danych 10 ciągłych kolumn staje się 10 przygotowanymi kolumnami, a 10 wartości kategorycznych staje się jak 200 zmiennych zakodowanych na gorąco. Obawiam się, że jeśli umieszczę wszystkie te cechy 200 + 10 = 210 w sieci neuronowej, wówczas cechy 200-one-hot (10 kolumn kategorycznych) całkowicie zdominują funkcje 10-ciągłe.

Być może jedną z metod byłoby „grupowanie” kolumn razem lub coś w tym rodzaju. Czy jest to uzasadnione i czy istnieje jakiś standardowy sposób rozwiązania tego problemu?

(Używam Keras, choć nie sądzę, żeby miało to duże znaczenie).

użytkownik1367204
źródło
Czy rozważałeś zastosowanie dwóch (lub więcej) modeli sekwencyjnych, a następnie ich połączenie? Każdy model ma dane wejściowe, które lepiej pasują do danych na bieżąco (w przeciwieństwie do mieszania ich jak kiełbasy). Cele są takie same, ale tworzysz dwa zestawy danych treningowych, z których każdy jest podawany niezależnie podczas dopasowania. Bezpośrednio po scaleniu następuje końcowa warstwa wyjściowa, dzięki czemu warstwa końcowa decyduje, który model najlepiej działa dla poszczególnych próbek. From keras.io: keras.io/getting-started/sequential-model-guide
photox
Właśnie tego szukałem. Dziękuję za pomoc.
user1367204
Próbowałem tego i val_loss zespołu (model_1, model_2) był wyższy niż val_loss modelu_1 i wyższy niż val_loss modelu_2.
user1367204,
czy rzeczywiście próbowałeś tego i ustaliłeś, że ten problem faktycznie występuje? jakie testy wykonałeś, aby sprawdzić ten punkt? jakie były wyniki?
Hugh Perkins

Odpowiedzi:

5

Możesz zakodować zmienne jakościowe za pomocą metody innej niż one-hot. Kodery binarne lub mieszające mogą być odpowiednie w tym przypadku. W szczególności haszowanie jest przyjemne, ponieważ kodujesz wszystkie kategorie w jedną reprezentację dla każdego wektora cech, więc żadna z nich nie dominuje nad drugą. Możesz także określić rozmiar ostatecznej reprezentacji, dzięki czemu możesz haszować wszystkie zmienne jakościowe na 10 operacji i otrzymać 20 cech numerycznych (pół ciągłych, pół kategorycznych).

Oba są zaimplementowane w https://github.com/scikit-learn-contrib/categorical-encoding lub dość prosto, aby zaimplementować siebie.

Will McGinnis
źródło
4

Możesz użyć osadzania, aby przekształcić dużą liczbę zmiennych jakościowych w pojedynczy wektor. Ten skompresowany wektor będzie rozproszoną reprezentacją cech jakościowych. Kategoryczne dane wejściowe zostaną przekształcone we względnie mały wektor długości N z N liczbami rzeczywistymi, które w pewien sposób reprezentują N ukrytych cech opisujących wszystkie dane wejściowe.

Rozważ dużą liczbę słów w słowniku angielskim. Jeśli liczba ta wynosi N, to moglibyśmy reprezentować każde słowo jako jeden kodowany na gorąco wektor o długości N. Jednak słowo-do-vec jest w stanie uchwycić praktycznie całą tę informację w wektorze o długości od 200 do 300.

COOLBEANS
źródło