當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。