Was ist eine heiße Kodierung im Tensorflow?


Antworten:


16

Angenommen, Sie haben ein kategoriales Merkmal in Ihrem Datensatz (z. B. Farbe). Und Ihre Proben können entweder rot, gelb oder blau sein. Um dieses Argument an einen ML-Algorithmus zu übergeben, müssen Sie es zunächst so codieren, dass Sie anstelle von Zeichenfolgen Zahlen haben.

Der einfachste Weg, dies zu tun, besteht darin, ein Mapping zu erstellen, bei dem:

rot -> 1
gelb -> 2
blau -> 3

und ersetzen Sie jede Zeichenfolge durch ihren zugeordneten Wert.

Dies kann jedoch zu unerwünschten Nebenwirkungen führen in unserem ML-Modell führen, da beim Umgang mit Zahlen möglicherweise Blau> Gelb (weil 3> 2) oder Rot + Gelb = Blau (weil 1 + 2 = 3) angenommen wird. Das Modell kann nicht erkennen, dass diese Daten kategorisiert und dann als Ganzzahlen abgebildet wurden.

Die Lösung für dieses Problem ist die One-Hot-Codierung, bei der N neue Features erstellt werden , wobei N die Anzahl der eindeutigen Werte im ursprünglichen Feature ist. In unserem Beispiel wäre N gleich 3, weil wir 3 einzigartige Farben haben (rot, gelb und blau).

Jedes dieser Merkmale ist binär und würde einem dieser eindeutigen Werte entsprechen. In unserem Beispiel wäre das erste Merkmal ein binäres Merkmal, das uns sagt, ob das Sample rot ist oder nicht, das zweite wäre dasselbe für Gelb und das dritte für Blau.

Ein Beispiel für eine solche Transformation ist im Folgenden dargestellt:

Beachten Sie, dass wir, da dieser Ansatz die Dimensionalität des Datasets erhöht, bei einem Feature, das viele eindeutige Werte akzeptiert, möglicherweise eine spärlichere Codierung verwenden möchten (wie die oben dargestellte).


3

Tiefe: Ein Skalar, der die Tiefe der einen heißen Dimension definiert.

Indizes: Ein Tensor von Indizes.

Dies ist das Beispiel in der Tensorflow-Dokumentation.
1. Nur Angabe von Indizes und Tiefe (Standardwerte von on_value ist 1 und off_value ist 0)

 indices = [0, 1, 2]
    depth = 3
    tf.one_hot(indices, depth)  # output: [3 x 3]
    # [[1., 0., 0.],
    #  [0., 1., 0.],
    #  [0., 0., 1.]]
  1. Angeben von on_value und off_value
Indizes = [0, 2, -1, 1]
Tiefe = 3
tf.one_hot (Indizes, Tiefe, on_value = 5.0, off_value = 0.0, Achse = -1)
## Ausgabe: [4 x 3]
    # [[5.0, 0.0, 0.0], # one_hot (0)
    # [0.0, 0.0, 5.0], # one_hot (2)
    # [0.0, 0.0, 0.0], # one_hot (-1)
    # [0.0, 5.0, 0.0]] # one_hot (1)

Sie können den Code auch auf GitHub sehen


Das tf doc ist verständlicher: tensorflow.org/api_docs/python/tf/one_hot
dturvene
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.