Kako izvesti enkraten kodiranje za več kategoričnih spremenljivk

Izvorno vozlišče: 841101

V tem članku bomo spoznali, kako lahko obdelujemo več kategorične spremenljivke z uporabo tehnike inženiringa funkcij One Hot Encoding.

Toda preden nadaljujemo, se na kratko pogovorimo o inženirstvu funkcij in One Hot Encoding.

Inženiring funkcij

Inženiring funkcij je torej postopek pridobivanja funkcij iz neobdelanih podatkov z uporabo domenskega poznavanja problema. Te funkcije je mogoče uporabiti za izboljšanje učinkovitosti algoritmov strojnega učenja in če se zmogljivost poveča, bo zagotovila najboljšo natančnost. Lahko tudi rečemo, da je inženiring funkcij enak uporabnemu strojnemu učenju. Inženiring funkcij je najpomembnejša umetnost strojnega učenja, ki ustvarja ogromno razliko med dobrim in slabim modelom. To je tretji korak v življenjskem ciklu katerega koli projekta podatkovne znanosti.

Koncept preglednosti za modele strojnega učenja je zapletena stvar, saj različni modeli pogosto zahtevajo različne pristope za različne vrste podatkov. Kot naprimer:-

  • Neprekinjeni podatki
  • Kategorične lastnosti
  • Manjkajoče vrednosti
  • Normalizacija
  • Datumi in čas

Toda tukaj bomo razpravljali le o kategoričnih značilnostih. Kategorične značilnosti so tiste funkcije, v katerih je podatkovni tip tip predmeta. Vrednost podatkovne točke v kateri koli kategorični značilnosti ni v numerični obliki, ampak je bila v obliki objekta.

Obstaja veliko tehnik za ravnanje s kategoričnimi spremenljivkami, nekatere so:

  • Kodiranje oznak ali vrstno kodiranje
  • Eno vroče kodiranje
  • Navidezno kodiranje
  • Kodiranje učinkov
  • Binarno kodiranje
  • Baselsko kodiranje
  • Hash kodiranje
  • Ciljno kodiranje

Torej, tukaj obravnavamo kategorične značilnosti z One Hot Encoding, zato bomo najprej razpravljali o One Hot Encoding.

En vroči kodiranje

Vemo, da kategorične spremenljivke vsebujejo vrednosti oznak in ne številskih vrednosti. Število možnih vrednosti je pogosto omejeno na določen niz. Kategorične spremenljivke se pogosto imenujejo nominalne. Številni algoritmi strojnega učenja ne morejo neposredno delovati na podatkih nalepk. Zahtevajo, da so vse vhodne in izhodne spremenljivke numerične.

To pomeni, da je treba kategorične podatke pretvoriti v numerično obliko. Če je kategorična spremenljivka izhodna spremenljivka, boste morda želeli napovedi modela pretvoriti nazaj v kategorično obliko, da jih predstavite ali uporabite v neki aplikaciji.

na primer podatki o spolu so v obliki 'moški' in 'ženska'.

Če pa uporabimo kodiranje z enim sproščanjem, lahko kodiranje in omogočanje, da model prevzame naravno razvrščanje med kategorijami, povzroči slabo delovanje ali nepričakovane rezultate.

Enkratno kodiranje je mogoče uporabiti za predstavitev celega števila. Tu se odstrani celoštevilsko kodirana spremenljivka in doda nova binarna spremenljivka za vsako edinstveno celoštevilsko vrednost.

Na primer, kodiramo spremenljivko barv,

Rdeča_barva  Modra_barva
0 1
1 0
0 1

Zdaj bomo začeli naše potovanje. V prvem koraku vzamemo nabor podatkov za napovedovanje cen stanovanj.

Podatkovni niz

Tukaj bomo uporabili nabor podatkov house_price, ki se uporablja za napovedovanje cene hiše glede na velikost območja.

Če želite prenesti nabor podatkov o napovedi cen stanovanj, kliknite tukaj.

Uvažanje modulov

Zdaj moramo uvoziti pomembne module iz pythona, ki jih bomo uporabili za kodiranje z enim pritiskom

# uvoz pand uvoz pand kot pd # uvoz numpy import numpy kot np # uvoz OneHotEncoder iz sklearn.preprocessing import OneHotEncoder()

Tukaj uporabljamo pande, ki se uporabljajo za analizo podatkov, NumPyused za n-dimenzionalne nize, iz sklearn pa bomo uporabili en pomemben razred One Hot Encoder za kategorično kodiranje.

Zdaj moramo te podatke prebrati s Pythonom.

Branje nabora podatkov

Na splošno je nabor podatkov v obliki CSV in tudi nabor podatkov, ki ga uporabljamo, je v obliki CSV. Za branje datoteke CSV bomo uporabili funkcijo pandas read_csv(). glej spodaj:

# branje nabora podatkov df = pd.read_csv('house_price.csv') df.head()

izhod:-

Vendar moramo uporabiti samo kategorične spremenljivke za en vroči kodirnik in poskušali bomo razložiti le s kategoričnimi spremenljivkami za lažje razumevanje.

za razdelitev kategoričnih spremenljivk iz podatkov moramo preveriti, koliko funkcij ima kategorične vrednosti.

Preverjanje kategoričnih vrednosti

Za preverjanje vrednosti uporabljamo funkcijo pandas select_dtypes, ki se uporablja za izbiro tipov podatkov spremenljivke.

