テンソルフローのインジケーター列とカテゴリアイデンティティ列の違い


8

Tensorflowを学習していて、Tensorflowで使用されているさまざまな機能列に出くわしました。これらのタイプのうち、2つはcategorical_identity_columnおよびindicator_columnです。どちらも同じ方法で定義されています。私が理解している限り、どちらもカテゴリー列をワンホットエンコード列に変換します。

だから私の質問は、2つの違いは何ですか?どちらを使用するか、もう一方をいつ使用するか?

回答:


9

indicator_column入力をエンコードではmulti-hotなく表現にone-hotエンコードします。

https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_columnの例では、さらに詳しく説明しています。

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"] 

最後の2つの例は、multi-hotエンコーディングの意味を説明しています。たとえば、入力が["bob", "wanda"]エンコーディングの場合はになります[[1, 0, 1]]


1

categorical_column_with_ *を使用_CategoricalColumnして線形モデルにフィードするようにします。この列は、しばしば語彙を使用してID値を返します。

一方、indicator_columnは、特定のカテゴリ列のマルチホット表現であり、たとえば、機能をDNNにフィードする場合に使用されます。それは生成し_IndicatorColumnます。embedding_columnも同様ですが、入力がスパースの場合に使用します。


つまり、Corgorical列は、indicatorまたはembedded列でラップされない限り、DNNに直接フィードできないということです。
Ankit Seth 2018

ドキュメントによると、機能列は「FeatureColumnから派生したクラスのインスタンスである必要があります」-埋め込みによってデータ表現の複雑さが軽減されますが、それが要件であるかどうかはわかりません。 tensorflow.org/api_docs/python/tf/contrib/learn/DNNClassifier
Ethereal

1

上記のコメント(Ankit Sethによる)の質問に関して、ここのドキュメントは(「ワイド」、つまり線形ではなく)ディープモデルについて次のように述べています。

tf.estimator.DNNClassifierand tf.estimator.DNNRegressor:密な列のみを受け入れます。他の列タイプは、indicator_columnまたはでラップする必要があります embedding_column

また、カテゴリ型の列をディープモデルに直接渡そうとすると、TFは次のエラーをスローします。

ValueError:feature_columnsの項目は_DenseColumnでなければなりません。カテゴリー列をembedding_columnまたはindicator_columnでラップできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.