본문 바로가기
네이버클라우드/AI

AI 9일차 (2023-05-18) 인공지능 기초 _머신러닝 - joblib_save & load

by prometedor 2023. 5. 18.

joblib

파이썬에서 객체를 직렬화(serialize)하고 디스크에 저장하고 로드하는 데 사용되는 라이브러리

ㄴ  일반적으로 대규모 데이터나 훈련된 모델과 같은 복잡한 파이썬 객체를 저장하고 재사용해야 할 때 유용

ㄴ pickle 모듈에 기반하며, NumPy 배열과 같은 대용량 데이터를 효율적으로 처리할 수 있는 기능을 제공

ㄴ 머신 러닝 모델의 저장 및 로드에 자주 사용됨

ㄴ 모델을 학습한 후에는 joblib.dump를 사용하여 모델을 저장하고, 필요할 때 joblib.load를 사용하여 모델을 로드하여 예측이나 추론을 수행할 수 있음

ㄴ 데이터 전처리 단계에서 사용된 변환기 객체를 저장하고 재사용할 수도 있음
ㄴ scikit-learn과 함께 자주 사용되며, scikit-learn 모델 및 변환기 객체를 저장하고 로드하는 데에 널리 사용됨


joblib의 주요 기능

ㄴ 객체의 저장 및 로드 : joblib.dump 함수를 사용하여 파이썬 객체를 디스크에 저장하고, joblib.load 함수를 사용하여 객체를 로드
ㄴ 메모리 맵 파일(memory-mapped file) 지원 : 대용량의 NumPy 배열과 같은 객체를 디스크에 메모리 맵 파일로 저장하여 메모리 사용량을 최적화할 수 있음
ㄴ 압축 지원 : 저장된 파일의 압축을 지원하여 디스크 공간을 절약하고 I/O 속도를 향상시킴
ㄴ 파이프라인 연속 저장 : 여러 개의 모델이나 변환기가 연속적으로 적용되는 파이프라인을 저장할 수 있음

 

 

실습

 

ml25_joblib_save_california.py

import numpy as np
from sklearn.model_selection import train_test_split, KFold
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import fetch_california_housing
from sklearn.ensemble import VotingRegressor
from sklearn.metrics import r2_score
from xgboost import XGBRegressor
from lightgbm import LGBMRegressor
from catboost import CatBoostRegressor

#1. 데이터 
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

x_train, x_test, y_train, y_test = train_test_split(
    x, y, test_size=0.2, shuffle=True, random_state=42
)

scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)

# [실습] 4시까지 성능향상시키기!!! gridSearchCV를 통한 하이퍼파라미터 적용!!!

#2. 모델
xgb = XGBRegressor()
lgbm = LGBMRegressor()
cat = CatBoostRegressor(verbose=0)

model = VotingRegressor(
    estimators=[('xgb', xgb), ('lgbm', lgbm), ('cat', cat)],
    n_jobs=-1
)

#3. 훈련
model.fit(x_train, y_train)

#4. 평가, 예측
# y_predict = model.predict(x_test)
# score = accuracy_score(y_test, y_predict)
# print('보팅 결과 : ', score)

regressors = [cat, xgb, lgbm]
for model in regressors:
    model.fit(x_train, y_train)
    y_predict = model.predict(x_test)
    score = r2_score(y_test, y_predict)
    class_names = model.__class__.__name__
    print('{0} 정확도 : {1: .4f}'.format(class_names, score))

# joblib 저장
import joblib
path = './_data/' # 패스 경로 잡기
joblib.dump(model, path+'project01.dat') # 저장이름 설정

# CatBoostRegressor 정확도 :  0.8492
# XGBRegressor 정확도 :  0.8287
# LGBMRegressor 정확도 :  0.8365

 

 

ml25_joblib_load_california.py

ml25_joblib_load_cali.py
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import fetch_california_housing
from sklearn.metrics import r2_score

#1. 데이터 
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

x_train, x_test, y_train, y_test = train_test_split(
    x, y, test_size=0.2, shuffle=True, random_state=42
)

scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)

# joblib 불러오기 // 2. 모델, 3. 훈련 
import joblib

path = './_data/'
model = joblib.load(path+'project01.dat')

#4. 평가, 예측
y_predict = model.predict(x_test)
score = r2_score(y_test, y_predict)
print('보팅 결과 : ', score)