Discretization
classkeras.layers.Discretization(
bin_boundaries=None,
num_bins=None,
epsilon=0.01,
output_mode="int",
sparse=False,
dtype=None,
name=None,
)
一个预处理层,用于将连续特征分桶到不同的区间.
该层会将输入数据的每个元素放入若干个连续区间之一,并输出一个整数索引,指示每个元素被放入的区间.
注意: 该层在 tf.data
管道中使用是安全的(无论使用哪个后端).
输入形状: 任何二维或更高维的数组.
输出形状: 与输入形状相同.
参数:
bin_boundaries: 一个桶边界列表.
最左边和最右边的桶将始终扩展到 -inf
和 inf
,
所以 bin_boundaries=[0., 1., 2.]
生成桶 (-inf, 0.)
、[0., 1.)
、[1., 2.)
和 [2., +inf)
.
如果设置此选项,则不应调用 adapt()
.
num_bins: 要计算的桶的整数数量.
如果设置此选项,
应调用 adapt()
以学习桶边界.
epsilon: 误差容限,通常是一个接近零的小数(例如 0.01).epsilon 值越高,分位数近似度越高,从而导致桶的不平等性增加,但可能会提高性能和资源消耗.
output_mode: 层的输出规范.
值可以是 "int"
、"one_hot"
、"multi_hot"
或
"count"
,配置层如下:
- "int"
:直接返回离散化的桶索引.
- "one_hot"
:将输入中的每个元素编码为一个与 num_bins
大小相同的数组,
在输入的桶索引位置包含一个 1.如果最后一个维度的大小为 1,将在该维度上进行编码.
如果最后一个维度的大小不是 1,将追加一个新的维度用于编码输出.
- "multi_hot"
:将输入中的每个样本编码为一个与 num_bins
大小相同的单个数组,
包含每个存在的桶索引的 1.
将最后一个维度视为样本维度,如果输入形状为 (..., sample_length)
,
输出形状将为 (..., num_tokens)
.
- "count"
:与 "multi_hot"
类似,但整数数组包含样本中桶索引出现的次数.
默认值为 "int"
.
sparse: 布尔值.仅适用于 "one_hot"
、"multi_hot"
和 "count"
输出模式.仅支持 TensorFlow 后端.如果为 True
,返回一个 SparseTensor
而不是密集的 Tensor
.默认值为 False
.
示例:
基于提供的桶对浮点值进行离散化.
>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = Discretization(bin_boundaries=[0., 1., 2.])
>>> layer(input)
array([[0, 2, 3, 1],
[1, 3, 2, 1]])
基于要计算的桶数量对浮点值进行离散化.
>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = Discretization(num_bins=4, epsilon=0.01)
>>> layer.adapt(input)
>>> layer(input)
array([[0, 2, 3, 2],
[1, 3, 3, 1]])