Dlaczego musimy tłumić zmienne jakościowe w kodzie?

22

Nie jestem pewien, dlaczego musimy tłumić zmienne kategorialne. Na przykład, jeśli mam zmienną kategorialną o czterech możliwych wartościach 0,1,2,3, mogę ją zastąpić dwoma wymiarami. Gdyby zmienna miała wartość 0, miałaby 0,0 w dwóch wymiarach, gdyby miała 3, miałaby 1,1 w dwóch wymiarach i tak dalej.

Nie jestem pewien, dlaczego musimy to zrobić?

użytkownik12331
źródło

Odpowiedzi:

21

Załóżmy, że twoimi czterema kategoriami są kolory oczu (kod): brązowy (1), niebieski (2), zielony (3), piwny (4) - na razie zapala się heterochromię, fiolet, czerwony, szary itp.

W żaden sposób (co obecnie mogę sobie wyobrazić) nie oznaczałoby, że zielony brązowy lub ten piwny = 2 × niebieski, jak sugerują nasze kody, nawet jeśli 3 = 3 × 1 i 4 = 2 × 2 .=3)×=2)×3)=3)×14=2)×2)

Dlatego (chyba że z jakiegoś powodu chcemy , aby takie znaczenie znalazło się w naszych analizach), musimy użyć pewnego rodzaju kodowania. Kodowanie atrapy jest jednym przykładem, który eliminuje takie związki ze statystycznych opowieści, które chcemy opowiedzieć o kolorze oczu. Kodowanie efektów i kodowanie Heckmana to inne przykłady.

Aktualizacja: twój przykład dwóch zmiennych dla czterech kategorii nie zgadza się z moim rozumieniem użycia terminu „kod fikcyjny”, który zazwyczaj pociąga za sobą zastąpienie kategorii (powiedzmy 4) zmiennymi k - 1 fikcyjnymi (sortowanie obserwacji według kategorii):kk-1

id  category  dummy1 dummy2 dummy3
 1         1       1      0      0
 2         1       1      0      0
 3         2       0      1      0
 4         2       0      1      0
 5         3       0      0      1
 6         3       0      0      1
 7         4       0      0      0
 8         4       0      0      0

Tutaj kategoria 4 jest kategorią referencyjną, przy założeniu, że w modelu występuje stała, na przykład:

y=β0+β1re1+β2)re2)+β3)re3)+ε

gdzie jest średnią wartością y, gdy kategoria = 4, a terminy β związane z każdym manekinem wskazują, o ile y zmienia się z β 0 dla tej kategorii.β0yβyβ0

Jeśli nie masz w modelu stałego ( ), potrzebujesz jeszcze jednego „fałszywego” predyktora (być może rzadziej nazywanego „zmiennymi wskaźnikowymi”), w efekcie manekiny zachowują się jak stała modelu dla każdej kategorii :β0

y=β1re1+β2)re2)+β3)re3)+β4re4+ε

To by pomogło rozwiązać problem tworzenia bezsensownych ilościowych związków między kodami kategorii, o których wspomniałem na początku, ale dlaczego nie zastosować kodowania user12331, jak sugerujesz? kod A użytkownik 12331 kandydat A:

id  category   code1  code2
 1         1       0      ?
 2         1       0      ?
 3         2       1      ?
 4         2       1      ?
 5         3       ?      0
 6         3       ?      0
 7         4       ?      1
 8         4       ?      1

masz całkowitą rację, wskazując, że można przedstawić 4 wartości za pomocą 2 zmiennych binarnych (tj. dwóch bitów). Niestety, jedno podejście do tego (kod 1 dla kategorii 1 i 2 oraz kod 2 dla kategorii 3 i 4) pozostawia niejednoznaczność wskazywaną przez znaki zapytania: jakie wartości by tam poszły ?!

A co z drugim podejściem, nazwij go kandydatem B kodującym użytkownika12331:

id  category   code1  code2
 1         1       0      0
 2         1       0      0
 3         2       0      1
 4         2       0      1
 5         3       1      0
 6         3       1      0
 7         4       1      1
 8         4       1      1

Tam! Bez dwuznaczności, prawda? Dobrze! Niestety, całe to kodowanie reprezentuje wartości liczbowe 1–4 (lub 0–3) w notacji binarnej , co pozostawia nienaruszony problem nadania tych niepożądanych zależności ilościowych kategoriom.

Stąd potrzeba innego schematu kodowania.

β

Alexis
źródło
5
Chociaż ta odpowiedź pokazuje powód, dla którego nie możemy użyć jednej zmiennej (tj. Że rzeczywiście potrzebujemy „jakiegoś rodzaju kodowania”), nie wyjaśnia (jeszcze), dlaczego nie możemy tego zrobić za pomocą powiedzmy dwóch zmiennych, ponieważ OP sugeruje w pytaniu.
Glen_b
@Glen_b Dziękujemy. Mam nadzieję, że moja aktualizacja pomogła rozwiązać problem.
Alexis,
2
Zauważ, że 2 zmienne binarne wystarczają do reprezentowania 4 kategorii [(0,0), (0,1), (1,0), (1,1)], ale nie jest to odpowiedni sposób na użycie fałszywego kodu do analizy. OP wydaje się kodować niepoprawnie.
Ellis Valentiner,
@ user12202013 Tak. Jak w moim ostatnim przykładzie.
Alexis,
Co jeśli miałbym zrobić kodowanie binarne przy użyciu dwóch zmiennych, jak sugeruje OP, ale jeśli celem jest przewidywanie, to czy nieparametryczny, nieliniowy klasyfikator / regresor nie działałby równie dobrze?
tool.ish
1

Podchodzę do tego pytania, że ​​kodowanie czterech możliwych stanów za pomocą tylko dwóch zmiennych jest mniej ekspresyjne przy niektórych algorytmach uczenia maszynowego niż przy użyciu 4 zmiennych.

Na przykład wyobraź sobie, że chcesz przeprowadzić regresję liniową, a twoje prawdziwe mapowanie odwzorowuje wartości 0,1 i 2 na 0 oraz wartość 3 na 1. Możesz szybko sprawdzić, czy nie ma możliwości uczenia się tego mapowania za pomocą regresji liniowej podczas kodowania twoja zmienna kategorialna z tylko dwoma zmiennymi binarnymi (po prostu spróbuj dopasować odpowiednią płaszczyznę do twojej głowy). Z drugiej strony, gdy użyjesz kodowania 1-Of-K, nie będzie to problemem.

Tobiasz
źródło
0

Alternatywą jest również kod fikcyjny. Wybierasz sztuczny kod, który najlepiej wyraża relację do zmiennej zależnej. Np. Kolor może być wyrażony jako 1 z n, lub możesz przekształcić się w numeryczne komponenty rgb, lub możesz podzielić na kategorie: girly / muddy / ... 1 z n oznacza w zasadzie, że każda instancja jest uczona osobno, co jest dobre, jeśli nie ma związku. ... ale tam, gdzie istnieje relacja, marnujesz swoje dane .. musisz osobno oszacować współczynnik dla każdego wystąpienia kategorii ... uznać pracę za zmienną kategoryczną. Możesz ponownie sklasyfikować jako sektor rynku i staż pracy.

seanv507
źródło