Machine Learning
1.회귀문제_3_따릉이
- -
layout: single
title: "jupyter notebook 변환하기!"
categories: coding
tag: [python, blog, jekyll]
toc: true
author_profile: false
따릉이 2시간 후 수요량 예측 문제
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/DA4BAM/dataset/master/SeoulBikeData2.csv'
df = pd.read_csv(path)
df['DateTime'] = pd.to_datetime(df['DateTime'])
df.head()
DateTime | Count | Temperature | Humidity | WindSpeed | Visibility | Solar | Rainfall | Snowfall | Seasons | Holiday | FuncDay | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2017-12-01 00:00:00 | 254 | -5.2 | 37 | 2.2 | 2000 | 0.0 | 0.0 | 0.0 | Winter | No Holiday | Yes |
1 | 2017-12-01 01:00:00 | 204 | -5.5 | 38 | 0.8 | 2000 | 0.0 | 0.0 | 0.0 | Winter | No Holiday | Yes |
2 | 2017-12-01 02:00:00 | 173 | -6.0 | 39 | 1.0 | 2000 | 0.0 | 0.0 | 0.0 | Winter | No Holiday | Yes |
3 | 2017-12-01 03:00:00 | 107 | -6.2 | 40 | 0.9 | 2000 | 0.0 | 0.0 | 0.0 | Winter | No Holiday | Yes |
4 | 2017-12-01 04:00:00 | 78 | -6.0 | 36 | 2.3 | 2000 | 0.0 | 0.0 | 0.0 | Winter | No Holiday | Yes |
결측치 확인
# 여기에 답안코드를 작성하세요.
print(df.isnull().sum())
DateTime 0
Count 0
Temperature 0
Humidity 0
WindSpeed 0
Visibility 0
Solar 0
Rainfall 0
Snowfall 0
Seasons 0
Holiday 0
FuncDay 0
dtype: int64
변수설명
- DateTime : year-month-day hh:mi:ss
- Count : 시간대별 수요량
- Temperature : 온도(섭씨)
- Humidity : 습도(%)
- WindSpeed : 풍속(m/s)
- Rainfall - mm
- Snowfall - cm
- Seasons - Winter, Spring, Summer, Autumn
- Holiday - Holiday / No holiday
- FuncDay - Yes / No
4. 데이터의 기간을 확인하세요
- min()과 max()를 통해 시작 DateTime과 끝 DateTime을 확인하세요
# 데이터 기간은 다음과 같습니다.
df.DateTime.min(), df.DateTime.max()
(Timestamp('2017-12-01 00:00:00'), Timestamp('2018-11-30 23:00:00'))
다음 문항을 풀기 전에 아래 코드를 실행하세요.
# 여기에 답안코드를 작성하세요.
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Malgun Gothic'
5. 시간별 Count(수요량)을 알아 보려고 합니다.
Count(수요량)의 그래프로 만들고 아래 가이드에 따라 답하세요.
- 24시간 14일 동안의 그래프를 만드세요
# 14일 동안 매시간별 수요량을 살펴 봅시다.
temp = df[:24*14]
plt.figure(figsize = (20,8))
plt.plot('DateTime', 'Count', data = temp)
plt.grid()
plt.show()
# 시간별 규칙성이 있다. 시계열 데이터, 시간 데이터가 아주 중요한 역할을 함
6. Seasons(계졀별) Count(수요량) 대한 분포도를 알아 보려고 합니다.
Seasons(계졀별) Count(수요량)의 평균을 바그래프로 만들고 아래 가이드에 따라 답하세요.
data_agg = df.groupby(['Seasons'])['Count'].agg(['min','max','mean'])
print(data_agg)
plt.figure(figsize=(8, 4))
data_agg['mean'].plot(kind='bar')
plt.title('Mean Value by Season')
plt.xlabel('Seasons')
plt.ylabel('Mean')
plt.xticks(rotation=45)
plt.show()
min max mean
Seasons
Autumn 0 3298 819.597985
Spring 0 3251 730.031250
Summer 9 3556 1034.073370
Winter 3 937 225.541204
7. Holiday(휴일) Count(수요량) 대한 분포도를 알아 보려고 합니다.
Holiday(휴일) Count(수요량)의 평균을 바그래프로 만들고 아래 가이드에 따라 답하세요.
data_agg = df.groupby(['Holiday'])['Count'].agg(['min','max','mean'])
print(data_agg)
plt.figure(figsize=(8, 4))
data_agg['mean'].plot(kind='bar')
plt.title('Mean Value by Holiday')
plt.xlabel('Holiday')
plt.ylabel('Mean')
plt.xticks(rotation=45)
plt.show()
min max mean
Holiday
Holiday 0 2400 499.756944
No Holiday 0 3556 715.228026
8.Temperature(온도)와 Count(수요량)의 분포를 같이 확인하려고 합니다.
Temperature(온도)와 Count(수요량)을 jointplot 그래프로 만드세요.
- Seaborn을 활용하세요.
- X축에는 Temperature을 표시하고 Y축에는 Count을 표시하세요.
# 여기에 답안코드를 작성하세요.
import seaborn as sns
import matplotlib.pyplot as plt
import scipy.stats as st
graph = sns.jointplot(x=df['Temperature'], y=df['Count'], kind='scatter')
graph.set_axis_labels(xlabel='Temperature', ylabel='Count')
plt.show()
# 온도가 낮으면 추우면 잘 안탄다
9.WindSpeed(온도)와 Count(수요량)의 분포를 같이 확인하려고 합니다.
WindSpeed(온도)와 Count(수요량)을 jointplot 그래프로 만드세요.
- Seaborn을 활용하세요.
- X축에는 WindSpeed을 표시하고 Y축에는 Count을 표시하세요.
# 여기에 답안코드를 작성하세요.
graph = sns.jointplot(x=df['WindSpeed'], y=df['Count'], kind='scatter')
graph.set_axis_labels(xlabel='WindSpeed', ylabel='Count')
plt.show()
# 바람이 강하게 불면 잘 타지 않는다
10.Visibility(시야)와 Count(수요량)의 분포를 같이 확인하려고 합니다.
Visibility(시야)와 Count(수요량)을 jointplot 그래프로 만드세요.
- Seaborn을 활용하세요.
- X축에는 Visibility을 표시하고 Y축에는 Count을 표시하세요.
graph = sns.jointplot(x=df['Visibility'], y=df['Count'], kind='scatter')
graph.set_axis_labels(xlabel='Visibility', ylabel='Count')
plt.show()
# 시야가 좋지 않으면 잘 안탄다
11.Rainfall(강수량)와 Count(수요량)의 분포를 같이 확인하려고 합니다.
Rainfall(강수량)와 Count(수요량)을 jointplot 그래프로 만드세요.
- Seaborn을 활용하세요.
- X축에는 Rainfall을 표시하고 Y축에는 Count을 표시하세요.
graph = sns.jointplot(x=df['Rainfall'], y=df['Count'], kind='scatter')
graph.set_axis_labels(xlabel='Rainfall', ylabel='Count')
plt.show()
# 비가 오면 잘 타지 않는다
12.Snowfall(적설량)와 Count(수요량)의 분포를 같이 확인하려고 합니다.
Snowfall(적설량)와 Count(수요량)을 jointplot 그래프로 만드세요.
- Seaborn을 활용하세요.
- X축에는 Snowfall을 표시하고 Y축에는 Count을 표시하세요.
graph = sns.jointplot(x=df['Snowfall'], y=df['Count'], kind='scatter')
graph.set_axis_labels(xlabel='Snowfall', ylabel='Count')
plt.show()
# 눈이 오면 잘 타지 않는다
13. DateTime에서 워르 요일, 시간, 주말 컬럼을 추가하세요
- dt.month를 통해 월 컬럼을 추가합니다
- dt.weekday를 통해 요일 컬럼을 추가합니다
- dt.hour를 통해 시간 컬럼을 추가합니다
df['Month'] = df['DateTime'].dt.month # 월
df['DayOfWeek'] = df['DateTime'].dt.weekday # 요일
df['Hour'] = df['DateTime'].dt.hour # 시간
df['IsWeekend'] = (df['DateTime'].dt.dayofweek >= 5).astype(int) # 주말인지 아닌지
14. 모델링 성능을 제대로 얻기 위해서 불필요한 변수는 삭제해야 합니다.
아래 가이드를 따라 불필요 데이터를 삭제 처리하세요.
- 대상 데이터프레임: df
- 'Humidity', 'Solar', 'FuncDay' 3개 컬럼을 삭제하세요.
- 전처리 반영된 결과를 새로운 데이터프레임 변수명 df_del에 저장하세요.
df_del = df.drop(['DateTime', 'Humidity', 'Solar', 'FuncDay'], axis=1)
df_del.head()
Count | Temperature | WindSpeed | Visibility | Rainfall | Snowfall | Seasons | Holiday | Month | DayOfWeek | Hour | IsWeekend | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 254 | -5.2 | 2.2 | 2000 | 0.0 | 0.0 | Winter | No Holiday | 12 | 4 | 0 | 0 |
1 | 204 | -5.5 | 0.8 | 2000 | 0.0 | 0.0 | Winter | No Holiday | 12 | 4 | 1 | 0 |
2 | 173 | -6.0 | 1.0 | 2000 | 0.0 | 0.0 | Winter | No Holiday | 12 | 4 | 2 | 0 |
3 | 107 | -6.2 | 0.9 | 2000 | 0.0 | 0.0 | Winter | No Holiday | 12 | 4 | 3 | 0 |
4 | 78 | -6.0 | 2.3 | 2000 | 0.0 | 0.0 | Winter | No Holiday | 12 | 4 | 4 | 0 |
15. 범주형 컬럼은 가변수화(one-hot-encoding)을 수행합니다.
dtypes이 object인 컬럼들을 get_dummies를 통해 가변수화 하세요
- 가변수 대상 컬럼은 가변수화 이후 제거합니다.
obj_cols = list(df_del.columns[df_del.dtypes=='object'])
df_preset = pd.get_dummies(df_del, columns=obj_cols, drop_first=True, dtype=int) # drop_first는 해당 컬럼 제거
df_preset.head()
Count | Temperature | WindSpeed | Visibility | Rainfall | Snowfall | Month | DayOfWeek | Hour | IsWeekend | Seasons_Spring | Seasons_Summer | Seasons_Winter | Holiday_No Holiday | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 254 | -5.2 | 2.2 | 2000 | 0.0 | 0.0 | 12 | 4 | 0 | 0 | 0 | 0 | 1 | 1 |
1 | 204 | -5.5 | 0.8 | 2000 | 0.0 | 0.0 | 12 | 4 | 1 | 0 | 0 | 0 | 1 | 1 |
2 | 173 | -6.0 | 1.0 | 2000 | 0.0 | 0.0 | 12 | 4 | 2 | 0 | 0 | 0 | 1 | 1 |
3 | 107 | -6.2 | 0.9 | 2000 | 0.0 | 0.0 | 12 | 4 | 3 | 0 | 0 | 0 | 1 | 1 |
4 | 78 | -6.0 | 2.3 | 2000 | 0.0 | 0.0 | 12 | 4 | 4 | 0 | 0 | 0 | 1 | 1 |
16. 예측 대상 데이터 만들기
2시간 후 수요량을 예측해야합니다
df_preset['y'] = df_preset['Count'].shift(-2)
df_preset = df_preset.iloc[:-2]
df_preset.head()
Count | Temperature | WindSpeed | Visibility | Rainfall | Snowfall | Month | DayOfWeek | Hour | IsWeekend | Seasons_Spring | Seasons_Summer | Seasons_Winter | Holiday_No Holiday | y | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 254 | -5.2 | 2.2 | 2000 | 0.0 | 0.0 | 12 | 4 | 0 | 0 | 0 | 0 | 1 | 1 | 173.0 |
1 | 204 | -5.5 | 0.8 | 2000 | 0.0 | 0.0 | 12 | 4 | 1 | 0 | 0 | 0 | 1 | 1 | 107.0 |
2 | 173 | -6.0 | 1.0 | 2000 | 0.0 | 0.0 | 12 | 4 | 2 | 0 | 0 | 0 | 1 | 1 | 78.0 |
3 | 107 | -6.2 | 0.9 | 2000 | 0.0 | 0.0 | 12 | 4 | 3 | 0 | 0 | 0 | 1 | 1 | 100.0 |
4 | 78 | -6.0 | 2.3 | 2000 | 0.0 | 0.0 | 12 | 4 | 4 | 0 | 0 | 0 | 1 | 1 | 181.0 |
17. 각 컬럼의 상관관계를 알아 보려고 합니다.
상관관계 히트맵을 그리세요.
- numeric_only를 통해 숫자형 컬럼들만 나타내세요
- cmap은 Blues로 하세요
- cbar는 보이지 않습니다
- 소수점은 소수점 3번째 자리 까지 나타내세요
# 여기에 답안코드를 작성하세요.
import seaborn as sns
import matplotlib.pyplot as plt
# 상관관계 시각화
plt.figure(figsize=(12,12))
sns.heatmap(df_preset.corr(numeric_only=True),
annot=True,
cmap='Blues',
cbar=False, # 옆에 칼라 바 제거
square=True,
fmt='.3f', # 소수점
annot_kws={'size':9}
)
plt.show()
17. 훈련과 검증 각각에 사용할 데이터셋을 분리하려고 합니다.
y(2시간후 수요량) 컬럼을 label값 y로, 나머지 컬럼을 feature값 X로 할당한 후 훈련데이터셋과 검증데이터셋으로 분리하세요.
- 대상 데이터프레임: df_preset
- 훈련과 검증 데이터셋 분리
- 훈련 데이터셋 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 = 'y'
x = df_preset.drop(target, axis=1)
y = df_preset[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)
(7006, 14) (1752, 14) (7006,) (1752,)
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_valid = scaler.transform(X_valid)
10. y(2시간 후 수요량)을 예측하는 머신러닝 모델을 만들려고 합니다.
아래 가이드에 따라 다음 모델을 만들고 학습을 진행하세요.
- 의사결정나무(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, y_train)
rf.fit(X_train, y_train)
lr.fit(X_train, y_train)
kr.fit(X_train, 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.
KNeighborsRegressor(weights='distance')
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)
dt_mae = mean_absolute_error(y_valid, y_pred_dt)
print('dt MAE:', dt_mae)
y_pred_rf = rf.predict(X_valid)
rf_mae = mean_absolute_error(y_valid, y_pred_rf)
print('rf MAE:', rf_mae)
y_pred_lr = lr.predict(X_valid)
lr_mae = mean_absolute_error(y_valid, y_pred_lr)
print('lr MAE:', lr_mae)
y_pred_kr = kr.predict(X_valid)
kr_mae = mean_absolute_error(y_valid, y_pred_kr)
print('kr MAE:', kr_mae)
dt MAE: 180.62051021083045
rf MAE: 161.40828460449885
lr MAE: 280.8334485855858
kr MAE: 159.8544961025856
답안12 = 'KNeighborsRegressor'
다음 문항을 풀기 전에 아래 코드를 실행하세요.
import tensorflow as tf
from tensorflow.keras.models import Sequential, load_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.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, y_train,
batch_size=16,
epochs=100,
# callbacks=[es],
validation_data=(X_valid, y_valid),
verbose=1).history
Epoch 1/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 1ms/step - loss: 652057.0000 - mae: 579.9800 - mse: 652057.3125 - val_loss: 244047.5156 - val_mae: 372.8763 - val_mse: 244615.2344
Epoch 2/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 798us/step - loss: 240110.9219 - mae: 366.6853 - mse: 240111.0000 - val_loss: 190594.9688 - val_mae: 322.9146 - val_mse: 191043.5000
Epoch 3/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 794us/step - loss: 193353.0469 - mae: 321.2051 - mse: 193353.1250 - val_loss: 170525.8594 - val_mae: 298.4251 - val_mse: 170939.6406
Epoch 4/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 789us/step - loss: 175457.2344 - mae: 296.3687 - mse: 175457.3125 - val_loss: 164916.6719 - val_mae: 291.4180 - val_mse: 165299.0312
Epoch 5/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 849us/step - loss: 168062.5625 - mae: 285.4936 - mse: 168062.6719 - val_loss: 161311.7031 - val_mae: 282.8347 - val_mse: 161711.0625
Epoch 6/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 787us/step - loss: 165283.3125 - mae: 280.8416 - mse: 165283.3594 - val_loss: 159836.8594 - val_mae: 279.7749 - val_mse: 160229.5781
Epoch 7/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 784us/step - loss: 160950.3281 - mae: 276.4227 - mse: 160950.4219 - val_loss: 158414.4375 - val_mae: 277.8273 - val_mse: 158801.6094
Epoch 8/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 807us/step - loss: 161552.9531 - mae: 275.1451 - mse: 161553.0781 - val_loss: 157695.0000 - val_mae: 278.8372 - val_mse: 158050.6406
Epoch 9/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 784us/step - loss: 158942.0156 - mae: 273.5404 - mse: 158942.1094 - val_loss: 155340.6250 - val_mae: 275.1486 - val_mse: 155683.9688
Epoch 10/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 786us/step - loss: 158857.0781 - mae: 270.5570 - mse: 158857.0938 - val_loss: 152962.3281 - val_mae: 271.3320 - val_mse: 153312.0000
Epoch 11/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 796us/step - loss: 153064.3281 - mae: 266.7861 - mse: 153064.4375 - val_loss: 150735.8750 - val_mae: 267.9719 - val_mse: 151083.2344
Epoch 12/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 787us/step - loss: 155128.4844 - mae: 266.3257 - mse: 155128.5781 - val_loss: 147993.6875 - val_mae: 265.0252 - val_mse: 148346.5938
Epoch 13/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 786us/step - loss: 150697.1094 - mae: 262.3769 - mse: 150697.1406 - val_loss: 144992.6094 - val_mae: 258.7514 - val_mse: 145369.1562
Epoch 14/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 793us/step - loss: 147786.1875 - mae: 258.4503 - mse: 147786.2969 - val_loss: 143077.5469 - val_mae: 258.1235 - val_mse: 143428.0938
Epoch 15/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 877us/step - loss: 147608.5625 - mae: 256.9437 - mse: 147608.5938 - val_loss: 140092.0000 - val_mae: 253.9292 - val_mse: 140451.9688
Epoch 16/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 792us/step - loss: 144744.3438 - mae: 254.7699 - mse: 144744.4219 - val_loss: 137111.4219 - val_mae: 251.0690 - val_mse: 137469.3750
Epoch 17/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 803us/step - loss: 142235.2031 - mae: 250.8538 - mse: 142235.2812 - val_loss: 133722.3438 - val_mae: 246.1952 - val_mse: 134086.4375
Epoch 18/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 800us/step - loss: 136497.7188 - mae: 244.5107 - mse: 136497.7812 - val_loss: 131090.5156 - val_mae: 243.9976 - val_mse: 131448.9219
Epoch 19/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 790us/step - loss: 133861.0469 - mae: 242.8251 - mse: 133861.1250 - val_loss: 128049.0938 - val_mae: 238.2990 - val_mse: 128432.1016
Epoch 20/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 779us/step - loss: 133478.4375 - mae: 239.1956 - mse: 133478.5000 - val_loss: 126852.8906 - val_mae: 239.1168 - val_mse: 127227.2109
Epoch 21/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 798us/step - loss: 129091.5469 - mae: 235.4716 - mse: 129091.6250 - val_loss: 124962.2656 - val_mae: 238.2840 - val_mse: 125320.5078
Epoch 22/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 794us/step - loss: 128080.7344 - mae: 235.3396 - mse: 128080.7969 - val_loss: 122965.1719 - val_mae: 235.3587 - val_mse: 123329.9844
Epoch 23/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 781us/step - loss: 126204.8438 - mae: 231.7258 - mse: 126204.9141 - val_loss: 120043.3438 - val_mae: 226.9180 - val_mse: 120442.1719
Epoch 24/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 785us/step - loss: 125648.5000 - mae: 230.9132 - mse: 125648.5859 - val_loss: 118529.9375 - val_mae: 227.3669 - val_mse: 118919.2500
Epoch 25/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 862us/step - loss: 122363.7734 - mae: 228.4235 - mse: 122363.8359 - val_loss: 116996.2656 - val_mae: 224.9416 - val_mse: 117395.6875
Epoch 26/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 780us/step - loss: 120283.7578 - mae: 225.5574 - mse: 120283.7969 - val_loss: 115643.6719 - val_mae: 224.1733 - val_mse: 116022.5469
Epoch 27/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 785us/step - loss: 121897.4766 - mae: 225.6693 - mse: 121897.5625 - val_loss: 114098.1328 - val_mae: 221.7279 - val_mse: 114491.2344
Epoch 28/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 789us/step - loss: 119648.3516 - mae: 223.7223 - mse: 119648.4062 - val_loss: 113193.5234 - val_mae: 221.5212 - val_mse: 113581.9297
Epoch 29/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 791us/step - loss: 118959.9531 - mae: 223.3334 - mse: 118960.0391 - val_loss: 111584.3906 - val_mae: 218.7440 - val_mse: 111975.6875
Epoch 30/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 788us/step - loss: 115796.9922 - mae: 222.8169 - mse: 115797.0859 - val_loss: 110541.0469 - val_mae: 218.8018 - val_mse: 110918.9375
Epoch 31/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 792us/step - loss: 115295.3281 - mae: 219.4741 - mse: 115295.3984 - val_loss: 109617.7812 - val_mae: 218.1773 - val_mse: 110004.6094
Epoch 32/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 784us/step - loss: 114956.7109 - mae: 220.3461 - mse: 114956.7734 - val_loss: 108874.7656 - val_mae: 217.0477 - val_mse: 109255.3594
Epoch 33/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 835us/step - loss: 115420.7500 - mae: 220.0879 - mse: 115420.8281 - val_loss: 108335.6172 - val_mae: 218.5152 - val_mse: 108705.7891
Epoch 34/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 799us/step - loss: 113525.5781 - mae: 217.7480 - mse: 113525.6719 - val_loss: 106601.4766 - val_mae: 213.9530 - val_mse: 106977.2344
Epoch 35/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 781us/step - loss: 111637.6953 - mae: 217.9001 - mse: 111637.7734 - val_loss: 106309.1797 - val_mae: 214.5857 - val_mse: 106680.3828
Epoch 36/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 792us/step - loss: 114408.8594 - mae: 219.2895 - mse: 114408.9297 - val_loss: 106615.2578 - val_mae: 218.4396 - val_mse: 106970.8281
Epoch 37/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 798us/step - loss: 109409.9766 - mae: 216.2039 - mse: 109410.0703 - val_loss: 106046.8281 - val_mae: 217.8491 - val_mse: 106395.3984
Epoch 38/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 790us/step - loss: 111625.7031 - mae: 217.4887 - mse: 111625.7422 - val_loss: 104196.5078 - val_mae: 214.8710 - val_mse: 104551.8984
Epoch 39/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 801us/step - loss: 106536.3750 - mae: 211.7769 - mse: 106536.4375 - val_loss: 102633.8281 - val_mae: 211.3237 - val_mse: 102999.0234
Epoch 40/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 833us/step - loss: 109290.7812 - mae: 215.3812 - mse: 109290.8359 - val_loss: 101890.6328 - val_mae: 210.9505 - val_mse: 102243.7344
Epoch 41/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 818us/step - loss: 107738.8047 - mae: 214.2858 - mse: 107738.8750 - val_loss: 100996.6172 - val_mae: 209.7267 - val_mse: 101352.0938
Epoch 42/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 802us/step - loss: 108150.5156 - mae: 213.3143 - mse: 108150.5703 - val_loss: 100957.5234 - val_mae: 210.6553 - val_mse: 101309.6875
Epoch 43/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 798us/step - loss: 106169.1953 - mae: 212.1240 - mse: 106169.3047 - val_loss: 100084.8359 - val_mae: 210.6267 - val_mse: 100431.9062
Epoch 44/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 786us/step - loss: 103540.6094 - mae: 209.7348 - mse: 103540.6562 - val_loss: 99512.4219 - val_mae: 209.4642 - val_mse: 99859.2422
Epoch 45/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 796us/step - loss: 103237.6094 - mae: 209.5417 - mse: 103237.7109 - val_loss: 98633.3281 - val_mae: 209.2955 - val_mse: 98958.9844
Epoch 46/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 782us/step - loss: 103310.4297 - mae: 207.1675 - mse: 103310.4844 - val_loss: 98582.2578 - val_mae: 209.5936 - val_mse: 98928.4922
Epoch 47/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 779us/step - loss: 101962.8672 - mae: 207.7902 - mse: 101962.9297 - val_loss: 97435.6250 - val_mae: 207.0911 - val_mse: 97773.5234
Epoch 48/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 830us/step - loss: 101164.5391 - mae: 206.5870 - mse: 101164.6094 - val_loss: 96316.2422 - val_mae: 203.0296 - val_mse: 96666.1016
Epoch 49/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 794us/step - loss: 103953.4922 - mae: 208.6758 - mse: 103953.5859 - val_loss: 97337.3750 - val_mae: 208.4213 - val_mse: 97677.7891
Epoch 50/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 797us/step - loss: 102078.8203 - mae: 208.6758 - mse: 102078.9141 - val_loss: 95316.2109 - val_mae: 201.4029 - val_mse: 95657.2656
Epoch 51/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 781us/step - loss: 98191.5234 - mae: 203.2450 - mse: 98191.5859 - val_loss: 95031.3359 - val_mae: 202.1541 - val_mse: 95377.9531
Epoch 52/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 795us/step - loss: 99937.9297 - mae: 206.1681 - mse: 99938.0000 - val_loss: 94626.7969 - val_mae: 204.8264 - val_mse: 94956.0312
Epoch 53/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 780us/step - loss: 101893.4688 - mae: 205.6390 - mse: 101893.5547 - val_loss: 93873.0938 - val_mae: 202.6275 - val_mse: 94205.7109
Epoch 54/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 780us/step - loss: 98225.3203 - mae: 203.9502 - mse: 98225.4219 - val_loss: 92633.3359 - val_mae: 197.6528 - val_mse: 92972.0625
Epoch 55/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 777us/step - loss: 99658.7578 - mae: 204.6612 - mse: 99658.8516 - val_loss: 92744.1641 - val_mae: 203.1328 - val_mse: 93062.6797
Epoch 56/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 780us/step - loss: 97089.0781 - mae: 202.7404 - mse: 97089.1641 - val_loss: 91506.8359 - val_mae: 196.2366 - val_mse: 91833.0625
Epoch 57/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 835us/step - loss: 97684.9219 - mae: 202.8469 - mse: 97684.9531 - val_loss: 91290.0234 - val_mae: 198.0685 - val_mse: 91608.8594
Epoch 58/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 778us/step - loss: 97127.0391 - mae: 202.5043 - mse: 97127.1172 - val_loss: 90565.6016 - val_mae: 197.6233 - val_mse: 90888.0625
Epoch 59/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 785us/step - loss: 97579.1562 - mae: 202.0673 - mse: 97579.2422 - val_loss: 91725.7188 - val_mae: 203.7206 - val_mse: 92031.1484
Epoch 60/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 781us/step - loss: 95278.1250 - mae: 200.7199 - mse: 95278.1953 - val_loss: 89432.3828 - val_mae: 194.3461 - val_mse: 89764.3359
Epoch 61/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 780us/step - loss: 95445.6094 - mae: 200.0148 - mse: 95445.6875 - val_loss: 89002.8906 - val_mae: 194.1022 - val_mse: 89315.9062
Epoch 62/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 774us/step - loss: 95110.2344 - mae: 200.1674 - mse: 95110.2891 - val_loss: 88182.5234 - val_mae: 193.2357 - val_mse: 88504.5078
Epoch 63/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 779us/step - loss: 93193.1641 - mae: 198.0903 - mse: 93193.2344 - val_loss: 87718.9844 - val_mae: 193.4977 - val_mse: 88030.9062
Epoch 64/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 783us/step - loss: 94099.4297 - mae: 199.3428 - mse: 94099.5078 - val_loss: 87282.9609 - val_mae: 193.2170 - val_mse: 87600.1172
Epoch 65/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 771us/step - loss: 91741.9375 - mae: 197.7253 - mse: 91742.0312 - val_loss: 86989.1562 - val_mae: 190.1517 - val_mse: 87305.9609
Epoch 66/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 801us/step - loss: 94019.6875 - mae: 196.9616 - mse: 94019.7578 - val_loss: 86869.5234 - val_mae: 192.6780 - val_mse: 87189.3359
Epoch 67/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 786us/step - loss: 90701.0938 - mae: 196.9911 - mse: 90701.1797 - val_loss: 85786.8750 - val_mae: 190.8431 - val_mse: 86098.3906
Epoch 68/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 841us/step - loss: 89948.7734 - mae: 194.6070 - mse: 89948.8672 - val_loss: 85641.2578 - val_mae: 192.4056 - val_mse: 85952.5078
Epoch 69/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 780us/step - loss: 92765.7422 - mae: 197.1970 - mse: 92765.8281 - val_loss: 84814.3750 - val_mae: 188.2496 - val_mse: 85116.4141
Epoch 70/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 782us/step - loss: 90587.2109 - mae: 195.3318 - mse: 90587.2734 - val_loss: 84406.7109 - val_mae: 190.4885 - val_mse: 84714.6328
Epoch 71/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 798us/step - loss: 90769.7031 - mae: 196.9571 - mse: 90769.7812 - val_loss: 83991.0625 - val_mae: 187.2427 - val_mse: 84295.5547
Epoch 72/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 790us/step - loss: 88404.7266 - mae: 194.1545 - mse: 88404.7969 - val_loss: 83685.8906 - val_mae: 187.9865 - val_mse: 83996.3281
Epoch 73/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 784us/step - loss: 87174.5859 - mae: 192.1404 - mse: 87174.6406 - val_loss: 82619.6641 - val_mae: 189.0241 - val_mse: 82922.4531
Epoch 74/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 786us/step - loss: 88091.1406 - mae: 193.6097 - mse: 88091.2344 - val_loss: 82362.0391 - val_mae: 187.1116 - val_mse: 82667.2812
Epoch 75/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 783us/step - loss: 88514.8594 - mae: 192.8064 - mse: 88514.9375 - val_loss: 81615.0547 - val_mae: 184.9301 - val_mse: 81930.1250
Epoch 76/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 833us/step - loss: 89634.9219 - mae: 192.7457 - mse: 89635.0156 - val_loss: 81459.9922 - val_mae: 187.4350 - val_mse: 81754.8672
Epoch 77/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 775us/step - loss: 84167.4297 - mae: 187.8981 - mse: 84167.5156 - val_loss: 80877.3203 - val_mae: 181.6495 - val_mse: 81182.6484
Epoch 78/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 782us/step - loss: 86370.0312 - mae: 190.3068 - mse: 86370.1250 - val_loss: 80116.8750 - val_mae: 179.7175 - val_mse: 80420.5391
Epoch 79/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 802us/step - loss: 84883.7031 - mae: 188.7166 - mse: 84883.7891 - val_loss: 80032.9453 - val_mae: 179.7200 - val_mse: 80343.5703
Epoch 80/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 788us/step - loss: 82507.2500 - mae: 186.6667 - mse: 82507.3203 - val_loss: 79944.8906 - val_mae: 183.4139 - val_mse: 80254.4531
Epoch 81/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 809us/step - loss: 82166.4922 - mae: 186.4626 - mse: 82166.5391 - val_loss: 78484.9609 - val_mae: 182.4265 - val_mse: 78786.5469
Epoch 82/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 794us/step - loss: 83759.3828 - mae: 185.9922 - mse: 83759.4609 - val_loss: 77762.2344 - val_mae: 178.8743 - val_mse: 78052.1484
Epoch 83/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 792us/step - loss: 81271.1953 - mae: 184.7234 - mse: 81271.2656 - val_loss: 78835.0156 - val_mae: 179.0303 - val_mse: 79133.9688
Epoch 84/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 848us/step - loss: 81618.7188 - mae: 184.9221 - mse: 81618.7969 - val_loss: 78241.9062 - val_mae: 178.2059 - val_mse: 78541.0781
Epoch 85/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 790us/step - loss: 79095.3047 - mae: 182.8210 - mse: 79095.3828 - val_loss: 78459.6875 - val_mae: 176.9722 - val_mse: 78755.6562
Epoch 86/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 790us/step - loss: 79984.5703 - mae: 181.8417 - mse: 79984.6484 - val_loss: 76424.3750 - val_mae: 175.0881 - val_mse: 76732.5391
Epoch 87/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 789us/step - loss: 79579.0781 - mae: 181.4220 - mse: 79579.1562 - val_loss: 75750.8672 - val_mae: 173.9124 - val_mse: 76045.2109
Epoch 88/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 829us/step - loss: 77708.3359 - mae: 181.1872 - mse: 77708.4141 - val_loss: 74695.4609 - val_mae: 173.3887 - val_mse: 74993.2734
Epoch 89/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 789us/step - loss: 77748.7109 - mae: 180.2274 - mse: 77748.7969 - val_loss: 73949.2109 - val_mae: 173.8760 - val_mse: 74231.3828
Epoch 90/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 780us/step - loss: 78302.0000 - mae: 181.8988 - mse: 78302.0547 - val_loss: 72774.0156 - val_mae: 173.0412 - val_mse: 73063.0781
Epoch 91/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 846us/step - loss: 76063.3672 - mae: 179.4783 - mse: 76063.4297 - val_loss: 72607.6250 - val_mae: 172.5747 - val_mse: 72897.6953
Epoch 92/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 791us/step - loss: 76836.1250 - mae: 178.4532 - mse: 76836.1875 - val_loss: 71549.4531 - val_mae: 172.3935 - val_mse: 71823.5547
Epoch 93/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 790us/step - loss: 75811.2891 - mae: 178.9506 - mse: 75811.3594 - val_loss: 70953.8750 - val_mae: 169.8190 - val_mse: 71231.9375
Epoch 94/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 787us/step - loss: 73834.4766 - mae: 177.4736 - mse: 73834.5391 - val_loss: 72152.3672 - val_mae: 169.6765 - val_mse: 72439.3594
Epoch 95/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 786us/step - loss: 73941.8438 - mae: 175.3919 - mse: 73941.9062 - val_loss: 69961.1797 - val_mae: 168.5578 - val_mse: 70233.1719
Epoch 96/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 867us/step - loss: 73944.5781 - mae: 177.7825 - mse: 73944.6172 - val_loss: 70950.7656 - val_mae: 168.6415 - val_mse: 71235.0625
Epoch 97/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 805us/step - loss: 75161.7656 - mae: 177.7294 - mse: 75161.8203 - val_loss: 67832.7188 - val_mae: 168.3995 - val_mse: 68100.4844
Epoch 98/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 791us/step - loss: 75092.4766 - mae: 177.9762 - mse: 75092.5469 - val_loss: 68899.1797 - val_mae: 166.1533 - val_mse: 69167.1719
Epoch 99/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 790us/step - loss: 73523.0547 - mae: 176.8661 - mse: 73523.1250 - val_loss: 66924.7891 - val_mae: 165.8377 - val_mse: 67189.2344
Epoch 100/100
[1m438/438[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 776us/step - loss: 72345.4297 - mae: 173.9553 - mse: 72345.4922 - val_loss: 66316.2266 - val_mae: 164.6602 - val_mse: 66579.0391
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, verbose=1)
dl_mae = mean_absolute_error(y_valid, y_pred_dl)
print('DL MAE:', dl_mae)
[1m55/55[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 1ms/step
DL MAE: 164.66014289420488
MAE와 MAPE 그리고 R2를 나타내세요
from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error, r2_score
pred = model.predict(X_valid)
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)))
[1m55/55[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 539us/step
MAE : 164.66
MAPE: 23560701624636608.00
R2 : 0.8419
def visualization_result(y_val,pred):
sns.lineplot(y_val.values, label='valid train')
sns.lineplot(pred.reshape(pred.shape[0],), label='pred')
plt.legend(loc='upper right')
plt.show()
visualization_result(y_valid[:50],pred[:50])
'Machine Learning' 카테고리의 다른 글
2.이진분류문제_1_타이타닉 (0) | 2024.06.02 |
---|---|
1.회귀문제_4_네비게이션 (0) | 2024.06.02 |
1.회귀문제_2_보스턴 (0) | 2024.06.02 |
1.회귀문제_1_오존 (0) | 2024.06.02 |
keras 모델학습 과정 안 보이게 하기, verbose=0 (0) | 2024.03.21 |
Contents
소중한 공감 감사합니다