tensorflow中对特征的处理方式 tf.feature_column

这里介绍tensorflow中几种常见的特征处理方式,也是tensorflow中封装好的库函数。
主要来源于tf.feature_column.*

1.tf.feature_column.categorical_column_with_hash_bucket

tf.feature_column.categorical_column_with_hash_bucket(
    key,
    hash_bucket_size,
    dtype=tf.dtypes.string
)

输入特征为稀疏特征,一般为字符串数据或者整型数据,将输入稀疏特征转换为有限个桶,计算公式为

output_id = Hash(input_feature_string) % bucket_size

要求input_feature_string为字符型,如果输入的稀疏特征是整型的,需要先转换为字符型才能使用上面的映射公式。
对于字典型的features,如果features[key]要么是Tensor,要么是 SparseTensor,但是如果是Tensor 的话,缺失值可以被表示为为-1的整型以及‘ ’的字符型,这种情况下,相应的特征值将会被舍弃掉。

2.tf.feature_column.categorical_column_with_identity

tf.feature_column.categorical_column_with_identity(
    key,
    num_buckets,
    default_value=None
)

输入特征为介于[0, num_buckets)之间的整型,通常是用于连续范围内的整型索引,但是也不一定是必须的,如果这个范围内的很多ID是用不到的,那么可以使用categorical_column_with_hash_bucket
对于字典型的features,如果features[key]要么是Tensor,要么是 SparseTensor,但是如果是Tensor 的话,缺失值可以被表示为为-1的整型以及‘ ’的字符型,这种情况下,相应的特征值将会被舍弃掉。

3.tf.feature_column.bucketized_column

tf.feature_column.bucketized_column(
    source_column,
    boundaries
)

每个桶取值的区间是左闭右开,boundaries表示区间分割点,例如boundaries=[0, 1, 2]表示会生成4哥桶,分别是(-inf, 0),[0, 1),[1, 2),[2, inf)。
举个例子:

boundaries = [0, 10, 100]
input tensor = [[-5, 10000]
                [150,   10]
                [5,    100]]
输出为:  
output = [[0, 3]
          [3, 2]
          [1, 3]]  


4.tf.feature_column.embedding_column

tf.feature_column.embedding_column(
    categorical_column,
    dimension,
    combiner='mean',
    initializer=None,
    ckpt_to_load_from=None,
    tensor_name_in_ckpt=None,
    max_norm=None,
    trainable=True
)

当你的输入是离散型数据,而你想要连续型的输出(例如输出的连续型数据喂给DNN)。
输入变量必须是由categorical_column_*函数所输出的CategoricalColumn类型数据。
上面各个参数的含义如下:

  • categorical_column:是由categorical_column_*函数所输出的CategoricalColumn类型数据,即是离散IDs,而这些IDs是用来从embedding lookup(embedding查找表)中查找时的输入。
  • dimension:大于0的整型数值,用来指定embedding的维度。
  • combiner:有一个字符串取值,表示对于单行样本如果有多个取值的情况下,如何对其进行降维,目前支持mean,sqrtn,sum这三种操作,默认情况下为mean,而sqrtn经常能够取得较好的效果,特别是在词袋模型形式的列特征时。这三种操作可以看作是对于每一列特征在样本级别的规范化
  • initializer:对于embedding变量的初始化,默认初始化方式为tf.compat.v1.truncated_normal_initializer表示以0为均值、 1/sqrt(dimension)为标准差的截断正态分布。

输出值为 离散IDs特征映射成的连续值特征

5.tf.feature_column.crossed_column

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

交叉后的特征会基于hash_bucket_size的大小进行hash得到结果,理论上,转换操作的公式如下:
Hash(cartesian product of features) % hash_bucket_size

你可能感兴趣的:(深度学习/机器学习,DNN)