Cum să efectuați o codificare rapidă pentru variabile cu mai multe categorii

Nodul sursă: 841101

În acest articol, vom învăța despre cum putem gestiona variabilele multicategorice folosind tehnica Feature Engineering One Hot Encoding.

Dar înainte de a continua, să avem o scurtă discuție despre ingineria caracteristicilor și One Hot Encoding.

Inginerie caracteristică

Deci, Feature Engineering este procesul de extragere a caracteristicilor din datele brute folosind cunoștințele de domeniu ale problemei. Aceste caracteristici pot fi folosite pentru a îmbunătăți performanța algoritmilor de învățare automată și, dacă performanța crește, va oferi cea mai bună acuratețe. De asemenea, putem spune că ingineria caracteristicilor este aceeași cu învățarea automată aplicată. Ingineria caracteristicilor este cea mai importantă artă în învățarea automată, care creează o diferență uriașă între un model bun și un model prost. Acesta este al treilea pas în ciclul de viață al oricărui proiect de știință a datelor.

Conceptul de transparență pentru modelele de învățare automată este un lucru complicat, deoarece modelele diferite necesită adesea abordări diferite pentru diferitele tipuri de date. Ca:-

  • Date continue
  • Caracteristici categorice
  • Valori lipsă
  • Normalizare
  • Date și ora

Dar aici vom discuta doar despre caracteristicile categoriale, caracteristicile categoriale sunt acele caracteristici în care tipul de date este un tip de obiect. Valoarea punctului de date în orice caracteristică categorială nu este în formă numerică, mai degrabă a fost sub formă de obiect.

Există multe tehnici de manipulare a variabilelor categoriale, unele sunt:

  • Codificarea etichetei sau codificarea ordinală
  • O codificare fierbinte
  • Codificare falsă
  • Codificarea efectului
  • Codificare binară
  • Codificarea Basel
  • Codificare hash
  • Codarea țintă

Așadar, aici gestionăm caracteristicile categorice ale One Hot Encoding, astfel încât în ​​primul rând vom discuta despre One Hot Encoding.

O codare la cald

Știm că variabilele categoriale conțin mai degrabă valorile etichetei decât valorile numerice. Numărul de valori posibile este adesea limitat la un set fix. Variabilele categoriale sunt adesea numite nominale. Mulți algoritmi de învățare automată nu pot funcționa direct pe datele etichetelor. Acestea necesită ca toate variabilele de intrare și variabilele de ieșire să fie numerice.

Aceasta înseamnă că datele categorice trebuie convertite într-o formă numerică. Dacă variabila categorială este o variabilă de ieșire, este posibil să doriți, de asemenea, să convertiți predicțiile modelului înapoi într-o formă categorială pentru a le prezenta sau a le utiliza într-o anumită aplicație.

de exemplu datele despre gen sunt sub formă de 'masculin' și 'Femeie'.

Dar dacă folosim codificare one-hot, atunci codificarea și permiterea modelului să asume o ordonare naturală între categorii poate duce la performanțe slabe sau la rezultate neașteptate.

Codificarea one-hot poate fi aplicată reprezentării întregului. Aici este înlăturată variabila codificată cu numere întregi și este adăugată o nouă variabilă binară pentru fiecare valoare întreagă unică.

De exemplu, codificăm variabile de culori,

Culoare rosie  Culoarea albastra
0 1
1 0
0 1

Acum ne vom începe călătoria. În primul pas, luăm un set de date de predicție a prețului casei.

Setul de date

Aici vom folosi setul de date house_price care este folosit pentru a estima prețul casei în funcție de dimensiunea zonei.

Dacă doriți să descărcați setul de date de estimare a prețului casei, faceți clic aici.

Importul modulelor

Acum, trebuie să importam module importante din python care le vor folosi pentru codificarea one-hot

# import panda import panda ca pd # import numpy import numpy ca np # import OneHotEncoder din sklearn.preprocessing import OneHotEncoder()

Aici, folosim panda care sunt utilizați pentru analiza datelor, NumPyused pentru matrice n-dimensionale, iar din sklearn, vom folosi un cod important de clasă One Hot Encoder pentru codificarea categorică.

Acum trebuie să citim aceste date folosind Python.

Citirea setului de date

În general, setul de date este sub formă de CSV, iar setul de date pe care îl folosim este, de asemenea, sub formă de CSV. Pentru citirea fișierului CSV vom folosi funcția pandas read_csv(). vezi mai jos:

# citind setul de date df = pd.read_csv('house_price.csv') df.head()

ieșire:-

Dar trebuie să folosim doar variabile categorice pentru un codificator fierbinte și vom încerca doar să explicăm cu variabile categoriale pentru o înțelegere ușoară.

pentru partiţionarea variabilelor categoriale din date trebuie să verificăm câte caracteristici au valori categoriale.

Verificarea valorilor categorice

Pentru verificarea valorilor folosim funcția pandas select_dtypes care este utilizată pentru selectarea tipurilor de date ale variabilei.

# verificarea caracteristicilor cat = df.select_dtypes(include='O').keys() # afișare variabele cat

