본문 바로가기
Python/DeepLearning

딥러닝 - GridSearch 그리드서치 (베스트 모델 찾기)

by 하니__ 2024. 4. 17.
! pip install scikeras

 

sci keras 인스톨을 먼저 해준뒤

 

from scikeras.wrappers import KerasClassifier
from sklearn.model_selection import GridSearchCV
from keras.models import Sequential
from keras.layers import Dense

필요한 모듈들을 모두 임포트 해주자

def build_model(optimizer = 'adam'):
  model = Sequential()
  model.add(Dense(8, 'relu', input_shape = (11, )))
  model.add(Dense(6, 'relu'))
  model.add(Dense(1,'sigmoid'))
  model.compile(optimizer = optimizer, loss= 'binary_crossentropy', metrics = ['accuracy'])
  return model

첫 줄의 옵티마이저 는 최적화를 뜻하며

최적화를 하기 위해 보편적으로 가장 일을 잘 하는'adam' 을 써주자 는 의미이다

 

시퀀셜= 순차적으로 진행하라 를 model이라는 이름의 변수로 저장을 한뒤에

앞서 배웠던 히든레이어의 계층을 만들고

컴파일을 한다

 

이제 함수를 호출 할때마다 딥러닝을 반복하게 된다

 

model = KerasClassifier(build_fn = build_model)

 

위의 함수를 사용하기 위해 Keras 라이브러리의 build_fn 함수를 사용하도록 하자

my_param = { 'batch_size' : [10, 20], 'epochs' : [ 10, 20, 30 ], 'optimizer' : [ 'adam', 'rmsprop' ] }​

 

우선 최적화하고자 하는 하이퍼파라미터의 각각의 조건들을 지정 하자

배치사이즈는 10개씩, 20개씩

에폭스는 10번씩, 20번씩, 30번씩

옵티마이저는 adam으로 rmsprop으로

 

즉, 2 (batch_size) × 3 (epochs) × 2 (optimizer) = 12

총 12번의 각기 다른 조건으로 진행하게 된다

grid = GridSearchCV(estimator = model, param_grid = my_param, scoring = 'accuracy' )

 

그리드서치CV 모델의 하이퍼파라미터를 최적화하는 도구이며

 

estimator 는 최적화하고자 하는 모델을 지정,

param_grid 는 미리 지정한 파라미터의 변수를 지정,

scoring 는 그리드서치에서 모델을 평가할 때 사용할 평가 기준을 지정하는 것이며

여기서 'accuracy'는 정확도 점수를 기준으로 모델을 평가하는 것

grid.fit(X_train, y_train)

 

그리고 이걸 변수로 지정한 그리드에 fit 하자

 

 

 

각각 다른 조건으로 진행되기 때문에

시간이 많이 걸린다

 

그렇게 해선 나온 결과물에

 

 

grid.best_params_

 

 

그리드서치를 통해 찾은 최적의 파라미터 조합 을 알 수있으며,

 

grid.best_score_

그리드서치를 통해 찾은 최고 정확도를 알 수 있으며

 

 

best_model = grid.best_estimator_

 

다시 최적의 파라미터 조합을 입력시켜 학습시킬 필요 없이 위에서 찾은

최적의 하이퍼파라미터 조합을 사용하여 학습된 최적의 모델을

베스트모델 이라는 이름의 변수로 저장하자

 

 

 

best_model.predict(X_test)

 

 

최적의 모델로 테스트한 값이며

 

best_model.predict_proba(X_test)

 

 

 

퍼센테이지로 보고싶다면

predict에

_proba를 더해준다