Hvordan utføre en-hot-koding for multikategoriske variabler

Kilde node: 841101

I denne artikkelen vil vi lære om hvordan vi kan håndtere multikategoriske variabler ved å bruke Feature Engineering-teknikken One Hot Encoding.

Men før vi går videre, la oss ta en kort diskusjon om funksjonsteknikk og One Hot Encoding.

Funksjonsteknikk

Så, Feature Engineering er prosessen med å trekke ut funksjoner fra rådata ved å bruke domenekunnskapen om problemet. Disse funksjonene kan brukes til å forbedre ytelsen til maskinlæringsalgoritmer, og hvis ytelsen øker, vil det gi den beste nøyaktigheten. Vi kan også si at funksjonsteknikk er det samme som anvendt maskinlæring. Feature engineering er den viktigste kunsten innen maskinlæring som skaper en enorm forskjell mellom en god modell og en dårlig modell. Dette er det tredje trinnet i ethvert datavitenskapelig prosjektlivssyklus.

Konseptet med åpenhet for maskinlæringsmodellene er en komplisert ting ettersom forskjellige modeller ofte krever forskjellige tilnærminger for de forskjellige typene data. Som for eksempel:-

  • Kontinuerlige data
  • Kategoriske trekk
  • Mangler verdier
  • normalisering
  • Datoer og tid

Men her vil vi bare diskutere kategoriske funksjoner, de kategoriske funksjonene er de funksjonene der datatype er en objekttype. Verdien av datapunkt i et hvilket som helst kategorisk trekk er ikke i numerisk form, snarere var det i objektform.

Det er mange teknikker for å håndtere de kategoriske variablene, noen er:

  • Etikettkoding eller Ordinal Encoding
  • En varm koding
  • Dummy-koding
  • Effektkoding
  • Binær koding
  • Basel-koding
  • Hash-koding
  • Målkoding

Så her håndterer vi kategoriske funksjoner av One Hot Encoding, og derfor vil vi først og fremst diskutere One Hot Encoding.

En varm koding

Vi vet at de kategoriske variablene inneholder etikettverdiene i stedet for numeriske verdier. Antall mulige verdier er ofte begrenset til et fast sett. Kategoriske variabler kalles ofte nominelle. Mange maskinlæringsalgoritmer kan ikke operere direkte på etikettdata. De krever at alle inngangsvariabler og utdatavariabler er numeriske.

Dette betyr at kategoriske data må konverteres til en numerisk form. Hvis den kategoriske variabelen er en utdatavariabel, vil du kanskje også konvertere prediksjoner fra modellen tilbake til en kategorisk form for å presentere dem eller bruke dem i en applikasjon.

Eksempelvis data om kjønn er i form av "mann" og 'hunn'.

Men hvis vi bruker one-hot-koding, kan koding og la modellen anta en naturlig rekkefølge mellom kategorier resultere i dårlig ytelse eller uventede resultater.

One-hot-koding kan brukes på heltallsrepresentasjonen. Det er her den heltallskodede variabelen fjernes og en ny binær variabel legges til for hver unike heltallsverdi.

For eksempel koder vi fargevariable,

Rød farge  Blå farge
0 1
1 0
0 1

Nå starter vi reisen. I det første trinnet tar vi et datasett med boligprisprediksjon.

datasett

Her vil vi bruke datasettet til huspris som brukes til å forutsi boligprisen i henhold til størrelsen på området.

Hvis du vil laste ned datasettet for prediksjon av boligpriser, klikker du her..

Importere moduler

Nå må vi importere viktige moduler fra python som skal brukes til one-hot-kodingen

# importerer pandaer importerer pandaer som pd # importerer numpy importerer numpy som np # importerer OneHotEncoder fra sklearn.preprocessing import OneHotEncoder()

Her bruker vi pandaer som brukes til dataanalyse, NumPyused for n-dimensjonale arrays, og fra sklearn vil vi bruke én viktig klasse One Hot Encoder for kategorisk koding.

Nå må vi lese disse dataene ved hjelp av Python.

Leser datasett

Vanligvis er datasettet i form av CSV, og datasettet vi bruker er også i form av CSV. For å lese CSV-fil vil vi bruke pandas read_csv() funksjon. se nedenfor:

# lesing datasett df = pd.read_csv('house_price.csv') df.head()

produksjon:-

Men vi må bare bruke kategoriske variabler for en varm enkoder, og vi vil bare prøve å forklare med kategoriske variabler for enkel forståelse.

for å partisjonere kategoriske variabler fra data må vi sjekke hvor mange funksjoner som har kategoriske verdier.

Sjekke kategoriske verdier

For å sjekke verdier bruker vi pandas select_dtypes-funksjonen som brukes til å velge datatypene til variabelen.

