0 / 0
영어 버전 문서로 돌아가기

Data Handler 작성

마지막 업데이트 날짜: 2024년 11월 28일
Data Handler 작성

연합 학습 실험의 각 당사자는 데이터를 처리하기 위해 Data Handler를 가져와야 합니다. 사용자 또는 데이터 과학자가 데이터 핸들러를 작성해야 합니다. 데이터 핸들러는 실험에 대한 모든 데이터가 일관된 형식이 되도록 데이터를 로드하고 변환하는 Python 클래스입니다.

Data Handler 클래스 정보

Data Handler는 다음 기능을 수행합니다.

  • 모델을 훈련하는 데 필요한 데이터에 액세스합니다. 예를 들어, CSV 파일에서 Pandas 데이터 프레임으로 데이터를 읽습니다.
  • 데이터가 모든 당사자 간에 일관된 형식으로 되도록 데이터를 사전 처리합니다. 일부 예제의 경우는 다음과 같습니다.
    • 날짜 열은 시간 에포크 또는 시간소인으로 저장될 수 있습니다.
    • 국가 열은 인코딩되거나 축약될 수 있습니다.
  • 데이터 핸들러는 데이터 형식화가 일치하는지 확인합니다.
    • 선택사항: 필요한 경우 기능 엔지니어입니다.

다음 그림은 데이터 핸들러를 사용하여 데이터를 처리하고 실험에서 이용할 수 있도록 하는 방법을 보여줍니다.

데이터 형식을 통합하는 데이터 핸들러의 유스 케이스

한 당사자는 관계형 데이터베이스에 여러 테이블을 갖고 다른 당사자는 CSV 파일을 사용할 수 있습니다. 데이터 핸들러로 데이터를 처리한 후에는 통합된 형식을 갖게 됩니다. 예를 들어, 모든 데이터는 서로 결합된 별도의 테이블에 있는 이전 데이터와 함께 단일 테이블에 저장됩니다.

데이터 핸들러 템플리트

일반 Data Handler 템플리트는 다음과 같습니다.

# 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

매개변수

  • your_data_file_type: 임의의 문자열 필드일 수 있습니다. 예를 들어, 데이터 세트가 csv 형식인 경우 your_data_file_type 은 "CSV", ".csv", "csv", "csv_file" 등일 수 있습니다.

Keras 또는 Tensorflow 로 정의된 데이터 생성기를 리턴합니다.

다음은 Keras 또는 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

데이터 핸들러 예

상위 주제: 연합 학습 실험 작성