【feature_column处理】- categorical_column_with_vocabulary分类词汇列

1. 上个专栏我们聊过,categorical_column_with_identity可以将词汇转化为one-hot的embedding形式,但是需要先将词汇转化成数字,然后再做onehot处理
上篇博客,了解一下

https://blog.csdn.net/qq_31878083/article/details/121512300?spm=1001.2014.3001.5502

2. 分类词汇列
categorical_column_with_vocabulary_list
categorical_column_with_vocabulary_file

可以更简单的把词汇转化成onehot的embedding,不需要先把词汇先转化成数字编码
在这里插入图片描述
这两个函数都是处理非整数型的类别特征,区别在于:

  1. categorical_column_with_vocabulary_list: 对应类别比较少的情况,所有可能的类别可以直接输入到里面
  2. categorical_column_with_vocabulary_file: 对应类别比较多的情况,所有可能的类别可以从一个文件中输入

3. 以categorical_column_with_vocabulary_list为例

def categorical_column_with_vocabulary_list(key,
                                            vocabulary_list,
                                            dtype=None,
                                            default_value=-1,
                                            num_oov_buckets=0):
参数参数含义
key字符串的识别输入,feature名字
vocabulary_list对于category来说,需要进行转化的list,category列表
dtype支持的类型,目前只有string和int支持
default_value默认值。不在vocabulary_list时候需要给的默认值
num_oov_buckets超出词汇表词汇箱子标签数目,比如我们上面的例子中猪狗猫中出现了羊,那羊的类别就会在 箱子总数~(num_ovv_buckets+ 箱子总数)之间随机选择

具体一点: 比如num_oov_buckets=3,那羊就会标记3-6中的随机一个数字

注意: num_oov_buckets:是用来处理那些不在vocabulary_list中的值,如果是0,那么使用default_value进行填充;如果大于0,则会在[len(vocabulary_list),
len(vocabulary_list)+num_oov_buckets]这个区间上重新计算当前特征的值.与前面numeric
不同的是,这里返回的是稀疏tensor.

4. categorical_column_with_vocabulary_file

def categorical_column_with_vocabulary_file(key,
                                            vocabulary_file,
                                            vocabulary_size=None,
                                            num_oov_buckets=0,
                                            default_value=None,
                                            dtype=dtypes.string):

vocabulary_file: 存储词汇表的文件名
其他参数跟vocabulary_list相同

5. 举例

import tensorflow as tf

sess=tf.Session()
pets = {'animals': ["猪", "猫", "狗"]} 
column = tf.feature_column.categorical_column_with_vocabulary_list(
    key='animals',
    vocabulary_list=["猪", "狗"],
    dtype=None,
    num_oov_buckets=2)

column = tf.feature_column.indicator_column(column)

columns = [column]
# 输入层(数据,特征列)
inputs = tf.feature_column.input_layer(pets, columns)
# 初始化并运行
init = tf.global_variables_initializer()
sess.run(tf.tables_initializer())
sess.run(init)
print(sess.run(inputs))

结果

[[1. 0. 0. 0.]  #猪
 [0. 0. 0. 1.]  #猫
 [0. 1. 0. 0.]] #狗

有兴趣可以看我的专栏: 今天你面试了吗?

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值