Die meisten realen Datensätze, auf die wir während der Entwicklung unseres Data-Science-Projekts stoßen, enthalten Spalten mit gemischten Datentypen. Diese Datensätze bestehen aus beidem kategorisch sowie numerische Spalten. Verschiedene Modelle des maschinellen Lernens funktionieren jedoch nicht mit kategorialen Daten. Um diese Daten in das Modell des maschinellen Lernens einzupassen, müssen sie in numerische Daten umgewandelt werden. Angenommen, ein Datensatz hat eine Geschlecht Spalte mit kategorialen Elementen wie Männlich und Weiblich . Für diese Bezeichnungen gibt es keine bestimmte Präferenzreihenfolge, und da es sich bei den Daten um Zeichenfolgenbezeichnungen handelt, haben maschinelle Lernmodelle fälschlicherweise angenommen, dass es sich bei ihnen um eine Art Hierarchie handelt.
Ein Ansatz zur Lösung dieses Problems kann die Etikettenkodierung sein, bei der wir diesen Etiketten beispielsweise einen numerischen Wert zuweisen Männlich Und Weiblich zugeordnet 0 Und 1 . Dies kann jedoch zu einer Verzerrung unseres Modells führen, da dadurch mehr bevorzugt wird Weiblich Parameter als 1>0, aber im Idealfall sind beide Bezeichnungen im Datensatz gleich wichtig. Um dieses Problem zu lösen, verwenden wir die One Hot Encoding-Technik.
Eine Hot-Kodierung
Eine Hot-Codierung ist eine Technik, mit der wir kategoriale Variablen als numerische Werte in einem Modell für maschinelles Lernen darstellen.
Zu den Vorteilen der Verwendung einer Hot-Codierung gehören:
- Es ermöglicht die Verwendung kategorialer Variablen in Modellen, die eine numerische Eingabe erfordern.
- Es kann die Modellleistung verbessern, indem dem Modell mehr Informationen über die kategoriale Variable bereitgestellt werden.
- Dies kann helfen, das Problem der Ordinalität zu vermeiden, das auftreten kann, wenn eine kategoriale Variable eine natürliche Reihenfolge hat (z. B. klein, mittel, groß).
Zu den Nachteilen der Verwendung einer Hot-Codierung gehören:
- Dies kann zu einer erhöhten Dimensionalität führen, da für jede Kategorie in der Variablen eine separate Spalte erstellt wird. Dies kann dazu führen, dass das Modell komplexer und langsamer zu trainieren ist.
- Dies kann zu spärlichen Daten führen, da die meisten Beobachtungen in den meisten One-Hot-codierten Spalten einen Wert von 0 haben.
- Dies kann zu einer Überanpassung führen, insbesondere wenn die Variable viele Kategorien enthält und die Stichprobengröße relativ klein ist.
- One-Hot-Encoding ist eine leistungsstarke Technik zur Behandlung kategorialer Daten, kann jedoch zu erhöhter Dimensionalität, Sparsity und Überanpassung führen. Es ist wichtig, es mit Vorsicht zu verwenden und andere Methoden wie Ordinalkodierung oder Binärkodierung in Betracht zu ziehen.
Ein Hot-Encoding-Beispiel
In Eine Hot-Kodierung , erstellen die kategorialen Parameter separate Spalten für die Bezeichnungen „Männlich“ und „Weiblich“. Wo also ein Mann vorhanden ist, ist der Wert in der Spalte „Männlich“ 1 und in der Spalte „Weiblich“ 0 und umgekehrt. Lassen Sie uns das anhand eines Beispiels verstehen: Betrachten Sie die Daten, in denen Früchte, ihre entsprechenden kategorialen Werte und Preise angegeben sind.
| Obst | Kategorischer Wert von Früchten | Preis |
|---|---|---|
| Apfel | 1 | 5 |
| Mango | 2 | 10 |
| Apfel | 1 | fünfzehn |
| orange | 3 | zwanzig |
Die Ausgabe nach der Anwendung der One-Hot-Codierung auf die Daten sieht wie folgt aus:
| Apfel | Mango | orange | Preis |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | 10 |
| 1 | 0 | 0 | fünfzehn |
| 0 | 0 | 1 | zwanzig |
One-Hot-Codierung mit Python
Datenrahmen erstellen
Erstellen eines Datenrahmens zur Implementierung einer Hot-Codierung aus einer CSV-Datei.
Angular CLI deinstallierenPython3
# 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())> Ausgabe:

Die ersten fünf Zeilen von Dataframe
Eindeutige Elemente in der kategorialen Spalte
wir können das nutzen einzigartig() Funktion aus dem Pandas Bibliothek, um eindeutige Elemente aus der Spalte des Datenrahmens abzurufen.
Python3 print(data['Gender'].unique()) print(data['Remarks'].unique())>
Ausgabe:
array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>
Anzahl der Elemente in der Spalte
Wir können benutzen value_counts() Funktion von Pandas, um die Anzahl jedes Elements im Datenrahmen zu ermitteln.
Python3 data['Gender'].value_counts() data['Remarks'].value_counts()>
Ausgabe:
Female 7 Male 5 Name: Gender, dtype: int64 Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>
Für die One-Hot-Codierung der kategorialen Spalte stehen uns zwei Methoden zur Verfügung.
One-Hot-Codierung einer kategorialen Spalte mithilfe der Pandas-Bibliothek
Wir können benutzen pd.get_dummies() Funktion von Pandas zur One-Hot-Codierung der kategorialen Spalten. Diese Funktion
Python3 one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>
Ausgabe:

One-Hot-codierte Spalten des Datensatzes
Wir können beobachten, dass wir es getan haben 3 Bemerkungen Und 2 Geschlecht Spalten in den Daten. Sie können es jedoch einfach verwenden n-1 Spalten zum Definieren von Parametern, falls vorhanden N einzigartige Etiketten. Wenn wir zum Beispiel nur die behalten Geschlecht Weiblich Spalte und löschen Sie die Geschlecht männlich Spalte, dann können wir auch die gesamten Informationen übermitteln, denn wenn die Bezeichnung 1 ist, bedeutet sie weiblich, und wenn die Bezeichnung 0 ist, bedeutet sie männlich. Auf diese Weise können wir die kategorialen Daten kodieren und auch die Anzahl der Parameter reduzieren.
Eine Hot-Kodierung mit der Sci-kit Learn Library
Scikit-learn (sklearn) ist eine beliebte Bibliothek für maschinelles Lernen in Python, die zahlreiche Tools für die Datenvorverarbeitung bereitstellt. Es bietet eine OneHotEncoder Funktion, die wir zum Kodieren kategorialer und numerischer Variablen in binäre Vektoren verwenden.
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}')> Ausgabe
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>