새소식

Machine Learning

1.회귀문제_2_보스턴

  • -

layout: single
title: "jupyter notebook 변환하기!"
categories: coding
tag: [python, blog, jekyll]
toc: true
author_profile: false


보스턴 집값 예측 문제


import warnings
warnings.filterwarnings(action='ignore')

1. scikit-learn 패키지는 머신러닝 교육을 위한 최고의 파이썬 패키지입니다.

scikit-learn를 별칭(alias) sk로 임포트하는 코드를 작성하고 실행하세요.

# 여기에 답안코드를 작성하세요.
import sklearn as sk 

2. Pandas는 데이터 분석을 위해 널리 사용되는 파이썬 라이브러리입니다.

Pandas를 사용할 수 있도록 별칭(alias)을 pd로 해서 불러오세요.

# 여기에 답안코드를 작성하세요.
import pandas as pd 

3. 모델링을 위해 분석 및 처리할 데이터 파일을 읽어오려고 합니다.

Pandas함수로 데이터 파일을 읽어 데이터프레임 변수명 df에 할당하는 코드를 작성하세요.

path = 'https://raw.githubusercontent.com/khw11044/csv_dataset/master/boston.csv'
df = pd.read_csv(path)
df.head()

crim zn indus chas nox rm age dis rad tax ptratio black lstat medv
0 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
1 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14 21.6
2 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7
3 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94 33.4
4 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 396.90 5.33 36.2

결측치 확인

# 여기에 답안코드를 작성하세요.
print(df.isnull().sum())
crim       0
zn         0
indus      0
chas       0
nox        0
rm         0
age        0
dis        0
rad        0
tax        0
ptratio    0
black      0
lstat      0
medv       0
dtype: int64

데이터 설명

  • crim: 자치시(Town)별 1인당 범죄율

  • zn: 25,000 평방피트를 초과하는 거주지역 비율

  • indus: 비소매상업지역이 점유하고 있는 토지 비율

  • chas: 찰스강에 대한 더미 변수 (= 1 강 경계에 위치; 0 나머지)

  • nox: 10ppm당 농축 일산화질소

  • rm: 주택 1가구당 평균 방 개수

  • age: 1940년 이전에 건축된 소유주택 비율

  • dis: 5개 보스턴 직업센터까지 접근성 지수

  • rad: 방사형 도로까지의 접근성 지수

  • tax: 10,000달러 당 재산세율

  • ptratio: 자치시(Town)별 학생/교사 비율

  • black: 1000(Bk - 0.63)^2, 여기서 Bk는 자치시별 흑인의 비율을 의미

  • lstat: 모집단 하위 계층의 비율(%)

  • medv: 본인 소유 주택가격(중앙값) (단위:$1,000)-> 예측 타겟

다음 문항을 풀기 전에 아래 코드를 실행하세요.

# 여기에 답안코드를 작성하세요.
import seaborn as sns 
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Malgun Gothic'

4. rad(방사형 도로까지의 접근성 지수)에 대한 분포도를 알아 보려고 합니다.

rad(방사형 도로까지의 접근성 지수)에 대해 countplot그래프로 만들고 아래 가이드에 따라 답하세요.

  • Seaborn을 활용하세요.

  • rad(방사형 도로까지의 접근성 지수)에 대해서 분포를 보여주는 countplot그래프 그리세요.

# 여기에 답안코드를 작성하세요.

sns.countplot(x='rad', data=df)     # rad
plt.show()

5. medv(주택가격)에 대한 분포도를 알아 보려고 합니다.

medv(주택가격)에 대해 밀도함수와 히스토그램을 만들고 아래 가이드에 따라 답하세요.

  • Seaborn을 활용하세요.

  • medv(주택가격)에 대해서 분포를 보여주는 histplot그래프 그리세요.

  • 30개의 bar가 보이게 그래프를 그리세요

# medv 값 시각화 
sns.histplot(x='medv', data = df, bins=30, kde = True)
plt.show()

6.rm(평균 방 개수)과 medv(주택가격)의 분포를 같이 확인하려고 합니다.

.rm(평균 방 개수)과 medv(주택가격)을 jointplot 그래프로 만드세요.

  • Seaborn을 활용하세요.

  • X축에는 rm을 표시하고 Y축에는 medv을 표시하세요.

# 여기에 답안코드를 작성하세요.

import seaborn as sns
import matplotlib.pyplot as plt
import scipy.stats as st

graph = sns.jointplot(x=df['rm'], y=df['medv'], kind='scatter')
graph.set_axis_labels(xlabel='rm', ylabel='medv')
plt.show()
# 방이 많을 수록 주택가격이 높다

7.lstat(하위 계층의 비율)과 medv(주택가격)의 분포를 같이 확인하려고 합니다.

.lstat(하위 계층의 비율)과 medv(주택가격)을 jointplot 그래프로 만드세요.

  • Seaborn을 활용하세요.

  • X축에는 lstat을 표시하고 Y축에는 medv을 표시하세요.

# 여기에 답안코드를 작성하세요.

import seaborn as sns
import matplotlib.pyplot as plt
import scipy.stats as st

graph = sns.jointplot(x=df['lstat'], y=df['medv'], kind='scatter')
graph.set_axis_labels(xlabel='lstat', ylabel='medv')
plt.show()
# 하위계측의 비율이 높을 수록 주택가격이 낮아진다. 비슷한계층의 사람들끼리 같이 산다

8. 각 컬럼의 상관관계를 알아 보려고 합니다.

상관관계 히트맵을 그리세요.

  • numeric_only를 통해 숫자형 컬럼들만 나타내세요

  • cmap은 Blues로 하세요

  • cbar는 보이지 않습니다

  • 소수점은 소수점 3번째 자리 까지 나타내세요

# 여기에 답안코드를 작성하세요.
import seaborn as sns 
import matplotlib.pyplot as plt

# 상관관계 시각화 
plt.figure(figsize=(12,12))
sns.heatmap(df.corr(numeric_only=True),
           annot=True,
           cmap='Blues',
           cbar=False, # 옆에 칼라 바 제거 
           square=True,
            fmt='.3f', # 소수점
            annot_kws={'size':9}
           )    
plt.show()

9. 훈련과 검증 각각에 사용할 데이터셋을 분리하려고 합니다.

medv(주택가격) 컬럼을 label값 y로, 나머지 컬럼을 feature값 X로 할당한 후 훈련데이터셋과 검증데이터셋으로 분리하세요.

  • 대상 데이터프레임: df

  • 훈련과 검증 데이터셋 분리

    • 훈련 데이터셋 label: y_train, 훈련 데이터셋 Feature: X_train

    • 검증 데이터셋 label: y_valid, 검증 데이터셋 Feature: X_valid

    • 훈련 데이터셋과 검증데이터셋 비율은 80:20

    • random_state: 42

    • Scikit-learn의 train_test_split 함수를 활용하세요.

  • 스케일링 수행

    • sklearn.preprocessing의 MinMaxScaler 함수 사용

    • 훈련데이터셋의 Feature는 MinMaxScaler의 fit_transform 함수를 활용하여 X_train 변수로 할당

    • 검증데이터셋의 Feature는 MinMaxScaler의 transform 함수를 활용하여 X_valid 변수로 할당

