[DE] 객체부호화

박경국·2022년 2월 21일
0

Data Engineering

목록 보기
16/16
post-thumbnail

부호화와 복호화

객체는 크게 두 가지 방식으로 존재할 수 있습니다.

  • 인메모리 방식 : 코드가 실행되고 있는 메모리 안에서 표현되는 방식
  • 바이트열 방식 : 데이터를 파일에 쓰거나, 다른 사람에게 전송하기 위한 표현 방식

만약 머신러닝 모델을 만들었고, 그 모델을 엔지니어에게 전달해야 한다면, 바이트열 방식으로 넘기는 것이 효율적입니다. 짧은 코드면 모를까, 매우 길게 쓰여진 코드를 복사 붙여넣기로 전달할 수는 없습니다. 즉, 동료에게 머신러닝 모델을 넘기기 위해서는 인메모리 형식의 데이터를 바이트열 방식으로 바꿔야 합니다. 이를 부호화라고 합니다.

  • 인메모리 -> 바이트열 : 부호화, 직렬화, 인코딩, 마샬링
  • 바이트열 -> 인메모리 : 복호화, 역직렬화, 디코딩, 언마샬링

pickle을 사용하여 부호화하기

그럼 머신러닝 모델을 부호화해보겠습니다. 부호화에 사용할 라이브러리는 pickle입니다.

target = 'target'
features = df.drop(columns = target).columns

X_train  = df[features]
y_train = df[target]

model = RandomForestClassifier()

model.fit(X_train, y_train)
  • 랜덤포레스트를 사용한 간단한 머신러닝 모델입니다.
  • 피클링(pickle을 이용한 부호화)를 하기 전에 model을 학습해줍니다.
with open('model.pkl', 'wb') as pickle_file:
    pickle.dump(model, pickle_file)
  • 'wb'는 파일을 쓰라는 명령어입니다.
  • pickle.dump 함수로 model 객체를 부호화합니다.
  • 실행을 하면 디렉토리에 model.pkl 파일이 생성됩니다.

복호화해서 모델 사용하기

모델을 부호화하면 다음과 같은 상황에 이용할 수 있습니다.

  • 웹 어플리케이션에 부호화한 파일을 넘겨서 복호화하면 웹 어플리케이션 안에서 머신러닝 모델을 사용할 수 있습니다.
  • 코드를 불러오거나 작성할 필요없이 부호화한 파일을 이용하여 모델을 사용할 수 있습니다.

부호화한 모델은 다음과 같이 복호화하여 사용할 수 있습니다.

model = None
with open('pipe_model.pkl', 'rb') as pickle_road_file:
    model = pickle.load(pickle_road_file)
    
y_pred = model.predict(X_test)
  • model=None : 복호화한 model을 담을 변수를 만듭니다.
  • rb : 읽는 방식으로 pickle 파일을 엽니다.
  • pickle.load : load 함수로 부호화된 파일을 복호화하여 model 변수에 지정합니다.
  • model.predict(X_test) : 부호화하기 이전과 같은 방식으로 model을 사용합니다.

0개의 댓글