Hogyan végezzünk One-Hot kódolást több kategóriás változókhoz

Forrás csomópont: 841101

Ebben a cikkben megtudjuk, hogyan kezelhetjük a több kategóriás változókat a Feature Engineering technika One Hot Encoding használatával.

Mielőtt azonban továbbmennénk, vessünk egy rövid megbeszélést a Feature Engineering és a One Hot Encoding témakörben.

Feature Engineering

Tehát a Feature Engineering a funkciók nyers adatokból való kinyerésének folyamata a probléma tartományi ismeretei alapján. Ezek a funkciók a gépi tanulási algoritmusok teljesítményének javítására használhatók, és ha a teljesítmény növekszik, akkor ez a legjobb pontosságot adja. Azt is mondhatjuk, hogy a funkciótervezés megegyezik az alkalmazott gépi tanulással. A funkciótervezés a gépi tanulás legfontosabb művészete, amely óriási különbséget hoz létre a jó és a rossz modell között. Ez a harmadik lépés bármely adattudományi projekt életciklusában.

A gépi tanulási modellek átláthatóságának fogalma bonyolult dolog, mivel a különböző modellek gyakran eltérő megközelítést igényelnek a különböző típusú adatokhoz. Mint például:-

  • Folyamatos adatok
  • Kategorikus jellemzők
  • Hiányzó értékek
  • Normalizálás
  • Dátumok és idő

De itt csak a Kategorikus jellemzőket tárgyaljuk, A kategorikus jellemzők azok a jellemzők, amelyekben az adattípus objektumtípus. Az adatpont értéke egyetlen kategorikus jellemzőben sem numerikus, hanem objektum formában volt.

Számos technika létezik a kategorikus változók kezelésére, ezek közül néhány:

  • Címkekódolás vagy sorszámkódolás
  • Egy forró kódolás
  • Dummy kódolás
  • Hatáskódolás
  • Bináris kódolás
  • Bázeli kódolás
  • Hash kódolás
  • Célkódolás

Tehát itt a One Hot Encoding kategorikus jellemzőit kezeljük, így mindenekelőtt a One Hot Encodingról lesz szó.

One Hot Encoding

Tudjuk, hogy a kategorikus változók nem számértékeket, hanem címkeértékeket tartalmaznak. A lehetséges értékek száma gyakran egy rögzített halmazra korlátozódik. A kategorikus változókat gyakran nominálisnak nevezik. Sok gépi tanulási algoritmus nem tud közvetlenül a címkeadatokon működni. Megkövetelik, hogy minden bemeneti és kimeneti változó numerikus legyen.

Ez azt jelenti, hogy a kategorikus adatokat numerikus formává kell alakítani. Ha a kategorikus változó egy kimeneti változó, akkor érdemes lehet a modell előrejelzéseit is kategorikus formává konvertálni, hogy megjelenítse őket, vagy valamilyen alkalmazásban felhasználja őket.

például a nemre vonatkozó adatok formában 'férfi' és a 'női'.

De ha egy-hot kódolást használunk, akkor a kódolás és a modell természetes sorrendjének engedélyezése a kategóriák között gyenge teljesítményt vagy váratlan eredményeket eredményezhet.

Az egész számok ábrázolására egy gyors kódolás alkalmazható. Ez az a hely, ahol az egész kódolt változót eltávolítják, és minden egyedi egész értékhez új bináris változót adnak hozzá.

Például színváltozót kódolunk,

Piros szín  Kék szín
0 1
1 0
0 1

Most kezdjük utunkat. Első lépésben felvesszük a lakásárak előrejelzésének adatkészletét.

adatbázisba

Itt a house_price adatkészletet fogjuk használni, amelyet a terület nagysága alapján a ház árának előrejelzésére használunk.

Ha le szeretné tölteni a házár előrejelzési adatkészletet, kattintson a gombra itt.

Modulok importálása

Most fontos modulokat kell importálnunk a pythonból, amelyek a one-hot kódoláshoz használhatók

# importing panda import panda as pd # importing numpy import numpy as np # importing OneHotEncoder from sklearn.preprocessing import OneHotEncoder()

Itt pandákat használunk, amelyeket az adatok elemzésére használunk, a NumPyused-t az n-dimenziós tömbökhöz, és a sklearn-ből egy fontos One Hot Encoder osztályt fogunk használni a kategorikus kódoláshoz.

Most ezeket az adatokat Python segítségével kell kiolvasnunk.

Adatkészlet olvasása

Általában az adatkészlet CSV formátumú, és az általunk használt adatkészlet szintén CSV formátumú. A CSV fájl olvasásához a pandas read_csv() függvényt fogjuk használni. lásd alább:

# adatkészlet olvasása df = pd.read_csv('house_price.csv') df.head()

Kimenet:-

De csak egy forró kódolóhoz kell kategorikus változókat használnunk, és csak kategorikus változókkal próbáljuk megmagyarázni a könnyebb érthetőség érdekében.

a kategorikus változók adatokból történő particionálásához ellenőriznünk kell, hogy hány jellemzőnek van kategorikus értéke.

Kategorikus értékek ellenőrzése

Az értékek ellenőrzésére a pandas select_dtypes függvényt használjuk, amely a változó adattípusainak kiválasztására szolgál.

# jellemzők ellenőrzése cat = df.select_dtypes(include='O').keys() # változók megjelenítése cat

Kimenet:-

 