# 여기에 답안코드를 작성하세요.
from sklearn.model_selection import train_test_split

target = 'medv'

x = df.drop(target, axis=1)
y = df[target]

X_train, X_valid, y_train, y_valid = train_test_split(x,y, test_size=0.2, random_state=42)
print(X_train.shape, X_valid.shape, y_train.shape, y_valid.shape)
(404, 13) (102, 13) (404,) (102,)
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler

scaler = MinMaxScaler()
X_train_s = scaler.fit_transform(X_train)
X_valid_s = scaler.transform(X_valid)

10. medv(주택가격)을 예측하는 머신러닝 모델을 만들려고 합니다.

아래 가이드에 따라 다음 모델을 만들고 학습을 진행하세요.

  • 의사결정나무(Decisiontree)

    • 트리의 최대 깊이: 5로 설정

    • 노드를 분할하기 위한 최소한의 샘플 데이터 수(min_sample_split): 3으로 설정

    • random_state: 120으로 설정

    • 의사결정나무(decision tree) 모델을 dt 변수에 저장해주세요.

  • 랜덤포레스트(RandomForest)

    • 트리의 최대 깊이: 5로 설정

    • 노드를 분할하기 위한 최소한의 샘플 데이터 수(min_sample_split): 3으로 설정

    • random_state: 120으로 설정

    • 랜덤포레스트(RandomForest) 모델을 rf 변수에 저장해주세요.

  • 선형회쉬(LinearRegression)

    • 선형회쉬(LinearRegression)모델을 lr 변수에 저장해주세요.
  • K최근접(KNeighborsRegressor)

    • 가장 가까운 이웃의 'K'개의 값(n_neighbors): 5로 설정

    • weights를 'distance'로 설정 # distance와 uniform이 있음

    • K최근접(KNeighborsRegressor)모델을 kr 변수에 저장해주세요.

from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from xgboost import XGBRegressor
from lightgbm import LGBMRegressor
dt = DecisionTreeRegressor(max_depth=5, min_samples_split=3, random_state=120)
rf = RandomForestRegressor(max_depth=5, min_samples_split=3, random_state=120)
lr = LinearRegression()
kr = KNeighborsRegressor(n_neighbors=5, weights='distance')

# XGBRegressor(max_depth=5, random_state=120)
# LGBMRegressor(random_state=120,verbose=-1)
dt.fit(X_train_s, y_train)
rf.fit(X_train_s, y_train)
lr.fit(X_train_s, y_train)
kr.fit(X_train_s, y_train)
KNeighborsRegressor(weights='distance')
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.

11. 위 모델들의 성능을 평가하려고 합니다.

예측 결과의 mae(Mean Absolute Error)를 구하세요.

  • 성능 평가는 검증 데이터셋 (X_valid, y_valid)을 활용하세요.

  • 의사결정나무(Decisiontree) 모델

    • 11번 문제에서 만든 의사결정나무(decision tree) 모델로 y값을 예측(predict)하여 y_pred_dt에 저장하세요.

    • 검증 정답(y_valid)과 예측값(y_pred_dt)의 mae(Mean Absolute Error)를 구하고 dt_mae 변수에 저장하세요.

  • 랜덤포레스트(RandomForest) 모델

    • 11번 문제에서 만든 랜덤포레스트(RandomForest) 모델로 y값을 예측(predict)하여 y_pred_rf에 저장하세요.

    • 검증 정답(y_valid)과 예측값(y_pred_rf)의 mae(Mean Absolute Error)를 구하고 rf_mae 변수에 저장하세요.

  • 선형회쉬(LinearRegression) 모델

    • 11번 문제에서 만든 선형회쉬(LinearRegression) 모델로 y값을 예측(predict)하여 y_pred_lr에 저장하세요.

    • 검증 정답(y_valid)과 예측값(y_pred_lr)의 mae(Mean Absolute Error)를 구하고 lr_mae 변수에 저장하세요.

  • K최근접(KNeighborsRegressor) 모델

    • 11번 문제에서 만든 K최근접(KNeighborsRegressor) 모델로 y값을 예측(predict)하여 y_pred_kr에 저장하세요.

    • 검증 정답(y_valid)과 예측값(y_pred_kr)의 mae(Mean Absolute Error)를 구하고 kr_mae 변수에 저장하세요.

  • 훈련시킨 모델들에 대한 mae 성능평가 결과를 확인하여 가장 성능이 좋은 모델 이름을 답안12 변수에 저장하세요

    • 예. 답안12 = 'Decisiontree' 혹은 'RandomForest' 혹은 'LinearRegression' 혹은 'KNeighborsRegressor'
# 여기에 답안코드를 작성하세요.
from sklearn.metrics import mean_absolute_error

y_pred_dt = dt.predict(X_valid_s)
dt_mae = mean_absolute_error(y_valid, y_pred_dt)
print('dt MAE:', dt_mae)

y_pred_rf = rf.predict(X_valid_s)
rf_mae = mean_absolute_error(y_valid, y_pred_rf)
print('rf MAE:', rf_mae)

y_pred_lr = lr.predict(X_valid_s)
lr_mae = mean_absolute_error(y_valid, y_pred_lr)
print('lr MAE:', lr_mae)

y_pred_kr = kr.predict(X_valid_s)
kr_mae = mean_absolute_error(y_valid, y_pred_kr)
print('kr MAE:', kr_mae)
dt MAE: 2.271882306528849
rf MAE: 2.251120778009001
lr MAE: 3.189091965887846
kr MAE: 2.510026683029674
답안12 = 'RandomForest'

다음 문항을 풀기 전에 아래 코드를 실행하세요.

import tensorflow as tf
from tensorflow.keras.models import Sequential, load_model, Model
from tensorflow.keras.layers import Dense, Activation, Dropout, BatchNormalization
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.utils import to_categorical

tf.random.set_seed(1)

12. medv(주택가격)을 예측하는 딥러닝 모델을 만들려고 합니다.

아래 가이드에 따라 모델링하고 학습을 진행하세요.

  • Tensoflow framework를 사용하여 딥러닝 모델을 만드세요.

  • 히든레이어(hidden layer) 2개이상으로 모델을 구성하세요.

  • dropout 비율 0.2로 Dropout 레이어 1개를 추가해 주세요.

  • 손실함수는 MSE(Mean Squared Error)를 사용하세요.

  • 하이퍼파라미터 epochs: 100, batch_size: 16으로 설정해주세요.

  • 각 에포크마다 loss와 metrics 평가하기 위한 데이터로 X_valid, y_valid 사용하세요.

  • 학습정보는 history 변수에 저장해주세요

# 여기에 답안코드를 작성하세요.

model = Sequential()

nfeatures = X_train_s.shape[1]
model.add(Dense(128, activation='relu', input_shape=(nfeatures,)))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(16, activation='relu'))
model.add(Dense(1))

model.compile(optimizer='adam', loss='mse',metrics=['mae','mse'])
# es = EarlyStopping(monitor='val_loss', patience=4, mode='min', verbose=1)    # val_loss

history = model.fit(X_train_s, y_train, 
                    batch_size=16, 
                    epochs=100, 
                    # callbacks=[es],
                    validation_data=(X_valid_s, y_valid), 
                    verbose=1).history
