728x90
반응형
# 보스턴 주책가격 딥러닝
from tensorflow.keras.datasets.boston_housing import load_data
(x_train, y_train), (x_test, y_test) = load_data(path='boston_housing.npz', test_split=0.2, seed=777)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)

# (404, 13) (404,)
# (102, 13) (102,)

 

# 전처리, 표준화
# minmax normalization : x = (x - min) / (max - min) => x / max
# robust normalization : x = (x - 중간값) / (3분위값 - 1분위값)
# standardization : x = x-mean / std

import numpy as np
# 평균
mean = np.mean(x_train, axis = 0)
# 표준편차
std = np.std(x_train, axis = 0) # 표준편차값
# 표준화값
x_train = (x_train - mean) / std
x_test = (x_test - mean) / std

 

# 분리
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size = 0.33, random_state = 777)

 

# 모델
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
model.add(Dense(64, activation = 'relu', input_shape = (13,)))
model.add(Dense(32, activation = 'relu'))
model.add(Dense(1)) # 출력값 1개 # 시그모이드하면 안됨 0~1이니깐

 

# mse 평균 제곱오차
# mae 평균 절대오차
model.compile(optimizer = 'adam', loss = 'mse', metrics = ['mae'])

 

# 학습
history = model.fit(x_train, y_train, epochs = 10, validation_data = (x_val, y_val))

Epoch 1/10
9/9 [==============================] - 1s 18ms/step - loss: 573.3483 - mae: 22.1287 - val_loss: 590.5661 - val_mae: 22.0131
Epoch 2/10
9/9 [==============================] - 0s 6ms/step - loss: 539.8865 - mae: 21.2907 - val_loss: 566.5182 - val_mae: 21.4469
Epoch 3/10
9/9 [==============================] - 0s 6ms/step - loss: 477.1085 - mae: 19.9834 - val_loss: 535.4792 - val_mae: 20.6974
Epoch 4/10
9/9 [==============================] - 0s 6ms/step - loss: 466.8590 - mae: 19.5715 - val_loss: 493.8533 - val_mae: 19.6793
Epoch 5/10
9/9 [==============================] - 0s 6ms/step - loss: 424.9529 - mae: 18.5560 - val_loss: 438.8377 - val_mae: 18.3004
Epoch 6/10
9/9 [==============================] - 0s 5ms/step - loss: 379.3619 - mae: 17.4473 - val_loss: 369.3901 - val_mae: 16.5165
Epoch 7/10
9/9 [==============================] - 0s 6ms/step - loss: 306.1354 - mae: 15.6274 - val_loss: 289.7295 - val_mae: 14.3575
Epoch 8/10
9/9 [==============================] - 0s 6ms/step - loss: 242.9725 - mae: 13.7859 - val_loss: 208.9959 - val_mae: 11.8795
Epoch 9/10
9/9 [==============================] - 0s 6ms/step - loss: 151.2137 - mae: 10.6995 - val_loss: 139.9005 - val_mae: 9.3653
Epoch 10/10
9/9 [==============================] - 0s 5ms/step - loss: 101.8669 - mae: 8.2810 - val_loss: 93.3427 - val_mae: 7.3553

 

model.evaluate(x_test, y_test)

4/4 [==============================] - 0s 2ms/step - loss: 88.2695 - mae: 7.8024
[88.26952362060547, 7.802405834197998]

 

results = model.predict(x_test)
xval = range(len(x_test))

 

# 학습 결과 확인
# loss, acc, val_loss, val_acc를 그래프로 출력
# 훈련 및 검증데이터의 손실값을 그래프로 출력
import matplotlib.pyplot as plt

fig = plt.figure(figsize = (10,5))
ax1 = fig.add_subplot(1,2,1)
ax1.plot(xval, results, color='blue', label='predict_value')
ax1.set_title('predict value')
ax1.set_xlabel('data')
ax1.set_ylabel('price')
ax2 = fig.add_subplot(1,2,2)
ax2.plot(xval, results, color='orange', label='real_value')
ax2.set_title('real value')
ax2.set_xlabel('data')
ax2.set_ylabel('price')
plt.show()

 

fig = plt.figure(figsize = (10,5))
ax1 = fig.add_subplot(1,1,1)
ax1.plot(xval, results, color = 'blue', label = 'predict_value')
ax1.plot(xval, y_test, color = 'orange', label = 'real_value')
ax1.set_title('predict and real value')
ax1.set_xlabel('data')
ax1.set_ylabel('price')
ax1.legend()
plt.show()

 

 

반응형

+ Recent posts