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.
- 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.
- Introducció a
tf.Transform
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:
- Definició de transformacions amb
tf.Transform
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
-
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 utilitzanttft.scale_to_z_score
. -
Dades d'entrada: Definim un conjunt de dades d'exemple amb una característica numèrica.
-
Especificació de l'esquema: Definim l'esquema de les dades d'entrada utilitzant
tft.tf_metadata
. -
Aplicació de les transformacions: Utilitzem Apache Beam per aplicar les transformacions definides a les dades d'entrada.
-
Mostra de les dades transformades: Imprimim les dades transformades per veure el resultat de les transformacions.
- 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:
- Normalitzi una característica numèrica.
- Codifiqui una característica categòrica.
- 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.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres