728x90
# 또 다른 데이터셋을 이용해서 예측해 보자!
#주택가격예측 오렌지, 사이킷런, 딥러닝... 여러 가지 방법으로 할 수 있다
import keras
import numpy as np
import matplotlib.pyplot as plt
#보스턴 주택 가격 데이터셋
from keras.datasets import boston_housing
(train_data, train_labels), (test_data, test_data_labels) = boston_housing.load_data()
train_data.shape
test_data.shape
mean = train_data.mean(axis=0)
train_data -= mean
#train_data = train_data - mean 와 같은 표현
# 표준 편차를 구한다. 0번축을 기준으로 한다.
std = train_data.std(axis=0)
train_data / train_data / std
train_data = train_data / std
print(train_data)
mean = test_data.mean(axis=0)
test_data -= mean
std = test_data.std(axis=0)
test_data /= std
print(test_data)
#신경망 만들기 #mae 절대평균오차
from keras import models
from keras import layers
def build_model():
model = models.Sequential()
model.add(layers.Dense(64, activation='relu',input_shape=(train_data.shape[1],)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer='rmsprop',
loss='mse',
metrics=['mae'])
return model
# K-forder 검증. 테스트(검증), 학습용(훈련)
# k가 3개이면, 검증 결과가 1, 2, 3으로 나온다
#---->데이터가 부족할 때 사용하는 방법
k = 4
num_val_samples = len(train_data) // k #폴더의 사이즈
#반복할 때마다 []에 요소 추가하기
all_scores = []
for i in range(k):
print('처리중인 폴드 #', i, '번째')
#검증 데이터 준비: k번째 분할
#슬라이싱
val_data = train_data[i * num_val_samples : (i+1) * num_val_samples]
val_labels = train_labels[i * num_val_samples : (i+1) *num_val_samples]
#훈련 데이터 준비 #검증용 데이터 빼고 다 가져오기 #0에서부터 가져온다. 0은 값X
#1번부터 나머지 다 가져오기
partial_train_data = np.concatenate(
[train_data[: i* num_val_samples],
train_data[(i+1)*num_val_samples:]], axis=0)
partial_train_labels = np.concatenate(
[train_data[: i * num_val_samples],
train_data[(i+1)*num_val_samples:]], axis=0)
model = build_model()
model.fit(partial_train_data,
partial_train_labels,
epochs=20,
batch_size=1,
verbose=0)
val_mse, val_mae = model.evaluate(val_data, val_labels, verbose=0)
all_scores.append(val_mae)
print(all_scores)
np.mean(all_scores)
# K-folder 검증
k = 4
num_epochs = 500
num_val_samples = len(train_data) // k #폴더의 사이즈
all_scores = []
for i in range(k):
print('처리중인 폴드 #',i)
# 검증 데이터를 준비: k번째 분할
val_data = train_data[i * num_val_samples : (i+1) * num_val_samples]
val_labels = train_labels[i * num_val_samples : (i+1) * num_val_samples]
# 훈련 데이터의 준비:
partial_train_data = np.concatenate(
[train_data[: i * num_val_samples],
train_data[(i+1)*num_val_samples:]], axis=0)
partial_train_labels = np.concatenate(
[train_labels[: i * num_val_samples],
train_labels[(i+1)*num_val_samples:]], axis=0)
model = build_model()
history = model.fit(partial_train_data,
partial_train_labels,
epochs=num_epochs,
batch_size=1,
validation_data=(val_data, val_labels),
verbose=0)
mae_history = history.history['mae']
all_scores.append(mae_history)
print(all_scores)
#x의 i번째
average_mae_history = [np.mean([x[i] for x in all_scores]) for i in range(num_epochs)]
plt.plot(range(1, len(average_mae_history)+1), average_mae_history)
plt.xlabel('Epochs')
plt.ylabel('Validation MAE')
728x90
'MS AI School' 카테고리의 다른 글
DAY 38 - CRUD 애플리케이션 만들기 (0) | 2022.12.09 |
---|---|
DAY 34 - CNN, 이미지의 증식(오버피팅 줄이는 방법) (0) | 2022.12.07 |
DAY 32 - 다중 분류 실습(로이터 기사) (0) | 2022.12.06 |
DAY 31 - 이진 분류 실습(영화 리뷰 IMDB dataset) (0) | 2022.12.06 |
DAY 30 - 모델 저장 및 불러오기 .PKL (0) | 2022.12.06 |