Epoch 1/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 1s 6ms/step - loss: 581.3461 - mae: 22.4192 - mse: 581.0137 - val_loss: 406.7110 - val_mae: 17.7125 - val_mse: 396.0434
Epoch 2/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 377.9587 - mae: 16.9337 - mse: 377.7883 - val_loss: 133.7331 - val_mae: 8.7588 - val_mse: 131.2706
Epoch 3/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 129.4754 - mae: 8.9604 - mse: 129.1856 - val_loss: 97.3043 - val_mae: 7.2660 - val_mse: 93.5860
Epoch 4/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 86.9674 - mae: 7.0783 - mse: 86.7783 - val_loss: 69.7716 - val_mae: 5.8654 - val_mse: 63.1726
Epoch 5/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 65.4889 - mae: 5.9759 - mse: 65.5135 - val_loss: 57.8452 - val_mae: 4.9258 - val_mse: 47.7531
Epoch 6/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 55.8520 - mae: 5.4012 - mse: 55.8956 - val_loss: 55.0896 - val_mae: 4.7147 - val_mse: 42.9055
Epoch 7/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 52.0318 - mae: 5.3248 - mse: 52.1155 - val_loss: 52.1348 - val_mae: 4.3912 - val_mse: 38.7314
Epoch 8/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 48.8066 - mae: 4.9873 - mse: 48.8260 - val_loss: 48.5192 - val_mae: 4.2499 - val_mse: 35.5343
Epoch 9/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 43.2552 - mae: 4.8236 - mse: 43.3311 - val_loss: 45.5017 - val_mae: 4.0479 - val_mse: 32.3914
Epoch 10/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 41.5531 - mae: 4.6710 - mse: 41.6320 - val_loss: 42.3574 - val_mae: 3.8578 - val_mse: 29.7936
Epoch 11/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 37.1838 - mae: 4.4320 - mse: 37.2287 - val_loss: 39.8835 - val_mae: 3.6405 - val_mse: 27.3228
Epoch 12/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 33.2582 - mae: 4.1985 - mse: 33.2990 - val_loss: 37.8571 - val_mae: 3.5489 - val_mse: 25.6078
Epoch 13/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 31.6612 - mae: 4.1749 - mse: 31.7037 - val_loss: 35.9582 - val_mae: 3.2557 - val_mse: 23.5585
Epoch 14/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 30.2471 - mae: 4.0640 - mse: 30.2919 - val_loss: 35.5152 - val_mae: 2.9820 - val_mse: 22.6518
Epoch 15/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 27.1462 - mae: 3.6470 - mse: 27.1755 - val_loss: 33.9363 - val_mae: 3.0665 - val_mse: 22.1547
Epoch 16/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 26.6643 - mae: 3.7016 - mse: 26.7111 - val_loss: 35.0317 - val_mae: 2.8738 - val_mse: 22.0152
Epoch 17/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 25.0354 - mae: 3.5362 - mse: 25.0281 - val_loss: 33.2235 - val_mae: 2.8723 - val_mse: 21.1061
Epoch 18/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 28.9014 - mae: 3.7828 - mse: 28.9284 - val_loss: 32.8713 - val_mae: 2.8369 - val_mse: 20.6260
Epoch 19/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 25.6095 - mae: 3.5903 - mse: 25.6545 - val_loss: 32.0770 - val_mae: 2.8405 - val_mse: 20.5127
Epoch 20/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 25.0120 - mae: 3.6047 - mse: 25.0488 - val_loss: 32.1595 - val_mae: 2.7928 - val_mse: 20.3474
Epoch 21/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 24.7086 - mae: 3.5056 - mse: 24.7404 - val_loss: 32.0058 - val_mae: 2.7461 - val_mse: 19.9734
Epoch 22/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 25.9775 - mae: 3.5191 - mse: 26.0109 - val_loss: 31.9579 - val_mae: 2.7202 - val_mse: 19.8672
Epoch 23/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.8674 - mae: 3.2920 - mse: 21.9076 - val_loss: 31.4800 - val_mae: 2.7122 - val_mse: 19.6010
Epoch 24/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 24.9450 - mae: 3.5034 - mse: 24.9739 - val_loss: 30.9984 - val_mae: 2.6950 - val_mse: 19.2016
Epoch 25/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 22.9506 - mae: 3.2697 - mse: 22.9715 - val_loss: 30.6421 - val_mae: 2.7501 - val_mse: 19.1585
Epoch 26/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 26.2436 - mae: 3.4536 - mse: 26.1650 - val_loss: 30.5185 - val_mae: 2.7091 - val_mse: 18.9811
Epoch 27/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 23.6579 - mae: 3.4834 - mse: 23.6793 - val_loss: 30.5262 - val_mae: 2.6602 - val_mse: 18.7539
Epoch 28/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 20.0248 - mae: 3.1393 - mse: 20.0278 - val_loss: 30.2767 - val_mae: 2.6937 - val_mse: 18.7892
Epoch 29/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 24.1460 - mae: 3.3804 - mse: 24.1506 - val_loss: 29.9819 - val_mae: 2.6283 - val_mse: 18.3250
Epoch 30/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.4608 - mae: 3.3060 - mse: 21.4881 - val_loss: 29.7221 - val_mae: 2.6723 - val_mse: 18.3533
Epoch 31/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 26.1724 - mae: 3.5533 - mse: 26.2067 - val_loss: 28.1911 - val_mae: 2.6449 - val_mse: 17.5244
Epoch 32/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 23.4991 - mae: 3.3520 - mse: 23.5400 - val_loss: 28.3364 - val_mae: 2.5916 - val_mse: 17.3391
Epoch 33/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.0894 - mae: 3.2023 - mse: 21.1153 - val_loss: 28.9936 - val_mae: 2.6579 - val_mse: 17.9094
Epoch 34/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.7401 - mae: 3.2773 - mse: 21.7764 - val_loss: 28.3307 - val_mae: 2.6186 - val_mse: 17.4043
Epoch 35/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 22.2451 - mae: 3.2629 - mse: 22.2269 - val_loss: 27.8670 - val_mae: 2.6028 - val_mse: 17.1270
Epoch 36/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.2977 - mae: 3.2077 - mse: 21.3376 - val_loss: 28.0393 - val_mae: 2.5878 - val_mse: 17.1298
Epoch 37/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.4291 - mae: 3.2058 - mse: 21.4625 - val_loss: 26.9928 - val_mae: 2.5217 - val_mse: 16.4211
Epoch 38/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.8739 - mae: 3.1378 - mse: 21.8936 - val_loss: 26.9156 - val_mae: 2.5456 - val_mse: 16.4599
Epoch 39/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.8337 - mae: 3.2528 - mse: 21.8326 - val_loss: 27.1054 - val_mae: 2.5269 - val_mse: 16.4461
Epoch 40/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 20.5819 - mae: 3.1903 - mse: 20.6123 - val_loss: 26.8698 - val_mae: 2.5284 - val_mse: 16.3353
Epoch 41/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 20.9748 - mae: 3.2461 - mse: 21.0139 - val_loss: 27.1705 - val_mae: 2.5592 - val_mse: 16.6487
Epoch 42/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.4784 - mae: 3.1818 - mse: 21.5022 - val_loss: 26.1414 - val_mae: 2.4634 - val_mse: 15.8380
Epoch 43/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 22.0060 - mae: 3.2257 - mse: 22.0446 - val_loss: 24.6117 - val_mae: 2.5277 - val_mse: 15.3375
Epoch 44/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 20.6692 - mae: 3.0137 - mse: 20.7020 - val_loss: 24.6917 - val_mae: 2.5744 - val_mse: 15.5001
Epoch 45/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 19.3978 - mae: 3.2478 - mse: 19.4366 - val_loss: 25.5143 - val_mae: 2.4877 - val_mse: 15.6162
Epoch 46/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 22.5695 - mae: 3.2615 - mse: 22.5919 - val_loss: 25.1067 - val_mae: 2.4414 - val_mse: 15.2531
Epoch 47/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.8835 - mae: 2.9767 - mse: 17.9089 - val_loss: 23.2832 - val_mae: 2.4380 - val_mse: 14.5129
Epoch 48/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.2747 - mae: 3.1232 - mse: 21.2598 - val_loss: 23.5461 - val_mae: 2.4951 - val_mse: 14.7210
Epoch 49/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 19.6141 - mae: 3.0538 - mse: 19.6441 - val_loss: 23.3363 - val_mae: 2.4472 - val_mse: 14.4697
Epoch 50/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.1785 - mae: 3.2932 - mse: 21.2024 - val_loss: 24.0163 - val_mae: 2.4389 - val_mse: 14.6043
Epoch 51/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 21.1842 - mae: 3.1274 - mse: 21.1919 - val_loss: 23.5958 - val_mae: 2.4028 - val_mse: 14.3979
Epoch 52/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 20.6482 - mae: 3.1301 - mse: 20.6767 - val_loss: 24.3276 - val_mae: 2.4637 - val_mse: 14.8915
Epoch 53/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.5109 - mae: 2.8174 - mse: 16.5285 - val_loss: 22.9946 - val_mae: 2.3940 - val_mse: 14.1072
Epoch 54/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.4597 - mae: 3.0269 - mse: 17.4879 - val_loss: 22.0233 - val_mae: 2.4845 - val_mse: 13.9990
Epoch 55/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 19.5100 - mae: 2.9510 - mse: 19.5207 - val_loss: 22.1792 - val_mae: 2.4087 - val_mse: 13.7746
Epoch 56/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 19.8671 - mae: 3.1750 - mse: 19.8548 - val_loss: 22.2538 - val_mae: 2.3562 - val_mse: 13.5923
Epoch 57/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.5206 - mae: 2.7501 - mse: 17.5407 - val_loss: 21.5497 - val_mae: 2.3963 - val_mse: 13.4860
Epoch 58/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 3ms/step - loss: 16.9098 - mae: 2.8735 - mse: 16.9390 - val_loss: 21.5239 - val_mae: 2.6180 - val_mse: 14.1896
Epoch 59/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.7565 - mae: 2.9076 - mse: 17.7650 - val_loss: 21.0617 - val_mae: 2.3931 - val_mse: 13.2637
Epoch 60/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.8323 - mae: 2.8534 - mse: 17.8449 - val_loss: 20.8962 - val_mae: 2.3551 - val_mse: 12.9549
Epoch 61/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.9866 - mae: 2.9412 - mse: 17.0051 - val_loss: 21.8893 - val_mae: 2.4147 - val_mse: 13.4966
Epoch 62/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 18.1022 - mae: 2.8410 - mse: 18.1313 - val_loss: 21.4758 - val_mae: 2.3934 - val_mse: 13.2725
Epoch 63/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 18.0338 - mae: 2.9875 - mse: 18.0630 - val_loss: 22.5467 - val_mae: 2.3421 - val_mse: 13.4378
Epoch 64/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.8402 - mae: 2.8870 - mse: 17.8480 - val_loss: 21.1010 - val_mae: 2.3297 - val_mse: 12.8977
Epoch 65/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.9892 - mae: 2.8601 - mse: 18.0196 - val_loss: 20.8333 - val_mae: 2.3285 - val_mse: 12.7823
Epoch 66/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 20.0865 - mae: 3.0698 - mse: 20.1016 - val_loss: 20.2390 - val_mae: 2.3999 - val_mse: 12.7156
Epoch 67/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 20.8096 - mae: 3.0987 - mse: 20.8461 - val_loss: 20.8654 - val_mae: 2.3313 - val_mse: 12.7143
Epoch 68/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.1126 - mae: 2.8346 - mse: 16.1374 - val_loss: 20.3381 - val_mae: 2.3252 - val_mse: 12.6259
Epoch 69/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.8366 - mae: 2.8301 - mse: 17.8431 - val_loss: 19.8248 - val_mae: 2.2965 - val_mse: 12.3099
Epoch 70/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.8695 - mae: 2.8202 - mse: 16.8981 - val_loss: 20.4217 - val_mae: 2.2662 - val_mse: 12.3467
Epoch 71/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.6975 - mae: 3.0463 - mse: 16.7295 - val_loss: 19.8131 - val_mae: 2.3125 - val_mse: 12.2982
Epoch 72/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 15.3929 - mae: 2.8470 - mse: 15.3601 - val_loss: 20.3865 - val_mae: 2.3295 - val_mse: 12.4823
Epoch 73/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.1866 - mae: 2.7545 - mse: 17.2116 - val_loss: 19.5327 - val_mae: 2.2801 - val_mse: 12.1123
Epoch 74/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.0231 - mae: 2.8086 - mse: 16.0376 - val_loss: 19.4801 - val_mae: 2.3289 - val_mse: 12.1507
Epoch 75/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.5633 - mae: 2.9806 - mse: 17.5564 - val_loss: 20.6769 - val_mae: 2.3580 - val_mse: 12.6562
Epoch 76/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 14.6056 - mae: 2.6861 - mse: 14.6292 - val_loss: 19.0168 - val_mae: 2.3062 - val_mse: 11.9652
Epoch 77/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.9250 - mae: 2.9471 - mse: 17.9571 - val_loss: 19.3333 - val_mae: 2.2910 - val_mse: 11.8745
Epoch 78/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.6877 - mae: 2.8606 - mse: 16.7190 - val_loss: 19.9956 - val_mae: 2.2953 - val_mse: 12.1774
Epoch 79/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.3314 - mae: 2.7639 - mse: 17.3555 - val_loss: 19.8118 - val_mae: 2.3214 - val_mse: 12.2125
Epoch 80/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.6365 - mae: 2.9069 - mse: 16.6504 - val_loss: 21.0580 - val_mae: 2.3869 - val_mse: 13.0190
Epoch 81/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.2272 - mae: 2.7326 - mse: 16.2501 - val_loss: 21.1386 - val_mae: 2.3581 - val_mse: 12.8320
Epoch 82/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 3ms/step - loss: 15.8745 - mae: 2.7733 - mse: 15.8800 - val_loss: 19.1248 - val_mae: 2.3322 - val_mse: 12.0026
Epoch 83/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.5042 - mae: 2.8778 - mse: 17.5313 - val_loss: 20.3848 - val_mae: 2.3542 - val_mse: 12.5148
Epoch 84/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 14.3032 - mae: 2.6438 - mse: 14.3284 - val_loss: 20.2986 - val_mae: 2.3375 - val_mse: 12.4481
Epoch 85/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 18.0573 - mae: 2.8239 - mse: 18.0875 - val_loss: 19.4816 - val_mae: 2.2973 - val_mse: 12.0120
Epoch 86/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.1273 - mae: 2.8055 - mse: 17.1472 - val_loss: 20.3061 - val_mae: 2.3178 - val_mse: 12.3420
Epoch 87/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 15.1443 - mae: 2.6734 - mse: 15.1592 - val_loss: 19.1735 - val_mae: 2.3316 - val_mse: 11.8772
Epoch 88/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 15.6757 - mae: 2.6478 - mse: 15.7019 - val_loss: 19.1592 - val_mae: 2.2824 - val_mse: 11.8089
Epoch 89/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.1177 - mae: 2.9206 - mse: 17.1445 - val_loss: 19.6821 - val_mae: 2.2978 - val_mse: 12.0513
Epoch 90/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 15.9994 - mae: 2.8161 - mse: 16.0242 - val_loss: 19.2743 - val_mae: 2.2976 - val_mse: 11.8837
Epoch 91/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 14.7424 - mae: 2.7522 - mse: 14.7473 - val_loss: 19.2976 - val_mae: 2.3163 - val_mse: 11.9686
Epoch 92/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 17.1213 - mae: 2.8179 - mse: 17.1507 - val_loss: 19.8262 - val_mae: 2.3222 - val_mse: 12.2135
Epoch 93/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 15.3352 - mae: 2.7228 - mse: 15.3576 - val_loss: 18.8170 - val_mae: 2.3120 - val_mse: 11.7720
Epoch 94/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 14.2120 - mae: 2.8280 - mse: 14.1797 - val_loss: 18.6919 - val_mae: 2.3052 - val_mse: 11.7336
Epoch 95/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 15.7720 - mae: 2.7741 - mse: 15.7949 - val_loss: 18.4974 - val_mae: 2.2312 - val_mse: 11.3343
Epoch 96/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 14.4676 - mae: 2.6107 - mse: 14.4845 - val_loss: 18.6678 - val_mae: 2.2861 - val_mse: 11.5021
Epoch 97/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 16.3653 - mae: 2.7241 - mse: 16.3830 - val_loss: 19.2745 - val_mae: 2.3168 - val_mse: 11.8828
Epoch 98/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 15.5821 - mae: 2.8577 - mse: 15.6072 - val_loss: 19.7393 - val_mae: 2.3457 - val_mse: 12.2069
Epoch 99/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 14.6828 - mae: 2.5664 - mse: 14.6907 - val_loss: 18.8448 - val_mae: 2.3499 - val_mse: 11.8233
Epoch 100/100
26/26 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step - loss: 13.7037 - mae: 2.6120 - mse: 13.7273 - val_loss: 17.9055 - val_mae: 2.2817 - val_mse: 11.3358

