Transformaciones comunes

En este documento describimos cómo realizar transformaciones comunes con tf.transform.

Suponemos que ya ha construido la tubería de vigas siguiendo las líneas de los ejemplos y solo describe lo que se debe agregar a preprocessing_fn y posiblemente al modelo.

Usando datos de cadena/categóricos

El siguiente preprocessing_fn calculará un vocabulario sobre los valores de la característica x con tokens en orden de frecuencia descendente, convertirá los valores de la característica x a su índice en el vocabulario y, finalmente, realizará una codificación one-hot para la salida.

Esto es común, por ejemplo, en casos de uso donde la característica de etiqueta es una cadena categórica. La codificación one-hot resultante está lista para el entrenamiento.

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,
  }

Imputación media de datos faltantes

En este ejemplo, la característica x es una característica opcional, representada como tf.SparseTensor en preprocessing_fn . Para convertirlo en un tensor denso, calculamos su media y configuramos la media para que sea el valor predeterminado cuando falta en una instancia.

El tensor denso resultante tendrá la forma [None, 1] , None representa la dimensión del lote y para la segunda dimensión será el número de valores que x puede tener por instancia. En este caso es 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])
  }