【TensorFlow】(七)tf.feature_column.crossed_column()函数的作用及用法

1.作用

对hash映射之后的特征进行交叉。

优势:特征交叉,在有些情况下,特征独自编码与多维特征交叉后的特征特性会有不一样的结果。

使用方式:

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

输入:

keys可迭代识别功能交叉。每个元素可以是:
  • 字符串:将使用相应的功能,它必须是字符串类型。
  • CategoricalColumn :将类别转化为的张量。将采用此塔产生的转化张量。不支持散列类别列。
hash_bucket_size一个int> 1.桶的数量。ont-hot的长度。
hash_key指定将被使用的HASH_KEY FingerprintCat64功能做交叉,与SparseCrossOp(可选)相结合。

输出:

交叉后的Tensor。输出为cross的one-hot结果,hash_bucket_size代表输出的交叉向量的one-hot维度。

2.例子

官方文档中给了一个执行交叉的过程:从例子中可看出,按照index进行交叉的,也就是说同一个样本,不同特征进行交叉。对于缺失的特征,使用前一个index的特征做交叉。

SparseTensor1:
 

shape = [2, 2]
{
    [0, 0]: "a"
    [1, 0]: "b"
    [1, 1]: "c"
}

SparseTensor2:

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
}

具体例子: 

import tensorflow as tf
sess=tf.Session()
#特征数据
features = {
    'sex': [1, 2, 1, 1, 2],
    'department': ['sport', 'sport', 'drawing', 'gardening', 'travelling'],
}
#特征列
department = tf.feature_column.categorical_column_with_vocabulary_list('department', ['sport','drawing','gardening','travelling'], dtype=tf.string)
sex = tf.feature_column.categorical_column_with_identity('sex', num_buckets=2, default_value=0)
sex_department = tf.feature_column.crossed_column([department,sex], 10)
# sex_department = tf.feature_column.crossed_column([features['department'],features['sex']], 16)
sex_department = tf.feature_column.indicator_column(sex_department)
#组合特征列
columns = [sex_department]
#输入层(数据,特征列)
inputs = tf.feature_column.input_layer(features, columns)

#初始化并运行
init = tf.global_variables_initializer()
sess.run(tf.tables_initializer())
sess.run(init)

v=sess.run(inputs)
print(v)

输出:

[[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

参考

1.官方文档:https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/feature_column/crossed_column

2.知乎:https://zhuanlan.zhihu.com/p/73701872

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值