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])
}