Tensorflowを学習していて、Tensorflowで使用されているさまざまな機能列に出くわしました。これらのタイプのうち、2つはcategorical_identity_column
およびindicator_column
です。どちらも同じ方法で定義されています。私が理解している限り、どちらもカテゴリー列をワンホットエンコード列に変換します。
だから私の質問は、2つの違いは何ですか?どちらを使用するか、もう一方をいつ使用するか?
Tensorflowを学習していて、Tensorflowで使用されているさまざまな機能列に出くわしました。これらのタイプのうち、2つはcategorical_identity_column
およびindicator_column
です。どちらも同じ方法で定義されています。私が理解している限り、どちらもカテゴリー列をワンホットエンコード列に変換します。
だから私の質問は、2つの違いは何ですか?どちらを使用するか、もう一方をいつ使用するか?
回答:
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]]
。
categorical_column_with_ *を使用_CategoricalColumn
して線形モデルにフィードするようにします。この列は、しばしば語彙を使用してID値を返します。
一方、indicator_columnは、特定のカテゴリ列のマルチホット表現であり、たとえば、機能をDNNにフィードする場合に使用されます。それは生成し_IndicatorColumn
ます。embedding_columnも同様ですが、入力がスパースの場合に使用します。
上記のコメント(Ankit Sethによる)の質問に関して、ここのドキュメントは(「ワイド」、つまり線形ではなく)ディープモデルについて次のように述べています。
tf.estimator.DNNClassifier
andtf.estimator.DNNRegressor
:密な列のみを受け入れます。他の列タイプは、indicator_column
またはでラップする必要がありますembedding_column
。
また、カテゴリ型の列をディープモデルに直接渡そうとすると、TFは次のエラーをスローします。
ValueError:feature_columnsの項目は_DenseColumnでなければなりません。カテゴリー列をembedding_columnまたはindicator_columnでラップできます。
indicator
またはembedded
列でラップされない限り、DNNに直接フィードできないということです。