# preverjanje funkcij cat = df.select_dtypes(include='O').keys() # prikaz spremenljivk cat

izhod:-

 

Zdaj moramo te številčne stolpce izpustiti iz nabora podatkov in za našo uporabo bomo uporabili to kategorično spremenljivko. Za uporabo enkratnega kodiranja uporabljamo samo 3-4 kategorične stolpce iz nabora podatkov.

Ustvarjanje novega DataFrame

Zdaj bomo za uporabo kategoričnih spremenljivk ustvarili nov podatkovni okvir izbranih kategoričnih stolpcev.

# ustvarjanje novega df # nastavitev stolpcev, ki jih uporabljamo new_df = pd.read_csv('house_price.csv',usecols=['Soseska','Zunanjost 1.', 'Zunanjost 2']) new_df.head()

izhod:-

Zdaj moramo ugotoviti, koliko edinstvenih kategorij je prisotnih v vsakem kategoričnem stolpcu.

Iskanje edinstvenih vrednosti

Za iskanje edinstvenih vrednosti bomo uporabili funkcijo pandas unique().

# edinstvene vrednosti v vsakem stolpcu za x v new_df.columns: #printanje edinstvenih vrednosti print(x ,':', len(new_df[x].unique()))

izhod:-

Soseska: 25
Zunanjost 1. : 15
Zunanjost 2.: 16

Zdaj bomo uporabili našo tehniko za uporabo enkratnega kodiranja na več kategoričnih spremenljivkah.

Tehnika za več kategorične spremenljivke

Tehnika je v tem, da bomo omejili kodiranje z eno vročino na 10 najpogostejših oznak spremenljivke. To pomeni, da bi naredili eno binarno spremenljivko samo za vsako od 10 najpogostejših oznak, kar je enakovredno združevanju vseh drugih oznak v novo kategorijo, ki bo v tem primeru opuščena. Tako 10 novih navideznih spremenljivk kaže, ali je prisotna ena od 10 najpogostejših oznak 1 ali ne takrat 0 za določeno opazovanje.

Najpogostejše spremenljivke

Tukaj bomo izbrali 20 najpogostejših spremenljivk.

Recimo, da vzamemo eno kategorično spremenljivko Soseska.

# iskanje najboljših 20 kategorij new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

izhod:

Ko vidite na tej izhodni sliki, boste opazili, da je Imena oznaka se ponovi 225-krat v stolpcih Neighborhood in gremo navzdol, to število se zmanjšuje.

Zato smo vzeli 10 najboljših rezultatov z vrha in teh 10 najboljših rezultatov pretvorili v kodiranje z enim pritiskom, leve oznake pa se spremenile v nič.

izhod:-

 

Seznam najpogostejših kategoričnih spremenljivk

# naredite seznam z 10 najboljšimi spremenljivkami top_10 = [x za x v new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

izhod:-

['Imena',
'CollgCr',
'Staro mestno jedro',
'Edwards',
'Somerst',
'Gilbert',
'NridgHt',
'Sawyer',
'NWAmes',
'SawyerW']

V stolpcu Soseska je 10 najboljših kategoričnih oznak.

Ustvari dvojiško datoteko

Sedaj moramo narediti 10 binarnih spremenljivk top_10 oznak:

# naredi dvojiško datoteko oznak

za oznako v top_10:

nov_df = np.where(new_df['Neighborhood']==label,1,0)

new_df[['Neighborhood']+top_10]


izhod:-

Imena CollgCr Staro mestno jedro Edwards Somerst Gilbert NridgHt Sawyer 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 Mitchell 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 Staro mestno jedro 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Sawyer 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Vidite lahko, kako se top_10 oznak zdaj pretvori v dvojiško obliko.

Vzemimo primer, v tabeli si oglejte kje 1 Indeks Veenker ki ni spadal v našo oznako top_10 kategorij, zato bo povzročil 0 vse stolpce.

Zdaj bomo to storili za vse kategorične spremenljivke, ki smo jih izbrali zgoraj.

Vse izbrane spremenljivke na OneHotEncoding

# za vse kategorične spremenljivke smo izbrali def top_x(df2,variable,top_x_labels): za oznako v top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # branje znova podatki data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Neighborhood v 10 najpogostejših kategorij top_x(data, 'Neighborhood',top_10) # prikaz podatkov data.head()

Izhod: -

Tu zdaj uporabimo enkratno kodiranje za vse več kategorične spremenljivke.

Zdaj bomo videli prednosti in slabosti One Hot Encoding za več spremenljivk.

prednosti

  • Enostaven za izvedbo
  • Ne zahteva veliko časa za spremenljivo raziskovanje
  • Ne širi močno prostora funkcij.

Slabosti

  • Ne doda nobenih informacij, zaradi katerih bi lahko bila spremenljivka bolj napovedna
  • Ne hranite informacij o prezrtih spremenljivkah.

Končne opombe

Torej, povzetek tega je, da se naučimo, kako ravnati z več kategoričnimi spremenljivkami. Če naletite na to težavo, je to zelo težka naloga. Hvala, ker ste prebrali ta članek.

Poveži se z mano na Linkedinu: profil

Preberite moje druge članke: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Hvala😎

Mediji, prikazani v tem članku, niso v lasti Analytics Vidhya in se uporabljajo po presoji avtorja.

Ta članek lahko preberete tudi v naši mobilni aplikaciji Prenesite ga v Google Play

Povezani članki

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

Časovni žig:

Več od Analitika Vidhya