๐คํ์ดํผํ๋ผ๋ฏธํฐ ํ๋
์ ๊ฒฝ๋ง์ ์ ์ฐํ ๋งํผ ์กฐ์ ํด์ผํ ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ ๋งค์ฐ ๋ง์ต๋๋ค.
๋ณต์กํ ๋คํธ์ํฌ ๊ตฌ์กฐ์์๋ฟ๋ง ์๋๋ผ ๊ฐ๋จํ ๋ค์ธต ํผ์ ํธ๋ก ์์๋ ์ธต์ ๊ฐ์, ์ธต๋ง๋ค ์๋ ๋ด๋ฐ์ ๊ฐ์, ๊ฐ ์ธต์์ ์ฌ์ฉํ๋ ํ์ฑํํจ์, ๊ฐ์ค์น ์ด๊ธฐํ ์ ๋ต ๋ฑ ๋ง์ ๊ฒ์ ์ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ค์ํ ๊ฒ์ ์ด๋ค ํ์ดํผํ๋ผ๋ฏธํฐ ์กฐํฉ์ด ๊ฐ์ฅ ์ต์ ์ธ์ง ์์์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ์ค ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ค์ํ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ๋ก ์กฐํฉํ์ฌ ์๋ํด๋ณด๊ณ Validation์์ ์ข์ ์ ์๋ฅผ ๋ด๋ ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ Validation ์ด์ฉํ๊ธฐ
GridSearchCV ๋๋ RandomizedSearchCV๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํผํ๋ผ๋ฏธํฐ ๊ณต๊ฐ์ ํ์ํ ์ ์์ต๋๋ค.
์ด๋ CV๋ Cross Validaition์ ์ฝ์๋ก ๊ต์ฐจ๊ฒ์ฆ์ ์๋ฏธํฉ๋๋ค.
GridSearchCV
GridSearchCV๋ ๊ต์ฐจ ๊ฒ์ฆ ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ต์ ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ ํด๋์ค์ ๋๋ค.
๋ง ๊ทธ๋๋ก ๊ฒฉ์ ํ์์ด๋ผ๋ ์๋ฏธ๋ก ํ์ดํผํ๋ผ๋ฏธํฐ์ ๋ฃ์ ์ ์๋ ๊ฐ๋ค์ ์์ฐจ์ ์ผ๋ก ์ ๋ ฅํ ๋ค์ ๊ฐ์ฅ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๋ ํ์ดํผํ๋ผ๋ฏธํฐ๋ค์ ์ฐพ๋ ํ์ ๋ฐฉ๋ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ๋ฐฉ์ ๋ฐฐ์น๋ฅผ ํ ๋ ์ฑ ์ ๋ช๊ถ์ ๋์ ์ ์๋ ์ฑ ์ฅ์ ๋์ด์ผ ํ๋ ์ง, ์์๋ฅผ ๋ช ๊ฐ๋ฅผ ์ค์นํด์ผ ํ ์ง ๋ฑ๊ณผ ๊ฐ์ด
์ธ๋ถ์ ์ธ ๊ท์จ์ ์ธ์ฐ๋ ๊ฒ์ธ๋ฐ ๊ฐ์ฅ ์ต์ ์ ํจ์จ์ ๋ด๊ธฐ ์ํด ๋ชจ๋ ๋ฐฉ๋ฒ๋ค์ ์์ฐจ์ ์ผ๋ฃจ ์คํํ์ฌ ๊ฐ์ฅ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๋ ๊ฒ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด๋ฅผ ์ฝ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ผ๋ผ์ค ๋ชจ๋ธ์ ์ฌ์ดํท๋ฐ ์ถ์ ๊ธฐ์ฒ๋ผ ๋ณด์ด๋๋ก ๋ฐ๊พธ์ด์ผ ํฉ๋๋ค.
def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):
model = keras.models.Sequential()
model.add(keras.layers.InputLayer(input_shape=input_shape))
for layer in range(n_hidden):
model.add(keras.layers.Dense(n_neurons, activation="relu"))
model.add(keras.layers.Dense(1))
optimizer = keras.optimizers.SGD(lr=learning_rate)
model.compile(loss="mse", optimizer=optimizer)
return model
ํด๋น ํจ์๋ ์ฃผ์ด์ง ์ ๋ ฅ ํฌ๊ธฐ์ ์๋์ธต ๊ฐ์, ๋ด๋ฐ ๊ฐ์๋ก ๋จ๋ณ๋ ํ๊ท๋ฅผ ์ํ ๊ฐ๋จํ Sequential ๋ชจ๋ธ์ ๋ง๋ญ๋๋ค.
๋ํ SGD optimizer๋ฅผ ์ด์ฉํ์ฌ ์ง์ ๋ ํ์ต๋ฅ ์ ์ฌ์ฉํฉ๋๋ค.(์ตํฐ๋ง์ด์ ๋ ์ต์ ์ ๊ฐ์ค์น๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค)
์ดํ build_model()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ KerasRegressor ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ KerasRegressor ๊ฐ์ฒด๋ ๋ชจ๋ธ์ ๊ฐ์ธ๋ ๊ฐ๋จํ wrapper์ ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ชจ๋ธ ํ๋ จ์ ํ๋ฏ fit()๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ํ๊ฐํ ๋ predict()๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
keras_reg = keras.wrapper.scikit_learn.KerasRegressor(build_model)
keras_reg.fit(X_train, y_train, epochs=100,
validation_data = (X_valid, y_valid), callbacks=[kears.callbacks.EarlyStopping(patience=10)])
mse_test = kears_reg.score(X_test, y_test)
y_pred = kera_reg.predict(X_new)
๐ RandomizedSearchCV
RandomizedSearchCV๋ k-fold cross validation์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ X_valid์ y_valid๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
RandomizedSearchCV๋ ํ๋์จ์ด์ ๋ฐ์ดํฐ์ ์ ํฌ๊ธฐ, ๋ชจ๋ธ์ ๋ณต์ก๋, n_iter, CV๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์คํ์ด ๋๋๋ฉด ๋๋ค ํ์์ด ์ฐพ์ ์ต์์ ํ์ดํผํ๋ผ๋ฏธํฐ์ ํ๋ จ๋ ์ผ๋ผ์ค ๋ชจ๋ธ์ ์ป์ ์ ์์ต๋๋ค.
์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
from scipy.stats import reciprocal
from sklearn.model_selection import RandomizedSearchCV
param_distribs = {
"n_hidden": [0, 1, 2, 3],
"n_neurons": np.arange(1, 100),
"learning_rate": reciprocal(3e-4, 3e-2)
}
rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3, verbose=2)
rnd_search_cv.fit(X_train, y_train, epochs=100, validation_data=(X_valid, y_valid),
callbacks=[keras.callbacks.EarlyStopping(patience=10)])
'AI > Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ - 10(ํ์ ํด๋์ค API๋ก ๋์ ๋ชจ๋ธ ๋ง๋ค๊ธฐ) (0) | 2023.01.03 |
---|---|
[ML] ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ - 10์ฅ(๋ค์ํ ๋ชจ๋ธ ๋ง๋ค๊ธฐ) (0) | 2023.01.03 |
[ML] Neural Network(6) - ์ญ์ ํ(Backpropagation)(2) (0) | 2022.12.06 |
[ML] Neural Network(5) - ์ญ์ ํ(Backpropagation)(1) (0) | 2022.12.06 |
[ML] Neural Network(4) - ์์ ํ(Feedforward Process) (0) | 2022.12.01 |