1. 在做特征处理的时候,我们不希望把一个数值直接传给模型,而是根据数值的范围对值分到不同的categories
这个时候就用到了tf.feature_column.bucketized_column
2.原理很简单,如图
比如你对一个日期的特征要做处理,可以利用分桶的方式把它分到任意一个bucket里面
给日期出分桶结果
日期 | 分桶表示 |
---|---|
1993 | [1, 0, 0, 0] |
2008 | [0, 1, 0, 0] |
2015 | [0, 0, 1, 0] |
2021 | [0, 0, 0, 1] |
3. bucketized_column函数
def bucketized_column(source_column, boundaries):
参数说明
参数 | 参数说明 |
---|---|
source_column | 输入特征的key,这里注意必须是numeric_column |
boundaries | 分桶的边界,比如boundaries=[0., 1., 2.],产生的bucket就是, (-inf, 0.), [0., 1.), [1., 2.), and [2., +inf), 每一个区间分别表示0, 1, 2, 3,所以相当于分桶分了4个 |
4. 举例
import tensorflow as tf
sess = tf.Session()
ydata = {"Year": [[1993], [2008], [2015], [2021]]}
numeric_feature_column = tf.feature_column.numeric_column("Year")
bucketized_feature_column = tf.feature_column.bucketized_column(
source_column=numeric_feature_column,
boundaries=[2000, 2010, 2020])
print(sess.run(tf.feature_column.input_layer(ydata, [bucketized_feature_column])))
5. 结果
[[1. 0. 0. 0.] #1993
[0. 1. 0. 0.] #2008
[0. 0. 1. 0.] #2015
[0. 0. 0. 1.]] #2021
有兴趣可以看我的专栏: 今天你面试了吗?