Sådan udføres One-Hot-kodning for multikategoriske variabler

Kildeknude: 841101

I denne artikel vil vi lære om, hvordan vi kan håndtere multikategoriske variabler ved hjælp af Feature Engineering-teknikken One Hot Encoding.

Men før vi går videre, lad os tage en kort diskussion om Feature engineering og One Hot Encoding.

Feature Engineering

Så Feature Engineering er processen med at udtrække funktioner fra rådata ved hjælp af domænekendskabet til problemet. Disse funktioner kan bruges til at forbedre ydeevnen af ​​maskinlæringsalgoritmer, og hvis ydeevnen øges, vil det give den bedste nøjagtighed. Vi kan også sige, at feature engineering er det samme som anvendt maskinlæring. Feature engineering er den vigtigste kunst inden for maskinlæring, som skaber en enorm forskel mellem en god model og en dårlig model. Dette er det tredje trin i ethvert datavidenskabsprojekts livscyklus.

Konceptet med gennemsigtighed for maskinlæringsmodellerne er en kompliceret ting, da forskellige modeller ofte kræver forskellige tilgange til de forskellige slags data. Såsom:-

  • Løbende data
  • Kategoriske træk
  • Manglende værdier
  • normalisering
  • Datoer og tid

Men her vil vi kun diskutere kategoriske træk, de kategoriske træk er de funktioner, hvor datatype er en objekttype. Værdien af ​​datapunkt i enhver kategorisk funktion er ikke i numerisk form, snarere var den i objektform.

Der er mange teknikker til at håndtere de kategoriske variabler, nogle er:

  • Etiketkodning eller Ordinal Encoding
  • En varm kodning
  • Dummy-kodning
  • Effektkodning
  • Binær kodning
  • Basel-kodning
  • Hash-kodning
  • Målkodning

Så her håndterer vi kategoriske funktioner fra One Hot Encoding, og derfor vil vi først og fremmest diskutere One Hot Encoding.

En varm kodning

Vi ved, at de kategoriske variable indeholder etiketværdierne frem for numeriske værdier. Antallet af mulige værdier er ofte begrænset til et fast sæt. Kategoriske variable kaldes ofte for nominelle. Mange maskinlæringsalgoritmer kan ikke fungere direkte på etiketdata. De kræver, at alle inputvariabler og outputvariable er numeriske.

Det betyder, at kategoriske data skal konverteres til en numerisk form. Hvis den kategoriske variabel er en outputvariabel, vil du måske også konvertere forudsigelser fra modellen tilbage til en kategorisk form for at præsentere dem eller bruge dem i en eller anden applikation.

for eksempel data om køn er i form af 'han' , 'kvinde'.

Men hvis vi bruger one-hot-kodning, kan kodning og tillade, at modellen antager en naturlig rækkefølge mellem kategorier, resultere i dårlig ydeevne eller uventede resultater.

One-hot-kodning kan anvendes på heltalsrepræsentationen. Det er her den heltalskodede variabel fjernes, og en ny binær variabel tilføjes for hver unik heltalsværdi.

For eksempel koder vi variable farver,

Rød farve  Blå_farve
0 1
1 0
0 1

Nu starter vi vores rejse. I det første trin tager vi et datasæt med forudsigelse af boligpriser.

datasæt

Her vil vi bruge datasættet af huspris, som bruges til at forudsige husprisen i henhold til størrelsen af ​​området.

Hvis du vil downloade datasættet til forudsigelse af huspriser, skal du klikke link..

Import af moduler

Nu er vi nødt til at importere vigtige moduler fra python, der skal bruges til one-hot-kodningen

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

Her bruger vi pandaer som bruges til dataanalyse, NumPyused til n-dimensionelle arrays, og fra sklearn vil vi bruge en vigtig klasse One Hot Encoder til kategorisk kodning.

Nu skal vi læse disse data ved hjælp af Python.

Læser datasæt

Generelt er datasættet i form af CSV, og det datasæt, vi bruger, er også i form af CSV. Til læsning af CSV-fil vil vi bruge pandas read_csv() funktion. se nedenunder:

# læsedatasæt df = pd.read_csv('house_price.csv') df.head()

produktion:-

Men vi skal kun bruge kategoriske variabler til én hot encoder, og vi vil kun forsøge at forklare med kategoriske variabler for nem forståelse.

for at opdele kategoriske variabler fra data skal vi kontrollere, hvor mange funktioner der har kategoriske værdier.

