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
:
Ćwiczenie: sprawdź swoją wiedzę
"Red"
nie jest liczbą zmiennoprzecinkową. Musisz przekonwertować ciągi znaków, takie jak "Red"
, na liczby 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:
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:
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.