Jede Partei in einem Experiment für föderiertes Lernen muss einen Datenhandler zur Verarbeitung ihrer Daten abrufen. Sie oder ein Data-Scientist müssen den Datenhandler erstellen. Ein Datenhandler ist eine Python -Klasse, die Daten lädt und transformiert, sodass alle Daten für das Experiment in einem konsistenten Format vorliegen.
Informationen zur Datenhandlerklasse
Der Datenhandler führt die folgenden Funktionen aus:
- Greift auf die Daten zu, die zum Trainieren des Modells erforderlich sind. Liest beispielsweise Daten aus einer CSV-Datei in einen Pandas-Datenrahmen ein.
- Die Daten werden vorverarbeitet, sodass die Daten in einem konsistenten Format für alle Parteien vorliegen. Es folgen einige Beispiele für Fälle:
- Die Spalte Datum kann als Zeitepoche oder Zeitmarke gespeichert werden.
- Die Spalte Land kann codiert oder abgekürzt sein.
- Der Datenhandler stellt sicher, dass die Datenformatierung in Übereinstimmung ist.
- Optional: Bei Bedarf Featureentwickler.
Die folgende Abbildung zeigt, wie ein Datenhandler verwendet wird, um Daten zu verarbeiten und für das Experiment nutzbar zu machen:
Eine Partei verfügt möglicherweise über mehrere Tabellen in einer relationalen Datenbank, während eine andere Partei eine CSV-Datei verwendet. Nachdem die Daten mit dem Datenhandler verarbeitet wurden, haben sie ein einheitliches Format. Beispielsweise werden alle Daten in eine einzige Tabelle eingefügt und vorherige Daten in separaten Tabellen zusammengeführt.
Datenhandlerschablone
Eine allgemeine Datenhandlerschablone lautet wie folgt:
# 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 Zeichenfolgefeld sein. Wenn Ihr Dataset beispielsweise das Formatcsv
hat, kannyour_data_file_type
"CSV", ". csv", "csv", "csv_file" usw. sein.
Gibt einen Datengenerator zurück, der durch Keras oder Tensorflow definiert ist.
Das folgende Codebeispiel muss als Teil der Funktion get_data
eingeschlossen werden, um einen Datengenerator zurückzugeben, der von Keras oder Tensorflowdefiniert wird:
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
Datenhandlerbeispiele
Übergeordnetes Thema: Experiment für föderiertes Lernen erstellen