13. 위 딥러닝의 성능을 평가하려고 합니다.

Matplotlib 라이브러리를 활용해서 학습 mse와 검증 mse를 그래프로 표기하세요.

  • 1개의 그래프에 학습 loss와 검증 loss 2가지를 모두 표기하세요.

  • 위 2가지 각각의 범례를 'loss'와 'val_loss'로 표기하세요.

  • 그래프의 타이틀은 'Model Loss'로 표기하세요.

  • X축에는 'Epochs'라고 표시하고 Y축에는 "Loss'라고 표기하세요.

  • 1개의 그래프에 학습 mse와 검증 mse 2가지를 모두 표기하세요.

  • 위 2가지 각각의 범례를 'mse'와 'val_mse'로 표기하세요.

  • 그래프의 타이틀은 'Model MSE'로 표기하세요.

  • X축에는 'Epochs'라고 표시하고 Y축에는 "MSE'라고 표기하세요.

  • 위 딥러닝 모델에 대해 검증 정답(y_valid)과 예측값(y_pred_dl)의 mae(Mean Absolute Error)를 구하고 dl_mae 변수에 저장하세요.
# 함수로 만들어서 사용합시다.
def dl_history_plot(history):
    plt.figure(figsize=(16,4))
    plt.subplot(1,2,1)
    plt.plot(history['loss'], label='loss', marker = '.')
    plt.plot(history['val_loss'], label='val_loss', marker = '.')
    plt.ylabel('Loss')
    plt.xlabel('Epochs')
    plt.legend()
    plt.grid()

    plt.subplot(1,2,2)
    plt.plot(history['mse'], label='mse', marker = '.')
    plt.plot(history['val_mse'], label='val_mse', marker = '.')
    plt.ylabel('MSE')
    plt.xlabel('Epochs')
    plt.legend()
    plt.grid()


    plt.show()

