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
Kapcsolódó cikkek
- '
- algoritmusok
- Minden termék
- lehetővé téve
- elemzés
- analitika
- app
- Apple
- Alkalmazás
- TERÜLET
- Művészet
- cikkben
- cikkek
- BEST
- ellenőrzése
- Oszlop
- létrehozása
- dátum
- adatelemzés
- adat-tudomány
- Csepp
- csökkent
- Mérnöki
- esemény
- Bontsa
- Funkció
- Jellemzők
- vezetéknév
- forma
- formátum
- funkció
- nem
- jó
- A Google Play
- Kezelés
- itt
- Ház
- Hogyan
- How To
- HTTPS
- hatalmas
- kép
- importáló
- Növelje
- index
- információ
- IT
- tudás
- Címkék
- TANUL
- tanulás
- Korlátozott
- Lista
- gépi tanulás
- Média
- Mobil
- Mobil alkalmazás
- modell
- Más
- teljesítmény
- szegény
- előrejelzés
- Tippek
- be
- ár
- Ár előrejelzés
- program
- Piton
- Nyers
- nyers adatok
- Olvasás
- Eredmények
- Tudomány
- kiválasztott
- készlet
- beállítás
- Méret
- So
- Hely
- kezdet
- idő
- felső
- Átláthatóság
- us
- érték
- X
- nulla