Nigdy nie jestem pewien, kiedy zastosować kodowanie „na gorąco” w przypadku niez uporządkowanych zmiennych kategorialnych, a kiedy nie. Używam go, ilekroć algorytm używa metryki odległości do obliczenia podobieństwa. Czy ktokolwiek może podać ogólną ogólną zasadę, jakie typy algorytmów wymagają, aby niez uporządkowane funkcje kategorialne były zakodowane na gorąco, a które nie?
12
Odpowiedzi:
Większość algorytmów (regresja liniowa, regresja logistyczna, sieć neuronowa, maszyna wektorów wsparcia itp.) Wymaga pewnego rodzaju kodowania zmiennych kategorialnych. Jest tak, ponieważ większość algorytmów przyjmuje tylko wartości liczbowe jako dane wejściowe.
Algorytmy, które nie wymagają kodowania, to algorytmy, które mogą bezpośrednio radzić sobie ze wspólnymi dyskretnymi rozkładami, takimi jak łańcuch Markowa / Naive Bayes / sieć Bayesa, oparte na drzewie itp.
Dodatkowe komentarze:
Jedno kodowanie na gorąco jest jedną z metod kodowania. Oto dobry zasób do kodowania zmiennych jakościowych (nie tylko R). R SYSTEMY KODOWANIA BIBLIOTECZNEGO KONTRASTU DLA ZMIENNYCH KATEGORICZNYCH
Nawet bez kodowania można zdefiniować odległość między punktami danych za pomocą zmiennych dyskretnych, takich jak odległość Hamminga lub Levenshteina
źródło
AFAIU, ma więcej wspólnego z konkretnymi danymi , mniej z konkretnym algorytmem . W szczególności zależy to od tego, czy w kategoriach występuje jakiś znaczący porządek, czy nie.
Rozważ dwa przypadki. W pierwszym masz kategorie złe, meh, dobre , aw drugim masz jabłko, pomarańczę, gruszkę . Jest to naturalny porządek w pierwszym przypadku, ponieważ meh jest prawdopodobnie pomiędzy zły i dobry , ale prawdopodobnie nic podobnego dzieje się w jabłko, pomarańcza, gruszka .
Jeśli unikniesz jednorazowego kodowania w pierwszym przypadku, „tracisz” informacje o zamówieniu. Jeśli użyjesz kodowania „na gorąco” dla drugiego przypadku, przypisujesz porządek do kategorii, co z natury nie jest prawdą.
Czemu? Załóżmy, że jedna z funkcji jest kategorycznie zła, aha, dobra i masz trzy instancje, 1, 2 i 3, w których są one identyczne, z wyjątkiem tego, że 1 jest zła , 2 to meh , a 3 jest dobra. Prawdopodobnie chcesz wyrazić algorytmowi, że 1 jest bardziej podobny do 2 niż do 3.
źródło
Żaden algorytm uczenia maszynowego nie wymaga jednego kodowania na gorąco. Jest to jedna metoda radzenia sobie ze zmiennymi kategorialnymi. Zmienne manekina to kolejne. Tradycyjnie preferowanym rozwiązaniem były zmienne fikcyjne. Na przykład funkcja R lm () automatycznie tworzy zmienne zastępcze dla danych kategorycznych. Jeśli używasz Pythona i scikt-learn, to uważam, że wiele z jego algos wymaga jednorazowego kodowania zmiennych kategorialnych. Uważam, że tensorFlow wymaga również jednokrotnego kodowania. Są to wybory sposobu kodowania zmiennej. Nie ma powodu, dla którego zmienne zastępcze nie mogłyby być użyte w kodzie. Wszystko to musi dotyczyć faktycznej implementacji kodu algorytmu.
Jak wskazuje hxd1011, kwestia opisania „odległości” między zmiennymi kategorycznymi jest delikatną kwestią. Oprócz wspomnianych odległości istnieje również odległość Jaccard. Niektóre metody ML, szczególnie SVM, są nieodpowiednie dla danych jakościowych, a dodanie zmiennych jakościowych może (lub obie, decydujesz) prowadzić do modeli o bardzo słabej mocy predykcyjnej. Większość modeli zestawów obsługuje dane kategoryczne „takie, jakie są” i nie wymagają wstępnego przetwarzania.
źródło