Dane kategorialne: słownictwo i kodowanie jednorazowe

Termin wymiar jest synonimem liczby elementów w wektorze cech. Niektóre cechy kategorialne mają małą liczbę wymiarów. Na przykład:

Nazwa cechy Liczba kategorii Przykładowe kategorie
snowed_today 2 Prawda, Fałsz
skill_level 3 Początkujący, Praktyk, 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łownik. W przypadku kodowania słownikowego model traktuje każdą możliwą wartość kategorii jako osobną cechę. Podczas trenowania model uczy się różnych wag dla każdej kategorii.

Załóżmy, że tworzysz model, który ma przewidywać cenę samochodu na podstawie m.in. cechy kategorialnej o nazwie car_color. Być może czerwone samochody są warte więcej niż zielone. Producenci oferują ograniczoną liczbę kolorów nadwozia, więc car_color jest cechą kategoryczną o niskiej liczbie wymiarów. Ilustracja poniżej przedstawia słownictwo (możliwe wartości) dla elementu car_color:

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

Numery indeksów

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

Rysunek 2. Każdy kolor jest powiązany z unikalną wartością całkowitą. Na przykład kolor „Czerwony” jest powiązany z liczbą całkowitą 0, „Pomarańczowy” z liczbą całkowitą 1 itd.
Rysunek 2. Zindeksowane cechy.

Po przekształceniu ciągów znaków w unikalne numery indeksów musisz dalej przetwarzać dane, aby przedstawić je w sposób, który pomoże modelowi nauczyć się istotnych zależności między wartościami. Jeśli dane cechy kategorialnej pozostaną w postaci indeksowanych liczb całkowitych i zostaną wczytane do modelu, model będzie traktować indeksowane wartości jako ciągłe liczby zmiennoprzecinkowe. Model uzna wtedy, że „fioletowy” jest 6 razy bardziej prawdopodobny niż „pomarańczowy”.

Kodowanie 1 z n

Kolejnym krokiem w budowaniu słownika jest przekształcenie każdego numeru indeksu w jego kodowanie 1 z n. W kodowaniu 1 z n:

  • Każda kategoria jest reprezentowana przez wektor (tablicę) N elementów, gdzie N to liczba kategorii. Jeśli np. zmienna car_color ma 8 możliwych kategorii, wektor kodowania 1-z-N będzie miał 8 elementów.
  • Dokładnie jeden element wektora kodowania 1-z-n ma wartość 1,0, a wszystkie pozostałe elementy mają wartość 0,0.

Na przykład w tabeli poniżej przedstawiono kodowanie 1-z-N dla każdego koloru w car_color:

Funkcja 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
"Fioletowy" 0 0 0 0 0 0 1 0
„Brązowy” 0 0 0 0 0 0 0 1

Do wektora cech przekazywany jest wektor 1 z n, a nie ciąg znaków ani numer indeksu. Model uczy się osobnej wagi dla każdego elementu wektora cech.

Ilustracja poniżej przedstawia różne przekształcenia w reprezentacji słownictwa:

Rysunek 3. Diagram przedstawiający kompleksowy proces mapowania kategorii na wektory cech. Na diagramie cechy wejściowe to „Yellow”, „Orange”, „Blue” i „Blue” (po raz drugi).  System używa zapisanego słownika („Czerwony” to 0, „Pomarańczowy” to 1, „Niebieski” to 2, „Żółty” to 3 itd.), aby zmapować wartość wejściową na identyfikator. W ten sposób system przypisuje wartości „Żółty”, „Pomarańczowy”, „Niebieski” i „Niebieski” do liczb 3, 1, 2, 2. Następnie system przekształca te wartości w wektor cech w kodowaniu 1 z n. Na przykład w systemie z 8 możliwymi kolorami wartość 3 zostanie przekształcona w 0, 0, 0, 1, 0, 0, 0, 0.
Rysunek 3. Kompleksowy proces mapowania kategorii na wektory cech.

Reprezentacja rzadka

Cecha, której wartości są w większości zerowe (lub puste), jest nazywana rzadką cechą. Wiele funkcji kategorialnych, np. car_color, to zwykle funkcje rzadkie. Reprezentacja rzadka oznacza przechowywanie pozycji wartości 1,0 w wektorze rzadkim. Na przykład wektor 1 z n dla znaku "Blue" to:

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

Ponieważ znak 1 znajduje się na pozycji 2 (przy liczeniu od 0), rzadka reprezentacja poprzedniego wektora kodowania 1-z-N to:

2

Zwróć uwagę, że reprezentacja rzadka zużywa znacznie mniej pamięci niż 8-elementowy wektor typu one-hot. Ważne jest, aby model trenował na wektorze kodowania 1-z-N, a nie na reprezentacji rzadkiej.

Wartości odstające w danych kategorialnych

Podobnie jak dane liczbowe, dane kategorialne również zawierają wartości odstające. Załóżmy, że zbiór car_color zawiera nie tylko popularne kolory, ale też rzadko używane kolory odstające, takie jak "Mauve" lub "Avocado". Zamiast przypisywać każdy z tych kolorów do osobnej kategorii, możesz zgrupować je w jednej kategorii „zbiorczej” o nazwie out-of-vocabulary (OOV). Inaczej mówiąc, wszystkie kolory odstające są umieszczane w jednym przedziale odstającym. System przypisuje do tego zasobnika wartości odstających jedną wagę.

Kodowanie wielowymiarowych cech kategorialnych

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

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 000 "Schmidt", "Schneider"

Gdy liczba kategorii jest duża, kodowanie 1-z-N jest zwykle złym wyborem. Wektory dystrybucyjne, które są szczegółowo opisane w osobnym module Wektory dystrybucyjne, są zwykle znacznie lepszym wyborem. Osadzanie znacznie zmniejsza liczbę wymiarów, co przynosi modelom 2 ważne korzyści:

  • Model zwykle trenuje szybciej.
  • Zbudowany model zwykle szybciej wyciąga wnioski. Oznacza to, że model ma mniejsze opóźnienie.

Mieszanie (nazywane też sztuczką mieszania) to mniej popularny sposób na zmniejszenie liczby wymiarów.

Ćwiczenie: sprawdź swoją wiedzę

Prawda czy fałsz: model uczenia maszynowego może uczyć się bezpośrednio na podstawie surowych wartości tekstowych, takich jak „Red”„Black”, bez konwertowania tych wartości na wektory liczbowe.
Prawda
Podczas trenowania model może przetwarzać tylko liczby zmiennoprzecinkowe. Ciąg "Red" nie jest liczbą zmiennoprzecinkową. Musisz przekonwertować ciągi znaków, takie jak "Red", na liczby zmiennoprzecinkowe.
Fałsz
Model uczenia maszynowego może trenować tylko na podstawie cech o wartościach zmiennoprzecinkowych, więc przed trenowaniem musisz przekonwertować te ciągi znaków na wartości zmiennoprzecinkowe.