1. 背景

tf.estimator是tensorflow的一个高级API接口,它最大的特点在于兼容分布式和单机两种场景,工程师可以在同一套代码结构下即实现单机训练也可以实现分布式训练,正是因为这样的特点,目前包括阿里在内的很多公司都在使用这一接口来构建自己的深度学习模型。

特征预处理是几乎所有机器学习模型所必须的一个过程,常见的特征预处理方法包括:连续变量分箱化、离散变量one-hot、离散指标embedding等,tensorflow给我们提供了一个功能强大的特征处理函数tf.feature_column,它通过对特征处理将数据输入网络并交由estimator来进行训练,本文通过实际的数据输出来直观地介绍与展现tf.feature_column的基本用法。

2. 数据处理

特征数据主要包括categorical和dense两类,处理方法是使用tensorflow中的feature_column接口来进行定义,如下图,总共有九种不同的函数,分别有五种Categorical function、三种numerical function 加上一种bucketized_column可属于任何一种,categorical column中的 with_identity其实和 dense column中的indicator_column没有区别,都是类别特征的one-hot表示,但是其属于不同的特征类别,前者属于categorical后者属于dense,对于estimator编写的不同网络而言,其可接受的one-hot类型不同,这里在实际操作中需要注意转换。

2.1 categorical column

2.1.1 categorical_column_with_identity

  • categorical_column_with_identity把numerical data转乘one hot encoding
  • 只适用于值为整数的类别型变量,实际输出如下:
import 

  • 如图输出为birthplace的one-hot结果,num_buckets用于确定每一个one-hot向量的最大特征类别数

2.1.2 categorical_column_with_vocabulary_list or categorical_column_with_vocabulary_file

  • categorical_column_with_vocabulary_list or categorical_column_with_vocabulary_file根据单词的序列顺序,把单词根据index转换成one hot encoding
  • 主要用于处理非整数型的类别特征,两个函数的区别在于处理变量类别的多少,数量前者对应类别少的情况,所有可能的类别可以直接输入,后者对应类别多的情况,所有可能的类别可以存在一个文件中输入,实际输出如下:
import 

  • 如图输出为sex的one-hot结果,其后跟着的list用于定义该变量的所有类别。

2.1.3 categorical_column_with_hash_bucket

  • categorical_column_with_hash_bucket:对于处理包含大量文字或数字类别的特征时可使用hash的方式,这能快速地建立对应的对照表,缺点则是会有哈希冲突的问题。
  • hash_bucket_size的大小一般设置为总类别数的2-5倍,该函数适用于不能确定所有类别样式的类别变量,实际输出如下:
import 

  • 如上,输出为department的one-hot结果,对于不同类的department出现了哈希冲突的情况。

2.1.4 crossed_column

  • crossed_column特征交叉,在有些情况下,特征独自编码与多维特征交叉后的特征特性会有不一样的结果。
  • 该函数不能对hash映射之后的特征进行交叉,实际输出如下:
import 

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

2.1.5 embedding_column

  • embedding_column:把categorical的data,借由lookup table的方式找寻对应的feature vector来表示。假设有81个单词,若使用categorical_column_vocbulary_list,然后转乘numerical的indicator_column,则需要81维度来描述此些单词,这样极易造成数据的稀疏化,对于推荐系统而言,大维度的稀疏数据对于结果的影响较大,因此我们考虑使用embedding_column,来对数据进行压缩,实际输出如下:
import 

  • 如上,输出为交叉特征的embading向量,embedding_column的输入为处理之后的特征变量,可以是categorical也可以是dense的。

2.2 Dense column

2.2.1 numeric_column

  • numeric_column:该函数主要用于处理连续型变量,即可以是float类型也可以是int类似,从table中读取对应的(key)column,并把它转成dtype的格式,实际情况如下:
import 

2.2.2 bucketized_column

  • bucketized_column: 该函数将连续变量进行分桶离散化,输出one-hot的结果,方便连续值指标与分类变量进行交叉特征构建,
  • 实际情况如下:
import 

3. 总结

本文通过直观的数据输出来展现tf.feature_column的特征处理过程,方便大家理解这个函数,tensorflow作为目前最常用的深度学习框架,有着很多高级的API,这些接口都可以极大方便我们算法工程师的工作,tf.estimator不仅可以很好地处理特征,同时它将train、evaluatete、predict都集成到了一起,大家平时可以多使用该接口。

