在现实世界中,有很多非数字型的特征,比如地址、经纬度、姓名等如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/9cd0844b82a85b35a364f2abc0c311db.png)
Figure 1. 非数字特征.
为什么要处理成数字呢,因为在DNN中,每个神经元上执行的其实都是输入数据和权重的矩阵乘法和加法操作,因此我们必须将特征转换为一个数字或者数字的vector。
以product_class表示产品分类特征为例,包含三个分类类型:
kitchenware —— 厨房用品
electronics —— 电子产品
sports —— 运动产品
ML模型经常以简单的vector表示分类特征,分类存在以1表示,分类不存在以0表示,当product_class为sports时,ML模型把product_class表示为[0,0,1],表示:
0: kitchenware is absent
0: electronics is absent
1: sports: is present
![](https://i-blog.csdnimg.cn/blog_migrate/12de00778d2d227841d7ff0a2b1c524b.png)
Figure 2. feature_column将原始数据和model需要的数据联系起来。
对于这些特征如何通过tf.feature_column处理表示呢?
tf.feature_column包含9中处理特征的方法,其层次关系如下:
![](https://i-blog.csdnimg.cn/blog_migrate/16a8c96c99d2c5fec326108689c4b2c4.png)
Figure 3. Feature column方法分为两种主要类别和一个混合类别。
主要包括处理分类数据的categorial column和数值数据的dense column,还有个混合的bucketized_column。
Numeric Column
numeric column的api
主要处理数值型特征,这个比较简单,既可以是scalar标量,也可以是vector或者tensor。
Bucketized Column
bucketized column的api
对于一些数值特征,我们不想直接作为模型输入,而是想根据数值范围划分为不同类型,比如年龄划分为不同年龄段等,这时候