Jeder Teilnehmer an einem Experiment des föderierten Lernens muss einen Datenhandler mit der Verarbeitung seiner Daten beauftragen. Sie oder ein Datenwissenschaftler müssen den Data Handler erstellen. Ein Data Handler ist eine Python, die Daten lädt und umwandelt, damit alle Daten für das Experiment in einem einheitlichen Format vorliegen.
Über die Datenhandler-Klasse
Der Data Handler führt die folgenden Funktionen aus:
- Greift auf die Daten zu, die zum Trainieren des Modells benötigt werden. Liest zum Beispiel Daten aus einer CSV-Datei in einen Pandas-Datenframe.
- Die Daten werden vorverarbeitet, so dass die Daten für alle Beteiligten in einem einheitlichen Format vorliegen. Nachfolgend einige Beispielfälle:
- Die Spalte Datum kann als Zeitepoche oder Zeitstempel gespeichert werden.
- Die Spalte Land kann verschlüsselt oder abgekürzt sein.
- Der Data Handler stellt sicher, dass die Datenformatierung übereinstimmt.
- Optional: Feature Engineer nach Bedarf.
Die folgende Abbildung zeigt, wie ein Data Handler verwendet wird, um Daten zu verarbeiten und sie für das Experiment nutzbar zu machen:
Eine Partei hat vielleicht mehrere Tabellen in einer relationalen Datenbank, während eine andere Partei eine CSV-Datei verwendet. Nachdem die Daten mit dem Data Handler verarbeitet wurden, werden sie ein einheitliches Format haben. So werden beispielsweise alle Daten in einer einzigen Tabelle gespeichert und frühere Daten in separaten Tabellen zusammengeführt.
Datenhandler-Vorlage
Eine allgemeine Datenhandler-Vorlage sieht wie folgt aus:
# 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
Parameter
your_data_file_type
: Dies kann ein beliebiges Stringfeld sein. Wenn Ihr Datensatz beispielsweise im Format "csv
vorliegt, kann "your_data_file_type
"CSV", ".csv", "csv", "csv_file" und mehr sein.
Rückgabe eines von Keras oder Tensorflow definierten Datengenerators
Es folgt ein Codebeispiel, das als Teil der Funktion ' get_data
eingefügt werden muss, um einen von Keras oder Tensorflow definierten Datengenerator zurückzugeben:
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
Beispiele für Datenhandler
Übergeordnetes Thema: Erstellen eines föderalen Lernexperiments