ML (MachineLearning)

GridSearch 를 이용한 최적의 하이퍼 파라미터 찾기

567Rabbit 2024. 4. 17. 12:36

https://www.tensorflow.org/api_docs/python/tf/keras?_gl=1*7074vd*_up*MQ..*_ga*MjEzMDk5NTY2NC4xNzEzNDg3ODQ0*_ga_W0YLR4190T*MTcxMzQ4Nzg0NC4xLjAuMTcxMzQ4Nzg0NC4wLjAuMA..

 

Module: tf.keras  |  TensorFlow v2.16.1

DO NOT EDIT.

www.tensorflow.org

 

 

! pip install scikeras

 

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

 

 

grid.best_params_      # 파라미터 정보

{'batch_size': 10, 'epochs': 30, 'optimizer': 'rmsprop'}

 

grid.best_score_       # 정확도

0.862125

 

 

best_model = grid.best_estimator_

best_model.predict(X_test)

array([0, 0, 0, ..., 0, 0, 0])

 

 

best_model.predict_proba(X_test)   # 확률로 보기

 
array([[0.7514862 , 0.24851382],
       [0.6307688 , 0.36923125],
       [0.8103051 , 0.18969488],
       ...,
       [0.8100885 , 0.1899115 ],
       [0.81499493, 0.1850051 ],
       [0.85258085, 0.14741915]], dtype=float32)

 

 

 

결과 보기

model = build_model()

model.summary()

model.fit(X_train, y_train, epochs=500, validation_split=0.2)    
# 80%는 학습시키고 20%는 시험시킨다

 

# validation이란 검증데이터를 말한다.

 

- 테스트? 인공지능 학습이 완전히 다 끝났을 때 평가하는 것 ex)수능
- validation? 에포크가 한번 끝날때마다 학습에 사용하지 않은 데이터로 시험을 보는 것을 말한다. ex)모의고사

 

 

-에포크를 500번 했을 때, 어느 순간부터 머신러닝 학습에서 loss(오차가) 더 늘어나는 현상이 발생하는데, 이를 overfitting(과적합)현상이라고 한다. overfitting(과적합)현상이란 과거데이터를 지나치게 많이 학습하여 과거데이터에 대한 오차는 줄어들지만 미래에 대한 예측에는 더 큰 오차를 가져오는 것을 말한다.

 

 

 

 

 

최적의 에포크를 사용하려면?

model.fit 메서드를 수정하여 검증 점수가 향상되지 않으면 자동으로 훈련을 멈추도록 만들어 본다. 에포크마다 훈련 상태를 점검하기 위해 EarlyStopping 콜백(callback)을 사용한다. 지정된 에포크 횟수 동안 성능 향상이 없으면 자동으로 훈련이 멈춘다

 

model = build_model()     # def를 빈 깡통 상태로 만들어줌

early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
# patience를 5로 설정하면, 5번의 에포크동안 성능향상이 없으면 학습을 멈추라는 의미이다.


from keras.callbacks import EarlyStopping

epoch_history = model.fit(X_train, y_train, epochs = 100000, validation_split=0.2, callbacks=[early_stop])

 

 

 

 

최종 시험보기

model.evaluate(X_test, y_test)

[==============================] - 0s 6ms/step - loss: 0.1021 - mae: 0.2288
[0.10210247337818146, 0.22881145775318146]