Dane kategorialne: słownictwo i kodowanie jednorazowe

Termin wymiar jest synonimem liczby elementów w wektorze cech. Niektóre cechy kategorialne są mało wymiarowe. 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. W przypadku kodowania słownictwa 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. Może czerwone samochody są warte więcej niż zielone samochody. 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 każdej kategorii.

Ćwiczenie: sprawdź swoją intuicję

Prawda czy fałsz: model systemów uczących się 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
Podczas trenowania model może modyfikować 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 systemów uczących się może trenować tylko na obiektach z wartościami zmiennoprzecinkowymi, dlatego musisz przekonwertować te ciągi na wartości zmiennoprzecinkowe przed trenowaniem.

Numery indeksu

Modele uczenia maszynowego mogą manipulować tylko liczbami zmiennoprzecinkowymi. Dlatego musisz przekonwertować każdy ciąg na unikalny numer indeksu, jak na tej 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ą całkowitą 1 itd.
Rysunek 2. Cechy indeksowane.

Ćwiczenie: sprawdź swoją intuicję

Czy Twój model powinien być trenowany bezpośrednio na podstawie numerów indeksu przedstawionych na rysunku 2?
Tak
Jeśli model trenowany na podstawie indeksów liczbowych błędnie traktuje je jako wartości liczbowe i uważa, że "Black" (indeks 5) jest 5 razy bardziej istotny dla modelu niż "Orange" (indeks 1).
Nie
Model nie powinien się trenować na podstawie numerów indeksu. W takim przypadku model traktowałby każdy numer indeksu jako wartość liczbową i uznałby, że "Black" (numer indeksu 5) jest 5 razy bardziej istotny dla modelu niż "Orange" (numer indeksu 1).

Kodowanie One-got

Kolejnym krokiem w tworzeniu słownika jest przekształcenie każdego numeru indeksu na kodowanie jednobitowe. W kodyfikacji jednobitowej:

  • 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, to wektor reprezentujący jeden gorący wektor będzie miał 8 elementów.
  • Dokładnie jeden z elementów wektora one-hot ma wartość 1,0. Pozostałe elementy mają wartość 0,0.

Na przykład w tabeli poniżej pokazano kodowanie 1-hot dla każdego z tych elementó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
"Purple" 0 0 0 0 0 0 1 0
"Brown" 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.

Ilustracja poniżej przedstawia 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 konwertuje te wartości na jeden gorący wektor cech. Na przykład w systemie z ośmioma 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ą głównie równe 0 (lub puste), jest nazywana rzadką cechą. Wiele funkcji kategorialnych, np. car_color, jest zwykle rzadkich. Reprezentacja rozproszona oznacza przechowywanie pozycji 1.0 w rozproszonym wektorze. 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 jednowartościowego to:

2

Zwróć uwagę, że rzadka reprezentacja zajmuje znacznie mniej pamięci niż wektor 8-elementowy one-hot. Ważne jest, aby model trenował 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. te wymienione w tabeli poniżej:

Nazwa cechy Liczba kategorii Przykładowe kategorie
words_in_english ~ 500 000 „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 wstawiane, opisane w oddzielnym module Elementy wstawiane, 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.
  • Zwykle taki model szybciej generuje prognozy. Oznacza to, że model ma mniejsze opóźnienie.

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