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).
źródło
Odpowiedzi:
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.
źródło
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.
źródło