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, Zaawansowany, 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 niewielką 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 na przykład, że tworzysz model do prognozowania ceny 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.

Ćwiczenie: sprawdź swoją wiedzę

Prawda czy fałsz: model uczenia maszynowego może być trenowany bezpośrednio na podstawie surowych wartości tekstowych, takich jak „Czerwony”„Czarny”, 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.

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 ilustracji poniżej:

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 one-hot 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 przedstawiająca różne przekształcenia w reprezentacji słownictwa:

Rysunek 3. Diagram kompleksowego procesu 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. System przypisuje więc 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 to w większości zera (lub puste ciągi znaków), 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 (gdy liczymy 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 typu one-hot, 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 koszyku. System uczy się jednej wagi dla tego zasobnika wartości odstających.

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 tys. "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 korzyści modelom na 2 ważne sposoby:

  • Model zwykle trenuje się 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.