Crear el manejador de datos

Última actualización: 28 nov 2024
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:

Un caso de uso del manejador de datos que unifica formatos de datos

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

  • your_data_file_type: Puede ser cualquier campo de cadena. Por ejemplo, si su conjunto de datos está en formato ' csv, ' your_data_file_type ' puede ser "CSV", ".csv", "csv", "csv_file" y más.

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 ' 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 principal: Creación de un experimento de aprendizaje federado