logo

Eén hot-codering in machine learning

De meeste real-life datasets die we tegenkomen tijdens de ontwikkeling van ons data science-project bevatten kolommen met gemengde gegevenstypen. Deze datasets bestaan ​​uit beide categorisch evenals numerieke kolommen. Verschillende Machine Learning-modellen werken echter niet met categorische gegevens en om deze gegevens in het machine learning-model te passen, moeten ze worden omgezet in numerieke gegevens. Stel dat een gegevensset bijvoorbeeld a heeft Geslacht kolom met categorische elementen zoals Mannetje en Vrouwelijk . Deze labels hebben geen specifieke voorkeursvolgorde en omdat de gegevens stringlabels zijn, hebben machine learning-modellen verkeerd geïnterpreteerd dat er een soort hiërarchie in zit.

Eén benadering om dit probleem op te lossen is labelcodering, waarbij we bijvoorbeeld een numerieke waarde aan deze labels toekennen Mannelijk En Vrouwelijk in kaart gebracht 0 En 1 . Maar dit kan vooroordelen in ons model toevoegen, omdat het een grotere voorkeur gaat geven aan de Vrouwelijk parameter als 1>0, maar idealiter zijn beide labels even belangrijk in de dataset. Om dit probleem op te lossen, zullen we de One Hot Encoding-techniek gebruiken.

Eén hete codering

Eén hot-codering is een techniek die we gebruiken om categorische variabelen weer te geven als numerieke waarden in een machine learning-model.



De voordelen van het gebruik van één hot-codering zijn onder meer:

  1. Het maakt het gebruik van categorische variabelen mogelijk in modellen die numerieke invoer vereisen.
  2. Het kan de modelprestaties verbeteren door het model meer informatie te geven over de categorische variabele.
  3. Het kan helpen het probleem van ordinaliteit te vermijden, dat kan optreden wanneer een categorische variabele een natuurlijke ordening heeft (bijvoorbeeld klein, middelgroot, groot).

De nadelen van het gebruik van één hot-codering zijn onder meer:

  1. Het kan leiden tot een grotere dimensionaliteit, omdat er voor elke categorie in de variabele een aparte kolom wordt gemaakt. Dit kan het model complexer en langzamer maken om te trainen.
  2. Dit kan tot schaarse gegevens leiden, omdat de meeste waarnemingen in de meeste one-hot gecodeerde kolommen de waarde 0 zullen hebben.
  3. Dit kan leiden tot overfitting, vooral als de variabele veel categorieën bevat en de steekproefomvang relatief klein is.
  4. One-hot-encoding is een krachtige techniek om categorische gegevens te behandelen, maar kan leiden tot grotere dimensionaliteit, schaarsheid en overfitting. Het is belangrijk om het voorzichtig te gebruiken en andere methoden te overwegen, zoals ordinale codering of binaire codering.

Eén Hot Encoding-voorbeelden

In Eén hot-codering , zullen de categorische parameters afzonderlijke kolommen voorbereiden voor zowel mannelijke als vrouwelijke labels. Dus overal waar een man aanwezig is, is de waarde 1 in de kolom Man en 0 in de kolom Vrouw, en omgekeerd. Laten we het met een voorbeeld begrijpen: denk eens aan de gegevens waarin fruit, hun overeenkomstige categorische waarden en prijzen worden gegeven.

FruitCategorische waarde van fruitPrijs
appel15
mango210
appel1vijftien
oranje3twintig

De uitvoer na het toepassen van one-hot-codering op de gegevens wordt als volgt gegeven:

appelmangooranjeprijs
1005
01010
100vijftien
001twintig

One-Hot-codering met Python

Dataframe maken

Een dataframe maken om één hot-codering vanuit een CSV-bestand te implementeren.

typoscript datumtype
Python3
# Program for demonstration of one hot encoding # import libraries import numpy as np import pandas as pd # import the data required data = pd.read_csv('employee_data.csv') print(data.head())>

Uitgang:

Eerste vijf rijen Dataframe

Eerste vijf rijen Dataframe