Most el kell hagynunk ezeket a numerikus oszlopokat az adatkészletből, és ezt a kategorikus változót fogjuk használni. Csak 3-4 kategorikus oszlopot használunk az adathalmazból az one-hot kódolás alkalmazásához.

Új DataFrame létrehozása

Most a kategorikus változók használatához létrehozunk egy új adatkeretet a kiválasztott kategorikus oszlopokból.

# új df létrehozása # beállítás oszlopokat használunk new_df = pd.read_csv('house_price.csv',usecols=['Szomszédság','Exterior1st', 'Exterior2nd']) new_df.head()

Kimenet:-

Most azt kell megtudnunk, hány egyedi kategória van minden kategóriaoszlopban.

Egyedi értékek megtalálása

Az egyedi értékek megtalálásához a pandas egyedi() függvényt fogjuk használni.

# egyedi értékek a new_df.columns x oszlopaiban: #egyedi értékek nyomtatása print(x ,':', len(new_df[x].unique()))

Kimenet:-

Környék: 25
Külső 1.: 15
Külső 2.: 16

Most áttérünk arra a technikánkra, hogy egy-hot kódolást alkalmazzunk több kategóriás változókon.

Több kategóriás változók technikája

A technika az, hogy a one-hot kódolást a változó 10 leggyakoribb címkéjére korlátozzuk. Ez azt jelenti, hogy csak a 10 leggyakrabban előforduló címke mindegyikéhez készítenénk egy bináris változót, ami egyenértékű az összes többi címke egy új kategória alá csoportosításával, amely ebben az esetben kimarad. Így a 10 új álváltozó azt jelzi, hogy a 10 leggyakoribb címke közül az egyik jelen van 1 vagy nem akkor 0 egy adott megfigyeléshez.

Leggyakoribb változók

Itt kiválasztjuk a 20 leggyakoribb változót.

Tegyük fel, hogy veszünk egy kategorikus változót Szomszédság.

# a legjobb 20 kategória megtalálása new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

kimenet:

Ha látja ezt a kimeneti képet, észre fogja venni, hogy a NEVEK címke 225-ször ismétlődik a Neighborhood oszlopokban, és lefelé haladva ez a szám egyre csökken.

Tehát a top 10 találatot felülről vettük, és ezt a top 10 eredményt egy-hot kódolássá konvertáltuk, és a bal oldali címkék nullává változnak.

Kimenet:-

 

A leggyakoribb kategorikus változók listája

# listát készít a 10 legfontosabb változóval top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

Kimenet:-

['NAMEs',
"CollgCr",
'Óváros',
"Edwards",
"Somerst",
'Gilbert',
"NridgHt",
'Fűrészelő',
'NWAmes',
"SawyerW"]

A Neighborhood oszlopban található a 10 legjobb kategóriacímke.

Készíts binárist

Most meg kell alkotnunk a top_10 címkék 10 bináris változóját:

# bináris címkék létrehozása

a top_10 címkéjéhez:

new_df = np.where(new_df['Neighborhood']==címke,1,0)

new_df[['Neighborhood']+top_10]


Kimenet:-

NEVEK CollgCr Óváros Edwards Somerst Gilbert NridgHt Fűrészelő NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 Mitchel 0 0 0 0 0 0 0 0 0 0
6 Somerst 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Óváros 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Fűrészelő 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Megnézheti, hogyan konvertálják a top_10 címkéket bináris formátumba.

Vegyünk egy példát, lásd a táblázatban, hogy hol 1 index Veenker amely nem tartozott a top_10 kategória címkénkhöz, így azt eredményezi 0 az összes oszlopot.

Most megtesszük az összes fent kiválasztott kategorikus változóra.

A OneHotEncoding összes kiválasztott változója

# minden kategorikus változóhoz a def top_x(df2,variable,top_x_labels) értéket választottuk: a top_x_labels címkéjéhez: df2[változó+'_'+címke] = np.where(data[változó]==címke,1,0) # read az adatok újra data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Szomszédság','Külső1','Külső2']) #encode Neighborhood a 10 leggyakoribb kategóriába top_x(data, 'Neighborhood',top_10) # adatok megjelenítése data.head()

Kimenet:-

Most itt alkalmazzuk a one-hot kódolást minden több kategóriás változóra.

Most látni fogjuk a többváltozós One Hot Encoding előnyeit és hátrányait.

Előnyök

  • Egyszerűen megvalósítható
  • Nem igényel sok időt a változók feltárásához
  • Nem tágítja ki jelentősen a funkcióteret.

Hátrányok

  • Nem ad hozzá semmilyen információt, amely a változót előrejelzőbbé teheti
  • Ne őrizze meg a figyelmen kívül hagyott változók információit.

End Notes

Tehát ennek az összegzése az, hogy megtanuljuk, hogyan kell kezelni a több kategóriás változókat. Ha ezzel a problémával találkozik, akkor ez nagyon nehéz feladat. Szóval köszönöm, hogy elolvasta ezt a cikket.

Lépj kapcsolatba velem a Linkedin-en: profil

Olvassa el a többi cikkemet: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Köszönöm 😎

Az ebben a cikkben bemutatott médiák nem az Analytics Vidhya tulajdonát képezik, és a Szerző belátása szerint használják azokat.

Ezt a cikket a mobilalkalmazásunkban is elolvashatja Vedd meg a Google Playen

Kapcsolódó cikkek

Forrás: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Időbélyeg:

Még több Analytics Vidhya