Trasformazioni comuni

In questo documento descriviamo come eseguire trasformazioni comuni con tf.transform.

Supponiamo che tu abbia già costruito la pipeline del fascio seguendo le linee degli esempi e descriviamo solo ciò che deve essere aggiunto a preprocessing_fn ed eventualmente a model.

Utilizzo di dati stringa/categorici

Il seguente preprocessing_fn calcolerà un vocabolario sui valori della caratteristica x con token in ordine di frequenza decrescente, convertirà i valori della caratteristica x nel loro indice nel vocabolario e infine eseguirà una codifica a caldo per l'output.

Ciò è comune, ad esempio, nei casi d'uso in cui la funzionalità etichetta è una stringa categoriale. La codifica one-hot risultante è pronta per l'addestramento.

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

Imputazione media per i dati mancanti

In questo esempio, la funzionalità x è una funzionalità facoltativa, rappresentata come tf.SparseTensor in preprocessing_fn . Per convertirlo in un tensore denso, calcoliamo la sua media e impostiamo la media come valore predefinito quando manca da un'istanza.

Il tensore denso risultante avrà la forma [None, 1] , None rappresenta la dimensione batch e per la seconda dimensione sarà il numero di valori che x può avere per istanza. In questo caso è 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])
  }