En aquest tema, explorarem com transformar dades utilitzant TensorFlow Extended (TFX). La transformació de dades és una part crucial del procés de preparació de dades per a l'entrenament de models de machine learning. Ens permet netejar, normalitzar i augmentar les dades per millorar el rendiment del model.

Objectius del tema

  • Entendre la importància de la transformació de dades.
  • Aprendre a utilitzar tf.Transform per transformar dades.
  • Implementar transformacions comunes com la normalització i la codificació.
  • Aplicar transformacions a dades d'entrenament i de prova de manera consistent.

  1. Importància de la transformació de dades

La transformació de dades és essencial per diverses raons:

  • Neteja de dades: Eliminar valors nuls o erronis.
  • Normalització: Escalar les dades perquè tinguin una distribució uniforme.
  • Codificació: Convertir dades categòriques en un format que els models de machine learning puguin utilitzar.
  • Augmentació de dades: Generar noves mostres a partir de les existents per millorar la generalització del model.

  1. Introducció a tf.Transform

tf.Transform és una biblioteca de TFX que permet definir i aplicar transformacions de dades de manera eficient i consistent. Les transformacions es defineixen en un codi Python i es poden aplicar tant a les dades d'entrenament com a les de prova.

Instal·lació de tf.Transform

Abans de començar, assegura't de tenir tf.Transform instal·lat:

pip install tensorflow-transform

  1. Definició de transformacions amb tf.Transform

Exemple de codi: Normalització de dades

A continuació, veurem un exemple de com normalitzar dades numèriques utilitzant tf.Transform.

import tensorflow as tf
import tensorflow_transform as tft
import tensorflow_transform.beam as tft_beam
import apache_beam as beam

# Definim una funció de preprocessament
def preprocessing_fn(inputs):
    outputs = {}
    # Normalitzem una característica numèrica
    outputs['normalized_feature'] = tft.scale_to_z_score(inputs['feature'])
    return outputs

# Exemple de dades d'entrada
raw_data = [
    {'feature': 10.0},
    {'feature': 20.0},
    {'feature': 30.0},
]

# Especificació de l'esquema de les dades
raw_data_metadata = tft.tf_metadata.dataset_metadata.DatasetMetadata(
    tft.tf_metadata.schema_utils.schema_from_feature_spec({
        'feature': tf.io.FixedLenFeature([], tf.float32),
    })
)

# Aplicació de les transformacions
with beam.Pipeline() as pipeline:
    with tft_beam.Context(temp_dir='/tmp'):
        transformed_dataset, transform_fn = (
            (raw_data, raw_data_metadata) | tft_beam.AnalyzeAndTransformDataset(preprocessing_fn)
        )
        transformed_data, transformed_metadata = transformed_dataset

# Mostrem les dades transformades
for data in transformed_data:
    print(data)

Explicació del codi

  1. Definició de la funció de preprocessament: La funció preprocessing_fn defineix les transformacions que volem aplicar a les dades. En aquest cas, normalitzem una característica numèrica utilitzant tft.scale_to_z_score.

  2. Dades d'entrada: Definim un conjunt de dades d'exemple amb una característica numèrica.

  3. Especificació de l'esquema: Definim l'esquema de les dades d'entrada utilitzant tft.tf_metadata.

  4. Aplicació de les transformacions: Utilitzem Apache Beam per aplicar les transformacions definides a les dades d'entrada.

  5. Mostra de les dades transformades: Imprimim les dades transformades per veure el resultat de les transformacions.

  1. Transformacions comunes

Codificació de dades categòriques

La codificació de dades categòriques és una transformació comuna que converteix valors categòrics en valors numèrics.

def preprocessing_fn(inputs):
    outputs = {}
    # Codifiquem una característica categòrica
    outputs['encoded_feature'] = tft.compute_and_apply_vocabulary(inputs['categorical_feature'])
    return outputs

Augmentació de dades

L'augmentació de dades és una tècnica que genera noves mostres a partir de les existents per millorar la generalització del model.

def preprocessing_fn(inputs):
    outputs = {}
    # Augmentem les dades afegint soroll
    outputs['augmented_feature'] = inputs['feature'] + tf.random.uniform([], -0.1, 0.1)
    return outputs

Exercici pràctic

Exercici

Implementa una funció de preprocessament que faci les següents transformacions:

  1. Normalitzi una característica numèrica.
  2. Codifiqui una característica categòrica.
  3. Augmenti una característica numèrica afegint soroll.

Solució

def preprocessing_fn(inputs):
    outputs = {}
    # Normalització
    outputs['normalized_feature'] = tft.scale_to_z_score(inputs['numeric_feature'])
    # Codificació
    outputs['encoded_feature'] = tft.compute_and_apply_vocabulary(inputs['categorical_feature'])
    # Augmentació
    outputs['augmented_feature'] = inputs['numeric_feature'] + tf.random.uniform([], -0.1, 0.1)
    return outputs

Conclusió

En aquest tema, hem après la importància de la transformació de dades i com utilitzar tf.Transform per aplicar transformacions comunes com la normalització, la codificació i l'augmentació de dades. Aquestes tècniques són essencials per preparar les dades de manera efectiva i millorar el rendiment dels models de machine learning.

© Copyright 2024. Tots els drets reservats