Deep Learning for Real Estate Price Prediction
Task 1. Exploratory Data Analysis
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
house_df=pd.read_csv('/Users/mekki/Python_Projects_Datasets/Deep Learning for Real Estate Price Prediction/00-realestate_prices.csv')
house_df
id | date | price | bedrooms | bathrooms | sqft_living | sqft_lot | floors | waterfront | view | ... | grade | sqft_above | sqft_basement | yr_built | yr_renovated | zipcode | lat | long | sqft_living15 | sqft_lot15 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 7129300520 | 20141013T000000 | 221900.0 | 3 | 1.00 | 1180 | 5650 | 1.0 | 0 | 0 | ... | 7 | 1180 | 0 | 1955 | 0 | 98178 | 47.5112 | -122.257 | 1340 | 5650 |
1 | 6414100192 | 20141209T000000 | 538000.0 | 3 | 2.25 | 2570 | 7242 | 2.0 | 0 | 0 | ... | 7 | 2170 | 400 | 1951 | 1991 | 98125 | 47.7210 | -122.319 | 1690 | 7639 |
2 | 5631500400 | 20150225T000000 | 180000.0 | 2 | 1.00 | 770 | 10000 | 1.0 | 0 | 0 | ... | 6 | 770 | 0 | 1933 | 0 | 98028 | 47.7379 | -122.233 | 2720 | 8062 |
3 | 2487200875 | 20141209T000000 | 604000.0 | 4 | 3.00 | 1960 | 5000 | 1.0 | 0 | 0 | ... | 7 | 1050 | 910 | 1965 | 0 | 98136 | 47.5208 | -122.393 | 1360 | 5000 |
4 | 1954400510 | 20150218T000000 | 510000.0 | 3 | 2.00 | 1680 | 8080 | 1.0 | 0 | 0 | ... | 8 | 1680 | 0 | 1987 | 0 | 98074 | 47.6168 | -122.045 | 1800 | 7503 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
21608 | 263000018 | 20140521T000000 | 360000.0 | 3 | 2.50 | 1530 | 1131 | 3.0 | 0 | 0 | ... | 8 | 1530 | 0 | 2009 | 0 | 98103 | 47.6993 | -122.346 | 1530 | 1509 |
21609 | 6600060120 | 20150223T000000 | 400000.0 | 4 | 2.50 | 2310 | 5813 | 2.0 | 0 | 0 | ... | 8 | 2310 | 0 | 2014 | 0 | 98146 | 47.5107 | -122.362 | 1830 | 7200 |
21610 | 1523300141 | 20140623T000000 | 402101.0 | 2 | 0.75 | 1020 | 1350 | 2.0 | 0 | 0 | ... | 7 | 1020 | 0 | 2009 | 0 | 98144 | 47.5944 | -122.299 | 1020 | 2007 |
21611 | 291310100 | 20150116T000000 | 400000.0 | 3 | 2.50 | 1600 | 2388 | 2.0 | 0 | 0 | ... | 8 | 1600 | 0 | 2004 | 0 | 98027 | 47.5345 | -122.069 | 1410 | 1287 |
21612 | 1523300157 | 20141015T000000 | 325000.0 | 2 | 0.75 | 1020 | 1076 | 2.0 | 0 | 0 | ... | 7 | 1020 | 0 | 2008 | 0 | 98144 | 47.5941 | -122.299 | 1020 | 1357 |
21613 rows × 21 columns
Retrieve the :
pd.set_option('display.float_format', '{:.0f}'.format)
house_df[['price','bedrooms', 'bathrooms']].describe()
price | bedrooms | bathrooms | |
---|---|---|---|
count | 21613 | 21613 | 21613 |
mean | 540088 | 3 | 2 |
std | 367127 | 1 | 1 |
min | 75000 | 0 | 0 |
25% | 321950 | 3 | 2 |
50% | 450000 | 3 | 2 |
75% | 645000 | 4 | 2 |
max | 7700000 | 33 | 8 |
Task 2. Perform Data Visualization
See if there is any relationship between the sqft_living and the price of the houses
sns.scatterplot(data=house_df, x='sqft_living', y='price', color='#EF5A41')
<Axes: xlabel='sqft_living', ylabel='price'>
Plot a Histogram for each value
house_df.hist(bins=20, figsize=(20,20), color='#EF5A41')
array([[<Axes: title={'center': 'id'}>, <Axes: title={'center': 'price'}>, <Axes: title={'center': 'bedrooms'}>, <Axes: title={'center': 'bathrooms'}>], [<Axes: title={'center': 'sqft_living'}>, <Axes: title={'center': 'sqft_lot'}>, <Axes: title={'center': 'floors'}>, <Axes: title={'center': 'waterfront'}>], [<Axes: title={'center': 'view'}>, <Axes: title={'center': 'condition'}>, <Axes: title={'center': 'grade'}>, <Axes: title={'center': 'sqft_above'}>], [<Axes: title={'center': 'sqft_basement'}>, <Axes: title={'center': 'yr_built'}>, <Axes: title={'center': 'yr_renovated'}>, <Axes: title={'center': 'zipcode'}>], [<Axes: title={'center': 'lat'}>, <Axes: title={'center': 'long'}>, <Axes: title={'center': 'sqft_living15'}>, <Axes: title={'center': 'sqft_lot15'}>]], dtype=object)
Visualize the Correlation between each feature
numeric_columns = house_df.select_dtypes(include=['float64', 'int64'])
f, ax = plt.subplots(figsize=(20,20))
sns.heatmap(numeric_columns.corr(), annot=True)
<Axes: >
Select a sample of the features
house_df_sample=house_df[['price','bedrooms','bathrooms','sqft_living','sqft_lot','sqft_above','sqft_basement','yr_built']]
house_df_sample
price | bedrooms | bathrooms | sqft_living | sqft_lot | sqft_above | sqft_basement | yr_built | |
---|---|---|---|---|---|---|---|---|
0 | 221900 | 3 | 1 | 1180 | 5650 | 1180 | 0 | 1955 |
1 | 538000 | 3 | 2 | 2570 | 7242 | 2170 | 400 | 1951 |
2 | 180000 | 2 | 1 | 770 | 10000 | 770 | 0 | 1933 |
3 | 604000 | 4 | 3 | 1960 | 5000 | 1050 | 910 | 1965 |
4 | 510000 | 3 | 2 | 1680 | 8080 | 1680 | 0 | 1987 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
21608 | 360000 | 3 | 2 | 1530 | 1131 | 1530 | 0 | 2009 |
21609 | 400000 | 4 | 2 | 2310 | 5813 | 2310 | 0 | 2014 |
21610 | 402101 | 2 | 1 | 1020 | 1350 | 1020 | 0 | 2009 |
21611 | 400000 | 3 | 2 | 1600 | 2388 | 1600 | 0 | 2004 |
21612 | 325000 | 2 | 1 | 1020 | 1076 | 1020 | 0 | 2008 |
21613 rows × 8 columns
Using Seaborn, plot the pairplot for the features in house_df_sample, explore the data and perform a sanity check
g = sns.PairGrid(data=house_df_sample, diag_sharey=False)
g.map_upper(sns.scatterplot, color='#681F55')
g.map_lower(sns.scatterplot, color='#681F55')
g.map_diag(sns.histplot, color='#EF5A41')
<seaborn.axisgrid.PairGrid at 0x177973490>
Task 3. Perform Data Cleaning and Feature Engineering
Select a sample of the features for the Deep Learning Phase
selected_features = ['bedrooms','bathrooms','sqft_living','sqft_lot','floors','sqft_above','sqft_basement']
x=house_df[selected_features]
x
bedrooms | bathrooms | sqft_living | sqft_lot | floors | sqft_above | sqft_basement | |
---|---|---|---|---|---|---|---|
0 | 3 | 1 | 1180 | 5650 | 1 | 1180 | 0 |
1 | 3 | 2 | 2570 | 7242 | 2 | 2170 | 400 |
2 | 2 | 1 | 770 | 10000 | 1 | 770 | 0 |
3 | 4 | 3 | 1960 | 5000 | 1 | 1050 | 910 |
4 | 3 | 2 | 1680 | 8080 | 1 | 1680 | 0 |
... | ... | ... | ... | ... | ... | ... | ... |
21608 | 3 | 2 | 1530 | 1131 | 3 | 1530 | 0 |
21609 | 4 | 2 | 2310 | 5813 | 2 | 2310 | 0 |
21610 | 2 | 1 | 1020 | 1350 | 2 | 1020 | 0 |
21611 | 3 | 2 | 1600 | 2388 | 2 | 1600 | 0 |
21612 | 2 | 1 | 1020 | 1076 | 2 | 1020 | 0 |
21613 rows × 7 columns
y=house_df['price']
y
0 221900 1 538000 2 180000 3 604000 4 510000 ... 21608 360000 21609 400000 21610 402101 21611 400000 21612 325000 Name: price, Length: 21613, dtype: float64
x.shape
(21613, 7)
y.shape
(21613,)
Scaling the Data to Train it
from sklearn.preprocessing import MinMaxScaler
scaler=MinMaxScaler()
x_scaled=scaler.fit_transform(x)
x_scaled
array([[0.09090909, 0.125 , 0.06716981, ..., 0. , 0.09758772, 0. ], [0.09090909, 0.28125 , 0.17207547, ..., 0.4 , 0.20614035, 0.08298755], [0.06060606, 0.125 , 0.03622642, ..., 0. , 0.05263158, 0. ], ..., [0.06060606, 0.09375 , 0.05509434, ..., 0.4 , 0.08004386, 0. ], [0.09090909, 0.3125 , 0.09886792, ..., 0.4 , 0.14364035, 0. ], [0.06060606, 0.09375 , 0.05509434, ..., 0.4 , 0.08004386, 0. ]])
x_scaled.shape
(21613, 7)
scaler.data_max_
array([3.300000e+01, 8.000000e+00, 1.354000e+04, 1.651359e+06, 3.500000e+00, 9.410000e+03, 4.820000e+03])
scaler.data_min_
array([ 0., 0., 290., 520., 1., 290., 0.])
y=y.values.reshape(-1,1)
y_scaled=scaler.fit_transform(y)
y_scaled
array([[0.01926557], [0.06072131], [0.01377049], ..., [0.04289849], [0.04262295], [0.03278689]])
Task 4. Train a Deep Learning Model with Limited Number of Features
Train Test Split
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_scaled, y_scaled, test_size=0.25)
x_train.shape
(16209, 7)
x_test.shape
(5404, 7)
Instantiating a Model Object
import tensorflow.keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model=Sequential()
Adding Layers
model.add(Dense(100, input_dim=7, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(1, activation='linear'))
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 100) 800 dense_1 (Dense) (None, 100) 10100 dense_2 (Dense) (None, 100) 10100 dense_3 (Dense) (None, 200) 20200 dense_4 (Dense) (None, 1) 201 ================================================================= Total params: 41401 (161.72 KB) Trainable params: 41401 (161.72 KB) Non-trainable params: 0 (0.00 Byte) _________________________________________________________________
Compiling and Training the Model
model.compile(optimizer='Adam', loss='mean_squared_error')
epochs_hist=model.fit(x_train, y_train, epochs=40, batch_size=50, validation_split=0.2)
Epoch 1/40 260/260 [==============================] - 1s 1ms/step - loss: 0.0012 - val_loss: 0.0011 Epoch 2/40 260/260 [==============================] - 0s 940us/step - loss: 0.0010 - val_loss: 0.0011 Epoch 3/40 260/260 [==============================] - 0s 883us/step - loss: 0.0010 - val_loss: 0.0011 Epoch 4/40 260/260 [==============================] - 0s 861us/step - loss: 0.0010 - val_loss: 0.0011 Epoch 5/40 260/260 [==============================] - 0s 846us/step - loss: 9.9282e-04 - val_loss: 0.0011 Epoch 6/40 260/260 [==============================] - 0s 871us/step - loss: 9.8137e-04 - val_loss: 0.0010 Epoch 7/40 260/260 [==============================] - 0s 848us/step - loss: 9.6953e-04 - val_loss: 0.0010 Epoch 8/40 260/260 [==============================] - 0s 863us/step - loss: 9.6622e-04 - val_loss: 0.0011 Epoch 9/40 260/260 [==============================] - 0s 854us/step - loss: 9.7589e-04 - val_loss: 0.0010 Epoch 10/40 260/260 [==============================] - 0s 838us/step - loss: 9.6671e-04 - val_loss: 9.9508e-04 Epoch 11/40 260/260 [==============================] - 0s 843us/step - loss: 9.5596e-04 - val_loss: 0.0011 Epoch 12/40 260/260 [==============================] - 0s 846us/step - loss: 9.5228e-04 - val_loss: 0.0011 Epoch 13/40 260/260 [==============================] - 0s 856us/step - loss: 9.7486e-04 - val_loss: 0.0010 Epoch 14/40 260/260 [==============================] - 0s 850us/step - loss: 9.4639e-04 - val_loss: 0.0010 Epoch 15/40 260/260 [==============================] - 0s 918us/step - loss: 9.4163e-04 - val_loss: 0.0010 Epoch 16/40 260/260 [==============================] - 0s 914us/step - loss: 9.7185e-04 - val_loss: 0.0010 Epoch 17/40 260/260 [==============================] - 0s 872us/step - loss: 9.4328e-04 - val_loss: 0.0010 Epoch 18/40 260/260 [==============================] - 0s 885us/step - loss: 9.4496e-04 - val_loss: 0.0010 Epoch 19/40 260/260 [==============================] - 0s 953us/step - loss: 9.3023e-04 - val_loss: 0.0012 Epoch 20/40 260/260 [==============================] - 0s 888us/step - loss: 9.4264e-04 - val_loss: 0.0010 Epoch 21/40 260/260 [==============================] - 0s 865us/step - loss: 9.2959e-04 - val_loss: 0.0010 Epoch 22/40 260/260 [==============================] - 0s 889us/step - loss: 9.3602e-04 - val_loss: 0.0011 Epoch 23/40 260/260 [==============================] - 0s 882us/step - loss: 9.3827e-04 - val_loss: 9.9735e-04 Epoch 24/40 260/260 [==============================] - 0s 870us/step - loss: 9.2816e-04 - val_loss: 0.0010 Epoch 25/40 260/260 [==============================] - 0s 863us/step - loss: 9.2620e-04 - val_loss: 9.8791e-04 Epoch 26/40 260/260 [==============================] - 0s 876us/step - loss: 9.2761e-04 - val_loss: 0.0010 Epoch 27/40 260/260 [==============================] - 0s 902us/step - loss: 9.3383e-04 - val_loss: 9.9569e-04 Epoch 28/40 260/260 [==============================] - 0s 875us/step - loss: 9.2334e-04 - val_loss: 9.8781e-04 Epoch 29/40 260/260 [==============================] - 0s 878us/step - loss: 9.2401e-04 - val_loss: 9.9307e-04 Epoch 30/40 260/260 [==============================] - 0s 888us/step - loss: 9.1545e-04 - val_loss: 9.8973e-04 Epoch 31/40 260/260 [==============================] - 0s 939us/step - loss: 9.2033e-04 - val_loss: 9.8311e-04 Epoch 32/40 260/260 [==============================] - 0s 895us/step - loss: 9.2280e-04 - val_loss: 9.8225e-04 Epoch 33/40 260/260 [==============================] - 0s 911us/step - loss: 9.2556e-04 - val_loss: 0.0010 Epoch 34/40 260/260 [==============================] - 0s 913us/step - loss: 9.1427e-04 - val_loss: 9.9323e-04 Epoch 35/40 260/260 [==============================] - 0s 868us/step - loss: 9.2140e-04 - val_loss: 0.0010 Epoch 36/40 260/260 [==============================] - 0s 883us/step - loss: 9.2044e-04 - val_loss: 9.9073e-04 Epoch 37/40 260/260 [==============================] - 0s 895us/step - loss: 9.0728e-04 - val_loss: 0.0010 Epoch 38/40 260/260 [==============================] - 0s 920us/step - loss: 9.0718e-04 - val_loss: 0.0010 Epoch 39/40 260/260 [==============================] - 0s 881us/step - loss: 9.1437e-04 - val_loss: 9.8026e-04 Epoch 40/40 260/260 [==============================] - 0s 883us/step - loss: 9.1776e-04 - val_loss: 9.8231e-04
Task 5. Evaluate Trained Deep Learning Model Performance
Plot the Training Loss vs. Validation Loss
epochs_hist.history.keys()
dict_keys(['loss', 'val_loss'])
plt.plot(epochs_hist.history['loss'], color='#EF5A41')
plt.plot(epochs_hist.history['val_loss'], color='#9A1B5B')
plt.title('Model Loss Progress During Training')
plt.xlabel('Epoch')
plt.ylabel('Training and Validation Loss')
plt.legend(['Training Loss','Validation Loss'])
<matplotlib.legend.Legend at 0x2935592d0>
Predict the price of a house using the feature values : 4, 3, 1960, 5000, 1, 2000, 3000
x_test_1 = np.array([[4, 3, 1960, 5000, 1, 2000, 3000]])
scaler_1=MinMaxScaler()
x_test_scaled_1=scaler_1.fit_transform(x_test_1)
y_predict_1=model.predict(x_test_scaled_1)
y_predict_1=scaler.inverse_transform(y_predict_1)
y_predict_1
1/1 [==============================] - 0s 36ms/step
array([[235966.42]], dtype=float32)
Plot the Model Prediction vs. True Values
y_predict = model.predict(x_test)
plt.plot(y_test, y_predict, '+', color='#EF5A41', markersize=6)
plt.xlabel('Model Prediction')
plt.ylabel('True Value')
169/169 [==============================] - 0s 400us/step
Text(0, 0.5, 'True Value')
Plot using the actual values using inverse_transform
y_predict_original=scaler.inverse_transform(y_predict)
y_test_original=scaler.inverse_transform(y_test)
y_predict = model.predict(x_test)
plt.plot(y_test_original, y_predict_original, '+', color='#EF5A41', markersize=6)
plt.xlabel('Model Prediction')
plt.ylabel('True Value')
plt.xlim(0, 5000000)
plt.ylim(0,3000000)
169/169 [==============================] - 0s 391us/step
(0.0, 3000000.0)
Generate the different metrics
k=x_test.shape[1]
n=len(x_test)
n
5404
k
7
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
from math import sqrt
List the :
RMSE=float(format(np.sqrt(mean_squared_error(y_test_original, y_predict_original)),'.3f'))
MSE=mean_squared_error(y_test_original, y_predict_original)
MAE=mean_absolute_error(y_test_original, y_predict_original)
r2=r2_score(y_test_original, y_predict_original)
adj_r2=1-(1-r2)*(n-1)/(n-k-1)
print('RMSE =', RMSE)
print('MSE =', MSE)
print('MAE =', MAE)
print('R2 =', r2)
print('Adjusted R2 =', adj_r2)
RMSE = 254933.803 MSE = 64991243773.00386 MAE = 159263.76404919967 R2 = 0.6007554733734726 Adjusted R2 = 0.6002375505257361
Task 5. Train a Deep Learning Model with a Higher Number of Features
selected_features = ['bedrooms','bathrooms','sqft_living','sqft_lot','floors','sqft_above','sqft_basement',
'yr_renovated','zipcode','lat','long','sqft_living15','sqft_lot15']
x = house_df[selected_features]
x
bedrooms | bathrooms | sqft_living | sqft_lot | floors | sqft_above | sqft_basement | yr_renovated | zipcode | lat | long | sqft_living15 | sqft_lot15 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 3 | 1 | 1180 | 5650 | 1 | 1180 | 0 | 0 | 98178 | 48 | -122 | 1340 | 5650 |
1 | 3 | 2 | 2570 | 7242 | 2 | 2170 | 400 | 1991 | 98125 | 48 | -122 | 1690 | 7639 |
2 | 2 | 1 | 770 | 10000 | 1 | 770 | 0 | 0 | 98028 | 48 | -122 | 2720 | 8062 |
3 | 4 | 3 | 1960 | 5000 | 1 | 1050 | 910 | 0 | 98136 | 48 | -122 | 1360 | 5000 |
4 | 3 | 2 | 1680 | 8080 | 1 | 1680 | 0 | 0 | 98074 | 48 | -122 | 1800 | 7503 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
21608 | 3 | 2 | 1530 | 1131 | 3 | 1530 | 0 | 0 | 98103 | 48 | -122 | 1530 | 1509 |
21609 | 4 | 2 | 2310 | 5813 | 2 | 2310 | 0 | 0 | 98146 | 48 | -122 | 1830 | 7200 |
21610 | 2 | 1 | 1020 | 1350 | 2 | 1020 | 0 | 0 | 98144 | 48 | -122 | 1020 | 2007 |
21611 | 3 | 2 | 1600 | 2388 | 2 | 1600 | 0 | 0 | 98027 | 48 | -122 | 1410 | 1287 |
21612 | 2 | 1 | 1020 | 1076 | 2 | 1020 | 0 | 0 | 98144 | 48 | -122 | 1020 | 1357 |
21613 rows × 13 columns
from sklearn.preprocessing import MinMaxScaler
scaler=MinMaxScaler()
x_scaled=scaler.fit_transform(x)
x_scaled.shape
(21613, 13)
y=house_df['price']
y=y.values.reshape(-1,1)
y_scaled=scaler.fit_transform(y)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_scaled, y_scaled, test_size=0.25)
model=Sequential()
model.add(Dense(10, input_dim=13, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(optimizer='Adam', loss='mean_squared_error')
epochs_hist=model.fit(x_train, y_train, epochs=100, batch_size=50, verbose=1, validation_split=0.2)
Epoch 1/100 260/260 [==============================] - 0s 685us/step - loss: 0.0014 - val_loss: 0.0010 Epoch 2/100 260/260 [==============================] - 0s 512us/step - loss: 9.8655e-04 - val_loss: 9.1588e-04 Epoch 3/100 260/260 [==============================] - 0s 522us/step - loss: 9.1356e-04 - val_loss: 8.2766e-04 Epoch 4/100 260/260 [==============================] - 0s 484us/step - loss: 8.1252e-04 - val_loss: 6.9093e-04 Epoch 5/100 260/260 [==============================] - 0s 504us/step - loss: 7.4539e-04 - val_loss: 6.3415e-04 Epoch 6/100 260/260 [==============================] - 0s 509us/step - loss: 7.0054e-04 - val_loss: 6.1010e-04 Epoch 7/100 260/260 [==============================] - 0s 500us/step - loss: 6.7116e-04 - val_loss: 5.7200e-04 Epoch 8/100 260/260 [==============================] - 0s 466us/step - loss: 6.3796e-04 - val_loss: 6.0879e-04 Epoch 9/100 260/260 [==============================] - 0s 493us/step - loss: 6.1259e-04 - val_loss: 5.4255e-04 Epoch 10/100 260/260 [==============================] - 0s 487us/step - loss: 6.0233e-04 - val_loss: 5.2240e-04 Epoch 11/100 260/260 [==============================] - 0s 482us/step - loss: 5.8094e-04 - val_loss: 5.2628e-04 Epoch 12/100 260/260 [==============================] - 0s 488us/step - loss: 5.6496e-04 - val_loss: 4.9161e-04 Epoch 13/100 260/260 [==============================] - 0s 472us/step - loss: 5.6531e-04 - val_loss: 5.7880e-04 Epoch 14/100 260/260 [==============================] - 0s 498us/step - loss: 5.6829e-04 - val_loss: 4.9359e-04 Epoch 15/100 260/260 [==============================] - 0s 484us/step - loss: 5.4840e-04 - val_loss: 4.9673e-04 Epoch 16/100 260/260 [==============================] - 0s 498us/step - loss: 5.4731e-04 - val_loss: 4.7401e-04 Epoch 17/100 260/260 [==============================] - 0s 480us/step - loss: 5.4758e-04 - val_loss: 4.8439e-04 Epoch 18/100 260/260 [==============================] - 0s 474us/step - loss: 5.3812e-04 - val_loss: 4.8150e-04 Epoch 19/100 260/260 [==============================] - 0s 487us/step - loss: 5.3209e-04 - val_loss: 5.2022e-04 Epoch 20/100 260/260 [==============================] - 0s 491us/step - loss: 5.3957e-04 - val_loss: 4.7427e-04 Epoch 21/100 260/260 [==============================] - 0s 484us/step - loss: 5.3188e-04 - val_loss: 5.0369e-04 Epoch 22/100 260/260 [==============================] - 0s 486us/step - loss: 5.2812e-04 - val_loss: 4.6702e-04 Epoch 23/100 260/260 [==============================] - 0s 491us/step - loss: 5.2687e-04 - val_loss: 4.6215e-04 Epoch 24/100 260/260 [==============================] - 0s 564us/step - loss: 5.2611e-04 - val_loss: 4.7124e-04 Epoch 25/100 260/260 [==============================] - 0s 523us/step - loss: 5.2297e-04 - val_loss: 4.7145e-04 Epoch 26/100 260/260 [==============================] - 0s 510us/step - loss: 5.2560e-04 - val_loss: 4.6142e-04 Epoch 27/100 260/260 [==============================] - 0s 496us/step - loss: 5.1666e-04 - val_loss: 4.6126e-04 Epoch 28/100 260/260 [==============================] - 0s 483us/step - loss: 5.1242e-04 - val_loss: 4.7089e-04 Epoch 29/100 260/260 [==============================] - 0s 485us/step - loss: 5.1919e-04 - val_loss: 4.5322e-04 Epoch 30/100 260/260 [==============================] - 0s 481us/step - loss: 5.1712e-04 - val_loss: 4.5280e-04 Epoch 31/100 260/260 [==============================] - 0s 486us/step - loss: 5.1124e-04 - val_loss: 4.4612e-04 Epoch 32/100 260/260 [==============================] - 0s 498us/step - loss: 5.0667e-04 - val_loss: 4.5507e-04 Epoch 33/100 260/260 [==============================] - 0s 508us/step - loss: 5.0634e-04 - val_loss: 4.4977e-04 Epoch 34/100 260/260 [==============================] - 0s 477us/step - loss: 5.0611e-04 - val_loss: 4.7769e-04 Epoch 35/100 260/260 [==============================] - 0s 481us/step - loss: 5.0728e-04 - val_loss: 4.6175e-04 Epoch 36/100 260/260 [==============================] - 0s 481us/step - loss: 5.0250e-04 - val_loss: 4.4267e-04 Epoch 37/100 260/260 [==============================] - 0s 488us/step - loss: 4.9903e-04 - val_loss: 4.5836e-04 Epoch 38/100 260/260 [==============================] - 0s 477us/step - loss: 5.0251e-04 - val_loss: 4.7478e-04 Epoch 39/100 260/260 [==============================] - 0s 479us/step - loss: 4.9616e-04 - val_loss: 4.5989e-04 Epoch 40/100 260/260 [==============================] - 0s 476us/step - loss: 4.9775e-04 - val_loss: 4.8445e-04 Epoch 41/100 260/260 [==============================] - 0s 486us/step - loss: 4.9031e-04 - val_loss: 4.5187e-04 Epoch 42/100 260/260 [==============================] - 0s 483us/step - loss: 4.9426e-04 - val_loss: 5.0214e-04 Epoch 43/100 260/260 [==============================] - 0s 482us/step - loss: 4.8952e-04 - val_loss: 4.7890e-04 Epoch 44/100 260/260 [==============================] - 0s 487us/step - loss: 4.9193e-04 - val_loss: 4.4524e-04 Epoch 45/100 260/260 [==============================] - 0s 520us/step - loss: 4.8517e-04 - val_loss: 4.4299e-04 Epoch 46/100 260/260 [==============================] - 0s 664us/step - loss: 4.8192e-04 - val_loss: 4.3565e-04 Epoch 47/100 260/260 [==============================] - 0s 507us/step - loss: 4.7916e-04 - val_loss: 4.5358e-04 Epoch 48/100 260/260 [==============================] - 0s 578us/step - loss: 4.7537e-04 - val_loss: 4.3119e-04 Epoch 49/100 260/260 [==============================] - 0s 484us/step - loss: 4.7735e-04 - val_loss: 4.3379e-04 Epoch 50/100 260/260 [==============================] - 0s 482us/step - loss: 4.8026e-04 - val_loss: 4.2112e-04 Epoch 51/100 260/260 [==============================] - 0s 488us/step - loss: 4.7509e-04 - val_loss: 4.4513e-04 Epoch 52/100 260/260 [==============================] - 0s 521us/step - loss: 4.7452e-04 - val_loss: 4.4619e-04 Epoch 53/100 260/260 [==============================] - 0s 492us/step - loss: 4.7449e-04 - val_loss: 4.1621e-04 Epoch 54/100 260/260 [==============================] - 0s 490us/step - loss: 4.7124e-04 - val_loss: 4.2618e-04 Epoch 55/100 260/260 [==============================] - 0s 503us/step - loss: 4.7473e-04 - val_loss: 4.3231e-04 Epoch 56/100 260/260 [==============================] - 0s 475us/step - loss: 4.6783e-04 - val_loss: 4.2514e-04 Epoch 57/100 260/260 [==============================] - 0s 486us/step - loss: 4.6216e-04 - val_loss: 4.2986e-04 Epoch 58/100 260/260 [==============================] - 0s 474us/step - loss: 4.6207e-04 - val_loss: 4.3327e-04 Epoch 59/100 260/260 [==============================] - 0s 488us/step - loss: 4.6343e-04 - val_loss: 4.7058e-04 Epoch 60/100 260/260 [==============================] - 0s 484us/step - loss: 4.5562e-04 - val_loss: 4.4049e-04 Epoch 61/100 260/260 [==============================] - 0s 470us/step - loss: 4.5528e-04 - val_loss: 4.4535e-04 Epoch 62/100 260/260 [==============================] - 0s 481us/step - loss: 4.6022e-04 - val_loss: 4.2820e-04 Epoch 63/100 260/260 [==============================] - 0s 509us/step - loss: 4.5444e-04 - val_loss: 4.1424e-04 Epoch 64/100 260/260 [==============================] - 0s 513us/step - loss: 4.4972e-04 - val_loss: 4.3377e-04 Epoch 65/100 260/260 [==============================] - 0s 585us/step - loss: 4.5189e-04 - val_loss: 4.3070e-04 Epoch 66/100 260/260 [==============================] - 0s 512us/step - loss: 4.5068e-04 - val_loss: 4.1717e-04 Epoch 67/100 260/260 [==============================] - 0s 506us/step - loss: 4.4975e-04 - val_loss: 4.3070e-04 Epoch 68/100 260/260 [==============================] - 0s 489us/step - loss: 4.4721e-04 - val_loss: 4.2432e-04 Epoch 69/100 260/260 [==============================] - 0s 486us/step - loss: 4.4663e-04 - val_loss: 4.1461e-04 Epoch 70/100 260/260 [==============================] - 0s 485us/step - loss: 4.4664e-04 - val_loss: 4.4409e-04 Epoch 71/100 260/260 [==============================] - 0s 532us/step - loss: 4.4509e-04 - val_loss: 4.3348e-04 Epoch 72/100 260/260 [==============================] - 0s 504us/step - loss: 4.4435e-04 - val_loss: 4.0393e-04 Epoch 73/100 260/260 [==============================] - 0s 491us/step - loss: 4.4184e-04 - val_loss: 4.1078e-04 Epoch 74/100 260/260 [==============================] - 0s 489us/step - loss: 4.3905e-04 - val_loss: 4.0586e-04 Epoch 75/100 260/260 [==============================] - 0s 491us/step - loss: 4.4429e-04 - val_loss: 4.9049e-04 Epoch 76/100 260/260 [==============================] - 0s 586us/step - loss: 4.4245e-04 - val_loss: 4.2431e-04 Epoch 77/100 260/260 [==============================] - 0s 600us/step - loss: 4.3445e-04 - val_loss: 4.2144e-04 Epoch 78/100 260/260 [==============================] - 0s 513us/step - loss: 4.3516e-04 - val_loss: 3.9872e-04 Epoch 79/100 260/260 [==============================] - 0s 506us/step - loss: 4.3872e-04 - val_loss: 3.9920e-04 Epoch 80/100 260/260 [==============================] - 0s 479us/step - loss: 4.3398e-04 - val_loss: 4.0783e-04 Epoch 81/100 260/260 [==============================] - 0s 489us/step - loss: 4.3280e-04 - val_loss: 4.0244e-04 Epoch 82/100 260/260 [==============================] - 0s 482us/step - loss: 4.3203e-04 - val_loss: 3.9208e-04 Epoch 83/100 260/260 [==============================] - 0s 484us/step - loss: 4.3452e-04 - val_loss: 4.3321e-04 Epoch 84/100 260/260 [==============================] - 0s 485us/step - loss: 4.3918e-04 - val_loss: 4.0215e-04 Epoch 85/100 260/260 [==============================] - 0s 480us/step - loss: 4.2415e-04 - val_loss: 3.9426e-04 Epoch 86/100 260/260 [==============================] - 0s 481us/step - loss: 4.3164e-04 - val_loss: 4.1263e-04 Epoch 87/100 260/260 [==============================] - 0s 485us/step - loss: 4.2936e-04 - val_loss: 4.0783e-04 Epoch 88/100 260/260 [==============================] - 0s 508us/step - loss: 4.2321e-04 - val_loss: 3.9601e-04 Epoch 89/100 260/260 [==============================] - 0s 485us/step - loss: 4.2139e-04 - val_loss: 4.1398e-04 Epoch 90/100 260/260 [==============================] - 0s 492us/step - loss: 4.2829e-04 - val_loss: 3.9073e-04 Epoch 91/100 260/260 [==============================] - 0s 512us/step - loss: 4.2635e-04 - val_loss: 4.0511e-04 Epoch 92/100 260/260 [==============================] - 0s 481us/step - loss: 4.3305e-04 - val_loss: 4.0167e-04 Epoch 93/100 260/260 [==============================] - 0s 572us/step - loss: 4.2303e-04 - val_loss: 3.9452e-04 Epoch 94/100 260/260 [==============================] - 0s 502us/step - loss: 4.2977e-04 - val_loss: 4.0568e-04 Epoch 95/100 260/260 [==============================] - 0s 490us/step - loss: 4.2278e-04 - val_loss: 4.0852e-04 Epoch 96/100 260/260 [==============================] - 0s 486us/step - loss: 4.3675e-04 - val_loss: 4.1940e-04 Epoch 97/100 260/260 [==============================] - 0s 494us/step - loss: 4.2929e-04 - val_loss: 3.9623e-04 Epoch 98/100 260/260 [==============================] - 0s 490us/step - loss: 4.2588e-04 - val_loss: 4.0703e-04 Epoch 99/100 260/260 [==============================] - 0s 475us/step - loss: 4.2414e-04 - val_loss: 3.9912e-04 Epoch 100/100 260/260 [==============================] - 0s 502us/step - loss: 4.2318e-04 - val_loss: 4.2747e-04
plt.plot(epochs_hist.history['loss'], color='#EF5A41')
plt.plot(epochs_hist.history['val_loss'], color='#9A1B5B')
plt.title('Model Loss Progress During Training')
plt.xlabel('Epoch')
plt.ylabel('Training and Validation Loss')
plt.legend(['Training Loss','Validation Loss'])
<matplotlib.legend.Legend at 0x2946092d0>
y_predict = model.predict(x_test)
plt.plot(y_test, y_predict, '+', color='#EF5A41', markersize=6)
plt.title('Linear Regression Predictions')
plt.xlabel('Model Prediction')
plt.ylabel('True Value')
plt.show()
169/169 [==============================] - 0s 353us/step
y_predict_original=scaler.inverse_transform(y_predict)
y_test_original=scaler.inverse_transform(y_test)
y_predict = model.predict(x_test)
plt.plot(y_test_original, y_predict_original, '+', color='#EF5A41', markersize=6)
plt.xlabel('Model Prediction')
plt.ylabel('True Value')
plt.xlim(0, 5000000)
plt.ylim(0,3000000)
169/169 [==============================] - 0s 296us/step
(0.0, 3000000.0)
k=x_test.shape[1]
n=len(x_test)
n
5404
k
13
RMSE=float(format(np.sqrt(mean_squared_error(y_test_original, y_predict_original)),'.3f'))
MSE=mean_squared_error(y_test_original, y_predict_original)
MAE=mean_absolute_error(y_test_original, y_predict_original)
r2=r2_score(y_test_original, y_predict_original)
adj_r2=1-(1-r2)*(n-1)/(n-k-1)
print('RMSE =', RMSE)
print('MSE =', MSE)
print('MAE =', MAE)
print('R2 =', r2)
print('Adjusted R2 =', adj_r2)
RMSE = 159494.805 MSE = 25438592732.23761 MAE = 95997.44692155116 R2 = 0.8128842575647005 Adjusted R2 = 0.8124329580003853
Task 6. Train a Deep Learning Model with a Higher Number of Neurons
model=Sequential()
model.add(Dense(10, input_dim=13, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(optimizer='Adam', loss='mean_squared_error')
epochs_hist=model.fit(x_train, y_train, epochs=100, batch_size=50, verbose=1, validation_split=0.2)
Epoch 1/100 260/260 [==============================] - 1s 1ms/step - loss: 0.0016 - val_loss: 9.8649e-04 Epoch 2/100 260/260 [==============================] - 0s 921us/step - loss: 9.4928e-04 - val_loss: 7.7548e-04 Epoch 3/100 260/260 [==============================] - 0s 900us/step - loss: 7.5622e-04 - val_loss: 7.7875e-04 Epoch 4/100 260/260 [==============================] - 0s 911us/step - loss: 6.9572e-04 - val_loss: 5.5175e-04 Epoch 5/100 260/260 [==============================] - 0s 908us/step - loss: 6.3614e-04 - val_loss: 5.6789e-04 Epoch 6/100 260/260 [==============================] - 0s 920us/step - loss: 6.0920e-04 - val_loss: 5.5736e-04 Epoch 7/100 260/260 [==============================] - 0s 924us/step - loss: 5.8342e-04 - val_loss: 5.1721e-04 Epoch 8/100 260/260 [==============================] - 0s 916us/step - loss: 5.9573e-04 - val_loss: 5.4101e-04 Epoch 9/100 260/260 [==============================] - 0s 895us/step - loss: 5.4592e-04 - val_loss: 4.4515e-04 Epoch 10/100 260/260 [==============================] - 0s 884us/step - loss: 5.1552e-04 - val_loss: 4.7656e-04 Epoch 11/100 260/260 [==============================] - 0s 972us/step - loss: 5.2550e-04 - val_loss: 4.1534e-04 Epoch 12/100 260/260 [==============================] - 0s 906us/step - loss: 5.2490e-04 - val_loss: 4.5475e-04 Epoch 13/100 260/260 [==============================] - 0s 945us/step - loss: 5.0719e-04 - val_loss: 4.1551e-04 Epoch 14/100 260/260 [==============================] - 0s 919us/step - loss: 4.8089e-04 - val_loss: 3.9222e-04 Epoch 15/100 260/260 [==============================] - 0s 940us/step - loss: 4.8053e-04 - val_loss: 3.9263e-04 Epoch 16/100 260/260 [==============================] - 0s 1ms/step - loss: 4.7236e-04 - val_loss: 4.5121e-04 Epoch 17/100 260/260 [==============================] - 0s 945us/step - loss: 4.7714e-04 - val_loss: 3.7444e-04 Epoch 18/100 260/260 [==============================] - 0s 911us/step - loss: 4.5230e-04 - val_loss: 4.0788e-04 Epoch 19/100 260/260 [==============================] - 0s 924us/step - loss: 4.5152e-04 - val_loss: 4.7962e-04 Epoch 20/100 260/260 [==============================] - 0s 911us/step - loss: 4.4627e-04 - val_loss: 4.2470e-04 Epoch 21/100 260/260 [==============================] - 0s 916us/step - loss: 4.3764e-04 - val_loss: 3.8686e-04 Epoch 22/100 260/260 [==============================] - 0s 916us/step - loss: 4.4636e-04 - val_loss: 6.3127e-04 Epoch 23/100 260/260 [==============================] - 0s 893us/step - loss: 4.6282e-04 - val_loss: 3.5916e-04 Epoch 24/100 260/260 [==============================] - 0s 913us/step - loss: 4.3849e-04 - val_loss: 3.7643e-04 Epoch 25/100 260/260 [==============================] - 0s 910us/step - loss: 4.4550e-04 - val_loss: 4.6009e-04 Epoch 26/100 260/260 [==============================] - 0s 912us/step - loss: 4.4478e-04 - val_loss: 3.5830e-04 Epoch 27/100 260/260 [==============================] - 0s 899us/step - loss: 4.1965e-04 - val_loss: 3.5006e-04 Epoch 28/100 260/260 [==============================] - 0s 990us/step - loss: 4.2643e-04 - val_loss: 3.5560e-04 Epoch 29/100 260/260 [==============================] - 0s 920us/step - loss: 4.2529e-04 - val_loss: 4.6456e-04 Epoch 30/100 260/260 [==============================] - 0s 958us/step - loss: 4.1524e-04 - val_loss: 4.3442e-04 Epoch 31/100 260/260 [==============================] - 0s 894us/step - loss: 4.1918e-04 - val_loss: 3.4946e-04 Epoch 32/100 260/260 [==============================] - 0s 907us/step - loss: 4.1664e-04 - val_loss: 3.3847e-04 Epoch 33/100 260/260 [==============================] - 0s 903us/step - loss: 4.0626e-04 - val_loss: 4.3640e-04 Epoch 34/100 260/260 [==============================] - 0s 897us/step - loss: 4.2061e-04 - val_loss: 3.5299e-04 Epoch 35/100 260/260 [==============================] - 0s 1ms/step - loss: 4.2408e-04 - val_loss: 3.5629e-04 Epoch 36/100 260/260 [==============================] - 0s 906us/step - loss: 4.2520e-04 - val_loss: 4.1602e-04 Epoch 37/100 260/260 [==============================] - 0s 918us/step - loss: 3.9879e-04 - val_loss: 3.5318e-04 Epoch 38/100 260/260 [==============================] - 0s 896us/step - loss: 4.0380e-04 - val_loss: 3.7103e-04 Epoch 39/100 260/260 [==============================] - 0s 910us/step - loss: 4.2351e-04 - val_loss: 4.0435e-04 Epoch 40/100 260/260 [==============================] - 0s 898us/step - loss: 4.0546e-04 - val_loss: 5.2386e-04 Epoch 41/100 260/260 [==============================] - 0s 925us/step - loss: 4.2760e-04 - val_loss: 3.5751e-04 Epoch 42/100 260/260 [==============================] - 0s 1ms/step - loss: 3.9094e-04 - val_loss: 3.8858e-04 Epoch 43/100 260/260 [==============================] - 0s 926us/step - loss: 3.9693e-04 - val_loss: 3.5649e-04 Epoch 44/100 260/260 [==============================] - 0s 914us/step - loss: 3.9600e-04 - val_loss: 4.3183e-04 Epoch 45/100 260/260 [==============================] - 0s 931us/step - loss: 3.9876e-04 - val_loss: 3.5637e-04 Epoch 46/100 260/260 [==============================] - 0s 937us/step - loss: 3.8709e-04 - val_loss: 3.5753e-04 Epoch 47/100 260/260 [==============================] - 0s 954us/step - loss: 3.9070e-04 - val_loss: 4.4879e-04 Epoch 48/100 260/260 [==============================] - 0s 913us/step - loss: 4.0001e-04 - val_loss: 3.8129e-04 Epoch 49/100 260/260 [==============================] - 0s 929us/step - loss: 3.9784e-04 - val_loss: 3.4729e-04 Epoch 50/100 260/260 [==============================] - 0s 893us/step - loss: 3.8879e-04 - val_loss: 3.4094e-04 Epoch 51/100 260/260 [==============================] - 0s 904us/step - loss: 3.7971e-04 - val_loss: 3.5302e-04 Epoch 52/100 260/260 [==============================] - 0s 986us/step - loss: 3.8531e-04 - val_loss: 3.6147e-04 Epoch 53/100 260/260 [==============================] - 0s 972us/step - loss: 3.8796e-04 - val_loss: 3.3611e-04 Epoch 54/100 260/260 [==============================] - 0s 964us/step - loss: 3.8931e-04 - val_loss: 3.6652e-04 Epoch 55/100 260/260 [==============================] - 0s 929us/step - loss: 3.7971e-04 - val_loss: 3.4375e-04 Epoch 56/100 260/260 [==============================] - 0s 892us/step - loss: 3.8271e-04 - val_loss: 3.3765e-04 Epoch 57/100 260/260 [==============================] - 0s 899us/step - loss: 3.8250e-04 - val_loss: 3.4022e-04 Epoch 58/100 260/260 [==============================] - 0s 924us/step - loss: 3.7790e-04 - val_loss: 3.4815e-04 Epoch 59/100 260/260 [==============================] - 0s 952us/step - loss: 3.7882e-04 - val_loss: 3.6458e-04 Epoch 60/100 260/260 [==============================] - 0s 928us/step - loss: 3.7421e-04 - val_loss: 3.5461e-04 Epoch 61/100 260/260 [==============================] - 0s 906us/step - loss: 3.7147e-04 - val_loss: 3.4390e-04 Epoch 62/100 260/260 [==============================] - 0s 926us/step - loss: 3.8664e-04 - val_loss: 4.1396e-04 Epoch 63/100 260/260 [==============================] - 0s 929us/step - loss: 3.7643e-04 - val_loss: 3.5885e-04 Epoch 64/100 260/260 [==============================] - 0s 985us/step - loss: 3.7307e-04 - val_loss: 3.1915e-04 Epoch 65/100 260/260 [==============================] - 0s 916us/step - loss: 3.5527e-04 - val_loss: 3.6746e-04 Epoch 66/100 260/260 [==============================] - 0s 915us/step - loss: 3.7806e-04 - val_loss: 4.1192e-04 Epoch 67/100 260/260 [==============================] - 0s 910us/step - loss: 3.7332e-04 - val_loss: 3.2803e-04 Epoch 68/100 260/260 [==============================] - 0s 896us/step - loss: 3.6035e-04 - val_loss: 3.5944e-04 Epoch 69/100 260/260 [==============================] - 0s 905us/step - loss: 3.9454e-04 - val_loss: 3.4213e-04 Epoch 70/100 260/260 [==============================] - 0s 890us/step - loss: 3.6252e-04 - val_loss: 3.9332e-04 Epoch 71/100 260/260 [==============================] - 0s 929us/step - loss: 3.7558e-04 - val_loss: 4.3639e-04 Epoch 72/100 260/260 [==============================] - 0s 925us/step - loss: 3.8003e-04 - val_loss: 3.6735e-04 Epoch 73/100 260/260 [==============================] - 0s 892us/step - loss: 3.6065e-04 - val_loss: 3.8908e-04 Epoch 74/100 260/260 [==============================] - 0s 919us/step - loss: 3.5992e-04 - val_loss: 3.4571e-04 Epoch 75/100 260/260 [==============================] - 0s 916us/step - loss: 3.5439e-04 - val_loss: 3.7431e-04 Epoch 76/100 260/260 [==============================] - 0s 928us/step - loss: 3.7222e-04 - val_loss: 3.8962e-04 Epoch 77/100 260/260 [==============================] - 0s 895us/step - loss: 3.6041e-04 - val_loss: 3.2952e-04 Epoch 78/100 260/260 [==============================] - 0s 996us/step - loss: 3.5551e-04 - val_loss: 3.5227e-04 Epoch 79/100 260/260 [==============================] - 0s 919us/step - loss: 3.5773e-04 - val_loss: 3.6855e-04 Epoch 80/100 260/260 [==============================] - 0s 933us/step - loss: 3.6016e-04 - val_loss: 3.2864e-04 Epoch 81/100 260/260 [==============================] - 0s 943us/step - loss: 3.6669e-04 - val_loss: 3.9169e-04 Epoch 82/100 260/260 [==============================] - 0s 918us/step - loss: 3.5063e-04 - val_loss: 3.4247e-04 Epoch 83/100 260/260 [==============================] - 0s 914us/step - loss: 3.5130e-04 - val_loss: 3.5517e-04 Epoch 84/100 260/260 [==============================] - 0s 929us/step - loss: 3.5735e-04 - val_loss: 3.7150e-04 Epoch 85/100 260/260 [==============================] - 0s 897us/step - loss: 3.5838e-04 - val_loss: 3.3777e-04 Epoch 86/100 260/260 [==============================] - 0s 915us/step - loss: 3.3658e-04 - val_loss: 3.8450e-04 Epoch 87/100 260/260 [==============================] - 0s 897us/step - loss: 3.5305e-04 - val_loss: 3.4894e-04 Epoch 88/100 260/260 [==============================] - 0s 975us/step - loss: 3.4101e-04 - val_loss: 3.5481e-04 Epoch 89/100 260/260 [==============================] - 0s 911us/step - loss: 3.5236e-04 - val_loss: 3.3046e-04 Epoch 90/100 260/260 [==============================] - 0s 929us/step - loss: 3.4905e-04 - val_loss: 3.3836e-04 Epoch 91/100 260/260 [==============================] - 0s 914us/step - loss: 3.4622e-04 - val_loss: 3.2883e-04 Epoch 92/100 260/260 [==============================] - 0s 926us/step - loss: 3.4353e-04 - val_loss: 3.3694e-04 Epoch 93/100 260/260 [==============================] - 0s 916us/step - loss: 3.3719e-04 - val_loss: 3.6588e-04 Epoch 94/100 260/260 [==============================] - 0s 896us/step - loss: 3.5121e-04 - val_loss: 3.5338e-04 Epoch 95/100 260/260 [==============================] - 0s 927us/step - loss: 3.4302e-04 - val_loss: 3.9683e-04 Epoch 96/100 260/260 [==============================] - 0s 928us/step - loss: 3.3276e-04 - val_loss: 3.3400e-04 Epoch 97/100 260/260 [==============================] - 0s 1ms/step - loss: 3.3025e-04 - val_loss: 3.4384e-04 Epoch 98/100 260/260 [==============================] - 0s 922us/step - loss: 3.3522e-04 - val_loss: 4.6095e-04 Epoch 99/100 260/260 [==============================] - 0s 937us/step - loss: 3.5135e-04 - val_loss: 3.6126e-04 Epoch 100/100 260/260 [==============================] - 0s 918us/step - loss: 3.2818e-04 - val_loss: 3.4800e-04
plt.plot(epochs_hist.history['loss'], color='#EF5A41')
plt.plot(epochs_hist.history['val_loss'], color='#9A1B5B')
plt.title('Model Loss Progress During Training')
plt.xlabel('Epoch')
plt.ylabel('Training and Validation Loss')
plt.legend(['Training Loss','Validation Loss'])
<matplotlib.legend.Legend at 0x291b7d590>
y_predict = model.predict(x_test)
plt.plot(y_test, y_predict, '+', color='#EF5A41', markersize=6)
plt.title('Linear Regression Predictions')
plt.xlabel('Model Prediction')
plt.ylabel('True Value')
plt.show()
169/169 [==============================] - 0s 420us/step
y_predict_original=scaler.inverse_transform(y_predict)
y_test_original=scaler.inverse_transform(y_test)
y_predict = model.predict(x_test)
plt.plot(y_test_original, y_predict_original, '+', color='#EF5A41', markersize=6)
plt.xlabel('Model Prediction')
plt.ylabel('True Value')
plt.xlim(0, 5000000)
plt.ylim(0,3000000)
169/169 [==============================] - 0s 396us/step
(0.0, 3000000.0)
RMSE=float(format(np.sqrt(mean_squared_error(y_test_original, y_predict_original)),'.3f'))
MSE=mean_squared_error(y_test_original, y_predict_original)
MAE=mean_absolute_error(y_test_original, y_predict_original)
r2=r2_score(y_test_original, y_predict_original)
adj_r2=1-(1-r2)*(n-1)/(n-k-1)
print('RMSE =', RMSE)
print('MSE =', MSE)
print('MAE =', MAE)
print('R2 =', r2)
print('Adjusted R2 =', adj_r2)
RMSE = 150048.282 MSE = 22514486929.695152 MAE = 82312.30946983716 R2 = 0.8343927676446907 Adjusted R2 = 0.8339933438931844