Dane kategorialne: słownictwo i kodowanie jednorazowe

Termin wymiar jest synonimem liczby elementów w wektorze cech. Niektóre atrybuty kategorialne mają niską wymiarowość. Na przykład:

Nazwa cechy Liczba kategorii Przykładowe kategorie
snowed_today 2 Prawda, fałsz
skill_level 3 Początkujący, Praktykujący, Ekspert
season 4 Zima, wiosna, lato, jesień
day_of_week 7 Poniedziałek, wtorek, środa
planeta 8 Merkury, Wenus, Ziemia

Jeśli cecha kategorialna ma małą liczbę możliwych kategorii, możesz ją zakodować jako słownictwo. Dzięki kodowaniu słownika model traktuje każdą możliwą wartość kategorialną jako osobną cechę. Podczas treningu model uczy się różnych wag dla każdej kategorii.

Załóżmy na przykład, że tworzysz model do przewidywania ceny samochodu na podstawie m.in. atrybutu noszącego nazwę car_color. Być może czerwone samochody są warte więcej niż zielone. Ponieważ producenci oferują ograniczoną liczbę kolorów nadwozia, car_color jest cechą wielowymiarową o niskiej wymiarowości. Ilustracja poniżej przedstawia słownictwo (możliwe wartości) dla pola car_color:

Rysunek 1. Każdy kolor w palecie jest reprezentowany jako osobna cecha. Oznacza to, że każdy kolor jest osobnym elementem wektora cech.
      Na przykład „Czerwony” to funkcja, „Pomarańczowy” to osobna funkcja itd.
Rysunek 1. Unikalna cecha dla każdej kategorii.

Ćwiczenie: sprawdź swoją wiedzę

Prawda czy fałsz: model uczenia maszynowego może bezpośrednio trenować na podstawie wartości ciągów znaków, np. „Czerwony”„Czarny”, bez konieczności konwertowania tych wartości na wektory liczbowe.
Prawda
Fałsz

Numery indeksu

Modele uczenia maszynowego mogą manipulować tylko liczbami zmiennoprzecinkowymi. Dlatego musisz przekonwertować każdy ciąg znaków na niepowtarzalny numer indeksu, jak pokazano na poniższej ilustracji:

Rysunek 2.  Każdy kolor jest powiązany z unikalną wartością całkowitą. Na przykład „czerwony” jest powiązany z liczbą całkowitą 0, „pomarańczowy” z liczbą 1 itd.
Rysunek 2. Cechy indeksowane.

Po przekonwertowaniu ciągów tekstowych na unikalne numery indeksów musisz przetworzyć dane w sposób, który pomoże modelowi poznać istotne relacje między wartościami. Jeśli dane o cechach porządkowych pozostaną w postaci indeksowanych liczb całkowitych i zostaną załadowane do modelu, model będzie traktować indeksowane wartości jako ciągłe liczby zmiennoprzecinkowe. Model uznałby wtedy, że „fioletowy” jest 6 razy bardziej prawdopodobny niż „pomarańczowy”.

Kodowanie one-hot

Kolejnym krokiem w tworzeniu słownika jest przekształcenie każdego numeru indeksu na kodowanie jednobitowe. W kodowaniu one-hot:

  • Każda kategoria jest reprezentowana przez wektor (tablicę) o wielkości N, gdzie N to liczba kategorii. Jeśli np. car_color ma 8 możliwych kategorii, wektor one-hot reprezentujący car_color będzie miał 8 elementów.
  • Dokładnie jeden z elementów wektora one-hot ma wartość 1,0; wszystkie pozostałe mają wartość 0,0.

Na przykład w tabeli poniżej pokazano kodowanie 1-hot dla każdego z tych elementów:car_color

Cecha Czerwony Orange Niebieski Żółty Zielony Czarny Fioletowy Brązowy
"Czerwony" 1 0 0 0 0 0 0 0
"Orange" 0 1 0 0 0 0 0 0
"Niebieski" 0 0 1 0 0 0 0 0
"Żółty" 0 0 0 1 0 0 0 0
"Zielony" 0 0 0 0 1 0 0 0
"Czarny" 0 0 0 0 0 1 0 0
"Purple" 0 0 0 0 0 0 1 0
"brązowy" 0 0 0 0 0 0 0 1

Do wektora cech przekazywany jest wektor jednoelementowy, a nie ciąg znaków ani numer indeksu. Model uczy się osobnego współczynnika dla każdego elementu wektora cech.

Na ilustracji poniżej widać różne przekształcenia w reprezentacji słownika:

