Diferença entre coluna indicadora e coluna de identidade categórica no fluxo tensor

8

Estou aprendendo o Tensorflow e deparei-me com diferentes colunas de recursos usadas no Tensorflow. Desses tipos, dois são categorical_identity_columne indicator_column. Ambos foram definidos da mesma maneira. Tanto quanto eu entendo, ambos convertem a coluna categórica em uma coluna codificada quente.

Então, minha pergunta é qual é a diferença entre os dois? Quando usar um e quando usar o outro?

Ankit Seth
fonte

Respostas:

9

indicator_columncodifica a entrada para uma multi-hotrepresentação, não one-hotcodificando.

O exemplo de https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column esclarece mais:

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

Os dois últimos exemplos descrevem o que se entende por multi-hotcodificação. por exemplo, se a entrada for ["bob", "wanda"]a codificação será [[1, 0, 1]].

m.elahi
fonte
1

Você usaria categorical_column_with_ * para obter um _CategoricalColumnpara alimentar um modelo linear; essa coluna retorna valores de identidade, geralmente usando um vocabulário.

Por outro lado, indicator_column é uma representação multi-quente de uma determinada coluna categórica e seria usada se você deseja alimentar o recurso em um DNN, por exemplo; produz um _IndicatorColumn. embedding_column é análogo, mas você a utilizaria se sua entrada for escassa.

Etéreo
fonte
Então, você está dizendo que a coluna categórica não pode ser alimentada diretamente ao DNN, a menos que seja quebrada por indicatorou embeddedcoluna.
Ankit Seth
De acordo com os documentos, as colunas de recursos "devem ser instâncias de classes derivadas de FeatureColumn" - os incorporamentos reduzirão a complexidade da representação de dados, mas não tenho certeza de que seja um requisito. tensorflow.org/api_docs/python/tf/contrib/learn/DNNClassifier
Ethereal
1

Com relação à pergunta nos comentários acima (de Ankit Seth), os documentos aqui dizem o seguinte sobre modelos profundos (ao contrário de "amplo", isto é, linear):

tf.estimator.DNNClassifiere tf.estimator.DNNRegressor: aceita apenas colunas densas. Outros tipos de coluna devem ser agrupados em um indicator_columnou embedding_column.

E se você tentar passar uma coluna categórica diretamente para um modelo profundo, o TF lançará o seguinte erro:

ValueError: os itens de feature_columns devem ser um _DenseColumn. Você pode quebrar uma coluna categórica com uma coluna de incorporação ou uma coluna de indicador.

Milad Shahidi
fonte