Kodowanie kategorialne to technika kodowania danych kategorycznych. Należy pamiętać, że dane kategoryczne to zbiory zmiennych, które zamiast wartości liczbowych zawierają zmienne etykietowe. Wiele algorytmów uczenia maszynowego nie jest w stanie przetwarzać zmiennych kategorycznych. Dlatego ważne jest zakodowanie danych w odpowiedniej formie, aby można było wstępnie przetworzyć te zmienne. Ponieważ konieczne jest dopasowanie i ocena modelu, należy zakodować dane kategoryczne i przekształcić wszystkie zmienne wejściowe i wyjściowe na liczbowe. Dzięki temu model będzie w stanie zrozumieć i wydobyć informacje, które dadzą pożądane wyniki. Różne zestawy danych różnią się w zależności od liczby możliwych wartości.
Większość zmiennych kategorycznych to zmienne nominalne. Zmienne te pomagają w kategoryzowaniu i oznaczaniu atrybutów. Zmienne zawierają różne wartości, a każda wartość reprezentuje osobną kategorię. Na przykład kolor jest zmienną, która zawiera różne wartości, takie jak niebieski, zielony, żółty. Podobnie zmienną jest zwierzę domowe, ale koty i psy są odrębnymi wartościami reprezentującymi różne kategorie. W innym przykładzie miejsce jest zmienną, ale wartością jest pierwsze, drugie i trzecie miejsce. Kategorie te mogą, ale nie muszą, pozostawać ze sobą w naturalnym związku. W powyższym przykładzie miejsca widać, że miejsce jest zmienną, a jego kategorie są w naturalnej kolejności. Tego typu zmienne można określić mianem zmiennych porządkowych.
Przekształcanie danych etykiet na dane numeryczne
Aby przekształcić dane etykietowe lub kategoryczne w dane liczbowe, należy wykonać dwa kroki:
1. Kodowanie liczb całkowitych
W tym pierwszym kroku każdej wartości kategorii przypisuje się wartość całkowitą. Na przykład kolor niebieski to 1, zielony to 2, a żółty to 3. Ten sposób kodowania można łatwo odwrócić. Kodowanie liczb całkowitych można również określić jako kodowanie etykiet. W przypadku wielu zmiennych ten krok wystarcza do przetworzenia modelu. Istnieje naturalna uporządkowana relacja między różnymi wartościami całkowitymi. Relację tę można połączyć za pomocą algorytmu uczenia maszynowego. Na przykład, jeśli weźmiemy pod uwagę zmienne porządkowe, takie jak miejsce, kategorie są już uporządkowane. Dlatego nie trzeba szukać relacji między tymi zmiennymi. Wystarczy więc kodowanie etykiet.
2. Kodowanie jednogodzinne
Zmienne kategoryczne nie zawierają żadnych relacji między zmiennymi, tak jak zmienne porządkowe. Dlatego należy przenieść proces kodowania na inny poziom. W przypadku tego typu danych kodowanie całkowite nie jest wystarczające. Nawet jeśli zakodujesz dane bez naturalnego porządku, kategorie nie będą do siebie pasować. Ze względu na słabą wydajność wynik będzie nieoczekiwany.
W związku z tym do reprezentacji liczb całkowitych można zastosować kodowanie typu “one-hot”. Podczas kodowania danych w tym kroku model usuwa zmienne całkowite. Następnie dla każdej unikalnej wartości całkowitej dołącza nową zmienną binarną. Na przykład, jeśli weźmiemy pod uwagę zmienną kolor, trzeba zakodować 3 kategorie. Aby osiągnąć ten wynik, dla zmiennej binarnej kolor należy wstawić wartość “1”, a dla pozostałych “0”.
Jak zakodować kodowanie jednoprzebiegowe
Proces kodowania można zrozumieć na poniższym przykładzie. Aby uprościć i przyspieszyć wykonywanie zadań, należy korzystać z bibliotek. Biblioteki to wstępnie napisane kody, które pomagają w optymalizacji zadań. Bez użycia odpowiednich bibliotek Twoje zadania staną się żmudne. Zacznij od włączenia do projektu trzech popularnych bibliotek. Są to: sklearn, NumPy i pandas.
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
zaimportuj NumPy jako np
zaimportuj pandas jako pd
Po wyposażeniu się w te narzędzia można przystąpić do kodowania. Aby zrozumieć tę koncepcję, użyj tego zestawu danych. Do wprowadzenia zbioru danych użyj biblioteki panda. Aby otworzyć plik, użyjesz .read_csv i nazwy pliku.
dataset = pd.read_csv(‘made_up_thing.csv’)
Do tej pory wykonywałeś zadania niewymagające wyjaśnień. Następny krok będzie jednak nieco trudniejszy. Gdy traktujesz arkusz kalkulacyjny jako dane wejściowe, zależy Ci lub nie zależy na niektórych kolumnach. Aby zachować prostotę, zaakceptujmy wszystkie kolumny oprócz ostatniej. Po określeniu kolumn, które należy uwzględnić, dodajemy .iloc. Jest to funkcja biblioteki pandas. Będziesz jej używał do wybierania danych z określonej kolumny.
X = dataset.iloc[:, :-1].values
Po wybraniu segmentu, w powyższym kodzie dołączymy wartości za pomocą funkcji .values. Można to zrozumieć w ten sposób, że pierwsza część tego kodu wybierze wartości, a druga część uwzględni wartości w tej sekcji.
W tym przykładzie dołączony jest koder etykiet oraz jeden koder gorący. Ponieważ jeden gorący koder konwertuje liczby na binarne, a dane zawierają kategorie, trzeba najpierw przekonwertować kategorie na liczby. Dlatego użyjemy kodera etykiet przed koderem termicznym. Teraz skonfiguruj koder etykiet za pomocą poniższego kodu:
le = LabelEncoder()
Po przekonwertowaniu kategorii na liczby użyjemy funkcji .fit_transform sklearn. Ponieważ sklearn jest biblioteką kodującą typu one-hot, przekonwertuje ona te liczby na binarne, tak aby model mógł je zrozumieć. Do zakodowania pierwszych kolumn użyj następującego kodu:
X[:, 0] = le.fit_transform(X[:, 0])
Teraz powinieneś dołączyć jeden koder, aby zakończyć kodowanie.
ohe = OneHotEncoder(categorical_features = [0])
X = ohe.fit_transform(X).toarray()
Categorical_features to funkcja określająca kolumnę, która ma być zakodowana za pomocą kodowania one-hot. Ponieważ kodujemy pierwszą kolumnę, dołączamy [0]. Teraz funkcja fit_transform dokona konwersji wybranych zmiennych na binarne.
Konwersja została zakończona. Należy pamiętać, że w pierwszej kolumnie uwzględniamy 0. Jeśli chcemy uwzględnić więcej kolumn, należy dodać ich numery. Aby dodać więcej niż jedną kolumnę, należy dodać “pętlę for” w następujący sposób:
le = LabelEncoder()#for 10 columns
for i in range(10):
X[:,i] = le.fit_transform(X[:,i])
Wnioski
Podsumowując, kodowanie kategorialne jest techniką, która przekształca dane kategoryczne w binarne. Ponieważ model uczenia maszynowego nie może przetwarzać danych kategorycznych, należy je przekształcić na numeryczne lub binarne, w zależności od algorytmu. Istnieją dwa etapy przekształcania danych kategorycznych lub etykietowych w dane binarne. Kodowanie etykiet to pierwsza technika kodowania danych kategorycznych. Przekształca ona dane do postaci numerycznej. W przypadku danych porządkowych należy stosować kodowanie etykiet. W przypadku danych nieidentycznych należy zastosować technikę kodowania jednokrotnego. Jest to skuteczna metoda przekształcania danych do postaci binarnej.