One-Hot-codering uitvoeren voor variabelen met meerdere categorieën

Bronknooppunt: 841101

In dit artikel zullen we leren hoe we multi-categorische variabelen kunnen verwerken met behulp van de Feature Engineering-techniek One Hot Encoding.

Maar laten we, voordat we verder gaan, een korte discussie hebben over Feature engineering en One Hot Encoding.

Functie-engineering

Feature Engineering is dus het proces van het extraheren van features uit onbewerkte data met behulp van de domeinkennis van het probleem. Deze functies kunnen worden gebruikt om de prestaties van machine learning-algoritmen te verbeteren en als de prestaties toenemen, geeft dit de beste nauwkeurigheid. We kunnen ook zeggen dat feature engineering hetzelfde is als toegepaste machine learning. Feature engineering is de belangrijkste kunst in machine learning die een enorm verschil maakt tussen een goed model en een slecht model. Dit is de derde stap in de levenscyclus van elk data science-project.

Het concept van transparantie voor de machine learning-modellen is ingewikkeld, omdat verschillende modellen vaak verschillende benaderingen vereisen voor de verschillende soorten gegevens. Zoals:-

  • Continue gegevens
  • Categorische kenmerken
  • Ontbrekende waarden
  • Normalisatie
  • Datums en tijd

Maar hier bespreken we alleen categorische kenmerken. De categorische kenmerken zijn die kenmerken waarin datatype een objecttype is. De waarde van een gegevenspunt in een categorisch kenmerk is niet in numerieke vorm, maar in objectvorm.

Er zijn veel technieken om met de categorische variabelen om te gaan, sommige zijn:

  • Labelcodering of ordinale codering
  • Eén hete codering
  • Dummy-codering
  • Effectcodering
  • Binaire codering
  • Basel-codering
  • Hash-codering
  • Doelcodering

Dus hier behandelen we categorische functies door One Hot Encoding, dus allereerst zullen we One Hot Encoding bespreken.

Eén Hot Encoding

We weten dat de categorische variabelen de labelwaarden bevatten in plaats van numerieke waarden. Het aantal mogelijke waarden is vaak beperkt tot een vaste set. Categorische variabelen worden vaak nominaal genoemd. Veel algoritmen voor machine learning kunnen niet rechtstreeks op labelgegevens werken. Ze vereisen dat alle invoervariabelen en uitvoervariabelen numeriek zijn.

Dit betekent dat categorische gegevens moeten worden omgezet in een numerieke vorm. Als de categorische variabele een uitvoervariabele is, wilt u misschien ook voorspellingen van het model weer omzetten in een categorische vorm om ze te presenteren of in een bepaalde toepassing te gebruiken.

bij voorbeeld gegevens over geslacht zijn in de vorm van 'mannetje' en 'vrouwelijk'.

Maar als we one-hot-codering gebruiken, kan codering en het model een natuurlijke ordening tussen categorieën laten aannemen, resulteren in slechte prestaties of onverwachte resultaten.

One-hot codering kan worden toegepast op de weergave van gehele getallen. Hier wordt de integer-gecodeerde variabele verwijderd en wordt een nieuwe binaire variabele toegevoegd voor elke unieke integer-waarde.

We coderen bijvoorbeeld variabele kleuren,

Rode kleur  Blauwe kleur
0 1
1 0
0 1

Nu gaan we onze reis beginnen. In de eerste stap nemen we een dataset van de voorspelling van de huizenprijs.

dataset

Hier gebruiken we de dataset van house_price die wordt gebruikt bij het voorspellen van de huizenprijs op basis van de grootte van het gebied.

Als u de dataset voor de voorspelling van de huizenprijs wilt downloaden, klikt u op hier.

Modules importeren

Nu moeten we belangrijke modules uit python importeren die zullen worden gebruikt voor de one-hot codering

# panda's importeren panda's importeren als pd # numpy importeren numpy importeren als np # OneHotEncoder importeren vanuit sklearn.preprocessing import OneHotEncoder()

Hier gebruiken we panda's die worden gebruikt voor gegevensanalyse, NumPyused voor n-dimensionale arrays, en van sklearn gebruiken we één belangrijke klasse One Hot Encoder voor categorische codering.

Nu moeten we deze gegevens lezen met behulp van Python.

Dataset lezen

Over het algemeen heeft de dataset de vorm van CSV en de dataset die we gebruiken heeft ook de vorm van CSV. Voor het lezen van CSV-bestanden gebruiken we de pandas read_csv() functie. zie hieronder:

# dataset lezen df = pd.read_csv('house_price.csv') df.head()

uitgang:-

Maar we hoeven alleen categorische variabelen te gebruiken voor één hot-encoder en we zullen het alleen proberen uit te leggen met categorische variabelen voor een beter begrip.

voor het partitioneren van categorische variabelen uit gegevens moeten we controleren hoeveel objecten categorische waarden hebben.

Categorische waarden controleren

Voor het controleren van waarden gebruiken we de functie pandas select_dtypes die wordt gebruikt voor het selecteren van de gegevenstypen van variabelen.

# functies controleren cat = df.select_dtypes(include='O').keys() # variabelen weergeven cat

uitgang:-

 

