Ebben a cikkben a kategorikus adatok numerikus adatokká alakításának Pythonic módszereit mutatom be.
Bevezetés
Tisztában vagyunk vele, hogy a gépi tanulásban (ML) a legtöbb modell nem fogad el nem numerikus adattípusokat. Mégis, nyers adataink legtöbbször kategorikus adattípusokat tartalmaznak. Valójában nem csak a fontos változók jöhetnek szóba kategorikus formában, hanem a célváltozók is.
Ezért kötelező ezeket a változókat numerikussá transzformálni, hogy az ML modell lássa és értelmezze a mintát. A kategorikus oszlopok vagy változók numerikussá alakításának folyamatát kódolásnak nevezik.
A cél pedig az, hogy a változók (kódolt) könnyen illeszkedjenek az ML modellbe.
Ebben a cikkben csak a kódolás két fő típusát tárgyalom, és mindegyiket Python kóddal illusztrálom, hogy segítsenek.
One-Hot kódolás
Ebben a technikában az ellenőrzött oszlop minden kategóriáját egy bináris vektor (1 és 0) képviseli, ahol minden vektorelem a megfelelő kategória jelenlétét vagy hiányát jelzi. Egyszeri kódolás esetén, ha az oszlop neve szín, és 3 színkategória létezik: piros, kék és zöld, ezek a színek további oszlopokká válnak, és ahol a sor értéke piros, a piros oszlop az 1 értéket adja vissza, míg a zöld és kék oszlopok a 0 értéket.
Nézzünk egy példát: Írjunk egy DataFrame-et, amely két oszlopot tartalmaz; Szín és cikkszám, az elem numerikus, míg a szín kategorikus.
import pandas as pd data = pd.DataFrame({'colors': ['red', 'blue', 'green', 'red', 'blue'], 'ItemNo': [3, 2, 7, 5, 9]}) print(data)
Nézzük meg a DataFrame kimenetét a megerősítéshez, majd ássuk be a kódolási szempontot.
colors ItemNo 0 red 3 1 blue 2 2 green 7 3 red 5 4 blue 9
Ezután a kódolást a szín oszlopban szeretnénk végrehajtani. Ennek során a Python get_dummies függvényét fogjuk használni.
one_hot = pd.get_dummies(data) print(one_hot)
A get_dummies függvény a kategorikus változók ál- vagy indikátorváltozókká alakítására szolgál. Egy álváltozó értéke 0 vagy 1 lehet
Kinyomtattuk a one_hot változót, lent látható a kimenet:
ItemNo colors_blue colors_green colors_red 0 3 0 0 1 1 2 1 0 0 2 7 0 1 0 3 5 0 0 1 4 9 1 0 0
Láthatjuk, hogy a három színkategória is oszlopokká vált, ezért ahol a sor értéke piros, a colors_red oszlopban 1-et, a alatt pedig 0-t ad vissza. színek_kék és színek_zöld, és fordítva.
Címkekódolás
Ha a hierarchia számít, a címkekódolást használják a kategorikus adatok numerikus adatokká konvertálására. Az egész értékek a kategóriák hierarchiája alapján vannak rendezve. Mindannyian tudjuk, hogy az oktatásban a PhD magasabb rangú, mint az MSc, majd a BSc. Ha ez a kutatási cél része, akkor célszerű a címkekódolást használni.
Csakúgy, mint a fenti módszernél, használjuk a tanulók számának és a megfelelő képesítésének adatkészletét. A képesítést aszerint kell kódolnunk, hogy mennyire fontosak.
A BSc a legalacsonyabb 0, míg az MSc a középérték 1, a PhD pedig a legmagasabb 2 értéket kapja.
import pandas as pd data = pd.DataFrame({'Qualification': ['PhD', 'PhD', 'BSc', 'MSc', 'MSc'], 'Student_Count': [12, 12, 40, 21, 30]}) print(data)
A címkekódoláshoz importálnunk kell a LabelEncoder osztályt a Scikit Learn könyvtárból. Ezután létrehozunk egy új oszlopot (nevezzük el encoded_Ranks), és hozzáadjuk az adatkészlethez.
from sklearn.preprocessing import LabelEncoder label_encoder = LabelEncoder() data['encoded_Ranks'] = label_encoder.fit_transform(data['Qualification']) print(data)
Az újonnan létrehozott oszlopban a vektorértékek (0, 1 és 2) jelennek meg a Minősítés oszlopban. Lásd az alábbi táblázatot:
Qualification Student_Count encoded_Ranks 0 PhD 12 2 1 PhD 12 2 2 BSc 40 0 3 MSc 21 1 4 MSc 30 1
Ezt követően az ML modell betanításához használt adatkészletből kidobhatjuk a Qualification oszlopot.
A Machine Learning más típusú kódolása a bináris és a Count kódolás. A bináris kódolás hasonló a one-hot kódoláshoz, mivel új oszlopokat hoz létre, és hozzáadja az adatkészletet, míg a count kódolás a név szerint működik; ahol az egyes kategóriákhoz értékeket rendelnek a megfigyelések száma szerint (soronként).
Összegzés
Meg tudtuk határozni, megérteni és kísérletezni Python kódokkal, amelyek a leggyakoribb kódolási típusok az ML-végzés során. Felsoroltuk a nem gyakori típusokat is, és kifejtettük mindegyik hátrányát, tanácsos gyakorolni. Összefoglalva, a kódolás egyszerűen a kategorikus adattípusok numerikussá alakításának folyamata, hogy könnyen illeszkedjenek az ML modellbe.
Twitter: @chi_di_ebere
LinkedIn: https://www.linkedin.com/in/chidiebere-christopher/
Kövessen, ha érdekli a Machine Learn, Data Analytics, Power BI, Excel és SQL témakörök.