[Deep Learning] Generating regression model for California housing dataset with Keras functional API
๐ง๐ป๐ป์ฉ์ด ์ ๋ฆฌ
Neural Networks
Keras
Layer
California housing dataset
Generating regression model for California housing dataset with keras functional API.
์์ ๊ฐ์ด ์ฌ๋ฌ ํ์ ๋ชจ๋๋ค์ import ํฉ๋๋ค.
matplotlib.pyplot, tensorflow, keras, fetch_california_housing
๊ทธ๋ฆฌ๊ณ , housing ๋ณ์์ dataset์ ํ ๋นํฉ๋๋ค.
๊ทธ๋ฐ ๋ค, print ๋ฌธ์ ์ฌ์ฉํ์ฌ, ์ธ์๋ก, housing, housings.keys(), housing.feature_names๋ฅผ ๋ฃ์ด ๊ฐ๊ฐ dataset์ ๋ด์ฉ, dataset์ ํค, dataset์ ํน์ฑ ์ด๋ฆ์ ์ถ๋ ฅํฉ๋๋ค.
์ ๋ด์ฉ์ผ๋ก, x_data์๋ housing.,data๋ฅผ ์ฌ์ฉํ์ฌ dataset์ ํน์ฑ ๊ฐ์ ํ ๋นํ๊ณ ,
y_data์๋ housing.target์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ target ๊ฐ์ ํ ๋นํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ shape์ ์์ ๊ฐ์ด ์ถ๋ ฅํฉ๋๋ค.
์บ๋ฆฌํฌ๋์ ์ฃผํ ๊ฐ๊ฒฉ dataset์ 20640๊ฐ์ ์ํ๊ณผ 8๊ฐ์ ํน์ฑ์ผ๋ก ๊ตฌ์ฑ๋ dataset์ ๋๋ค.
์ด dataset์ ์ฃผํ์ ์ง๋ฆฌ์ ์์น, ์ธ๊ตฌ ํน์ฑ, ์๋ ๋ฑ๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ํน์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ฃผํ์ ์ค๊ฐ ๊ฐ๊ฒฉ์ ์์ธกํ๋ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๊ฒ์ผ๋ก, ๊ฐ ์ํ์ ์บ๋ฆฌํฌ๋์์ ์ด๋ค ์ง์ญ์์ ์ธก์ ๋ data์ด๋ฉฐ, ์ฃผํ์ ์ค๊ฐ ๊ฐ๊ฒฉ์ dataset์ target ๊ฐ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, x_data.shape์ dataset์ด 20640๊ฐ์ ์ํ๊ณผ 8๊ฐ์ ํน์ฑ์ผ๋ก ์ด๋ฃจ์ด์ก๋ค๋ ๊ฒ์ ์๋ฏธํ๋ 2์ฐจ์ ๋ฐฐ์ด์ด๋ฉฐ, y_data.shape์ 20640๊ฐ์ ์ํ์ ๋ํ target ๊ฐ ํ๋์ฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, 1์ฐจ์ ๋ฐฐ์ด์ ๋๋ค.
์ ๋ด์ฉ์ผ๋ก ๋ณด๋ฉด, model_selection ๋ชจ๋๋ก๋ถํฐ ๋ถ๋ฌ์จ train_test_split ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด dataset์ ํ์ต dataset๊ณผ ํ ์คํธ dataset์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค. x_data๋ ์ ๋ ฅ ํน์ฑ๊ฐ, y_data๋ ์ถ๋ ฅ target ๊ฐ์ ๋๋ค.
๋ถ๋ฆฌ๋ ํ์ต dataset๊ณผ ํ ์คํธ dataset์ ๊ฐ๊ฐ x_train, x_test, y_train, y_test ๋ณ์์ ํ ๋นํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ print ํจ์๋ฅผ ํตํด์ x_train, x_test, y_train, y_test ์ ๊ฐ๋ค์ ํํ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
train_test_split ํจ์๋ dataset์ ํ์ต dataset๊ณผ ํ ์คํธ dataset์ผ๋ก ๋ฌด์์ ๋ถ๋ฆฌํฉ๋๋ค. test_size ์ธ์๋ฅผ ํตํด์ dataset์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
์ ์ฝ๋์์ 0.2๋ก ์ค์ ๋์ด ์์ผ๋ฏ๋ก, ์ ์ฒด dataset์์ 20%๋ฅผ ํ ์คํธ dataset์ผ๋ก ํ์ฉํ๊ณ , ๋๋จธ์ง 80%๋ฅผ ํ์ต dataset์ผ๋ก ํ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์๋, sklearn library์ StandardScaler class๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์คํํฉ๋๋ค.
1. StandardScaler() ๋ก scaler ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
2. sclaer์ fit_transform() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ x_train ๋ฐ์ดํฐ๋ฅผ ํ์คํ ์์ ์ ๊ฑฐ์นฉ๋๋ค.
fit_transform()์ ๋ด๋ถ ๊ณผ์ ์, ๋ ๋จ๊ณ๋ก ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ ํ๊ท ๊ณผ ํ์คํธ์ฐจ๋ฅผ ๊ณ์ฐํ์ฌ ๋ด๋ถ์ ์ผ๋ก ์ ์ฅํ ๋ค, ์ ์ฅ๋ ํ๊ท ๊ณผ ํ์คํธ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํ์คํํฉ๋๋ค.
fit_transform() ๋ฉ์๋๋ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
3. x_test๋ ๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์คํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ,
x_train_scaled์ x_test_scaled ๊ฐ๊ฐ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ feature๋ง ์ ํํ์ฌ x_train_selected์ x_test_selected๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๋๋ค.
[:,0:2]์์ ์ฒซ ๋ฒ์งธ ์ถ์์ ๋ชจ๋, ๋ ๋ฒ์งธ ์ถ์์ 0๊ณผ 1์ ์ธ๋ฑ์ค๋ง ์ ํํฉ๋๋ค.
๊ทธ๋์ ๊ฒฐ๊ณผ๋ (# of n_samples,2)๋ก ๋์ค๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ , test data์ ๋ํด์๋ fit_transform์ด ์๋, transform()์ ์ฌ์ฉํ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ํด์ผ,
์ ์ฝ๋๋ sklearn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ MLPRegressor ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ MLP(๋ค์ธต ํผ์ ํธ๋ก ) ๋ชจ๋ธ์ ํ์ตํ๊ณ ์์ธกํ๋ ๊ณผ์ ์ ๋๋ค.
1. MLPRegressor ํด๋์ค๋ก regr ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋, hidden_layer_sizes=(4,)๋ ์๋์ธต์ ๋ ธ๋ ์๋ฅผ 4๋ก ์ค์ ํ๋ค๋ ์๋ฏธ์ ๋๋ค. activation='relu'๋ ํ์ฑํ ํจ์๋ก ReLU ํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค.
2. fit() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ x_train_selected์ y_train ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ํ์ตํฉ๋๋ค.
3. predict() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ x_test_selected ๋ฐ์ดํฐ๋ก ์์ธก๊ฐ y_test_hat์ ๊ณ์ฐํฉ๋๋ค.
MLPRegressor ํด๋์ค๋ ๋ค์ธต ํผ์ ํธ๋ก ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ์ ์ธ ํ๋ผ๋ฏธํฐ๋ค์ ์ ๊ณตํ๋ฉฐ, hidden_layer_sizes๋ ์๋์ธต์ ๋ ธ๋ ์๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ์ ๋๋ค.
activation์ ์๋์ธต์์ ์ฌ์ฉํ activation function์ ์ง์ ํฉ๋๋ค.
fit() ๋ฉ์๋๋ ์ง์ ๋ ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ต์ํค๋ฉฐ, predict() ๋ฉ์๋๋ ํ์ต๋ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ ๋ํ ์์ธก๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ print๋ฌธ์ ์ด์ฉํ์ฌ, regr ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ณ , ํ์ต ๊ณผ์ ์์ ๋ํ๋ ์์ค๊ฐ์ ํ์ธํ๋ฉฐ, ํ์ต๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํฉ๋๋ค.
1. print(regr)์ ํ์ต๋ ๋ชจ๋ธ์ธ regr์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ถ๋ ฅ ๋ด์ฉ์๋ ์ ๋ ฅ์ธต, ์๋์ธต, ์ถ๋ ฅ์ธต์ ๋ ธ๋ ์์ ํ์ฑํ ํจ์ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
2. print(regr.loss_curve_)๋ ํ์ต ๊ณผ์ ์์ ๋ํ๋ ์์ค๊ฐ์ ์ถ๋ ฅํฉ๋๋ค. ์์ค๊ฐ์ ๋ชจ๋ธ์ด ์์ธกํ ์ถ๋ ฅ๊ฐ๊ณผ ์ค์ ์ถ๋ ฅ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด ๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ๋ชจ๋ธ ํ์ต์ ๋ชฉ์ ์ ๋๋ค. loss_curve_๋ ๋ชจ๋ธ ํ์ต ๊ณผ์ ์์ ๊ณ์ฐ๋ ์์ค๊ฐ๋ค์ ์๊ฐ ์์๋๋ก ์ ์ฅํ๊ณ ์์ต๋๋ค.
3. print(regr.score(x_test_selected, y_test))๋ x_test_selected, y_test ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. score() ๋ฉ์๋๋ ๋ชจ๋ธ์ด ์์ธกํ ์ถ๋ ฅ๊ฐ๊ณผ ์ค์ ์ถ๋ ฅ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ์ฌ ์ ํ๋๋ฅผ ์ธก์ ํฉ๋๋ค. ๋ฐํ๊ฐ์ 0๊ณผ 1์ฌ์ด์ ๊ฐ์ผ๋ก, 1์ ๊ฐ๊น์ธ์๋ก ๋ชจ๋ธ์ ์์ธก์ด ์ ํํ๋ค๋ ์๋ฏธ์ ๋๋ค.
์๋ y_test์ y_test_hat์ ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ํ์คํ ๊ทธ๋จ์ ์๊ฐํํ๋ ์ฝ๋์ ๋๋ค.
plt.hist() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ๊ทธ๋ ค์ค๋๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ก๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ช ๊ฐ์ ๊ตฌ๊ฐ์ผ๋ก ๋๋ ๊ฒ์ธ์ง ์ค์ ํฉ๋๋ค. color ์ธ์๋ก๋ ์์์, alpha ์ธ์๋ก๋ ํฌ๋ช ๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. plt.title() ํจ์๋ ๊ทธ๋ํ์ ์ ๋ชฉ์ ์ง์ ํ๊ณ , plt.legend() ํจ์๋ ๊ทธ๋ํ์ ๋ฒ๋ก๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด๋ ๊ฒ ์๊ฐํ๋ ํ์คํ ๊ทธ๋จ์ ํตํด, ๋ชจ๋ธ์ด ์์ธกํ y_test_hat ๋ฐ์ดํฐ๊ฐ ์ค์ y_test ๋ฐ์ดํฐ์ ์ผ๋ง๋ ์ผ์นํ๋์ง, ๊ทธ ๋ถํฌ๊ฐ ์ด๋ค์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์์ ๊ฐ์ด hidden_layer_sizes๊ฐ (4,)์ธ MLPRegressor ๋ชจ๋ธ์ ๋ค์ ๋ง๋ค์ด, ์ ์ฒด feature์ ๋ํด ํ์ต์ํค๊ณ ํ ์คํธ ๋ฐ์ดํฐ์ ๋ํ ์์ธก๊ฐ์ ๊ณ์ฐํ๋ ์ฝ๋์ ๋๋ค.
์ด์ ์ ์ ํํ 2๊ฐ์ feature ๋์ ์ ์ฒด feature๋ฅผ ์ฌ์ฉํ์ฌ model์ ํ์ต์ํจ ๊ฒฐ๊ณผ, ์์ธก๊ฐ์ ์ ํ๋๊ฐ ๋ ๋์์ก์ต๋๋ค. ์ด๋ ๋ ๋ง์ feature๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ณต์กํ ํจํด์ ํ์ตํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
print(regr2)๋ ๋ชจ๋ธ์ ๊ตฌ์ฑ๊ณผ hyperparameter๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print(regr2.loss_curve_)๋ model ํ์ต ์ค ๊ธฐ๋ก๋ loss ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , print(regr2.score(x_test_scaled, y_test))๋ ๋ชจ๋ธ์ test set์ ๋ํ ์ ํ๋๋ฅผ ์ธก์ ํฉ๋๋ค. 1์ ๊ฐ๊น์ธ์๋ก ์ ํํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ histogram์ผ๋ก ์ ๊ฒฐ๊ณผ๋ณด๋ค ๋ ๋ง์ feature๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๊ฐ ๋ ์ ๋์จ ๊ฒ์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
์ ์ฝ๋๋ LinearRegression ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ ์ฒด feature์ ๋ํด ํ์ต์ํค๊ณ ํ ์คํธ ๋ฐ์ดํฐ์ ๋ํ ์์ธก๊ฐ์ ๊ณ์ฐํ๋ ์ฝ๋์ ๋๋ค.
print(regr3)๋ ๋ชจ๋ธ์ ๊ตฌ์ฑ๊ณผ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print(regr3.score(x_test_scaled, y_test))๋ ๋ชจ๋ธ์ ํ ์คํธ์ ์ ๋ํ R^2 (๊ฒฐ์ ๊ณ์) ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
Linear Regression ๋ชจ๋ธ์ MLPRegressor์ ๋ค๋ฅด๊ฒ ์ ํ ๋ชจ๋ธ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ ๊ตฌ์กฐ๋ ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ MLPRegressor์๋ ๋ค๋ฆ ๋๋ค.
๋ํ, MLPRegressor๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ง๋ง, feature๊ฐ ์ ์ ๊ฒฝ์ฐ์๋ Linear Regression ๋ชจ๋ธ์ด ๋ ๊ฐ๋จํ๊ณ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
์ ์ฝ๋๋ LinearRegression model๋ก ํ์ต์ํจ ํ ์์ธกํ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํ ์ฝ๋์ ๋๋ค.
plt.hist(y_test, 30, color=’red’, alpha=0.3)๋ test set์ ์ค์ target y_test๋ฅผ 30๊ฐ ๊ตฌ๊ฐ์ผ๋ก ๋๋ ์ ํ์คํ ๊ทธ๋จ์ผ๋ก ์๊ฐํํฉ๋๋ค.
plt.hist(y_test_hat, 30, color=’b;ue’, alpap = 0.3)์ LinearRegresssion ๋ชจ๋ธ๋ก ์์ธกํ target y_test_hat์ 30๊ฐ์ ๊ตฌ๊ฐ์ผ๋ก ๋๋์ด์ ํ์คํ ๊ทธ๋จ์ผ๋ก ์๊ฐํํฉ๋๋ค.
์ ๋ชฉ๊ณผ ๋ฒ๋ก๋ฅผ ์ถ๊ฐํ์ฌ ๋ง๋ฌด๋ฆฌํฉ๋๋ค.
์ ์ฝ๋์์ input_shape๋ x_train_scaled์ shape์์ feature์ ์๋ง ์ถ์ถํ ๊ฒ์ ๋๋ค. ์ฆ, x_train_scaled๋ 2์ฐจ์ ๋ฐฐ์ด๋ก, ํ์ ์ํ์ ์, ์ด์ feature์ ์์ ๋๋ค.
x_train_scaled.shape[1]์ feature์ ์๋ฅผ ๋ฐํํ๋ฉฐ, input_shape๋ (# of n_features,)์ ํํ ํํ๋ก ์ ์๋ฉ๋๋ค.
์ด ํํ์ ๋ชจ๋ธ์ ์ฒซ ๋ฒ์งธ ์ธต์ธ layers.Dense์ input_shape ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋ชจ๋ธ์ ์ฒซ ๋ฒ์งธ ์ธต์ input_shape์ ์ง์ ํด์ค์ผ ๋ชจ๋ธ์ด ์ ๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์ ๋ด์ฉ์, Keras๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ท ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ๋๋ค.
์๋๋ ๊ฐ ์ค์ ์ญํ ์ ๋ํ ์ค๋ช ์ ๋๋ค.
- models.Sequential() : ์ธต(layer)์ ์์๋๋ก ์์ ๋ชจ๋ธ์ ์์ฑํ๋ ํจ์์ ๋๋ค.
- add() : ์์ฐจ์ ์ผ๋ก ์ธต์ ์ถ๊ฐํ๋ ํจ์์ ๋๋ค.
- layers.Dense(units=4, activation='relu',input_shape = input_shape) : fully connected layer๋ฅผ ์ถ๊ฐํ๋ ํจ์์ ๋๋ค. units๋ ์ด ์ธต์ ์ถ๋ ฅ ๋ด๋ฐ ์, activation์ ํ์ฑํ ํจ์๋ก ReLU๋ฅผ ์ฌ์ฉํ๊ณ , input_shape์ ์ ๋ ฅ ๋ฐ์ดํฐ์ shape์ ๋๋ค. ์ฒซ ๋ฒ์งธ ์ธต์์๋ง input_shape๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
- layers.Dense(units=2, activation='relu') : fully connected layer๋ฅผ ์ถ๊ฐํ๋ ํจ์์ ๋๋ค. ๋ด๋ฐ ์๋ฅผ 2๊ฐ๋ก ์ค์ ํ๊ณ , ํ์ฑํ ํจ์๋ก ReLU๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- layers.Dense(units=1, activation='linear') : fully connected layer๋ฅผ ์ถ๊ฐํ๋ ํจ์์ ๋๋ค. ๋ด๋ฐ ์๋ฅผ 1๊ฐ๋ก ์ค์ ํ๊ณ , ํ์ฑํ ํจ์๋ก ์ ํ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- compile() : ๋ชจ๋ธ์ ์ปดํ์ผํฉ๋๋ค. ์ด๋ loss ๋งค๊ฐ๋ณ์๋ก ์์ค ํจ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์์ ์์๋ ํ๊ท ์ ๊ณฑ ์ค์ฐจ(MSE)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- summary() : ๋ชจ๋ธ์ ๊ตฌ์ฑ์ ์์ฝํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
์ ๊ณผ์ ์ ์ ๋ฆฌํด๋ด ์๋ค.
Keras๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ธต ํผ์ ํธ๋ก (MLP)์ ํ์ต์ํค๋ ๊ณผ์ ์ ๋๋ค.
regr_model์ด๋ผ๋ ์ด๋ฆ์ ๋ชจ๋ธ์ ์ ์ํ๊ณ , ์ด ๋ชจ๋ธ์ 3๊ฐ์ Dense layer๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ layer๋ Dense ํด๋์ค๋ก ์ ์ํ๋ฉฐ, units๋ ํด๋น layer์์ ์ฌ์ฉํ ๋ ธ๋์ ๊ฐ์๋ฅผ ์๋ฏธํฉ๋๋ค.
activation์ ํด๋น layer์์ ์ฌ์ฉํ ํ์ฑํ ํจ์๋ฅผ ์ ์ํฉ๋๋ค. input_shape๋ ์ฒซ๋ฒ์งธ layer์์๋ง ์ ์ํ๋ฉฐ, ์ ๋ ฅ๊ฐ์ ์ฐจ์์ ์ ์ํฉ๋๋ค.
๋ชจ๋ธ์ด ์ ์๋์์ผ๋ฉด compile() ํจ์๋ฅผ ํตํด ํ์ต์ ์ํ ํ๊ฒฝ์ ์ค์ ํฉ๋๋ค. ์ด๋ฒ์๋ ์์คํจ์๋ก 'mean_squared_error'๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก fit() ํจ์๋ฅผ ํตํด ํ์ต์ ์งํํฉ๋๋ค. x_train_scaled, y_train ๋ฐ์ดํฐ๋ฅผ ํ์ตํ๋ฉฐ, validation_data ์ธ์๋ฅผ ํตํด ๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํฉ๋๋ค. epochs๋ ํ์ตํ ์ํญ ํ์๋ฅผ ์ค์ ํฉ๋๋ค.
ํ์ต์ด ๋๋๋ฉด ์์คํจ์์ ๊ฐ์ด ์ด๋ป๊ฒ ๋ณํํ๋์ง ํ์ธํ๊ธฐ ์ํด ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณผ ์ ์์ต๋๋ค.
์ด ์ฝ๋ ๋ชฉ์ ์ MLP ๋ชจ๋ธ์ ํ์ต ๊ณผ์ ์์ train ๋ฐ์ดํฐ์ ๊ณผ test ๋ฐ์ดํฐ์ ์ ๋ํ ํ๊ท ์ ๊ณฑ ์ค์ฐจ(Mean Squared Error, MSE) ๊ฐ์ ํ์ธ์ ๋๋ค.
history = regr_model.fit(x_train_scaled, y_train, validation_data=[x_test_scaled, y_test], epochs=100)๋ MLP ๋ชจ๋ธ์ ํ์ต์ํค๋ ๊ณผ์ ์ ๋ํ๋ ๋๋ค.
์ด๋, train ๋ฐ์ดํฐ์ (x_train_scaled, y_train)์ ์ด์ฉํด ํ์ต์ ์งํํ๊ณ , x_test_scaled์ y_test๋ฅผ validation ๋ฐ์ดํฐ์ ์ผ๋ก ์ด์ฉํด ์ฑ๋ฅ์ ํ๊ฐํฉ๋๋ค. epochs๋ ๋ชจ๋ธ์ ํ์ต์ํค๋ epoch์ ์๋ฅผ ๋ํ๋ ๋๋ค.
plt.plot(history.history['loss'])๋ train ๋ฐ์ดํฐ์ ์ ๋ํ MSE ๊ฐ์ ๋ณํ๋ฅผ ๊ทธ๋ํ๋ก ๋ํ๋ ๋๋ค.
plt.plot(history.history['val_loss'])๋ validation ๋ฐ์ดํฐ์ ์ ๋ํ MSE ๊ฐ์ ๋ณํ๋ฅผ ๊ทธ๋ํ๋ก ๋ํ๋ ๋๋ค.
๊ทธ๋ํ๋ฅผ ํตํด MSE ๊ฐ์ด ์ด๋ป๊ฒ ๋ณํํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ํ์ y์ถ์ MSE ๊ฐ์ด๋ฉฐ, x์ถ์ epoch ์์ ๋๋ค. plt.title, plt.ylabel, plt.xlabel, plt.legend๋ ๊ฐ๊ฐ ๊ทธ๋ํ์ ์ ๋ชฉ, y์ถ ๋ผ๋ฒจ, x์ถ ๋ผ๋ฒจ, ๋ฒ๋ก๋ฅผ ๋ํ๋ ๋๋ค. plt.show()๋ ๊ทธ๋ํ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํฉ๋๋ค.
'Artificial Intelligence > Deep Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Deep Learning] Deep Neural Network (1) (1) | 2023.04.14 |
---|---|
[Deep Learning] Generating two classification models for MNIST dataset with Keras sequential/functional API (0) | 2023.04.05 |
[Deep Learning] Backpropagation in special Functions (0) | 2023.04.03 |
[Deep Learning] Backpropagation (0) | 2023.03.30 |
[Deep Learning] Feedforward (0) | 2023.03.27 |