Heim > Artikel > Backend-Entwicklung > Wie kann man in Scikit-Learn mehrere Spalten effizient beschriften und kodieren?
Beschriftungskodierung über mehrere Spalten hinweg in Scikit-Learn
Beschriftungskodierung ist eine gängige Technik, um kategoriale Daten in numerische Merkmale umzuwandeln. Während es möglich ist, für jede Spalte eine separate LabelEncoder-Instanz zu erstellen, ist es in Fällen, in denen mehrere Spalten eine Beschriftungscodierung erfordern, effizienter, einen einzelnen Encoder zu verwenden.
Stellen Sie sich einen DataFrame mit zahlreichen Spalten mit Zeichenfolgenbeschriftungen vor. Um den gesamten DataFrame mit Labels zu kodieren, könnte ein einfacher Ansatz darin bestehen, den gesamten DataFrame an den LabelEncoder zu übergeben, wie unten gezeigt:
import pandas as pd from sklearn.preprocessing import LabelEncoder df = pd.DataFrame({ 'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 'New_York'] }) le = LabelEncoder() le.fit(df)
Dieser Ansatz führt jedoch zu folgendem Fehler:
ValueError: bad input shape (6, 3)
Um dieses Problem zu beheben, besteht eine Lösung darin, den LabelEncoder mithilfe der Apply-Funktion auf jede Spalte im DataFrame anzuwenden. Diese Methode transformiert jede Spalte unabhängig und ermöglicht so eine effiziente Kodierung mehrerer Spalten in einem Schritt:
df.apply(LabelEncoder().fit_transform)
Alternativ wird in scikit-learn 0.20 und höher die Verwendung des OneHotEncoder empfohlen:
OneHotEncoder().fit_transform(df)
Der OneHotEncoder unterstützt jetzt die direkte Kodierung von Zeichenfolgeneingaben.
Für mehr Flexibilität bietet der ColumnTransformer kann verwendet werden, um die Beschriftungscodierung auf bestimmte Spalten oder nur auf bestimmte Datentypen innerhalb der Spalten anzuwenden.
Für inverse Transformationen und die Transformation zukünftiger Daten kann ein Defaultdict verwendet werden, um die Beschriftungscodierer für jede Spalte beizubehalten. Durch den Zugriff auf die Encoder aus dem Wörterbuch ist es möglich, Daten mit den ursprünglichen LabelEncoder-Instanzen zu dekodieren oder zu kodieren.
Zusätzlich bieten Bibliotheken wie Neuraxle den FlattenForEach-Schritt, der die Anwendung desselben LabelEncoders auf abgeflachte Daten erleichtert.
Für Fälle, in denen unterschiedliche LabelEncoder für verschiedene Spalten benötigt werden oder wenn nur eine Teilmenge von Spalten vorhanden sein soll codiert bietet der ColumnTransformer eine detaillierte Kontrolle über den Auswahl- und Codierungsprozess.
Das obige ist der detaillierte Inhalt vonWie kann man in Scikit-Learn mehrere Spalten effizient beschriften und kodieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!