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.