Cada parte de un experimento de aprendizaje federado debe obtener un manejador de datos para procesar sus datos. Usted o un experto en datos debe crear el manejador de datos. Un manejador de datos es una clase Python que carga y transforma datos para que todos los datos del experimento estén en un formato coherente.
Acerca de la clase de manejador de datos
El manejador de datos realiza las funciones siguientes:
- Accede a los datos necesarios para entrenar el modelo. Por ejemplo, lee datos de un archivo CSV en un marco de datos Pandas.
- Procesa previamente los datos para que los datos estén en un formato coherente en todas las partes. Algunos casos de ejemplo son los siguientes:
- La columna Fecha puede almacenarse como una época de tiempo o una indicación de fecha y hora.
- La columna País puede estar codificada o abreviada.
- El manejador de datos garantiza que el formato de los datos esté de acuerdo.
- Opcional: Ingeniero de características según sea necesario.
La siguiente ilustración muestra cómo se utiliza un manejador de datos para procesar datos y hacerlos consumibles por el experimento:
Una parte puede tener varias tablas en una base de datos relacional mientras que otra parte usa un archivo CSV. Una vez tratados los datos con el responsable del tratamiento, tendrán un formato unificado. Por ejemplo, todos los datos se colocan en una sola tabla y los datos anteriores se unen en tablas separadas.
Plantilla de manejador de datos
Una plantilla de manejador de datos general es la siguiente:
# your import statements
from ibmfl.data.data_handler import DataHandler
class MyDataHandler(DataHandler):
"""
Data handler for your dataset.
"""
def __init__(self, data_config=None):
super().__init__()
self.file_name = None
if data_config is not None:
# This can be any string field.
# For example, if your data set is in `csv` format,
# <your_data_file_type> can be "CSV", ".csv", "csv", "csv_file" and more.
if '<your_data_file_type>' in data_config:
self.file_name = data_config['<your_data_file_type>']
# extract other additional parameters from `info` if any.
# load and preprocess the training and testing data
self.load_and_preprocess_data()
"""
# Example:
# (self.x_train, self.y_train), (self.x_test, self.y_test) = self.load_dataset()
"""
def load_and_preprocess_data(self):
"""
Loads and pre-processeses local datasets,
and updates self.x_train, self.y_train, self.x_test, self.y_test.
# Example:
# return (self.x_train, self.y_train), (self.x_test, self.y_test)
"""
pass
def get_data(self):
"""
Gets the prepared training and testing data.
:return: ((x_train, y_train), (x_test, y_test)) # most build-in training modules expect data is returned in this format
:rtype: `tuple`
This function should be as brief as possible. Any pre-processing operations should be performed in a separate function and not inside get_data(), especially computationally expensive ones.
# Example:
# X, y = load_somedata()
# x_train, x_test, y_train, y_test = \
# train_test_split(X, y, test_size=TEST_SIZE, random_state=RANDOM_STATE)
# return (x_train, y_train), (x_test, y_test)
"""
pass
def preprocess(self, X, y):
pass
Parámetros
your_data_file_type
: puede ser cualquier campo de serie. Por ejemplo, si el conjunto de datos está en formatocsv
,your_data_file_type
puede ser "CSV", ". csv", "csv", "csv_file" y más.
Devolver un generador de datos definido por Keras o Tensorflow
A continuación se muestra un ejemplo de código que debe incluirse como parte de la función get_data
para devolver un generador de datos definido por Keras o Tensorflow:
train_gen = ImageDataGenerator(rotation_range=8,
width_sht_range=0.08,
shear_range=0.3,
height_shift_range=0.08,
zoom_range=0.08)
train_datagenerator = train_gen.flow(
x_train, y_train, batch_size=64)
return train_datagenerator
Ejemplos de manejador de datos
Tema padre: Creación de un experimento de aprendizaje federado