Unieke elementen in categorische kolom

wij kunnen de gebruiken uniek() functie uit de panda's bibliotheek om unieke elementen uit de kolom van het dataframe te halen.

Python3
print(data['Gender'].unique()) print(data['Remarks'].unique())>

Uitgang:

array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>

Aantal elementen in de kolom

We kunnen gebruiken waarde_tellingen() functie van panda's om de tellingen van elk element in het dataframe te verkrijgen.

Python3
data['Gender'].value_counts() data['Remarks'].value_counts()>

Uitgang:

Female 7 Male 5 Name: Gender, dtype: int64  Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>

We hebben twee methoden tot onze beschikking voor het uitvoeren van one-hot-codering op de categorische kolom.

One-Hot-codering van categorische kolom met behulp van de Pandas-bibliotheek

We kunnen gebruiken pd.get_dummies() functie van panda's tot one-hot codeert de categorische kolommen. Deze functie

Python3
one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>

Uitgang:

One-Hot-gecodeerde kolommen van de gegevensset

One-Hot-gecodeerde kolommen van de gegevensset

We kunnen constateren dat dit het geval is 3 Opmerkingen En 2 Geslacht kolommen in de gegevens. Je kunt echter gewoon gebruiken n-1 kolommen om parameters te definiëren als dit het geval is N unieke etiketten. Als we bijvoorbeeld alleen de Geslacht vrouwelijk kolom en laat de Geslacht mannelijk kolom, dan kunnen we ook de volledige informatie overbrengen: als het label 1 is, betekent dit vrouwelijk en als het label 0 is, betekent dit mannelijk. Op deze manier kunnen we de categorische gegevens coderen en ook het aantal parameters verminderen.

Eén Hot Encoding met behulp van de Sci-kit Learn Library

Scikit-learn(sklearn) is een populaire machine-learningbibliotheek in Python die talloze tools biedt voor de voorverwerking van gegevens. Het biedt een OneHotEncoder functie die we gebruiken voor het coderen van categorische en numerieke variabelen in binaire vectoren.

Python3
#one hot encoding using OneHotEncoder of Scikit-Learn import pandas as pd from sklearn.preprocessing import OneHotEncoder #Building a dummy employee dataset for example data = {'Employee id': [10, 20, 15, 25, 30], 'Gender': ['M', 'F', 'F', 'M', 'F'], 'Remarks': ['Good', 'Nice', 'Good', 'Great', 'Nice'], } #Converting into a Pandas dataframe df = pd.DataFrame(data) #Print the dataframe: print(f'Employee data : 
{df}') #Extract categorical columns from the dataframe #Here we extract the columns with object datatype as they are the categorical columns categorical_columns = df.select_dtypes(include=['object']).columns.tolist() #Initialize OneHotEncoder encoder = OneHotEncoder(sparse_output=False) # Apply one-hot encoding to the categorical columns one_hot_encoded = encoder.fit_transform(df[categorical_columns]) #Create a DataFrame with the one-hot encoded columns #We use get_feature_names_out() to get the column names for the encoded data one_hot_df = pd.DataFrame(one_hot_encoded, columns=encoder.get_feature_names_out(categorical_columns)) # Concatenate the one-hot encoded dataframe with the original dataframe df_encoded = pd.concat([df, one_hot_df], axis=1) # Drop the original categorical columns df_encoded = df_encoded.drop(categorical_columns, axis=1) # Display the resulting dataframe print(f'Encoded Employee data : 
{df_encoded}')>

Uitvoer

Employee data :   Employee id Gender Remarks 0 10 M Good 1 20 F Nice 2 15 F Good 3 25 M Great 4 30 F Nice Encoded Employee data :   Employee id Gender_F Gender_M Remarks_Good Remarks_Great Remarks_Nice 0 10 0.0 1.0 1.0 0.0 0.0 1 20 1.0 0.0 0.0 0.0 1.0 2 15 1.0 0.0 1.0 0.0 0.0 3 25 0.0 1.0 0.0 1.0 0.0 4 30 1.0 0.0 0.0 0.0 1.0>