Kontrol af kategoriske værdier

Til kontrol af værdier bruger vi pandas select_dtypes-funktionen, som bruges til at vælge datatyper af variabel.

# checking features cat = df.select_dtypes(include='O').keys() # display variables cat

produktion:-

 

Nu er vi nødt til at droppe de numeriske kolonner fra datasættet, og vi vil bruge denne kategoriske variabel til vores brug. Vi bruger kun 3-4 kategoriske kolonner fra datasættet til at anvende one-hot encoding.

Oprettelse af ny dataramme

For at bruge kategoriske variabler vil vi nu oprette en ny dataramme af udvalgte kategoriske kolonner.

# oprettelse af ny df # indstilling af kolonner vi bruger new_df = pd.read_csv('house_price.csv',usecols=['Kvarter','Exterior1st','Exterior2nd']) new_df.head()

produktion:-

Nu skal vi finde ud af, hvor mange unikke kategorier der er til stede i hver kategorisk kolonne.

At finde unikke værdier

Til at finde unikke værdier bruger vi pandas unique()-funktionen.

# unikke værdier i hver kolonne for x i new_df.columns: #printing unikke værdier print(x ,':', len(new_df[x].unique()))

produktion:-

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

Nu vil vi gå efter vores teknik til at anvende one-hot-kodning på multikategoriske variabler.

Teknik til multikategoriske variable

Teknikken er, at vi vil begrænse one-hot-kodning til de 10 hyppigste etiketter af variablen. Det betyder, at vi kun vil lave én binær variabel for hver af de 10 mest hyppige etiketter, dette svarer til at gruppere alle andre etiketter under en ny kategori, som i dette tilfælde vil blive slettet. Således indikerer de 10 nye dummy-variable, om en af ​​de 10 hyppigste etiketter er til stede 1 eller ej da 0 for en bestemt observation.

Hyppigste variabler

Her vil vi udvælge de 20 hyppigste variable.

Antag, at vi tager én kategorisk variabel Neighborhood.

# at finde de 20 bedste kategorier new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

produktion:

Når du ser i dette outputbillede, vil du bemærke, at Navne label gentages 225 gange i Neighborhood-kolonnerne, og vi går ned, dette tal er faldende.

Så vi tog top 10 resultater fra toppen, og vi konverterer dette top 10 resultat til one-hot kodning, og de venstre etiketter bliver til nul.

produktion:-

 

Liste over mest hyppige kategoriske variabler

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

produktion:-

['Navne',
'CollgCr',
'Gammel by',
'Edwards',
'Somerst',
'Gilbert',
'NridgHt',
'Sawyer',
'NWAmes',
'SawyerW']

Der er de 10 bedste kategoriske etiketter i kolonnen Naboskab.

Gør binær

Nu skal vi lave de 10 binære variable af top_10 etiketterne:

# gør binære af etiketter

for etiket i top_10:

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

new_df[['Nabolag']+top_10]


produktion:-

Navne CollgCr Gammel by 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 Gammel by 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-etiketterne nu konverteres til binært format.

Lad os tage et eksempel, se i tabellen hvor 1 indeks Veenker som ikke tilhørte vores top_10 kategorier etiket, så det vil resultere i 0 alle kolonnerne.

Nu vil vi gøre det for alle de kategoriske variabler, som vi har valgt ovenfor.

Alle udvalgte variabler på OneHotEncoding

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

Produktion:-

Nu, her anvender vi one-hot-kodningen på alle multikategoriske variabler.

Nu vil vi se fordele og ulemper ved One Hot Encoding for multivariable.

Fordele

  • Lige til at implementere
  • Kræver ikke meget tid til variabel udforskning
  • Udvider ikke funktionen plads massivt.

Ulemper

  • Tilføjer ingen information, der kan gøre variablen mere prædiktiv
  • Gem ikke oplysningerne om de ignorerede variabler.

Slut noter

Så opsummeringen af ​​dette er, at vi lærer om, hvordan man håndterer multikategoriske variabler. Hvis du støder på dette problem, er dette en meget vanskelig opgave. Så tak fordi du læste denne artikel.

Kontakt mig på Linkedin: Profil

Læs mine andre artikler: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Tak😎

Medierne vist i denne artikel ejes ikke af Analytics Vidhya og bruges efter forfatterens skøn.

Du kan også læse denne artikel på vores mobil-APP Få det på Google Play

Relaterede artikler

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

Tidsstempel:

Mere fra Analyse Vidhya