# sjekker funksjoner cat = df.select_dtypes(include='O').keys() # display variables cat

produksjon:-

 

Nå må vi slippe de numeriske kolonnene fra datasettet, og vi vil bruke denne kategoriske variabelen til vår bruk. Vi bruker bare 3-4 kategoriske kolonner fra datasettet for å bruke en-hot-koding.

Opprette ny dataramme

Nå, for å bruke kategoriske variabler, vil vi lage en ny dataramme med utvalgte kategoriske kolonner.

# oppretter ny df # innstillingskolonner vi bruker new_df = pd.read_csv('house_price.csv',usecols=['Nabolag','Exterior1st','Exterior2nd']) new_df.head()

produksjon:-

Nå må vi finne ut hvor mange unike kategorier som finnes i hver kategorisk kolonne.

Finne unike verdier

For å finne unike verdier vil vi bruke funksjonen pandas unique().

# unike verdier i hver kolonne for x i new_df.columns: #printing unike verdier print(x ,':', len(new_df[x].unique()))

produksjon:-

Nabolag: 25
Eksteriør 1.: 15
Eksteriør 2: 16

Nå vil vi gå for vår teknikk for å bruke one-hot-koding på multikategoriske variabler.

Teknikk for multikategoriske variabler

Teknikken er at vi vil begrense one-hot-koding til de 10 mest hyppige etikettene til variabelen. Dette betyr at vi vil lage én binær variabel for hver av de 10 mest hyppige etikettene, dette tilsvarer å gruppere alle andre etiketter under en ny kategori, som i dette tilfellet vil bli droppet. Dermed indikerer de 10 nye dummy-variablene om en av de 10 hyppigste etikettene er til stede 1 eller ikke da 0 for en spesiell observasjon.

Mest hyppige variabler

Her skal vi velge de 20 mest hyppige variablene.

Anta at vi tar én kategorisk variabel Nabolaget.

# finne de 20 beste kategoriene new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

produksjon:

Når du ser i dette utdatabildet vil du legge merke til at Navn etiketten gjentas 225 ganger i Neighborhood-kolonnene, og vi går ned dette tallet er synkende.

Så vi tok de 10 beste resultatene fra toppen, og vi konverterer dette topp 10-resultatet til én varm koding og venstre etiketter blir til null.

produksjon:-

 

Liste over mest hyppige kategoriske variabler

# lag liste med topp 10 variabler top_10 = [x for x i new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

produksjon:-

['Navn',
'CollgCr',
'Gamleby',
'Edwards',
'Somerst',
'Gilbert',
'NridgHt',
'Sawyer',
'NWAmes',
'SawyerW']

Det er de 10 beste kategorietikettene i Nabolag-kolonnen.

Gjør binær

Nå må vi lage de 10 binære variablene til top_10-etikettene:

# gjør binære av etiketter

for etikett i top_10:

new_df = np.where(new_df['Nabolag']==etikett,1,0)

new_df[['Nabolag']+topp_10]


produksjon:-

Navn CollgCr Gamleby 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 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 Gamleby 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

Du kan se hvordan top_10-etikettene nå konverteres til binært format.

La oss ta et eksempel, se i tabellen hvor 1 indeks Veenker som ikke tilhørte topp_10 kategorier-etiketten vår, så det vil resultere i 0 alle kolonnene.

Nå skal vi gjøre det for alle de kategoriske variablene som vi har valgt ovenfor.

Alle valgte variabler på OneHotEncoding

# for alle kategoriske variabler valgte vi def top_x(df2,variable,top_x_labels): for label i top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read dataene igjen data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Neighborhood i de 10 mest hyppige kategoriene top_x(data, 'Neighborhood',top_10) # display data data.head()

Produksjon:-

Nå, her bruker vi one-hot-kodingen på alle multikategoriske variabler.

Nå skal vi se fordelene og ulempene med One Hot Encoding for multivariabler.

Fordeler

  • Enkel å implementere
  • Krever ikke mye tid for variabel leting
  • Utvider ikke funksjonsplassen massivt.

Ulemper

  • Legger ikke til informasjon som kan gjøre variabelen mer prediktiv
  • Ikke oppbevar informasjonen til de ignorerte variablene.

Slutt notater

Så sammendraget av dette er at vi lærer om hvordan vi håndterer multikategoriske variabler. Hvis du kommer over dette problemet, er dette en veldig vanskelig oppgave. Så takk for at du leste denne artikkelen.

Ta kontakt med meg på Linkedin: Profil

Les mine andre artikler: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Takk😎

Media vist i denne artikkelen eies ikke av Analytics Vidhya og brukes etter forfatterens skjønn.

Du kan også lese denne artikkelen på vår mobilapp Få den på Google Play

Relaterte artikler

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

Tidstempel:

Mer fra Analytics Vidhya