Durchführen einer One-Hot-Codierung für mehrere kategoriale Variablen

Quellknoten: 841101

In diesem Artikel erfahren wir, wie wir mit der Feature-Engineering-Technik One Hot Encoding mit mehreren kategorialen Variablen umgehen können.

Aber bevor wir fortfahren, lassen Sie uns eine kurze Diskussion über Feature Engineering und One Hot Encoding führen.

Feature-Entwicklung

Beim Feature Engineering handelt es sich also um das Extrahieren von Features aus Rohdaten unter Verwendung des Domänenwissens des Problems. Diese Funktionen können verwendet werden, um die Leistung von Algorithmen für maschinelles Lernen zu verbessern. Wenn die Leistung steigt, wird die beste Genauigkeit erzielt. Wir können auch sagen, dass Feature Engineering dasselbe ist wie angewandtes maschinelles Lernen. Feature Engineering ist die wichtigste Kunst des maschinellen Lernens, die einen großen Unterschied zwischen einem guten und einem schlechten Modell ausmacht. Dies ist der dritte Schritt im Lebenszyklus eines jeden Data-Science-Projekts.

Das Konzept der Transparenz für die Modelle des maschinellen Lernens ist eine komplizierte Sache, da unterschiedliche Modelle oft unterschiedliche Ansätze für die verschiedenen Arten von Daten erfordern. Wie zum Beispiel:-

  • Kontinuierliche Daten
  • Kategoriale Merkmale
  • Fehlende Werte
  • Normalisierung
  • Daten und Zeit

Aber hier werden wir nur kategoriale Features besprechen. Die kategorialen Features sind jene Features, bei denen der Datentyp ein Objekttyp ist. Der Wert eines Datenpunkts in einem kategorialen Merkmal liegt nicht in numerischer Form vor, sondern in Objektform.

Es gibt viele Techniken zum Umgang mit kategorialen Variablen, einige davon sind:

  • Etikettenkodierung oder Ordinalkodierung
  • Eine heiße Kodierung
  • Dummy-Kodierung
  • Effektkodierung
  • Binäre Kodierung
  • Basler Kodierung
  • Hash-Kodierung
  • Zielkodierung

Hier behandeln wir also kategoriale Funktionen durch One Hot Encoding, daher werden wir zunächst One Hot Encoding besprechen.

Eine Hot-Codierung

Wir wissen, dass die kategorialen Variablen die Beschriftungswerte und keine numerischen Werte enthalten. Die Anzahl der möglichen Werte ist oft auf eine feste Menge beschränkt. Kategoriale Variablen werden oft als nominal bezeichnet. Viele Algorithmen für maschinelles Lernen können Etikettendaten nicht direkt verarbeiten. Sie erfordern, dass alle Eingabe- und Ausgabevariablen numerisch sind.

Das bedeutet, dass kategoriale Daten in eine numerische Form umgewandelt werden müssen. Wenn die kategoriale Variable eine Ausgabevariable ist, möchten Sie möglicherweise auch Vorhersagen des Modells wieder in eine kategoriale Form umwandeln, um sie darzustellen oder in einer Anwendung zu verwenden.

z.B. Daten zum Geschlecht liegen in Form von vor 'männlich' und 'weiblich'.

Wenn wir jedoch One-Hot-Codierung verwenden, kann die Codierung und die Annahme einer natürlichen Reihenfolge zwischen den Kategorien für das Modell zu schlechter Leistung oder unerwarteten Ergebnissen führen.

One-Hot-Codierung kann auf die Ganzzahldarstellung angewendet werden. Hier wird die ganzzahlig kodierte Variable entfernt und für jeden eindeutigen ganzzahligen Wert eine neue binäre Variable hinzugefügt.

Zum Beispiel kodieren wir Farbvariable,

Rote Farbe  Blaue Farbe
0 1
1 0
0 1

Jetzt beginnen wir unsere Reise. Im ersten Schritt erstellen wir einen Datensatz zur Immobilienpreisvorhersage.

Datensatz

Hier verwenden wir den Datensatz house_price, der zur Vorhersage des Hauspreises entsprechend der Flächengröße verwendet wird.

Wenn Sie den Datensatz zur Immobilienpreisvorhersage herunterladen möchten, klicken Sie auf hier.

Module importieren

Jetzt müssen wir wichtige Module aus Python importieren, die für die One-Hot-Codierung verwendet werden

# Pandas importieren, Pandas als PD importieren # Numpy importieren, Numpy als NP importieren # OneHotEncoder aus sklearn.preprocessing importieren, OneHotEncoder() importieren

Hier verwenden wir Pandas, die für die Datenanalyse verwendet werden, NumPy für n-dimensionale Arrays und von sklearn verwenden wir einen wichtigen Klasse-One-Hot-Encoder für die kategoriale Codierung.

Jetzt müssen wir diese Daten mit Python lesen.

Datensatz lesen

Im Allgemeinen liegt der Datensatz im CSV-Format vor, und der von uns verwendete Datensatz liegt ebenfalls im CSV-Format vor. Zum Lesen der CSV-Datei verwenden wir die Funktion pandas read_csv(). siehe unten:

# Datensatz lesen df = pd.read_csv('house_price.csv') df.head()

Ausgabe:-

Wir dürfen jedoch nur kategoriale Variablen für einen Hot-Encoder verwenden und werden zum leichteren Verständnis nur versuchen, die Erklärung mit kategorialen Variablen zu erklären.

Um kategoriale Variablen aus Daten zu partitionieren, müssen wir prüfen, wie viele Features kategoriale Werte haben.

Kategoriale Werte prüfen

Zur Überprüfung von Werten verwenden wir die Pandas-Funktion select_dtypes, die zur Auswahl der Datentypen von Variablen verwendet wird.

