当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.feature_column.crossed_column用法及代码示例


返回用于执行分类特征交叉的列。

用法

tf.feature_column.crossed_column(
    keys, hash_bucket_size, hash_key=None
)

参数

  • keys 标识要交叉的特征的可迭代对象。每个元素可以是:
    • string:将使用相应的特征,必须是字符串类型。
    • CategoricalColumn :将使用此列生成的转换张量。不支持散列分类列。
  • hash_bucket_size 一个 int > 1。桶的数量。
  • hash_key 指定 FingerprintCat64 函数将使用的 hash_key 来组合 SparseCrossOp 上的交叉指纹(可选)。

返回

  • 一个CrossedColumn

抛出

  • ValueError 如果 len(keys) < 2
  • ValueError 如果任何键既不是字符串也不是 CategoricalColumn
  • ValueError 如果任何键是 HashedCategoricalColumn
  • ValueError 如果 hash_bucket_size < 1

交叉的特征将根据 hash_bucket_size 进行散列。从概念上讲,转换可以被认为是: Hash(cartesian product of features) % hash_bucket_size

例如,如果输入特征是:

  • 第一个键引用的 SparseTensor:

    shape = [2, 2]
    {
        [0, 0]:"a"
        [1, 0]:"b"
        [1, 1]:"c"
    }
  • 第二个键引用的 SparseTensor:

    shape = [2, 1]
    {
        [0, 0]:"d"
        [1, 0]:"e"
    }

然后交叉特征将如下所示:

shape = [2, 2]
{
    [0, 0]:Hash64("d", Hash64("a")) % hash_bucket_size
    [1, 0]:Hash64("e", Hash64("b")) % hash_bucket_size
    [1, 1]:Hash64("e", Hash64("c")) % hash_bucket_size
}

这是一个创建具有交叉字符串特征的线性模型的示例:

keywords_x_doc_terms = crossed_column(['keywords', 'doc_terms'], 50K)
columns = [keywords_x_doc_terms, ...]
features = tf.io.parse_example(..., features=make_parse_example_spec(columns))
linear_prediction = linear_model(features, columns)

您还可以在交叉之前使用词汇查找:

keywords = categorical_column_with_vocabulary_file(
    'keywords', '/path/to/vocabulary/file', vocabulary_size=1K)
keywords_x_doc_terms = crossed_column([keywords, 'doc_terms'], 50K)
columns = [keywords_x_doc_terms, ...]
features = tf.io.parse_example(..., features=make_parse_example_spec(columns))
linear_prediction = linear_model(features, columns)

如果输入特征是数字类型,您可以使用 categorical_column_with_identitybucketized_column ,如示例中所示:

# vertical_id is an integer categorical feature.
vertical_id = categorical_column_with_identity('vertical_id', 10K)
price = numeric_column('price')
# bucketized_column converts numerical feature to a categorical one.
bucketized_price = bucketized_column(price, boundaries=[...])
vertical_id_x_price = crossed_column([vertical_id, bucketized_price], 50K)
columns = [vertical_id_x_price, ...]
features = tf.io.parse_example(..., features=make_parse_example_spec(columns))
linear_prediction = linear_model(features, columns)

要在 DNN 模型中使用交叉列,您需要将其添加到嵌入列中,如下例所示:

vertical_id_x_price = crossed_column([vertical_id, bucketized_price], 50K)
vertical_id_x_price_embedded = embedding_column(vertical_id_x_price, 10)
dense_tensor = input_layer(features, [vertical_id_x_price_embedded, ...])

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.feature_column.crossed_column。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。