dl_history_plot(history)
y_pred_dl = model.predict(X_valid_s, verbose=1)
dl_mae = mean_absolute_error(y_valid, y_pred_dl)
print('DL MAE:', dl_mae)
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 11ms/step
DL MAE: 2.281737972708309

MAE와 MAPE 그리고 R2를 나타내세요

from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error, r2_score


pred = model.predict(X_valid_s)

print('MAE : {:.2f}'.format(mean_absolute_error(y_valid, pred)))
print('MAPE: {:.2f}'.format(mean_absolute_percentage_error(y_valid, pred)))
print('R2  : {:.4f}'.format(r2_score(y_valid, pred)))
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step
MAE : 2.28
MAPE: 0.12
R2  : 0.8454

다중입력모델

| 변수 | 설명 |

| ---- | ---- |

| medv | 타운별 집값(중위수) |

| crim | 범죄율 |

| zn | 25,000 평방피트를 초과 거주지역 비율 |

| indus | 산업단지 면적비율 |

| chas | 찰스강변 위치(범주 : 강변1, 아니면 0) |

| nox | 일산화질소 농도 |

| rm | 주택당 방 수 |

| age | 1940년 이전에 건축된 주택의 비율 |

| dis | 직업센터의 거리 |

| rad | 고속도로 진입로까지의 거리 |

| tax | 재산세율 |

| ptratio | 학생/교사 비율 |

| lstat | 인구 중 하위 계층 비율 |

  1. 비율과 수로 나누기
  • 비율: crim(범죄율), zn(평방피트 초과 거주지역 비율), indus(산업단지 면적비율), age(1940년 이전 건축된 주택의 비율), tax(재산세율), ptratio(학생/교사 비율), lstat(하위계층 비율)
  • 수: chas(강변위치), nox(일산화질소 농도), rm(방수), dis(직업센터 거리), rad(고속도로 거리)
  1. 주택의 특징과 환경의 특징
  • 주택: zn, chas, rm, age, tax, lstat,rad

  • 환경: crim, indus, nox, dis, ptratio

X_train.head()

crim zn indus chas nox rm age dis rad tax ptratio black lstat
477 15.02340 0.0 18.10 0 0.6140 5.304 97.3 2.1007 24 666 20.2 349.48 24.91
15 0.62739 0.0 8.14 0 0.5380 5.834 56.5 4.4986 4 307 21.0 395.62 8.47
332 0.03466 35.0 6.06 0 0.4379 6.031 23.3 6.6407 1 304 16.9 362.25 7.83
423 7.05042 0.0 18.10 0 0.6140 6.103 85.1 2.0218 24 666 20.2 2.52 23.29
19 0.72580 0.0 8.14 0 0.5380 5.727 69.5 3.7965 4 307 21.0 390.95 11.28
# 입력1 : 주택과 직접 관련이 있는 변수들
in_col = [ 'zn', 'chas', 'rm', 'age', 'tax', 'lstat','rad' ]
x_train1 = X_train[in_col]
x_val1 = X_valid[in_col]
x_val1.head()

