One-Hot-Encoder
Bei nominalen Werten ist die Verarbeitung etwas komplexer.
Betrachten wir ein Merkmal mit ordinalen Daten, wie zum Beispiel Nutzerbewertungen. Die Werte reichen von 'Terrible' bis 'Great'. Es ist sinnvoll, diese Bewertungen als Zahlen von 0 bis 4 zu kodieren, da das ML-Modell die zugrunde liegende Reihenfolge erkennt.
Betrachten wir nun ein Merkmal mit der Bezeichnung 'city'
mit fünf verschiedenen Städten. Wenn diese als Zahlen von 0 bis 4 kodiert werden, würde das ML-Modell fälschlicherweise eine logische Reihenfolge annehmen, die tatsächlich nicht existiert. Daher ist ein geeigneterer Ansatz die Verwendung von One-Hot-Encoding, das keine falsche Reihenfolge impliziert.
Zur Kodierung von nominalen Daten wird der OneHotEncoder
-Transformer verwendet. Für jeden eindeutigen Wert wird eine Spalte erstellt. Für jede Zeile wird dann in der Spalte des jeweiligen Wertes eine 1 gesetzt und in allen anderen Spalten eine 0.
Was ursprünglich 'NewYork' war, hat nun 1 in der Spalte 'City_NewYork'
und 0 in den anderen City_
-Spalten.
Verwenden wir OneHotEncoder
auf unserem penguins-Datensatz! Es gibt zwei nominale Merkmale, 'island'
und 'sex'
(ohne 'species'
, da wir im nächsten Kapitel lernen, wie man mit Target Encoding umgeht).
123456import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
Um den OneHotEncoder
zu verwenden, muss lediglich ein Objekt initialisiert und die gewünschten Spalten wie bei jedem anderen Transformer an .fit_transform()
übergeben werden.
1234567891011import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 3.13
One-Hot-Encoder
Swipe um das Menü anzuzeigen
Bei nominalen Werten ist die Verarbeitung etwas komplexer.
Betrachten wir ein Merkmal mit ordinalen Daten, wie zum Beispiel Nutzerbewertungen. Die Werte reichen von 'Terrible' bis 'Great'. Es ist sinnvoll, diese Bewertungen als Zahlen von 0 bis 4 zu kodieren, da das ML-Modell die zugrunde liegende Reihenfolge erkennt.
Betrachten wir nun ein Merkmal mit der Bezeichnung 'city'
mit fünf verschiedenen Städten. Wenn diese als Zahlen von 0 bis 4 kodiert werden, würde das ML-Modell fälschlicherweise eine logische Reihenfolge annehmen, die tatsächlich nicht existiert. Daher ist ein geeigneterer Ansatz die Verwendung von One-Hot-Encoding, das keine falsche Reihenfolge impliziert.
Zur Kodierung von nominalen Daten wird der OneHotEncoder
-Transformer verwendet. Für jeden eindeutigen Wert wird eine Spalte erstellt. Für jede Zeile wird dann in der Spalte des jeweiligen Wertes eine 1 gesetzt und in allen anderen Spalten eine 0.
Was ursprünglich 'NewYork' war, hat nun 1 in der Spalte 'City_NewYork'
und 0 in den anderen City_
-Spalten.
Verwenden wir OneHotEncoder
auf unserem penguins-Datensatz! Es gibt zwei nominale Merkmale, 'island'
und 'sex'
(ohne 'species'
, da wir im nächsten Kapitel lernen, wie man mit Target Encoding umgeht).
123456import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
Um den OneHotEncoder
zu verwenden, muss lediglich ein Objekt initialisiert und die gewünschten Spalten wie bei jedem anderen Transformer an .fit_transform()
übergeben werden.
1234567891011import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
Danke für Ihr Feedback!