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:-
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:-
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:-
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:
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:-
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:-
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.