7.9. Transformation des Zielwerts für die Vorhersage (y)#

Dies sind Transformer, die nicht für Merkmale bestimmt sind, sondern nur für Zielwerte im überwachten Lernen. Siehe auch Transformation des Zielwerts beim Lernen, wenn Sie den Zielwert für die Vorhersage transformieren, das Modell aber im ursprünglichen (untransformierten) Raum evaluieren möchten.

7.9.1. Label-Binarisierung#

7.9.1.1. LabelBinarizer#

LabelBinarizer ist eine Hilfsklasse, die beim Erstellen einer Label-Indikatormatrix aus einer Liste von Multiklassen-Labels hilft.

>>> from sklearn import preprocessing
>>> lb = preprocessing.LabelBinarizer()
>>> lb.fit([1, 2, 6, 4, 2])
LabelBinarizer()
>>> lb.classes_
array([1, 2, 4, 6])
>>> lb.transform([1, 6])
array([[1, 0, 0, 0],
       [0, 0, 0, 1]])

Die Verwendung dieses Formats kann die Klassifizierung von Multiklassen in Schätzern ermöglichen, die das Format der Label-Indikatormatrix unterstützen.

Warnung

LabelBinarizer ist nicht erforderlich, wenn Sie einen Schätzer verwenden, der bereits Multiklassen-Daten unterstützt.

Weitere Informationen zur Multiklassen-Klassifizierung finden Sie unter Multiklassen-Klassifizierung.

7.9.1.2. MultiLabelBinarizer#

Beim Multilabel-Lernen wird die gemeinsame Menge von binären Klassifizierungsaufgaben durch ein Label-Binärindikator-Array ausgedrückt: Jede Stichprobe ist eine Zeile eines 2D-Arrays der Form (n_samples, n_classes) mit binären Werten, wobei die Einsen, d. h. die Nicht-Null-Elemente, der Teilmenge der Labels für diese Stichprobe entsprechen. Ein Array wie np.array([[1, 0, 0], [0, 1, 1], [0, 0, 0]]) stellt Label 0 in der ersten Stichprobe, die Labels 1 und 2 in der zweiten Stichprobe und keine Labels in der dritten Stichprobe dar.

Die Erzeugung von Multilabel-Daten als Liste von Label-Mengen ist möglicherweise intuitiver. Der Transformer MultiLabelBinarizer kann verwendet werden, um zwischen einer Sammlung von Labelsammlungen und dem Indikatorformat umzuwandeln.

>>> from sklearn.preprocessing import MultiLabelBinarizer
>>> y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]
>>> MultiLabelBinarizer().fit_transform(y)
array([[0, 0, 1, 1, 1],
       [0, 0, 1, 0, 0],
       [1, 1, 0, 1, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 0, 0]])

Weitere Informationen zur Multilabel-Klassifizierung finden Sie unter Multilabel-Klassifizierung.

7.9.2. Label-Kodierung#

LabelEncoder ist eine Hilfsklasse, die beim Normalisieren von Labels hilft, sodass diese nur Werte zwischen 0 und n_classes-1 enthalten. Dies ist manchmal nützlich für die Erstellung effizienter Cython-Routinen. LabelEncoder kann wie folgt verwendet werden:

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()
>>> le.classes_
array([1, 2, 6])
>>> le.transform([1, 1, 2, 6])
array([0, 0, 1, 2])
>>> le.inverse_transform([0, 0, 1, 2])
array([1, 1, 2, 6])

Es kann auch verwendet werden, um nicht-numerische Labels (solange sie hashbar und vergleichbar sind) in numerische Labels zu transformieren.

>>> le = preprocessing.LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"])
LabelEncoder()
>>> list(le.classes_)
[np.str_('amsterdam'), np.str_('paris'), np.str_('tokyo')]
>>> le.transform(["tokyo", "tokyo", "paris"])
array([2, 2, 1])
>>> list(le.inverse_transform([2, 2, 1]))
[np.str_('tokyo'), np.str_('tokyo'), np.str_('paris')]