Jak przekodować zmienną kategorialną na zmienną numeryczną podczas korzystania z SVM lub sieci neuronowej

19

Aby użyć SVM lub sieci neuronowej, należy przekształcić (zakodować) zmienne kategorialne w zmienne numeryczne, normalną metodą w tym przypadku jest użycie wartości binarnych 0-1 z przekształconą k-tą wartością kategorialną na (0,0, .. ., 1,0, ... 0) (1 jest w pozycji k-tej). Czy istnieją inne metody, aby to zrobić, zwłaszcza gdy istnieje duża liczba wartości jakościowych (np. 10000), tak że reprezentacja 0-1 wprowadzi dużą liczbę dodatkowych wymiarów (jednostek wejściowych) w sieci neuronowej, co wydaje się niezupełnie pożądane lub oczekiwane ?

Pytam o ogólne strategie.

użytkownik68589
źródło
Pytasz o ogólne strategie lub o jakiś konkretny problem?
Denis Tarasov,

Odpowiedzi:

11

W NLP, w którym słowa są zwykle kodowane jako 1-z-k, ostatnio pojawiło się stosowanie osadzania słów. Strona Wikipedii z odnośnikami to dobry początek.

Ogólną ideą jest nauczenie się reprezentacji wektorowej dla każdego słowa i, gdzie semantycznie podobne słowa są blisko w tej przestrzeni. W związku z tym dane wejściowe mają rozmiar n zamiast rozmiaru słownictwa.xjaRnjan

Może możesz przenieść ten pomysł do swojego ustawienia.

bayerj
źródło
10

Metody „standardowe” to: kodowanie „na gorąco” (o czym wspomniałeś w pytaniu). Jeśli istnieje zbyt wiele możliwych kategorii, ale potrzebujesz kodowania 0-1, możesz użyć sztuczki haszującej .

Inną często stosowaną metodą jest uśrednianie odpowiedzi według kategorii: patrz zdjęcie z komentarza w kaggle .

Alleo
źródło
1

Możesz używać dummyVarsw R z caretpakietu. Automatycznie utworzy różne kolumny na podstawie liczby poziomów. Następnie możesz użyć cbindi dołączyć do oryginalnych danych. Inne opcje obejmują model.matrixi sparse.model.matrix.

Karan Gulati
źródło
0

Możesz wypróbować kodowanie binarne, które jest bardziej kompaktowe i czasami przewyższa jeden raz. Na przykład możesz zaimplementować osadzanie kategoryczne w Keras.

eafpres
źródło
0

Możesz użyć kodowania encji , która jest bardziej wyrafinowaną strukturą sieci. Dodaje od 1 dok-1ukryte, liniowe neurony między wejściem jakościowym a pierwszą w pełni połączoną warstwą. Ma to za sobą kilka dobrych wyników empirycznych.

„Osadzanie zmiennych kategorialnych” Cheng Guo, Felix Berkhahn

Zmienne jakościowe odwzorowujemy w problemie aproksymacji funkcji na przestrzenie euklidesowe, które są osadzeniami encji zmiennych kategorialnych. Mapowania uczy się sieć neuronowa podczas standardowego nadzorowanego procesu szkoleniowego. Osadzanie jednostek nie tylko zmniejsza zużycie pamięci i przyspiesza sieci neuronowe w porównaniu z kodowaniem na gorąco, ale co ważniejsze, odwzorowując podobne wartości blisko siebie w przestrzeni osadzania, ujawnia nieodłączne właściwości zmiennych kategorialnych. Z powodzeniem zastosowaliśmy go w ostatnim konkursie Kaggle i mogliśmy osiągnąć trzecią pozycję dzięki stosunkowo prostym funkcjom. W dalszej części pracy wykazujemy, że osadzanie bytów pomaga sieci neuronowej lepiej uogólniać się, gdy dane są rzadkie, a statystyki nieznane. Jest to zatem szczególnie przydatne w zestawach danych z dużą ilością cech o wysokiej liczności, w których inne metody mają tendencję do przeważania. Wykazujemy również, że osadzenia uzyskane z wyszkolonej sieci neuronowej znacznie zwiększają wydajność wszystkich testowanych metod uczenia maszynowego, gdy są używane zamiast funkcji wejściowych. Ponieważ osadzanie encji definiuje miarę odległości dla zmiennych jakościowych, może ona być używana do wizualizacji danych jakościowych i do grupowania danych.

Sycorax mówi Przywróć Monikę
źródło