zn chas rm age tax lstat rad
173 0.0 0 6.416 84.1 296 9.04 5
274 40.0 1 6.758 32.9 254 3.53 4
491 0.0 0 5.983 98.8 711 18.07 4
72 0.0 0 6.065 7.8 305 5.52 4
452 0.0 0 6.297 91.8 666 17.27 24
# 입력2 : 주택과 간접 관련이 있는 변수들
x_train2 = X_train.drop(in_col, axis = 1)
x_val2 = X_valid.drop(in_col, axis = 1)
x_val2.head()

crim indus nox dis ptratio black
173 0.09178 4.05 0.510 2.6463 16.6 395.50
274 0.05644 6.41 0.447 4.0776 17.6 396.90
491 0.10574 27.74 0.609 1.8681 20.1 390.11
72 0.09164 10.81 0.413 5.2873 19.2 390.91
452 5.09017 18.10 0.713 2.3682 20.2 385.09

(3) 다중 입력 모델링

nfeatures1 = x_train1.shape[1]  # 판매관련 정보
nfeatures2 = x_train2.shape[1]  # 외부 환경 정보
from tensorflow.keras.layers import Input, Dense, concatenate
from tensorflow.keras.regularizers import l1, l2
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau

# 모델 구성


# 첫 번째 입력을 위한 레이어
input_1 = Input(shape=(nfeatures1,), name='input_1')
hl1 = Dense(8, activation='relu', kernel_regularizer = l1(0.01))(input_1)
hl1 = Dense(16, activation='relu', kernel_regularizer = l1(0.01))(hl1)


# 두 번째 입력을 위한 레이어
input_2 = Input(shape=(nfeatures2,), name='input_2')
hl2 = Dense(8, activation='relu', kernel_regularizer = l1(0.01))(input_2)
hl2 = Dense(16, activation='relu', kernel_regularizer = l1(0.01))(hl2)

# 두 히든레이어 결합
cbl = concatenate([hl1, hl2])

# 추가 히든레이어
last = Dense(32, activation='relu',kernel_regularizer = l1(0.01))(cbl)
last = Dense(8, activation='relu')(last)

# 출력 레이어
output = Dense(1)(last)

# -------------------------
# 모델 선언
model = Model(inputs = [input_1, input_2], outputs = output)

model.compile(optimizer=Adam(learning_rate = 0.01), loss='mse',metrics=['mae','mse'])
# es = EarlyStopping(monitor='val_loss', patience=4, mode='min', verbose=1)    # val_loss
es = EarlyStopping(monitor='val_loss',
                    min_delta=0, # 개선되고 있다고 판단하기 위한 최소 변화량
                    patience=100,  # 개선 없는 epoch 얼마나 기다려 줄거야
                    mode='min',
                    verbose=1,
                    restore_best_weights=True)

lr_reduction = ReduceLROnPlateau(monitor='val_loss',
                                    patience=10,
                                    verbose=1,
                                    factor=0.5, # 0.5를 lr에 곱해주겠다
                                    min_lr=0.000001) # 가장 작은 lr


history = model.fit([x_train1, x_train2], y_train, 
                    batch_size=64, 
                    epochs=100, 
                    # callbacks=[es],
                    validation_split= 0.2, 
                    verbose=1).history
