1. crossed_column作用: 对hash映射后的特征进行交叉
2. 特征交叉的优势: 在有些情况下,相比特征one-hot编码,会有更好的效果
3. 参数说明:
def crossed_column(keys, hash_bucket_size, hash_key=None):
参数 | 参数说明 |
---|---|
key | 可迭代的交叉特征 |
hash_bucket_size | 一个int> 1.桶的数量。ont-hot的长度。 |
hash_key | 指定将被使用的HASH_KEY FingerprintCat64功能做交叉,与SparseCrossOp(可选)相结合 |
4. 最后输出
交叉后的Tensor,输出是crossed_column的one_hot结果,hash_bucket_size代表输出的交叉向量的one-hot维度
5. 举例
import tensorflow as tf
sess=tf.Session()
#特征数据
features = {
'gender': [0, 1, 1, 0, 1],
'games': ['sport', 'sport', 'drawing', 'gardening', 'travelling'],
}
#特征列
department = tf.feature_column.categorical_column_with_vocabulary_list('games', ['sport','drawing','gardening','travelling'], dtype=tf.string)
sex = tf.feature_column.categorical_column_with_identity('gender', num_buckets=2, default_value=0)
sex_department = tf.feature_column.crossed_column([department,sex], 8)
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)
结果
[[1. 0. 0. 0. 0. 0. 0. 0.] # 0_sport
[0. 0. 0. 1. 0. 0. 0. 0.] # 1_sport
[0. 1. 0. 0. 0. 0. 0. 0.] # 1_drawing
[0. 1. 0. 0. 0. 0. 0. 0.] # 0_gradening
[0. 0. 0. 0. 1. 0. 0. 0.]] # 1_travelling