본문 바로가기

인공지능/머신러닝

[머신러닝ML]모델 파일 저장 및 불러오기

~ 목차 ~

 1. 와인데이터 불러들이기
 2. 랜덤포레스트로 훈련까지(fit)만 수행하기

라이브러리


"""데이터 처리"""
import pandas as pd
import numpy as np

"""데이터 분류"""
from sklearn.model_selection import train_test_split

"""하이퍼파라메터 튜닝"""
from sklearn.model_selection import GridSearchCV

"""사용할 분류모델들"""
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import HistGradientBoostingClassifier
from xgboost import XGBClassifier

"""데이터 스케일링 : 정규화 및 표준화"""
from sklearn.preprocessing import StandardScaler

"""평가"""
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score

"""오차행렬(혼동행렬)"""
from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay

 


 

와인 데이터 불러오기

 


data=pd.read_csv("./data/08_wine.csv")
data

와인데이터 데이터프레임

 

 


데이터 분류

 


X = data.iloc[:,:-1]
y = data["class"]
len(X), len(y)

 

출력 : (6497, 6497)

 


X, y

 

출력 :

(      alcohol  sugar    pH
 0         9.4    1.9  3.51
 1         9.8    2.6  3.20
 2         9.8    2.3  3.26
 3         9.8    1.9  3.16
 4         9.4    1.9  3.51
 ...       ...    ...   ...
 6492     11.2    1.6  3.27
 6493      9.6    8.0  3.15
 6494      9.4    1.2  2.99
 6495     12.8    1.1  3.34
 6496     11.8    0.8  3.26
 
 [6497 rows x 3 columns],


 0       0.0
 1       0.0
 2       0.0
 3       0.0
 4       0.0
        ... 
 6492    1.0
 6493    1.0
 6494    1.0
 6495    1.0
 6496    1.0
 Name: class, Length: 6497, dtype: float64)


정규화하기

* 사용할 변수
   - 독립변수 정규화 : X_scaled
* 훈련과 동시에 transform하는 함수 : fit_transform()


ss = StandardScaler()
ss.fit(X)
X_scaled = ss.transform(X)

X_scaled.shape

 

출력 : (6497, 3)

 


X_train, X_test, y_train, y_test = train_test_split(X_scaled, y,
                                                   test_size=0.2,
                                                   random_state=42)
print(f"{X_train.shape} / {y_train.shape}")
print(f"{X_test.shape} / {y_test.shape}") 

 

출력 : 

(5197, 3) / (5197,)
(1300, 3) / (1300,)

 


랜덤포레스트 훈련하기

 


rf=RandomForestClassifier(n_jobs=-1, random_state=42)
rf

 

출력 :

rf

 


rf.fit(X_train, y_train)

 

출력 :

rf훈련

 


 

훈련모델 저장 및 불러오는 2가지 방법

1. joblib 방식

2. pickle 방식

 

joblib으로 파일 저장, 불러오기

* 폴더 생성 : model

* 훈련모델 파일 저장하기

   - 파일 확장자는 자유롭게


import joblib

joblib.dump(rf, "./model/rf_model_joblib.md")

 

출력 : ['./model/rf_model_joblib.md']

 

 

* 훈련모델 파일 불러오기


joblib_model = joblib.load("./model/rf_model_joblib.md")
joblib_model

 

출력 : 

파일 불러오기

* 불러온 파일로 훈련 예측하기


joblib_model.predict(X_test)

 

출력 : array([1., 0., 1., ..., 1., 1., 1.])


pickle로 파일 저장, 불러오기

* 훈련모델 파일 저장하기
   - wb : w는 쓰기, b는 바이너리 => 바이너리 형태로 쓰기
   - "wb"라는 속성을 부여
   - rf라는 함수를 파일에 덮어쓰기 시작함


import pickle

with open("./model/rf_model_pickle.md", "wb") as fw:
    pickle.dump(rf, fw)

 

* 훈련모델 파일 불러오기
   - rb : r은 읽기, b는 바이너리 => 바이너리 형태의 파일 내용 읽기


with open("./model/rf_model_pickle.md", "rb") as f:
    load_pickle_model = pickle.load(f)

load_pickle_model

 

출력 : 

 

 

*이후 부터는 예측할 데이터를 생성 또는 입력 받으셔서 예측을 수행하면 됨


load_pickle_model.predict(X_test)

 

출력 : array([1., 0., 1., ..., 1., 1., 1.])

 

 

728x90