One-Hot-Encoding für Variablen mit mehreren Kategorien

Inhalt

In diesem Artikel, Wir werden lernen, wie wir mit der One Hot Encoding-Funktionstechnik mit mehreren Kategorievariablen umgehen können.

Aber bevor es weitergeht, Lassen Sie uns eine kurze Diskussion über Funktionsentwicklung und One Hot Encoding führen.

Funktionsengineering

Dann, Feature Engineering ist der Prozess des Extrahierens von Features aus Rohdaten unter Verwendung von Domänenwissen des Problems. Diese Funktionen können verwendet werden, um die Leistung von Algorithmen für maschinelles Lernen zu verbessern und, wenn die Leistung steigt, liefert die beste Genauigkeit. Wir können auch sagen, dass Function 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 Machine-Learning-Modelle ist etwas kompliziert, da unterschiedliche Modelle oft unterschiedliche Ansätze für unterschiedliche Datentypen erfordern. Wie zum Beispiel:-

  • Kontinuierliche Daten
  • Kategoriale Merkmale
  • Fehlende Werte
  • Normalisierung
  • Datum und Uhrzeit

Aber hier werden wir nur die kategorialen Merkmale diskutieren, kategoriale Merkmale sind solche Merkmale, bei denen der Datentyp ein Objekttyp ist. Der Datenpunktwert in einem kategorialen Merkmal liegt nicht in numerischer Form vor, aber in Form eines Objekts.

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

  • Tag-Codierung oder ordinale Codierung
  • Eine heiße Codierung
  • Dummy-Codierung
  • Effektkodierung
  • Binäre Kodierung
  • Basler Codierung
  • Hash-Codierung
  • Zielcodierung

Dann, hier behandeln wir kategoriale Merkmale durch One Hot Encoding, Daher, erste, discutiremos One Hot Encoding.

Eine heiße Codierung

Wir wissen, dass kategoriale Variablen die Labelwerte anstelle von numerischen Werten 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 nicht direkt mit Tag-Daten arbeiten. Alle Eingabe- und Ausgabevariablen müssen numerisch sein.

Dies bedeutet, dass kategoriale Daten in eine numerische Form umgewandelt werden müssen. Wenn die kategoriale Variable eine Ausgabevariable ist, Möglicherweise möchten Sie auch Modellvorhersagen zurück in eine kategoriale Form konvertieren, um sie in einer Anwendung anzuzeigen oder zu verwenden.

zum Beispiel Daten zum Geschlecht sind in Form von 'männlich’ Ja 'Frau'.

Aber wenn wir One-Hot-Encoding verwenden, Codierung und das Zulassen, dass das Modell eine natürliche Reihenfolge zwischen den Kategorien annimmt, kann zu schlechter Leistung oder unerwarteten Ergebnissen führen.

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

Zum Beispiel, wir codieren die variablen der farben,

rote Farbe Farbe blau
0 1
1 0
0 1

Jetzt beginnen wir unsere Reise. Im ersten Schritt, Wir nehmen eine Reihe von Hauspreisvorhersagedaten.

Datensatz

Hier verwenden wir den Datensatz von house_price, der verwendet wird, um den Preis des Hauses entsprechend der Größe der Fläche vorherzusagen.

Wenn Sie den Datensatz zur Vorhersage des Hauspreises herunterladen möchten, klicke auf hier.

Modulimport

Jetzt, Wir müssen wichtige Python-Module importieren, die für das One-Hot-Encoding verwendet werden

# Pandas importieren
Pandas als pd importieren
# numpy importieren
numpy als np importieren
# OneHotEncoder importieren
aus sklearn.preprocessing importieren OneHotEncoder()

Hier, Wir verwenden Pandas, die zur Datenanalyse verwendet werden, NumPyused für n-dimensionale Arrays, und von sklearn, Wir werden einen heißen Encoder der Klasse 1 verwenden, der für die kategoriale Codierung wichtig ist.

Jetzt müssen wir diese Daten mit Python auslesen.

Datensatz lesen

Allgemein, der Datensatz liegt im CSV-Format vor, und der von uns verwendete Datensatz liegt ebenfalls im CSV-Format vor. Um die CSV-Datei zu lesen, verwenden wir die pandas read_csv-Funktion (). Schau runter:

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

Produktion:-

Screenshot-2021-05-03-212841-1-3858364

Aber wir müssen nur kategoriale Variablen für einen aktiven Encoder verwenden und werden nur versuchen, mit kategorialen Variablen zu erklären, um das Verständnis zu erleichtern.

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

Auf kategoriale Werte prüfen

Um die Werte zu überprüfen, verwenden wir die Funktion pandas select_dtypes, mit der die Datentypen der Variablen ausgewählt werden.

# Prüffunktionen
cat = df.select_dtypes(einschließen="Ö").Schlüssel()
# Anzeigevariablen
Katze

Produktion:-

Screenshot-2021-05-03-214320-1859834

Jetzt müssen wir diese numerischen Spalten aus dem Datensatz entfernen und verwenden diese kategoriale Variable für unsere Verwendung. Wir verwenden nur 3-4 kategoriale Spalten des Datasets zum Anwenden der One-Hot-Codierung.

Erstellen Sie einen neuen Datenrahmen

Jetzt, kategoriale Variablen verwenden, Wir erstellen einen neuen Datenrahmen aus ausgewählten kategorialen Spalten.

