Hur man utför en-het-kodning för flera kategoriska variabler

Källnod: 841101

I den här artikeln kommer vi att lära oss om hur vi kan hantera multikategoriska variabler med hjälp av Feature Engineering-tekniken One Hot Encoding.

Men innan vi går vidare, låt oss ta en kort diskussion om funktionsteknik och One Hot Encoding.

Funktionsteknik

Så, Feature Engineering är processen att extrahera funktioner från rådata med hjälp av domänkännedomen om problemet. Dessa funktioner kan användas för att förbättra prestandan för maskininlärningsalgoritmer och om prestandan ökar kommer det att ge den bästa noggrannheten. Vi kan också säga att funktionsteknik är detsamma som tillämpad maskininlärning. Feature engineering är den viktigaste konsten inom maskininlärning som skapar en enorm skillnad mellan en bra modell och en dålig modell. Detta är det tredje steget i ett datavetenskapligt projekts livscykel.

Konceptet med transparens för maskininlärningsmodellerna är en komplicerad sak eftersom olika modeller ofta kräver olika tillvägagångssätt för de olika typerna av data. Till exempel:-

  • Kontinuerlig data
  • Kategoriska funktioner
  • Värden saknas
  • Normalisering
  • Datum och tid

Men här kommer vi bara att diskutera kategoriska egenskaper, de kategoriska egenskaperna är de funktioner där datatyp är en objekttyp. Värdet av datapunkt i någon kategorisk funktion är inte i numerisk form, snarare i objektform.

Det finns många tekniker för att hantera de kategoriska variablerna, några är:

  • Etikettkodning eller Ordinal Encoding
  • En het kodning
  • Dummy-kodning
  • Effektkodning
  • Binär kodning
  • Basel-kodning
  • Hash-kodning
  • Målkodning

Så här hanterar vi kategoriska funktioner av One Hot Encoding, så först och främst kommer vi att diskutera One Hot Encoding.

En het kodning

Vi vet att de kategoriska variablerna innehåller etikettvärdena snarare än numeriska värden. Antalet möjliga värden är ofta begränsat till en fast uppsättning. Kategoriska variabler kallas ofta för nominella. Många maskininlärningsalgoritmer kan inte fungera direkt på etikettdata. De kräver att alla indatavariabler och utdatavariabler är numeriska.

Detta innebär att kategoridata måste konverteras till en numerisk form. Om den kategoriska variabeln är en utdatavariabel, kanske du också vill konvertera förutsägelser av modellen tillbaka till en kategorisk form för att presentera dem eller använda dem i någon applikation.

till exempel uppgifter om kön är i form av 'manlig' och 'kvinna'.

Men om vi använder one-hot-kodning kan kodning och att låta modellen anta en naturlig ordning mellan kategorier resultera i dålig prestanda eller oväntade resultat.

One-hot-kodning kan tillämpas på heltalsrepresentationen. Det är här den heltalskodade variabeln tas bort och en ny binär variabel läggs till för varje unikt heltalsvärde.

Till exempel kodar vi färgvariabler,

Röd färg  Blå färg
0 1
1 0
0 1

Nu ska vi börja vår resa. I det första steget tar vi en datauppsättning med förutsägelser om huspriser.

dataset

Här kommer vi att använda datasetet för huspris som används för att förutsäga huspriset enligt storleken på området.

Om du vill ladda ner datauppsättningen för förutsägelse av huspriser klickar du här..

Importera moduler

Nu måste vi importera viktiga moduler från python som kommer att användas för one-hot-kodningen

# importera pandor importera pandor som pd # importera numpy import numpy som np # importera OneHotEncoder från sklearn.preprocessing import OneHotEncoder()

Här använder vi pandor som används för dataanalys, NumPyused för n-dimensionella arrayer, och från sklearn kommer vi att använda en viktig klass One Hot Encoder för kategorisk kodning.

Nu måste vi läsa dessa data med Python.

Läser datauppsättning

Vanligtvis är datamängden i form av CSV, och den datauppsättning vi använder är också i form av CSV. För att läsa CSV-fil kommer vi att använda pandas read_csv() funktion. se nedan:

# läser dataset df = pd.read_csv('house_price.csv') df.head()

produktion:-

Men vi måste bara använda kategoriska variabler för en het kodare och vi kommer bara att försöka förklara med kategoriska variabler för att underlätta förståelsen.

för att partitionera kategoriska variabler från data måste vi kontrollera hur många funktioner som har kategoriska värden.

Kontrollera kategoriska värden

För att kontrollera värden använder vi funktionen pandas select_dtypes som används för att välja datatyper för variabel.

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

produktion:-

 

