Unterschied zwischen Indikatorspalte und kategorialer Identitätsspalte im Tensorflow

8

Ich lerne Tensorflow und bin auf verschiedene Feature-Spalten gestoßen, die in Tensorflow verwendet werden. Von diesen Typen sind zwei categorical_identity_columnund indicator_column. Beide wurden auf die gleiche Weise definiert. Soweit ich weiß, konvertieren beide kategoriale Spalten in One-Hot-codierte Spalten.

Meine Frage ist also, was ist der Unterschied zwischen den beiden? Wann soll man das eine und wann das andere benutzen?

Ankit Seth
quelle

Antworten:

9

indicator_columncodiert die Eingabe in eine multi-hotDarstellung, nicht in eine one-hotCodierung.

Das Beispiel von https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column verdeutlicht mehr:

name = indicator_column(categorical_column_with_vocabulary_list(
    'name', ['bob', 'george', 'wanda'])
columns = [name, ...]
features = tf.parse_example(..., features=make_parse_example_spec(columns))
dense_tensor = input_layer(features, columns)

dense_tensor == [[1, 0, 0]]  # If "name" bytes_list is ["bob"]
dense_tensor == [[1, 0, 1]]  # If "name" bytes_list is ["bob", "wanda"]
dense_tensor == [[2, 0, 0]]  # If "name" bytes_list is ["bob", "bob"] 

Die letzten beiden Beispiele beschreiben, was unter multi-hotCodierung zu verstehen ist. Zum Beispiel, wenn die Eingabe ["bob", "wanda"]die Codierung sein wird [[1, 0, 1]].

m.elahi
quelle
1

Sie würden categoryical_column_with_ * verwenden , um a _CategoricalColumnin ein lineares Modell einzuspeisen. Diese Spalte gibt Identitätswerte zurück, häufig unter Verwendung eines Vokabulars.

Auf der anderen Seite ist indicator_column eine Multi-Hot-Darstellung einer bestimmten kategorialen Spalte und wird verwendet, wenn Sie das Feature beispielsweise in eine DNN einspeisen möchten. es erzeugt eine _IndicatorColumn. Embedding_column ist analog, aber Sie würden es verwenden, wenn Ihre Eingabe spärlich ist.

Ätherisch
quelle
Sie sagen also, dass eine kategoriale Spalte nicht direkt an DNN weitergeleitet werden kann, es sei denn, sie wird von indicatoroder embeddedSpalte umbrochen .
Ankit Seth
Laut den Dokumenten sollten die Feature-Spalten "Instanzen von Klassen sein, die von FeatureColumn abgeleitet sind" - Einbettungen verringern die Komplexität der Datendarstellung, aber ich bin nicht sicher, ob dies erforderlich ist. tensorflow.org/api_docs/python/tf/contrib/learn/DNNClassifier
Ethereal
1

In Bezug auf die Frage in den obigen Kommentaren (von Ankit Seth) sagen die Dokumente hier Folgendes über tiefe Modelle (im Gegensatz zu "breit", dh linear):

tf.estimator.DNNClassifierund tf.estimator.DNNRegressor: Akzeptiere nur dichte Spalten. Andere Spaltentypen müssen entweder in ein indicator_columnoder eingeschlossen werden embedding_column.

Wenn Sie versuchen, eine kategoriale Spalte direkt an ein Deep-Modell zu übergeben, gibt TF den folgenden Fehler aus:

ValueError: Elemente von feature_columns müssen eine _DenseColumn sein. Sie können eine kategoriale Spalte mit einer Einbettungsspalte oder einer Indikatorspalte umschließen.

Milad Shahidi
quelle