unknown column in field list_tf.feature_column的特征处理探究相关推荐

  1. Unknown column '' in 'field list'

    Unknown column '' in 'field list' 解决办法 正确写法:cursor.execute("update book set name='%s' where id= ...

  2. php环境Unknown column ‘*‘ in ‘field list‘解决方案

    php环境Unknown column '*' in 'field list'解决方案 参考文章: (1)php环境Unknown column '*' in 'field list'解决方案 (2) ...

  3. Mysql: 错误代码:1054 Unknown column ‘ ‘ in ‘field list‘

    Mysql: 错误代码:1054 Unknown column ' ' in 'field list' CREATE TABLE `teacher`( `id` INT(8) NOT NULL, `n ...

  4. Unknown column '' in 'field list'解决方案

    很多人在用php+MySQL做网站往数据库插入数据时发现如下错误: 注册失败!Unknown column '1a' in 'field list' 结果发现用数字提交是没有问题的,其他如char型就 ...

  5. 使用sequelize针对多对多联结表进行查询时报“Unknown column in field list ”错误

    项目场景: 项目开发中用到一个比较经典的用户权限库表设计,关系如下图所示: t_user是用户表,t_role是角色表,t_user_role是两者之间的联结表,用户表和角色表是多对多的关系,通过t_ ...

  6. java.sql.SQLSyntaxErrorException: Unknown column ‘###‘ in ‘field list‘

    今天遇到这么一个异常信息,开发环境是使用的mybatis,经过简单翻译,得到解决问题的大致方向 由上图得到的信息,可以大概知道我们定义的实体对象与我们的数据库表字段没有一一对应,也就是说,没有找到对应 ...

  7. MYSQL:Unknown column ‘字段名‘ in ‘field list‘ 错误解决方案

    像这种问题,特别是新手来说,常见. 刚才帮同事看这个问题,实体类有字段,映射没问题,insert语句用的mybatisplus自带的方法,断点看到前端传值到实体类了,数据接收都正常,执行insert语 ...

  8. Cause: java.sql.SQLSyntaxErrorException: Unknown column 'xxxxx' in 'fiel

    Unknown column 'xxxxx' in 'fiel 今天又遇到一个问题,找了半天没有找到,头大,心累,身体难受,蓝瘦香菇!!!!! Error querying database. Cau ...

  9. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'rtjhyt' in 'field list'

    今天向数据库中插入语句遇到了这样的异常: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'rtjh ...

最新文章

  1. css画横线箭头_用CSS绘制三角形箭头
  2. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换时移性质示例 )
  3. 计算机视觉、机器学习相关领域论文和源代码大集合
  4. 清理和删除svn信息
  5. QT的QDesignerTaskMenuExtension类的使用
  6. Flume 1.6 遇Emoji表情发生截断丢失数据问题分析
  7. 如何远程比较两个系统里同一个ABAP类方法代码的差异
  8. 旧版Requests库
  9. java csv 单元格格式_Java读写CSV格式的文件
  10. 《Linux内核设计与实现》学习笔记之“Linux进程管理机制”
  11. 一路风景之川藏线徒步笔记
  12. (王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征
  13. 处理Windows快捷键占用冲突
  14. 小技巧2:Python 实现阿拉伯数字转化为中文数字
  15. 2021-11-17每日刷题打卡
  16. onenote正在与服务器联系以获取信息,随时记录重要信息 – OneNote
  17. 从两个和尚挑水的故事得到的启发
  18. 省考面试90+经验贴倾情奉献
  19. 2016版excel_有win10系统excel打开慢的问题来看
  20. nginx的负载均衡模块详解

热门文章

  1. Eigen(3)矩阵Matrix及其简单操作
  2. anaconda在ubuntu中添加环境变量
  3. 吃鸡服务器不接受响应,绝地求生:蓝洞优化服务器性能,从此告别掉帧延迟!...
  4. dhtmlXGrid复选框点击事件
  5. 绝地服务器维护7月5日,绝地求生正式服7月5日停机更新维护内容公告
  6. 2021年程序员可以做哪些副业?
  7. java实现儿时的超级玛丽游戏
  8. java arraylist 重复_Java中ArrayList去除重复元素
  9. mysql事务的重复性读_Mysql下InnoDB的可重复读级别的事务测试
  10. 学习笔记-AngularJs(十)