常见转换

本文档介绍了如何使用 tf.transform 进行常见转换。

我们假设您已经按照示例构建了 Beam 管道,并且只描述了需要添加到 preprocessing_fn 和可能模型中的内容。

使用字符串/分类数据

以下 preprocessing_fn 将根据特征 x 的值计算词汇表,其中标记按降序频率排序,将特征 x 的值转换为词汇表中的索引,最后对输出执行独热编码。

例如,在标签特征是分类字符串的用例中,这很常见。生成的独热编码已准备好进行训练。

def preprocessing_fn(inputs):
  integerized = tft.compute_and_apply_vocabulary(
      inputs['x'],
      num_oov_buckets=1,
      vocab_filename='x_vocab')
  one_hot_encoded = tf.one_hot(
      integerized,
      depth=tf.cast(tft.experimental.get_vocabulary_size_by_name('x_vocab') + 1,
                    tf.int32),
      on_value=1.0,
      off_value=0.0)
  return {
    'x_out': one_hot_encoded,
  }

用于缺失数据的均值插补

在此示例中,特征 x 是一个可选特征,在 preprocessing_fn 中表示为 tf.SparseTensor。为了将其转换为密集张量,我们计算其均值,并在实例中缺失时将均值设置为默认值。

生成的密集张量将具有形状 [None, 1]None 表示批次维度,对于第二维,它将是 x 每个实例可以具有的值的个数。在本例中,它是 1。

def preprocessing_fn(inputs):
  return {
      'x_out': tft.sparse_tensor_to_dense_with_shape(
          inputs['x'], default_value=tft.mean(x), shape=[None, 1])
  }