One-Hot-Codierung auf NumPy-Array in Python

Manav Narula 30 Januar 2023
  1. Verwenden des NumPy-Moduls zum Durchführen von One-Hot-Codierung auf einem NumPy-Array in Python
  2. Verwendung des Moduls sklearn zur Durchführung einer One-Hot-Kodierung auf einem NumPy-Array in Python
  3. Verwendung des Moduls pandas zur Durchführung einer One-Hot-Kodierung auf einem NumPy-Array in Python
  4. Verwendung des Moduls keras zur Durchführung einer One-Hot-Kodierung auf einem NumPy-Array in Python
One-Hot-Codierung auf NumPy-Array in Python

Python verfügt über ein umfassendes Framework für maschinelles Lernen. Wir können Modelle leicht trainieren und testen. Bei kategorialen Daten können einige Algorithmen jedoch nicht mit solchen Datenbeschriftungen arbeiten und erfordern numerische Werte.

Daher ist die One-Hot-Codierung eine häufig verwendete Technik zum Codieren von Daten, bevor sie in einem Algorithmus verwendet werden.

In diesem Tutorial erfahren Sie, wie Sie eine One-Hot-Codierung für NumPy-Arrays durchführen.

Verwenden des NumPy-Moduls zum Durchführen von One-Hot-Codierung auf einem NumPy-Array in Python

Bei dieser Methode generieren wir ein neues Array, das die codierten Daten enthält. Wir werden die Funktion numpy.zeros() verwenden, um ein Array von Nullen der erforderlichen Größe zu erstellen. Wir werden dann 0 an den entsprechenden Stellen durch 1 ersetzen, indem wir die Funktion numpy.arange() verwenden.

Beispielsweise,

import numpy as np

a = np.array([1, 0, 3])
b = np.zeros((a.size, a.max() + 1))
b[np.arange(a.size), a] = 1
print(b)

Ausgabe:

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]

Wir können auch die Funktion eye() verwenden, um eine One-Hot-Codierung für Arrays durchzuführen. Es wird standardmäßig eine zweidimensionale Version mit 1 an der Hauptdiagonale und 0 an anderer Stelle zurückgegeben. Wir können diese Methode verwenden und die Positionen angeben, an denen 1s sein sollen, wie unten gezeigt.

import numpy as np

values = [1, 0, 3]
n_values = np.max(values) + 1
print(np.eye(n_values)[values])

Ausgabe:

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]

Verwendung des Moduls sklearn zur Durchführung einer One-Hot-Kodierung auf einem NumPy-Array in Python

Der sklearn.preprocessing.LabelBinarizer ist eine in Python verfügbare Klasse, die diese Codierung effizient durchführen kann. Es wird verwendet, um Mehrfachbeschriftungen zu binarisieren, indem sie in eine numerische Form konvertiert werden. Wir werden die Funktion transform() verwenden, um die Daten mit einem Objekt dieser Klasse zu konvertieren.

Der folgende Code erklärt dies.

import sklearn.preprocessing
import numpy as np

a = np.array([1, 0, 3])
label_binarizer = sklearn.preprocessing.LabelBinarizer()
label_binarizer.fit(range(max(a) + 1))
b = label_binarizer.transform(a)
print(b)

Ausgabe:

[[0 1 0 0]
 [1 0 0 0]
 [0 0 0 1]]

Verwendung des Moduls pandas zur Durchführung einer One-Hot-Kodierung auf einem NumPy-Array in Python

Datensätze für Algorithmen für maschinelles Lernen haben normalerweise die Form eines pandas-DataFrames. Daher ist das pandas-Modul für die Datencodierung gut gerüstet. Mit get_dummies() kann ein kategorialer Datensatz in numerische Indikatoren konvertiert werden, um die One-Hot-Codierung durchzuführen. Das Endergebnis ist ein DataFrame.

Beispielsweise,

import pandas as pd
import numpy as np

a = np.array([1, 0, 3])
b = pd.get_dummies(a)
print(b)

Ausgabe:

  0  1  3
0  0  1  0
1  1  0  0
2  0  0  1

Verwendung des Moduls keras zur Durchführung einer One-Hot-Kodierung auf einem NumPy-Array in Python

Das Modul keras wird häufig für maschinelles Lernen in Python verwendet. Die Funktion to_categorical() dieses Moduls kann eine One-Hot-Codierung für Daten durchführen.

Das folgende Code-Snippet zeigt, wie.

from keras.utils.np_utils import to_categorical
import numpy as np

a = np.array([1, 0, 3])
b = to_categorical(a, num_classes=(len(a) + 1))
print(b)

Ausgabe:

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn