! 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]