Nu moeten we die numerieke kolommen uit de dataset verwijderen en we zullen deze categorische variabele gebruiken voor ons gebruik. We gebruiken slechts 3-4 categorische kolommen uit de dataset voor het toepassen van one-hot encoding.

Nieuw dataframe maken

Voor het gebruik van categorische variabelen maken we nu een nieuw dataframe van geselecteerde categorische kolommen.

# nieuwe df maken # kolommen instellen die we gebruiken new_df = pd.read_csv('house_price.csv',usecols=['Buurt','Exterieur1e','Exterieur2e']) nieuwe_df.head()

uitgang:-

Nu moeten we uitzoeken hoeveel unieke categorieën er in elke categorische kolom aanwezig zijn.

Unieke waarden vinden

Voor het vinden van unieke waarden gebruiken we pandas unique() functie.

# unieke waarden in elke kolom voor x in new_df.columns: #printing unieke waarden print(x ,':', len(new_df[x].unique()))

uitgang:-

Buurt : 25
Exterieur1e : 15
Exterieur2e : 16

Nu gaan we voor onze techniek om one-hot codering toe te passen op multi-categorische variabelen.

Techniek voor multi-categorische variabelen

De techniek is dat we one-hot codering beperken tot de 10 meest voorkomende labels van de variabele. Dit betekent dat we één binaire variabele zouden maken voor elk van de 10 meest voorkomende labels, dit komt overeen met het groeperen van alle andere labels onder een nieuwe categorie, die in dit geval wordt geschrapt. De 10 nieuwe dummyvariabelen geven dus aan of een van de 10 meest voorkomende labels aanwezig is 1 of niet dan 0 voor een bepaalde waarneming.

Meest voorkomende variabelen

Hier selecteren we de 20 meest voorkomende variabelen.

Stel dat we één categorische variabele nemen Buurt.

# de top 20 categorieën zoeken new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

output:

Wanneer u in deze uitvoerafbeelding ziet, zult u merken dat de namen label wordt 225 keer herhaald in de buurtkolommen en we gaan naar beneden, dit aantal neemt af.

Dus we hebben de top 10 resultaten van de top genomen en we zetten dit top 10 resultaat om in one-hot codering en de linkerlabels veranderen in nul.

uitgang:-

 

Lijst met meest voorkomende categorische variabelen

# maak lijst met top 10 variabelen top_10 = [x voor x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

uitgang:-

['NAMEN',
'CollgCr',
'Oude stad',
'Edward',
'Soms',
'Gilbert',
'NridgHt',
'Zager',
'NWA's',
'SawyerW']

Er zijn de top 10 categorische labels in de kolom Buurt.

Binair maken

Nu moeten we de 10 binaire variabelen van de top_10 labels maken:

# maak binair van labels

voor label in top_10:

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

new_df[['Buurt']+top_10]


uitgang:-

namen CollgCr Oude stad Edwards Ergens Gilbert NridgHt Zager NWA's 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 NeeRidge 0 0 0 0 0 0 0 0 0 0
5 Mitchel 0 0 0 0 0 0 0 0 0 0
6 Ergens 0 0 0 0 1 0 0 0 0 0
7 NWA's 0 0 0 0 0 0 0 0 1 0
8 Oude stad 0 0 1 0 0 0 0 0 0 0
9 BrkZijde 0 0 0 0 0 0 0 0 0 0
10 Zager 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

U kunt zien hoe de top_10-labels nu worden geconverteerd naar binair formaat.

Laten we een voorbeeld nemen, zie in de tabel waar 1 index Veenker die niet behoorde tot ons label top_10 categorieën, dus het zal resulteren in 0 alle kolommen.

Nu zullen we het doen voor alle categorische variabelen die we hierboven hebben geselecteerd.

Alle geselecteerde variabele op OneHotEncoding

# voor alle categorische variabelen die we hebben geselecteerd def top_x(df2,variabele,top_x_labels): voor label in top_x_labels: df2[variabele+'_'+label] = np.where(data[variabele]==label,1,0) # lees de gegevens nogmaals data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st', 'Exterior2nd']) #codeer Nighborhood in de 10 meest voorkomende categorieën top_x(data,'Neighborhood',top_10) # toon data data.head()

Uitgang: -

Nu passen we hier de one-hot codering toe op alle multi-categorische variabelen.

Nu zullen we de voor- en nadelen zien van One Hot Encoding voor meerdere variabelen.

voordelen

  • Eenvoudig te implementeren
  • Vereist niet veel tijd voor variabele verkenning
  • Breidt de functieruimte niet enorm uit.

Nadelen

  • Voegt geen informatie toe die de variabele voorspellender kan maken
  • Bewaar de informatie van de genegeerde variabelen niet.

Eindnotities

Dus de samenvatting hiervan is dat we leren omgaan met multi-categorische variabelen. Als je dit probleem tegenkomt, is dit een zeer moeilijke taak. Dus bedankt voor het lezen van dit artikel.

Maak contact met mij op Linkedin: Profiel

Lees mijn andere artikelen: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Bedankt😎

De media die in dit artikel worden getoond, zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

Je kunt dit artikel ook lezen op onze mobiele app Get it on Google Play

Gerelateerde artikelen

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

Tijdstempel:

Meer van Analytics Vidhya