Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man in Scikit-Learn mehrere Spalten effizient beschriften und kodieren?

Wie kann man in Scikit-Learn mehrere Spalten effizient beschriften und kodieren?

DDD
DDDOriginal
2024-11-12 03:48:02154Durchsuche

How to Label Encode Multiple Columns Efficiently in Scikit-Learn?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn