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)