# neue df erstellen
# von uns verwendete Spalten einstellen
new_df = pd.read_csv('house_price.csv',usecols =['Gegend','Exterieur1. ','Außen2nd']) 
new_df.head()

Produktion:-

Screenshot-2021-05-03-214440-7585045

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

Finden Sie einzigartige Werte

Um einzigartige Werte zu finden, verwenden wir die Pandas Unique-Funktion ().

# eindeutige Werte in jeder Spalte
für x in new_df.columns:
    #einzigartige Werte drucken
    drucken(x ,':', len(new_df[x].einzigartig()))

Produktion:-

Gegend: 25
Außen 1.: 15
Außen 2.: 16

Jetzt, Wir werden unsere Technik verwenden, um One-Hot-Codierung auf Variablen mit mehreren Kategorien anzuwenden.

Technik für Variablen mit mehreren Kategorien

Die Technik besteht darin, die One-Hot-Codierung auf zu beschränken 10 Die häufigsten Labels der Variablen. Dies bedeutet, dass wir nur für jede der eine binäre Variable erstellen würden 10 häufigste Tags, Dies entspricht der Gruppierung aller anderen Tags in eine neue Kategorie, die in diesem Fall beseitigt werden. A) Ja, das 10 neue Dummy-Variablen zeigen an, ob eine der 10 häufigste Tags vorhanden ist 1 oder nicht dann 0 für eine bestimmte Beobachtung.

Häufigste Variablen

Hier wählen wir die 20 häufigste Variablen.

Nehmen wir an, wir nehmen eine kategoriale Variable Gegend.

# die Spitze finden 20 Kategorien
new_df.Neighborhood.value_counts().sort_values(aufsteigend=Falsch).Kopf(20)

Produktion:

Screenshot-2021-05-03-220947-7634589

Wenn Sie in diesem Ausgabebild sehen, du wirst merken, dass die Namen Das Etikett wiederholt sich 225 mal in den Nachbarschaftsspalten und wir gehen runter diese Zahl nimmt ab.

Also nehmen wir die 10 Top-Hauptergebnisse und wir konvertieren dieses Top-Ergebnis 10 in One-Hot-Codierung und die Labels auf der linken Seite werden null.

Produktion:-

Screenshot-2021-05-03-223131-9993341

Liste der häufigsten kategorialen Variablen

# liste mit top machen 10 Variablen
top_10 = [x für x in new_df.Neighborhood.value_counts().sort_values(aufsteigend=Falsch).Kopf(10).Index]
Top 10

Produktion:-

[„Namen“,
'CollgCr',
'Alte Stadt',
"Edwards",
„Somerst“,
'Gilbert',
„NidgHt“,
„Säger“,
'NWAs',
‘SawyerW’]

Da sind die 10 Top kategoriale Labels in der Spalte "Nachbarschaft".

Binär machen

Jetzt, wir müssen das machen 10 binäre Variablen der top_10 Labels:

# Binäre Labels erstellen

für Tag in top_10:

new_df[Etikett] = np.wo (new_df['Gegend']== Etikett, 1,0)

new_df[['Gegend']+ Top 10]


Produktion:-

Namen CollgCr Alte Stadt Edwards Somerst Gilbert NidgHt Säger 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 Krabbenfresser 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 BrkSeite 0 0 0 0 0 0 0 0 0 0
10 Säger 0 0 0 0 0 0 0 1 0 0
11 NidgHt 0 0 0 0 0 0 1 0 0 0

Sie können sehen, wie die top_10-Tags jetzt in das Binärformat konvertiert werden.

Nehmen wir ein Beispiel, siehe in der Tabelle wo 1 Index Veenker die nicht zu unseren tag top_10 Kategorien gehörten, so wird es resultieren 0 alle Spalten.

Jetzt werden wir dies für alle kategorialen Variablen tun, die wir zuvor ausgewählt haben.

Alle in OneHotEncoding ausgewählten Variablen

# für alle von uns ausgewählten kategorialen Variablen
def top_x(df2,variabel,top_x_labels):
für Label in top_x_labels:
df2[variabel+'_'+label] = np.wo(Daten[Variable]==Etikett,1,0)
# lese die daten nochmal aus
data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Gegend','Außen1st','Außen2nd'])
#codieren Sie die Nachbarschaft in die 10 häufigste Kategorien
top_x(Daten,'Gegend',Top 10)
# Anzeigedaten
daten.kopf()

Produktion:-

Screenshot-2021-05-03-225312-4-1118700

Jetzt, hier wenden wir One-Hot-Codierung auf alle Variablen mit mehreren Kategorien an.

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

Vorteil

  • Einfach zu implementieren
  • Benötigt nicht viel Zeit für die variable Erkundung.
  • Erweitert den Funktionsraum nicht massiv.

Nachteile

  • Es werden keine Informationen hinzugefügt, die die Variable prädiktiver machen könnten
  • Speichern Sie nicht die Informationen ignorierter Variablen.

Abschließende Anmerkungen

Dann, Zusammenfassend lässt sich sagen, dass wir lernen, mit Variablen mehrerer Kategorien umzugehen. Wenn Sie auf dieses Problem stoßen, das ist also eine sehr schwierige aufgabe. Vielen Dank für das Lesen dieses Artikels..

Verbinden Sie sich mit mir auf Linkedin: Profil

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

Dankeschön

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

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.