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
Relaterede artikler
- '
- algoritmer
- Alle
- tillade
- analyse
- analytics
- app
- Apple
- Anvendelse
- OMRÅDE
- Kunst
- artikel
- artikler
- BEDSTE
- kontrol
- Kolonne
- Oprettelse af
- data
- dataanalyse
- datalogi
- Drop
- droppet
- Engineering
- begivenhed
- Udvid
- Feature
- Funktionalitet
- Fornavn
- formular
- format
- funktion
- Køn
- godt
- Google Play
- Håndtering
- link.
- hus
- Hvordan
- How To
- HTTPS
- kæmpe
- billede
- importere
- Forøg
- indeks
- oplysninger
- IT
- viden
- Etiketter
- LÆR
- læring
- Limited
- Liste
- machine learning
- Medier
- Mobil
- Mobil app
- model
- Andet
- ydeevne
- fattige
- forudsigelse
- Forudsigelser
- præsentere
- pris
- Prediction
- projekt
- Python
- Raw
- rådata
- Læsning
- Resultater
- Videnskab
- valgt
- sæt
- indstilling
- Størrelse
- So
- Space
- starte
- tid
- top
- Gennemsigtighed
- us
- værdi
- X
- nul