Epoch 1/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 2s 36ms/step - loss: 753.0716 - mae: 23.0259 - mse: 766.0030 - val_loss: 93.8504 - val_mae: 6.4194 - val_mse: 85.5856
Epoch 2/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 113.4642 - mae: 8.4844 - mse: 115.0409 - val_loss: 88.5634 - val_mae: 7.6760 - val_mse: 86.8146
Epoch 3/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 89.8034 - mae: 7.1490 - mse: 88.6244 - val_loss: 75.0848 - val_mae: 5.5179 - val_mse: 62.8662
Epoch 4/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 69.0120 - mae: 6.1118 - mse: 69.1320 - val_loss: 83.6492 - val_mae: 6.5960 - val_mse: 69.6597
Epoch 5/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 71.4005 - mae: 6.4778 - mse: 70.3706 - val_loss: 81.2467 - val_mae: 5.5688 - val_mse: 62.3219
Epoch 6/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 12ms/step - loss: 62.7077 - mae: 5.8200 - mse: 62.4385 - val_loss: 89.0657 - val_mae: 6.2344 - val_mse: 67.7421
Epoch 7/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 67.3944 - mae: 6.2531 - mse: 66.4781 - val_loss: 78.4082 - val_mae: 5.2829 - val_mse: 59.6152
Epoch 8/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 60.1756 - mae: 5.6288 - mse: 60.3168 - val_loss: 78.1582 - val_mae: 5.8874 - val_mse: 62.1437
Epoch 9/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 63.3311 - mae: 5.9763 - mse: 63.1442 - val_loss: 73.3956 - val_mae: 5.3530 - val_mse: 58.0379
Epoch 10/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 59.2248 - mae: 5.6356 - mse: 59.5030 - val_loss: 76.4427 - val_mae: 5.6915 - val_mse: 60.5792
Epoch 11/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 59.4130 - mae: 5.7089 - mse: 59.5845 - val_loss: 75.9240 - val_mae: 5.5524 - val_mse: 59.7329
Epoch 12/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 58.2683 - mae: 5.6254 - mse: 58.5235 - val_loss: 77.1466 - val_mae: 5.6269 - val_mse: 60.6526
Epoch 13/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 58.1770 - mae: 5.6542 - mse: 58.5874 - val_loss: 73.4769 - val_mae: 5.4616 - val_mse: 58.6191
Epoch 14/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 57.2025 - mae: 5.5248 - mse: 57.7653 - val_loss: 75.9870 - val_mae: 5.6094 - val_mse: 60.0066
Epoch 15/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 56.9057 - mae: 5.5299 - mse: 57.3814 - val_loss: 76.0450 - val_mae: 5.5781 - val_mse: 59.9618
Epoch 16/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 56.4287 - mae: 5.5220 - mse: 57.0348 - val_loss: 74.0415 - val_mae: 5.4885 - val_mse: 59.0301
Epoch 17/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 55.5896 - mae: 5.4189 - mse: 56.2507 - val_loss: 76.1393 - val_mae: 5.6297 - val_mse: 60.2618
Epoch 18/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 55.4995 - mae: 5.4333 - mse: 56.1773 - val_loss: 74.3203 - val_mae: 5.5938 - val_mse: 59.2799
Epoch 19/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 55.0826 - mae: 5.4152 - mse: 55.7407 - val_loss: 74.2722 - val_mae: 5.5507 - val_mse: 58.6790
Epoch 20/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 54.5264 - mae: 5.3966 - mse: 55.2128 - val_loss: 73.2446 - val_mae: 5.4708 - val_mse: 57.7673
Epoch 21/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 53.4126 - mae: 5.3011 - mse: 54.0770 - val_loss: 73.9874 - val_mae: 5.5459 - val_mse: 58.1270
Epoch 22/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 53.4369 - mae: 5.3494 - mse: 54.1114 - val_loss: 72.3742 - val_mae: 5.4604 - val_mse: 56.9186
Epoch 23/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 52.3956 - mae: 5.2601 - mse: 53.0163 - val_loss: 73.1793 - val_mae: 5.5203 - val_mse: 57.2603
Epoch 24/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 52.3494 - mae: 5.2970 - mse: 53.0030 - val_loss: 71.6401 - val_mae: 5.4222 - val_mse: 55.8206
Epoch 25/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 50.9186 - mae: 5.1602 - mse: 51.5454 - val_loss: 71.2706 - val_mae: 5.4808 - val_mse: 55.7805
Epoch 26/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 50.7837 - mae: 5.1844 - mse: 51.4267 - val_loss: 70.9056 - val_mae: 5.4343 - val_mse: 55.0408
Epoch 27/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 49.4666 - mae: 5.0578 - mse: 50.0593 - val_loss: 71.5592 - val_mae: 5.5160 - val_mse: 55.9234
Epoch 28/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 49.4733 - mae: 5.0978 - mse: 50.0486 - val_loss: 70.4632 - val_mae: 5.4575 - val_mse: 54.8521
Epoch 29/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 48.2972 - mae: 5.0126 - mse: 48.8310 - val_loss: 69.8267 - val_mae: 5.4612 - val_mse: 54.6368
Epoch 30/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 47.5479 - mae: 4.9689 - mse: 48.0669 - val_loss: 70.7986 - val_mae: 5.5089 - val_mse: 54.5485
Epoch 31/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 47.2242 - mae: 4.9680 - mse: 47.6570 - val_loss: 64.9106 - val_mae: 5.2360 - val_mse: 50.3586
Epoch 32/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 44.0984 - mae: 4.7076 - mse: 44.3486 - val_loss: 73.6018 - val_mae: 6.0786 - val_mse: 59.8850
Epoch 33/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 48.9315 - mae: 5.2040 - mse: 49.3989 - val_loss: 70.3936 - val_mae: 5.6881 - val_mse: 55.7821
Epoch 34/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 46.3944 - mae: 5.0322 - mse: 46.2593 - val_loss: 86.3344 - val_mae: 7.0449 - val_mse: 71.9641
Epoch 35/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 54.2281 - mae: 5.7813 - mse: 54.3953 - val_loss: 63.3803 - val_mae: 6.2035 - val_mse: 56.4197
Epoch 36/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 11ms/step - loss: 49.9168 - mae: 5.3093 - mse: 49.0057 - val_loss: 91.1530 - val_mae: 6.6680 - val_mse: 69.4057
Epoch 37/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 49.4863 - mae: 5.4138 - mse: 49.5733 - val_loss: 57.0027 - val_mae: 5.1612 - val_mse: 46.2135
Epoch 38/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 45.4881 - mae: 5.0751 - mse: 45.5097 - val_loss: 53.5967 - val_mae: 4.4271 - val_mse: 39.4254
Epoch 39/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 37.9318 - mae: 4.4220 - mse: 37.7416 - val_loss: 64.8541 - val_mae: 5.0447 - val_mse: 47.3689
Epoch 40/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 36.6608 - mae: 4.3497 - mse: 36.5186 - val_loss: 55.4939 - val_mae: 4.9689 - val_mse: 43.1136
Epoch 41/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 37.1542 - mae: 4.5479 - mse: 36.9099 - val_loss: 55.9458 - val_mae: 5.0771 - val_mse: 43.8316
Epoch 42/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 37.0227 - mae: 4.6066 - mse: 36.8156 - val_loss: 60.7162 - val_mae: 5.3944 - val_mse: 47.7841
Epoch 43/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 37.1892 - mae: 4.6297 - mse: 37.1124 - val_loss: 59.7808 - val_mae: 5.4265 - val_mse: 48.0209
Epoch 44/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 36.9785 - mae: 4.6660 - mse: 36.8914 - val_loss: 64.7590 - val_mae: 5.7291 - val_mse: 52.2193
Epoch 45/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 38.2558 - mae: 4.7174 - mse: 38.3087 - val_loss: 66.9288 - val_mae: 6.2565 - val_mse: 56.2586
Epoch 46/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 38.3489 - mae: 4.8382 - mse: 38.2609 - val_loss: 72.2605 - val_mae: 6.4327 - val_mse: 61.3952
Epoch 47/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 44.1166 - mae: 5.1753 - mse: 43.9224 - val_loss: 55.4612 - val_mae: 5.1324 - val_mse: 43.9275
Epoch 48/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 40.1499 - mae: 4.9391 - mse: 39.1638 - val_loss: 47.1932 - val_mae: 3.8848 - val_mse: 32.0649
Epoch 49/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 34.5862 - mae: 4.4728 - mse: 33.6599 - val_loss: 46.2114 - val_mae: 3.6948 - val_mse: 30.6799
Epoch 50/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 30.0137 - mae: 4.1359 - mse: 29.4923 - val_loss: 45.3369 - val_mae: 3.6601 - val_mse: 29.9156
Epoch 51/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 27.2448 - mae: 3.7961 - mse: 26.7200 - val_loss: 45.3522 - val_mae: 3.8105 - val_mse: 30.9564
Epoch 52/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 24.9704 - mae: 3.5701 - mse: 24.3300 - val_loss: 50.7718 - val_mae: 4.7153 - val_mse: 39.1249
Epoch 53/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 27.5804 - mae: 3.9483 - mse: 26.9496 - val_loss: 59.3423 - val_mae: 5.5992 - val_mse: 49.7902
Epoch 54/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 33.3362 - mae: 4.4468 - mse: 32.8830 - val_loss: 64.2179 - val_mae: 6.1255 - val_mse: 55.8378
Epoch 55/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 38.6859 - mae: 4.8542 - mse: 38.2294 - val_loss: 58.6476 - val_mae: 5.5990 - val_mse: 48.8794
Epoch 56/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 39.2982 - mae: 4.8946 - mse: 38.3577 - val_loss: 45.0769 - val_mae: 4.0252 - val_mse: 31.9128
Epoch 57/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 32.6677 - mae: 4.4052 - mse: 31.5329 - val_loss: 42.9121 - val_mae: 3.5652 - val_mse: 27.8562
Epoch 58/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 26.6449 - mae: 3.9563 - mse: 25.8808 - val_loss: 42.8756 - val_mae: 3.5258 - val_mse: 27.8330
Epoch 59/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 24.2367 - mae: 3.6233 - mse: 23.5988 - val_loss: 42.1446 - val_mae: 3.6702 - val_mse: 28.5662
Epoch 60/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 22.6178 - mae: 3.4206 - mse: 21.9111 - val_loss: 46.8421 - val_mae: 4.4773 - val_mse: 36.0604
Epoch 61/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 25.2290 - mae: 3.7673 - mse: 24.4521 - val_loss: 51.2648 - val_mae: 5.0296 - val_mse: 41.7388
Epoch 62/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 29.6818 - mae: 4.1610 - mse: 28.8743 - val_loss: 48.7546 - val_mae: 4.6942 - val_mse: 38.2516
Epoch 63/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 30.3515 - mae: 4.2130 - mse: 29.4396 - val_loss: 42.0292 - val_mae: 3.7978 - val_mse: 29.5574
Epoch 64/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 13ms/step - loss: 26.4242 - mae: 3.9269 - mse: 25.4095 - val_loss: 39.8486 - val_mae: 3.5281 - val_mse: 26.2933
Epoch 65/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 22.7650 - mae: 3.6063 - mse: 21.8388 - val_loss: 39.3231 - val_mae: 3.4951 - val_mse: 25.8752
Epoch 66/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 20.9239 - mae: 3.3946 - mse: 20.0377 - val_loss: 39.6698 - val_mae: 3.5749 - val_mse: 26.9321
Epoch 67/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 20.2883 - mae: 3.2996 - mse: 19.3890 - val_loss: 43.3831 - val_mae: 4.1261 - val_mse: 32.7037
Epoch 68/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - loss: 22.6799 - mae: 3.5380 - mse: 21.8316 - val_loss: 46.8168 - val_mae: 4.7139 - val_mse: 38.2401
Epoch 69/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - loss: 26.4821 - mae: 3.9115 - mse: 25.6295 - val_loss: 49.2103 - val_mae: 4.9174 - val_mse: 40.1260
Epoch 70/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 29.0128 - mae: 4.0537 - mse: 28.1108 - val_loss: 42.6642 - val_mae: 4.0725 - val_mse: 31.8035
Epoch 71/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 26.4370 - mae: 3.9157 - mse: 25.3603 - val_loss: 39.9019 - val_mae: 3.6441 - val_mse: 27.0209
Epoch 72/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 22.9218 - mae: 3.6199 - mse: 21.8765 - val_loss: 37.8875 - val_mae: 3.3865 - val_mse: 24.6235
Epoch 73/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 20.0938 - mae: 3.3732 - mse: 19.1113 - val_loss: 38.8958 - val_mae: 3.5401 - val_mse: 25.7088
Epoch 74/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 19.2644 - mae: 3.2532 - mse: 18.3599 - val_loss: 39.3678 - val_mae: 3.7230 - val_mse: 28.0184
Epoch 75/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 19.8625 - mae: 3.3069 - mse: 18.9224 - val_loss: 43.5260 - val_mae: 4.2794 - val_mse: 33.8121
Epoch 76/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 22.5069 - mae: 3.5350 - mse: 21.5876 - val_loss: 45.7793 - val_mae: 4.5542 - val_mse: 36.5959
Epoch 77/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - loss: 24.8303 - mae: 3.7601 - mse: 23.9665 - val_loss: 44.7755 - val_mae: 4.4089 - val_mse: 34.9177
Epoch 78/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 25.1596 - mae: 3.7778 - mse: 24.2136 - val_loss: 41.2643 - val_mae: 3.9368 - val_mse: 30.2451
Epoch 79/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 23.3815 - mae: 3.6487 - mse: 22.3303 - val_loss: 39.7049 - val_mae: 3.7391 - val_mse: 27.5401
Epoch 80/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 21.4225 - mae: 3.4814 - mse: 20.3524 - val_loss: 37.7168 - val_mae: 3.4808 - val_mse: 24.9226
Epoch 81/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 19.0321 - mae: 3.2793 - mse: 17.9236 - val_loss: 39.3330 - val_mae: 3.5344 - val_mse: 25.8445
Epoch 82/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 18.4908 - mae: 3.2148 - mse: 17.4912 - val_loss: 36.7296 - val_mae: 3.4976 - val_mse: 25.1282
Epoch 83/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 18.0753 - mae: 3.1582 - mse: 17.0422 - val_loss: 40.1934 - val_mae: 3.8460 - val_mse: 28.9873
Epoch 84/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - loss: 19.0391 - mae: 3.2218 - mse: 18.0702 - val_loss: 40.3633 - val_mae: 4.0397 - val_mse: 30.9150
Epoch 85/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 20.3870 - mae: 3.3904 - mse: 19.4071 - val_loss: 45.3688 - val_mae: 4.5004 - val_mse: 35.8276
Epoch 86/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 22.8177 - mae: 3.5478 - mse: 21.9459 - val_loss: 42.6054 - val_mae: 4.3688 - val_mse: 33.8712
Epoch 87/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 23.1288 - mae: 3.6299 - mse: 22.1337 - val_loss: 42.7283 - val_mae: 4.1805 - val_mse: 32.0876
Epoch 88/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 22.5850 - mae: 3.5167 - mse: 21.5442 - val_loss: 37.0759 - val_mae: 3.7436 - val_mse: 26.8075
Epoch 89/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 20.3804 - mae: 3.4159 - mse: 19.2688 - val_loss: 37.9726 - val_mae: 3.6227 - val_mse: 25.8534
Epoch 90/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 19.1355 - mae: 3.2701 - mse: 18.0502 - val_loss: 35.4165 - val_mae: 3.4194 - val_mse: 23.6010
Epoch 91/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 17.3084 - mae: 3.1211 - mse: 16.1458 - val_loss: 36.6116 - val_mae: 3.3898 - val_mse: 23.8049
Epoch 92/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 16.5302 - mae: 3.0121 - mse: 15.4250 - val_loss: 35.3503 - val_mae: 3.3722 - val_mse: 23.4010
Epoch 93/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 16.3257 - mae: 2.9860 - mse: 15.2754 - val_loss: 36.4296 - val_mae: 3.5050 - val_mse: 24.8912
Epoch 94/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 16.4565 - mae: 2.9821 - mse: 15.3552 - val_loss: 33.7436 - val_mae: 3.4846 - val_mse: 23.9249
Epoch 95/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 16.4339 - mae: 2.9782 - mse: 15.3276 - val_loss: 35.4502 - val_mae: 3.5984 - val_mse: 25.4947
Epoch 96/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 16.8225 - mae: 3.0104 - mse: 15.7319 - val_loss: 33.4895 - val_mae: 3.5933 - val_mse: 24.9235
Epoch 97/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 17.3495 - mae: 3.0521 - mse: 16.2484 - val_loss: 34.9570 - val_mae: 3.6291 - val_mse: 25.6824
Epoch 98/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 16.9146 - mae: 3.0062 - mse: 15.8135 - val_loss: 33.9113 - val_mae: 3.6238 - val_mse: 25.2153
Epoch 99/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 17.3945 - mae: 3.0697 - mse: 16.3032 - val_loss: 34.3657 - val_mae: 3.5306 - val_mse: 24.7134
Epoch 100/100
6/6 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 16.6184 - mae: 2.9819 - mse: 15.5379 - val_loss: 34.5381 - val_mae: 3.5341 - val_mse: 24.6397
dl_history_plot(history)
pred = model.predict([x_val1, x_val2])

# 평가
print('MAE : {:.2f}'.format(mean_absolute_error(y_valid, pred)))
print('MAPE: {:.2f}'.format(mean_absolute_percentage_error(y_valid, pred)))
print('R2  : {:.4f}'.format(r2_score(y_valid, pred)))
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 18ms/step
MAE : 3.47
MAPE: 0.19
R2  : 0.6920
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.