Wenn Sie kürzlich Ihre Reise in das maschinelle Lernen begonnen haben, können Sie zwischen LabelEncoder und OneHotEncoder verwechselt werden. Beide Encoder sind Teil der SciKit Learn-Bibliothek in Python und werden verwendet, um kategoriale oder Textdaten in Zahlen umzuwandeln, die unsere Vorhersagemodelle am besten verstehen. Lassen Sie uns die Unterschiede zwischen den Encodern anhand eines einfachen Beispiels herausfinden.
Zeichenkodierung
Zunächst finden Sie hier die SciKit Learn-Dokumentation für LabelEncoder. Betrachten Sie nun die folgenden Daten:
Daten von SuperDataScienceIn diesem Beispiel ist die erste Spalte (Land) Volltext. Wie Sie vielleicht bereits wissen, können wir keinen Text in Daten verwenden, um das Modell zu trainieren. Bevor wir mit dem Prozess beginnen können, müssen wir diese Daten vorbereiten.
Um solche Kategorien in verständliche Modelle numerischer Daten umzuwandeln, verwenden wir die LabelEncoder- Klasse. Alles, was wir tun müssen, um das Attribut für die erste Spalte zu erhalten, ist, die Klasse aus der sklearn- Bibliothek zu importieren , die Spalte mit der Funktion fit_transform zu verarbeiten und die vorhandenen Textdaten durch die neuen codierten zu ersetzen. Mal sehen, den Code.
from sklearn.preprocessing import LabelEncoder labelencoder = LabelEncoder() x[:, 0] = labelencoder.fit_transform(x[:, 0])
Es wird angenommen, dass sich die Daten in der Variablen x befinden . Wenn Sie nach dem Ausführen des obigen Codes den x- Wert überprüfen, werden Sie feststellen, dass die drei Länder in der ersten Spalte durch die Zahlen 0, 1 und 2 ersetzt wurden.
Im Allgemeinen ist dies die Kodierung von Zeichen. Abhängig von den Daten führt diese Konvertierung jedoch zu einem neuen Problem. Wir haben eine Reihe von Ländern in eine Reihe von Zahlen umgewandelt. Dies sind jedoch nur kategoriale Daten, und tatsächlich besteht kein Zusammenhang zwischen den Zahlen.
Das Problem hierbei ist, dass das Modell, da sich in derselben Spalte unterschiedliche Zahlen befinden, fälschlicherweise davon ausgeht, dass die Daten in einer bestimmten Reihenfolge vorliegen - 0 <1 <2. Dies ist natürlich überhaupt nicht der Fall. Um das Problem zu lösen, verwenden wir OneHotEncoder .
OneHotEncoder
Wenn Sie die Dokumentation lesen möchten, finden Sie sie hier . Wie wir bereits besprochen haben, kann es je nach den vorhandenen Daten zu einer Situation kommen, in der unser Modell nach der Codierung der Attribute verwirrt wird und fälschlicherweise angenommen wird, dass die Daten durch eine Reihenfolge oder Hierarchie verbunden sind, die nicht wirklich vorhanden ist. Um dies zu vermeiden, verwenden wir OneHotEncoder .
Dieser Encoder verwendet eine Spalte mit kategorialen Daten, die zuvor in ein Merkmal codiert wurden, und erstellt mehrere neue Spalten dafür. Zahlen werden durch Einsen und Nullen ersetzt, je nachdem, welcher Spalte welcher Wert inhärent ist. In unserem Beispiel erhalten wir drei neue Spalten, eine für jedes Land - Frankreich, Deutschland und Spanien.
Für Zeilen, deren erste Spalte Frankreich ist, wird die Spalte "Frankreich" auf "1" und die anderen beiden Spalten auf "0" gesetzt. In ähnlicher Weise hat für Zeilen, deren erste Spalte Deutschland ist, die Deutschland-Spalte eine "1" und die anderen beiden Spalten eine "0".
Dies geschieht ganz einfach:
from sklearn.preprocessing import OneHotEncoder onehotencoder = OneHotEncoder(categorical_features = [0]) x = onehotencoder.fit_transform(x).toarray()
Im Konstruktor geben wir an, welche Spalte von OneHotEncoder verarbeitet werden soll , in unserem Fall - [0] . Transformieren Sie dann das x- Array mit der Funktion fit_transform des gerade erstellten Encoder- Objekts. Jetzt haben wir drei neue Spalten im Datensatz:
Wie Sie sehen können, haben wir anstelle einer Spalte mit einem Land drei neue, die dieses Land codieren.
Dies ist der Unterschied zu LabelEncoder und OneHotEncoder .