# Funktionen prüfen cat = df.select_dtypes(include='O').keys() # Variablen anzeigen cat

Ausgabe:-

 

Jetzt müssen wir diese numerischen Spalten aus dem Datensatz entfernen und verwenden diese kategoriale Variable für unsere Zwecke. Wir verwenden nur 3–4 kategoriale Spalten aus dem Datensatz für die Anwendung der One-Hot-Codierung.

Neuen DataFrame erstellen

Für die Verwendung kategorialer Variablen erstellen wir nun einen neuen Datenrahmen ausgewählter kategorialer Spalten.

# Erstellen eines neuen df # Festlegen der von uns verwendeten Spalten new_df = pd.read_csv('house_price.csv',usecols=['Nachbarschaft','„Exterieur1st“, „Exterior2nd“.']) new_df.head()

Ausgabe:-

Jetzt müssen wir herausfinden, wie viele eindeutige Kategorien in jeder kategorialen Spalte vorhanden sind.

Einzigartige Werte finden

Um eindeutige Werte zu finden, verwenden wir die Funktion pandas unique().

# Eindeutige Werte in jeder Spalte für x in new_df.columns: #Eindeutige Werte drucken print(x ,':', len(new_df[x].unique()))

Ausgabe:-

Nachbarschaft: 25
Außen1.: 15
Außen2.: 16

Nun wenden wir uns unserer Technik zur Anwendung der One-Hot-Codierung auf Variablen mit mehreren Kategorien zu.

Technik für multikategoriale Variablen

Die Technik besteht darin, dass wir die One-Hot-Codierung auf die 10 häufigsten Labels der Variablen beschränken. Das bedeutet, dass wir nur für jedes der 10 häufigsten Labels eine Binärvariable erstellen würden. Dies entspricht der Gruppierung aller anderen Labels in einer neuen Kategorie, die in diesem Fall gelöscht wird. Somit geben die 10 neuen Dummy-Variablen an, ob eines der 10 häufigsten Labels vorhanden ist 1 oder dann nicht 0 für eine bestimmte Beobachtung.

Die häufigsten Variablen

Hier wählen wir die 20 häufigsten Variablen aus.

Angenommen, wir nehmen eine kategoriale Variable Nachbarschaft.

# Finden der Top-20-Kategorien new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

Ausgabe:

Wenn Sie in diesem Ausgabebild sehen, werden Sie feststellen, dass Namen Die Beschriftung wiederholt sich 225 Mal in den Nachbarschaftsspalten und wenn wir nach unten gehen, nimmt diese Zahl ab.

Also haben wir die Top-10-Ergebnisse von oben genommen und dieses Top-10-Ergebnis in One-Hot-Codierung umgewandelt und die linken Beschriftungen werden zu Null.

Ausgabe:-

 

Liste der häufigsten kategorialen Variablen

# Liste mit den Top-10-Variablen erstellen top_10 = [x für x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

Ausgabe:-

['Namen',
'CollgCr',
'Alte Stadt',
„Edwards“,
„Somerst“,
„Gilbert“,
'NridgHt',
'Sawyer',
'NWAmes',
'SawyerW']

In der Spalte „Nachbarschaft“ sind die 10 wichtigsten kategorialen Labels aufgeführt.

Binär machen

Jetzt müssen wir die 10 Binärvariablen der Top-10-Labels erstellen:

# Erstelle eine Binärdatei aus Etiketten

für Label in top_10:

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

new_df[['Nachbarschaft']+top_10]


Ausgabe:-

Namen CollgCr Alte Stadt Edwards Somerst Gilbert NridgHt Sägewerker 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 Alte Stadt 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Sägewerker 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Sie können sehen, wie die Top-10-Labels jetzt in das Binärformat konvertiert werden.

Nehmen wir ein Beispiel, sehen Sie in der Tabelle, wo 1 Index Veenker Dies gehörte nicht zu unserem Top-10-Kategorien-Label und führt daher zu 0 alle Spalten.

Jetzt machen wir es für alle kategorialen Variablen, die wir oben ausgewählt haben.

Alle ausgewählten Variablen auf OneHotEncoding

# für alle kategorialen Variablen, die wir ausgewählt haben def top_x(df2,variable,top_x_labels): für label in top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # lesen die Daten erneut data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Nighborhood in die 10 häufigsten Kategorien top_x(data, 'Nachbarschaft',top_10) # Daten anzeigen data.head()

Ausgabe:-

Hier wenden wir nun die One-Hot-Codierung auf alle multikategorialen Variablen an.

Jetzt werden wir die Vor- und Nachteile von One Hot Encoding für mehrere Variablen sehen.

Vorteile

  • Einfach umzusetzen
  • Benötigt nicht viel Zeit für die Erkundung der Variablen
  • Der Funktionsumfang wird nicht massiv erweitert.

Nachteile

  • Fügt keine Informationen hinzu, die die Variable prädiktiver machen könnten
  • Behalten Sie die Informationen der ignorierten Variablen nicht bei.

Endnoten

Zusammenfassend lässt sich sagen, dass wir lernen, wie man mit Variablen mit mehreren Kategorien umgeht. Wenn Sie auf dieses Problem stoßen, ist dies eine sehr schwierige Aufgabe. Vielen Dank, dass Sie diesen Artikel gelesen haben.

Verbinden Sie sich mit mir auf Linkedin: Profil

Lesen Sie meine anderen Artikel: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Danke😎

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von Analytics Vidhya und werden nach Ermessen des Autors verwendet.

Sie können diesen Artikel auch in unserer mobilen App lesen Get it on Google Play

Ähnliche Artikel

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

Zeitstempel:

Mehr von Analytics-Vidhya