Nu måste vi släppa de numeriska kolumnerna från datamängden och vi kommer att använda denna kategoriska variabel för vår användning. Vi använder bara 3-4 kategoriska kolumner från datamängden för att tillämpa en-hot-kodning.

Skapar ny dataram

Nu, för att använda kategoriska variabler, kommer vi att skapa en ny dataram av valda kategoriska kolumner.

# skapar ny df # inställningskolumner vi använder new_df = pd.read_csv('house_price.csv',usecols=['Grannskap','Exterior1st','Exterior2nd']) new_df.head()

produktion:-

Nu måste vi ta reda på hur många unika kategorier som finns i varje kategorisk kolumn.

Hitta unika värden

För att hitta unika värden kommer vi att använda pandas unique()-funktionen.

# unika värden i varje kolumn för x i new_df.columns: #printing unika värden print(x ,':', len(new_df[x].unique()))

produktion:-

Område: 25
Exteriör 1:a: 15
Exteriör 2:a: 16

Nu kommer vi att gå till vår teknik för att tillämpa one-hot-kodning på flera kategoriska variabler.

Teknik för flera kategoriska variabler

Tekniken är att vi kommer att begränsa one-hot-kodning till de 10 vanligaste etiketterna för variabeln. Detta innebär att vi bara skulle göra en binär variabel för var och en av de 10 vanligaste etiketterna, detta motsvarar att gruppera alla andra etiketter under en ny kategori, som i detta fall kommer att tas bort. Således indikerar de 10 nya dummyvariablerna om en av de 10 vanligaste etiketterna är närvarande 1 eller inte då 0 för en viss observation.

Mest frekventa variabler

Här kommer vi att välja de 20 vanligaste variablerna.

Anta att vi tar en kategorisk variabel Stadsdel.

# hitta de 20 bästa kategorierna new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

produktion:

När du ser i denna utdatabild kommer du att märka att NAMN etiketten upprepas 225 gånger i Neighborhood-kolumnerna och vi går ner detta antal minskar.

Så vi tog de 10 bästa resultaten från toppen och vi konverterar detta topp 10-resultat till en hett kodning och de vänstra etiketterna blir noll.

produktion:-

 

Lista över de vanligaste kategoriska variablerna

# gör lista med topp 10 variabler top_10 = [x för x i new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

produktion:-

['Namn',
'CollgCr',
'Gammal stad',
'Edwards',
'Somerst',
"Gilbert",
'NridgHt',
"Sawyer",
'NWAmes',
'SawyerW']

Det finns de 10 bästa kategorierna i kolumnen Grannskap.

Gör binär

Nu måste vi göra de 10 binära variablerna av top_10-etiketterna:

# gör binär av etiketter

för etikett i top_10:

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

new_df[['Neighborhood']+top_10]


produktion:-

NAMN CollgCr Gammal stad 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 Gammal stad 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 hur top_10-etiketterna nu konverteras till binärt format.

Låt ta ett exempel, se i tabellen var 1 index Veenker som inte tillhörde vår top_10-kategorietikett så det kommer att resultera i 0 alla kolumner.

Nu kommer vi att göra det för alla kategoriska variabler som vi har valt ovan.

Alla valda variabler på OneHotEncoding

# för alla kategoriska variabler valde vi def top_x(df2,variable,top_x_labels): för etikett i top_x_labels: df2[variabel+'_'+etikett] = np.where(data[variabel]==etikett,1,0) # läs data igen data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #koda Neighborhood i de 10 vanligaste kategorierna top_x(data, 'Neighborhood',top_10) # visa data data.head()

Produktion:-

Nu, här tillämpar vi one-hot-kodningen på alla multikategoriska variabler.

Nu kommer vi att se fördelarna och nackdelarna med One Hot Encoding för multivariabler.

Fördelar

  • Enkelt att implementera
  • Kräver inte mycket tid för variabel utforskning
  • Utvidgar inte funktionsutrymmet massivt.

Nackdelar

  • Lägger inte till någon information som kan göra variabeln mer prediktiv
  • Behåll inte informationen om de ignorerade variablerna.

Slutnoteringar

Så, sammanfattningen av detta är att vi lär oss om hur man hanterar multikategoriska variabler. Om du stöter på det här problemet är detta en mycket svår uppgift. Så tack för att du läser den här artikeln.

Kontakta mig på Linkedin: Profil

Läs mina andra artiklar: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Tack 😎

Media som visas i denna artikel ägs inte av Analytics Vidhya och används efter författarens gottfinnande.

Du kan också läsa den här artikeln på vår mobilapp Få det på Google Play

Relaterade artiklar

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

Tidsstämpel:

Mer från Analys Vidhya