ieșire:-

 

Acum trebuie să aruncăm acele coloane numerice din setul de date și vom folosi această variabilă categorială pentru utilizarea noastră. Folosim doar 3-4 coloane categorice din setul de date pentru aplicarea codării one-hot.

Crearea unui nou cadru de date

Acum, pentru utilizarea variabilelor categoriale, vom crea un nou cadru de date al coloanelor categoriale selectate.

# crearea unui nou df # setarea coloanelor pe care le folosim new_df = pd.read_csv('house_price.csv',usecols=['Cartier','Exterior1st','Exterior2nd']) new_df.head()

ieșire:-

Acum trebuie să aflăm câte categorii unice sunt prezente în fiecare coloană categorială.

Găsirea valorilor unice

Pentru a găsi valori unice vom folosi funcția Pandas unique().

# valori unice în fiecare coloană pentru x în new_df.columns: #printing valori unice print(x ,':', len(new_df[x].unique()))

ieșire:-

Cartier: 25
Exterior1: 15
Exteriorul 2: 16

Acum, vom folosi tehnica noastră pentru a aplica codificarea one-hot pe variabile multicategorice.

Tehnica pentru variabile multicategorice

Tehnica este că vom limita codificarea one-hot la cele 10 cele mai frecvente etichete ale variabilei. Aceasta înseamnă că am face o variabilă binară numai pentru fiecare dintre cele 10 cele mai frecvente etichete, aceasta este echivalentă cu gruparea tuturor celorlalte etichete într-o nouă categorie, care în acest caz va fi abandonată. Astfel, cele 10 noi variabile dummy indică dacă una dintre cele mai frecvente 10 etichete este prezentă este 1 sau nu atunci 0 pentru o anumită observație.

Cele mai frecvente variabile

Aici vom selecta cele 20 de variabile cele mai frecvente.

Să presupunem că luăm o variabilă categorială Cartier.

# găsirea primelor 20 de categorii new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

ieșire:

Când vedeți în această imagine de ieșire, veți observa că Nume eticheta se repetă de 225 de ori în coloanele Cartier și coborâm acest număr este în scădere.

Așa că am luat primele 10 rezultate din partea de sus și convertim acest rezultat de top 10 într-o codificare one-hot, iar etichetele din stânga se transformă în zero.

ieșire:-

 

Lista cu cele mai frecvente variabile categoriale

# faceți o listă cu primele 10 variabile top_10 = [x pentru x în new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

ieșire:-

['Nume',
„CollgCr”,
'Oras vechi',
„Edwards”,
„Somerst”,
„Gilbert”,
„NridgHt”,
„Sawyer”,
„NWAmes”,
„SawyerW”]

Există primele 10 etichete de categorii în coloana Vecinătate.

Faceți binar

Acum, trebuie să facem cele 10 variabile binare ale top_10 etichete:

# faceți binar de etichete

pentru eticheta din top_10:

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

new_df[['Cartier']+top_10]


ieșire:-

Nume CollgCr Oras vechi Edwards Somerst Gilbert NridgHt Tăietor cu ferăstrău NWA-uri 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 NWA-uri 0 0 0 0 0 0 0 0 1 0
8 Oras vechi 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Tăietor cu ferăstrău 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Puteți vedea cum primele_10 etichete sunt acum convertite în format binar.

Să luăm un exemplu, vezi în tabel unde 1 index Veenker care nu aparținea etichetei noastre de top_10 categorii, așa că va avea ca rezultat 0 toate coloanele.

Acum o vom face pentru toate variabilele categoriale pe care le-am selectat mai sus.

Toate variabilele selectate pe OneHotEncoding

# pentru toate variabilele categorice am selectat def top_x(df2,variable,top_x_labels): pentru eticheta în top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read datele din nou data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encoda Neighborhood în cele mai frecvente 10 categorii top_x(data, 'Neighborhood',top_10) # afișați date data.head()

Ieșire: -

Acum, aici aplicăm codificarea one-hot pe toate variabilele multicategorice.

Acum vom vedea avantajele și dezavantajele One Hot Encoding pentru mai multe variabile.

Avantaje

  • Simplu de implementat
  • Nu necesită mult timp pentru explorarea variabilă
  • Nu extinde masiv spațiul de caracteristici.

Dezavantaje

  • Nu adaugă nicio informație care ar putea face variabila mai predictivă
  • Nu păstrați informațiile variabilelor ignorate.

Note de sfârșit

Deci, rezumatul acestui lucru este că învățăm despre cum să gestionăm variabilele multicategorice. Dacă întâmpinați această problemă, aceasta este o sarcină foarte dificilă. Așa că vă mulțumesc că ați citit acest articol.

Conectează-te cu mine pe Linkedin: Profil

Citiți celelalte articole ale mele: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Mulțumesc 😎

Mediile prezentate în acest articol nu sunt deținute de Analytics Vidhya și sunt utilizate la discreția autorului.

Puteți citi și acest articol pe aplicația noastră mobilă Ia-l pe Google Play

Articole pe aceeaşi temă

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

Timestamp-ul:

Mai mult de la Analize Vidhya