Rysunek 3.  Schemat kompleksowego procesu mapowania kategorii na wektory cech Na diagramie cechy wejściowe to „Żółty”,
      'Pomarańczowy”, „Niebieski” i po raz drugi „Niebieski”.  System używa zapisanego słownika (np. „czerwony” to 0, „pomarańczowy” to 1, „niebieski” to 2, „żółty” to 3 itd.), aby mapować wartość wejściową na identyfikator. W związku z tym system przypisuje kolory „żółty”, „pomarańczowy”, „niebieski” i „niebieski” do wartości 3, 1, 2 i 2. Następnie system przekształca te wartości w wektory cech typu „jeden-gorący”. Na przykład w systemie z 8 możliwymi kolorami wartość 3 zamienia się na 0, 0, 0, 1, 0, 0, 0, 0.
Rysunek 3. Cały proces mapowania kategorii na wektory cech.

Rozproszona reprezentacja

Cecha, której wartości są w większości równe 0 (lub puste), jest nazywana rzadką cechą. Wiele funkcji kategorialnych, np. car_color, jest zwykle rzadkich. Rozproszona reprezentacja oznacza przechowywanie pozycji 1,0 w wektorze rzadkim. Na przykład wektor jednoelementowy dla "Blue" to:

[0, 0, 1, 0, 0, 0, 0, 0]

Ponieważ 1 znajduje się na pozycji 2 (liczenie zaczyna się od 0), skąpa reprezentacja powyższego wektora jednobitowego to:

2

Zwróć uwagę, że rzadka reprezentacja zajmuje znacznie mniej pamięci niż wektor 8-elementowy one-hot. Ważne: model musi trenowac na wektorze jednowymiarowym, a nie na rzadkiej reprezentacji.

Elementy odstające w danych kategorialnych

Podobnie jak dane liczbowe, dane kategorialne również zawierają wartości odstające. Załóżmy, że car_color zawiera nie tylko popularne kolory, ale też rzadko używane kolory niestandardowe, takie jak "Mauve" czy "Avocado". Zamiast przypisywać każdemu z tych kolorów osobną kategorię, możesz je umieścić w jednej kategorii „catch-all” o nazwie poza słownictwem. Inaczej mówiąc, wszystkie kolory odbiegające od normy są grupowane w jednym zasobniku. System uczy się jednego współczynnika dla tego zasobnika z wyjątkami.

Kodowanie cech wielowymiarowych

Niektóre cechy kategorialne mają dużą liczbę wymiarów, np.:

Nazwa cechy Liczba kategorii Przykładowe kategorie
words_in_english ~ 500 tys. „happy”, „walking”
US_postal_codes ~42 000 „02114”, „90301”
last_names_in_Germany ~850 tys. „Schmidt”, „Schneider”

Gdy liczba kategorii jest duża, kodowanie jednobitowe jest zwykle złym wyborem. Elementy umieszczane w innych treściach, opisane w oddzielnym module Umieszczanie, są zwykle znacznie lepszym wyborem. Wbudowane wymiary znacznie zmniejszają liczbę wymiarów, co korzystnie wpływa na modele na 2 sposoby:

  • Model zwykle uczy się szybciej.
  • Utworzony model zwykle szybciej wyprowadza prognozy. Oznacza to, że model ma mniejsze opóźnienie.

Kody szyfrowania (nazywane też sztuczką z kodą szyfrowania) to mniej popularny sposób na zmniejszenie liczby wymiarów.

Krótko mówiąc, szyfrowanie mapuje kategorię (np. kolor) na małe całkowite – numer „kosza”, który będzie zawierać tę kategorię.

Algorytm haszowania wdrażasz w ten sposób:

  1. Ustaw liczbę przedziałów w wektorze kategorii na N, gdzie N jest mniejsze od łącznej liczby pozostałych kategorii. Na przykład N = 100.
  2. Wybierz funkcję haszowania. (często wybierasz też zakres wartości funkcji mieszającej).
  3. Prześlij każdą kategorię (np. określony kolor) przez tę funkcję skrótu, aby wygenerować wartość skrótu, np. 89237.
  4. Przypisz do każdego koszyka numer indeksu wartości skrótu wyjściowego modulo N. W tym przypadku, gdy N = 100, a wartość funkcji skrótu to 89237, wynik modulo będzie wynosił 37, ponieważ 89237 % 100 = 37.
  5. Utwórz kodowanie one-hot dla każdego zbiornika za pomocą tych nowych numerów indeksu.

Więcej informacji o hashowaniu danych znajdziesz w sekcji Losowanie w module Produkcyjne systemy uczące się.