Dans ce document, nous décrivons comment effectuer des transformations courantes avec tf.transform.
Nous supposons que vous avez déjà construit le pipeline de faisceaux selon les exemples et décrivons uniquement ce qui doit être ajouté à preprocessing_fn
et éventuellement au modèle.
Utilisation de données de chaîne/catégorielles
Le preprocessing_fn
suivant calculera un vocabulaire sur les valeurs de la fonctionnalité x
avec des jetons par ordre de fréquence décroissant, convertira les valeurs de la fonctionnalité x
en leur index dans le vocabulaire et effectuera enfin un codage à chaud pour la sortie.
Ceci est courant, par exemple, dans les cas d'utilisation où la fonctionnalité d'étiquette est une chaîne catégorielle. L’encodage one-hot résultant est prêt pour la formation.
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,
}
Imputation moyenne pour les données manquantes
Dans cet exemple, la fonctionnalité x
est une fonctionnalité facultative, représentée par un tf.SparseTensor
dans le preprocessing_fn
. Afin de le convertir en tenseur dense, nous calculons sa moyenne et définissons la moyenne comme valeur par défaut lorsqu'elle est absente d'une instance.
Le tenseur dense résultant aura la forme [None, 1]
, None
représente la dimension du lot, et pour la deuxième dimension ce sera le nombre de valeurs que x
peut avoir par instance. Dans ce cas, c'est 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])
}