호기심 많은 분석가

[Machine Learning] Sklearn으로 학습한 model 저장 및 재사용 방법 본문

Coding/Machine Learning & Python

[Machine Learning] Sklearn으로 학습한 model 저장 및 재사용 방법

DA Hun 2021. 5. 3. 11:27

포스팅 개요

 대용량의 데이터의 경우 sklearn으로 model을 학습시키는 데만 많은 시간이 소요되곤 합니다.

이 과정을 매번 반복하기엔 우리들의 시간이 너무 아깝습니다. 고로 이번에는 그 model을 저장하여 재사용할 수 있는 방법을 알아보겠습니다. 


포스팅 본문

 model은 pickle 형태로 저장할 것이고, 저장할 때는 sklearn의 joblib라는 Library를 사용하겠습니다. 

 

 pickle은 텍스트 상태의 데이터가 아닌 파이썬 객체 자체를 파일로 저장하기 위해 사용됩니다. 일반 덱스트의 경우 파일로 저장할 때 파일 입출력을 이용하나, 리스트나 클래스 같은 텍스트가 아닌 자료형은 일반적인 파일 입출력으로 저장하거나 불러올 수 없기 때문입니다. 

 

 LogisticRegression 기법을 활용한 코드를 통해 model의 저장 및 재사용 방법을 알아보겠습니다. 변수에 저장하여 사용하는 법, 파일에 저장하여 사용하는 법, 2가지를 배워보겠습니다. 

1. 라이브러리 불러오기

from sklearn.linear_model import LogisticRegression
from sklearn.externals import joblib
import pickle

2-1. 모델 학습시키기 & 변수에 모델 저장

# 모델 학습
LR = LogisticRegression(penalty='l2', n_jobs=-1, random_state=0)
LR.fit(X_train, y_train)

# 변수에 모델 할당
saved_model = pickle.dumps(LR) # pickle의 dump를 통해 변수명에 할당할 수 있습니다.

3-1. 모델 불러오기 & 적용

# 파일로 된 학습 모델 불러오기
LR_from_pickle = pickle.loads(saved_model)

# 데이터에 모델 적용
LR_from_pickle.predict(X_train)

# 결과
>> array([0, 0, 0, ..., 1, 0, 0], dtype=int8)

2-2. 모델 학습 시키기 & 파일로 모델 저장

# 모델 학습
LR = LogisticRegression(penalty='l2', n_jobs=-1, random_state=0)
LR.fit(X_train, y_train)

# 파일로 모델 저장
joblib.dump(LR, file_path) # 첫 번째 parameter로 모델을, 두 번째 parameter로 파일 경로와 이름을 설정합니다.

3-2. 모델 불러오기 & 적용

# 파일로 된 학습 모델 불러오기
LR_from_pickle = joblib.load(file_path)

# 데이터에 모델 적용
LR_from_pickle.predict(X_train)

# 결과
>> array([0, 0, 0, ..., 1, 0, 0], dtype=int8)

 이상으로 간단한 작업을 통해 많은 시간을 단축할 수 있는 방법에 대해 배워보았습니다. 

pickle이라는 파일이 낯설 순 있지만, 한 번만 사용해보시면 어떤 느낌인지 충분히 이해할 수 있을 거라 믿습니다. 궁금하신 점 있으면 편하게 물어봐주세요.! :)