Crear el manejador de datos
Cada parte en un experimento de Aprendizaje Federado debe obtener un manejador de datos para procesar sus datos. Usted o un científico de datos debe crear el manejador de datos. Un manejador de datos es una clase de Python que carga y transforma los datos para que todos los datos del experimento estén en un formato consistente.
Acerca de la clase manejadora de datos
El manejador de datos realiza las siguientes funciones:
- Accede a los datos necesarios para entrenar el modelo. Por ejemplo, lee datos de un archivo CSV en un marco de datos Pandas.
- Preprocesa los datos para que tengan un formato coherente para todas las partes. Algunos casos de ejemplo son los siguientes:
- La columna Fecha puede almacenarse como una época o una marca de tiempo.
- La columna País puede estar codificada o abreviada.
- El manejador de datos se asegura de que el formato de los datos es el adecuado.
- Opcional: ingeniero de funciones según sea necesario.
La siguiente ilustración muestra cómo se utiliza un manejador de datos para procesar los datos y hacerlos consumibles por el experimento:
Una parte puede tener varias tablas en una base de datos relacional, mientras que otra utiliza un archivo CSV. Una vez procesados los datos con el manejador de datos, tendrán un formato unificado. Por ejemplo, todos los datos se colocan en una única tabla con los datos anteriores en tablas separadas unidas.
Plantilla de tratamiento de datos
Un modelo general de manejador de datos es el 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
: Puede ser cualquier campo de cadena. Por ejemplo, si su conjunto de datos está en formato 'your_data_file_type
, 'csv
' puede ser "CSV", ".csv", "csv", "csv_file" y más.your_data_file_type
Devuelve 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 '
' para devolver un generador de datos definido por Keras o Tensorflow:get_data
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 principal: Creación de un experimento de aprendizaje federado