# Import the libraries
import numpy as np
import pandas as pd
from tensorflow import random
# Load the Data
X = pd.read_csv("../data/aps_failure_training_feats.csv")
y = pd.read_csv("../data/aps_failure_training_target.csv")
# use the head function view the first 5 rows of the data
X.head()
aa_000 | ab_000 | ac_000 | ad_000 | ae_000 | af_000 | ag_000 | ag_001 | ag_002 | ag_003 | ... | ee_002 | ee_003 | ee_004 | ee_005 | ee_006 | ee_007 | ee_008 | ee_009 | ef_000 | eg_000 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 76698 | 0.0 | 2.130706e+09 | 280.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 1240520.0 | 493384.0 | 721044.0 | 469792.0 | 339156.0 | 157956.0 | 73224.0 | 0.0 | 0.0 | 0.0 |
1 | 33058 | 0.0 | 0.000000e+00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 421400.0 | 178064.0 | 293306.0 | 245416.0 | 133654.0 | 81140.0 | 97576.0 | 1500.0 | 0.0 | 0.0 |
2 | 41040 | 0.0 | 2.280000e+02 | 100.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 277378.0 | 159812.0 | 423992.0 | 409564.0 | 320746.0 | 158022.0 | 95128.0 | 514.0 | 0.0 | 0.0 |
3 | 12 | 0.0 | 7.000000e+01 | 66.0 | 0.0 | 10.0 | 0.0 | 0.0 | 0.0 | 318.0 | ... | 240.0 | 46.0 | 58.0 | 44.0 | 10.0 | 0.0 | 0.0 | 0.0 | 4.0 | 32.0 |
4 | 60874 | 0.0 | 1.368000e+03 | 458.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 622012.0 | 229790.0 | 405298.0 | 347188.0 | 286954.0 | 311560.0 | 433954.0 | 1218.0 | 0.0 | 0.0 |
5 rows × 170 columns
# Summary of Numerical Data
X.describe()
aa_000 | ab_000 | ac_000 | ad_000 | ae_000 | af_000 | ag_000 | ag_001 | ag_002 | ag_003 | ... | ee_002 | ee_003 | ee_004 | ee_005 | ee_006 | ee_007 | ee_008 | ee_009 | ef_000 | eg_000 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 6.000000e+04 | 60000.000000 | 6.000000e+04 | 6.000000e+04 | 60000.000000 | 60000.000000 | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | ... | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | 6.000000e+04 | 60000.000000 | 60000.000000 |
mean | 5.933650e+04 | 0.162500 | 3.362258e+08 | 1.434071e+05 | 6.535000 | 10.548200 | 2.191577e+02 | 9.648104e+02 | 8.509771e+03 | 8.760054e+04 | ... | 4.405077e+05 | 2.087653e+05 | 4.407495e+05 | 3.895406e+05 | 3.293335e+05 | 3.423990e+05 | 1.371785e+05 | 8.295099e+03 | 0.086467 | 0.203100 |
std | 1.454301e+05 | 1.687318 | 7.767625e+08 | 3.504525e+07 | 158.147893 | 205.387115 | 2.036364e+04 | 3.400891e+04 | 1.494818e+05 | 7.575171e+05 | ... | 1.150015e+06 | 5.407282e+05 | 1.162708e+06 | 1.115528e+06 | 1.063741e+06 | 1.718752e+06 | 4.472274e+05 | 4.721249e+04 | 4.268570 | 8.628043 |
min | 0.000000e+00 | 0.000000 | 0.000000e+00 | 0.000000e+00 | 0.000000 | 0.000000 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | ... | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000 | 0.000000 |
25% | 8.340000e+02 | 0.000000 | 8.000000e+00 | 0.000000e+00 | 0.000000 | 0.000000 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | ... | 2.662000e+03 | 1.024000e+03 | 2.288000e+03 | 2.897000e+03 | 3.960000e+02 | 8.800000e+01 | 0.000000e+00 | 0.000000e+00 | 0.000000 | 0.000000 |
50% | 3.077600e+04 | 0.000000 | 1.200000e+02 | 4.200000e+01 | 0.000000 | 0.000000 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | ... | 2.280220e+05 | 1.088190e+05 | 2.153240e+05 | 1.838280e+05 | 8.491400e+04 | 3.840600e+04 | 3.276000e+03 | 0.000000e+00 | 0.000000 | 0.000000 |
75% | 4.866800e+04 | 0.000000 | 8.480000e+02 | 2.920000e+02 | 0.000000 | 0.000000 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | ... | 4.350315e+05 | 2.164440e+05 | 4.624655e+05 | 4.003010e+05 | 2.725220e+05 | 1.663465e+05 | 1.367255e+05 | 1.934000e+03 | 0.000000 | 0.000000 |
max | 2.746564e+06 | 204.000000 | 2.130707e+09 | 8.584298e+09 | 21050.000000 | 20070.000000 | 3.376892e+06 | 4.109372e+06 | 1.055286e+07 | 6.340207e+07 | ... | 7.793393e+07 | 3.775839e+07 | 9.715238e+07 | 5.743524e+07 | 3.160781e+07 | 1.195801e+08 | 1.926740e+07 | 3.810078e+06 | 482.000000 | 1146.000000 |
8 rows × 170 columns
y.head()
class | |
---|---|
0 | 0 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
# Split the data into training and testing sets
from sklearn.model_selection import train_test_split
seed = 42
X_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.20, random_state=seed)
# Initialize StandardScaler
from sklearn.preprocessing import StandardScaler
sc=StandardScaler()
# Transform the training data
X_train = sc.fit_transform(X_train)
X_train = pd.DataFrame(X_train,columns=X_test.columns)
# Transform the testing data
X_test=sc.transform(X_test)
X_test=pd.DataFrame(X_test,columns=X_train.columns)
Train a Neural Network and find its accuracy
# Import the relevant Keras libraries
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
Using TensorFlow backend.
# Initiate the model with sequential class
np.random.seed(seed)
random.set_seed(seed)
model=Sequential()
# Add the hidden dense layers and with dropout Layer
model.add(Dense(units=64, activation='relu', kernel_initializer='uniform', input_dim=X_train.shape[1]))
model.add(Dropout(rate=0.5))
model.add(Dense(units=32, activation='relu', kernel_initializer='uniform', input_dim=X_train.shape[1]))
model.add(Dropout(rate=0.4))
model.add(Dense(units=16, activation='relu', kernel_initializer='uniform', input_dim=X_train.shape[1]))
model.add(Dropout(rate=0.3))
model.add(Dense(units=8, activation='relu', kernel_initializer='uniform', input_dim=X_train.shape[1]))
model.add(Dropout(rate=0.2))
model.add(Dense(units=4, activation='relu', kernel_initializer='uniform'))
model.add(Dropout(rate=0.1))
# Add Output Dense Layer
model.add(Dense(units=1, activation='sigmoid', kernel_initializer='uniform'))
# Compile the Model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Fit the Model
model.fit(X_train, y_train, epochs=100, batch_size=20, verbose=1, validation_split=0.2, shuffle=False)
Train on 38400 samples, validate on 9600 samples Epoch 1/100 38400/38400 [==============================] - 5s 139us/step - loss: 0.0805 - accuracy: 0.9833 - val_loss: 0.0365 - val_accuracy: 0.9842 Epoch 2/100 38400/38400 [==============================] - 5s 122us/step - loss: 0.0424 - accuracy: 0.9834 - val_loss: 0.0348 - val_accuracy: 0.9842 Epoch 3/100 38400/38400 [==============================] - 4s 107us/step - loss: 0.0381 - accuracy: 0.9834 - val_loss: 0.0321 - val_accuracy: 0.9842 Epoch 4/100 38400/38400 [==============================] - 4s 108us/step - loss: 0.0350 - accuracy: 0.9834 - val_loss: 0.0316 - val_accuracy: 0.9842 Epoch 5/100 38400/38400 [==============================] - 4s 106us/step - loss: 0.0360 - accuracy: 0.9838 - val_loss: 0.0288 - val_accuracy: 0.9904 Epoch 6/100 38400/38400 [==============================] - 5s 129us/step - loss: 0.0333 - accuracy: 0.9904 - val_loss: 0.0284 - val_accuracy: 0.9907 Epoch 7/100 38400/38400 [==============================] - 4s 115us/step - loss: 0.0332 - accuracy: 0.9902 - val_loss: 0.0290 - val_accuracy: 0.9901 Epoch 8/100 38400/38400 [==============================] - 4s 116us/step - loss: 0.0309 - accuracy: 0.9905 - val_loss: 0.0305 - val_accuracy: 0.9915 Epoch 9/100 38400/38400 [==============================] - 5s 117us/step - loss: 0.0312 - accuracy: 0.9908 - val_loss: 0.0291 - val_accuracy: 0.9900 Epoch 10/100 38400/38400 [==============================] - 4s 115us/step - loss: 0.0308 - accuracy: 0.9912 - val_loss: 0.0288 - val_accuracy: 0.9911 Epoch 11/100 38400/38400 [==============================] - 4s 106us/step - loss: 0.0293 - accuracy: 0.9908 - val_loss: 0.0276 - val_accuracy: 0.9915 Epoch 12/100 38400/38400 [==============================] - 4s 104us/step - loss: 0.0287 - accuracy: 0.9911 - val_loss: 0.0271 - val_accuracy: 0.9915 Epoch 13/100 38400/38400 [==============================] - 4s 102us/step - loss: 0.0281 - accuracy: 0.9913 - val_loss: 0.0337 - val_accuracy: 0.9902 Epoch 14/100 38400/38400 [==============================] - 4s 102us/step - loss: 0.0292 - accuracy: 0.9915 - val_loss: 0.0323 - val_accuracy: 0.9908 Epoch 15/100 38400/38400 [==============================] - 4s 103us/step - loss: 0.0289 - accuracy: 0.9921 - val_loss: 0.0270 - val_accuracy: 0.9932 Epoch 16/100 38400/38400 [==============================] - 4s 108us/step - loss: 0.0282 - accuracy: 0.9916 - val_loss: 0.0282 - val_accuracy: 0.9917 Epoch 17/100 38400/38400 [==============================] - 4s 105us/step - loss: 0.0285 - accuracy: 0.9922 - val_loss: 0.0326 - val_accuracy: 0.9915 Epoch 18/100 38400/38400 [==============================] - 4s 109us/step - loss: 0.0276 - accuracy: 0.9925 - val_loss: 0.0311 - val_accuracy: 0.9920 Epoch 19/100 38400/38400 [==============================] - 4s 108us/step - loss: 0.0267 - accuracy: 0.9921 - val_loss: 0.0314 - val_accuracy: 0.9915 Epoch 20/100 38400/38400 [==============================] - 4s 108us/step - loss: 0.0269 - accuracy: 0.9919 - val_loss: 0.0285 - val_accuracy: 0.9924 Epoch 21/100 38400/38400 [==============================] - 4s 110us/step - loss: 0.0281 - accuracy: 0.9920 - val_loss: 0.0313 - val_accuracy: 0.9917 Epoch 22/100 38400/38400 [==============================] - 4s 108us/step - loss: 0.0277 - accuracy: 0.9924 - val_loss: 0.0289 - val_accuracy: 0.9923 Epoch 23/100 38400/38400 [==============================] - 5s 121us/step - loss: 0.0274 - accuracy: 0.9924 - val_loss: 0.0293 - val_accuracy: 0.9924 Epoch 24/100 38400/38400 [==============================] - 4s 104us/step - loss: 0.0265 - accuracy: 0.9927 - val_loss: 0.0328 - val_accuracy: 0.9922 Epoch 25/100 38400/38400 [==============================] - 4s 96us/step - loss: 0.0257 - accuracy: 0.9929 - val_loss: 0.0326 - val_accuracy: 0.9922 Epoch 26/100 38400/38400 [==============================] - 4s 98us/step - loss: 0.0267 - accuracy: 0.9927 - val_loss: 0.0289 - val_accuracy: 0.9916 Epoch 27/100 38400/38400 [==============================] - 4s 102us/step - loss: 0.0249 - accuracy: 0.9931 - val_loss: 0.0316 - val_accuracy: 0.9921 Epoch 28/100 38400/38400 [==============================] - 4s 105us/step - loss: 0.0269 - accuracy: 0.9928 - val_loss: 0.0348 - val_accuracy: 0.9929 Epoch 29/100 38400/38400 [==============================] - 4s 92us/step - loss: 0.0246 - accuracy: 0.9927 - val_loss: 0.0318 - val_accuracy: 0.9927 Epoch 30/100 38400/38400 [==============================] - 4s 96us/step - loss: 0.0258 - accuracy: 0.9924 - val_loss: 0.0299 - val_accuracy: 0.9917 Epoch 31/100 38400/38400 [==============================] - 4s 95us/step - loss: 0.0250 - accuracy: 0.9928 - val_loss: 0.0286 - val_accuracy: 0.9912 Epoch 32/100 38400/38400 [==============================] - 4s 101us/step - loss: 0.0260 - accuracy: 0.9930 - val_loss: 0.0273 - val_accuracy: 0.9919 Epoch 33/100 38400/38400 [==============================] - 4s 103us/step - loss: 0.0239 - accuracy: 0.9933 - val_loss: 0.0336 - val_accuracy: 0.9919 Epoch 34/100 38400/38400 [==============================] - 4s 105us/step - loss: 0.0248 - accuracy: 0.9930 - val_loss: 0.0339 - val_accuracy: 0.9918 Epoch 35/100 38400/38400 [==============================] - 4s 100us/step - loss: 0.0255 - accuracy: 0.9932 - val_loss: 0.0326 - val_accuracy: 0.9919 Epoch 36/100 38400/38400 [==============================] - 4s 100us/step - loss: 0.0224 - accuracy: 0.9934 - val_loss: 0.0308 - val_accuracy: 0.9918 Epoch 37/100 38400/38400 [==============================] - 4s 102us/step - loss: 0.0239 - accuracy: 0.9934 - val_loss: 0.0337 - val_accuracy: 0.9921 Epoch 38/100 38400/38400 [==============================] - 4s 96us/step - loss: 0.0245 - accuracy: 0.9930 - val_loss: 0.0319 - val_accuracy: 0.9918 Epoch 39/100 38400/38400 [==============================] - 4s 96us/step - loss: 0.0242 - accuracy: 0.9936 - val_loss: 0.0323 - val_accuracy: 0.9931 Epoch 40/100 38400/38400 [==============================] - 4s 100us/step - loss: 0.0219 - accuracy: 0.9935 - val_loss: 0.0321 - val_accuracy: 0.9925 Epoch 41/100 38400/38400 [==============================] - 4s 115us/step - loss: 0.0244 - accuracy: 0.9939 - val_loss: 0.0364 - val_accuracy: 0.9930 Epoch 42/100 38400/38400 [==============================] - 4s 109us/step - loss: 0.0218 - accuracy: 0.9943 - val_loss: 0.0388 - val_accuracy: 0.9923 Epoch 43/100 38400/38400 [==============================] - 4s 109us/step - loss: 0.0241 - accuracy: 0.9935 - val_loss: 0.0321 - val_accuracy: 0.9926 Epoch 44/100 38400/38400 [==============================] - 4s 112us/step - loss: 0.0236 - accuracy: 0.9937 - val_loss: 0.0360 - val_accuracy: 0.9924 Epoch 45/100 38400/38400 [==============================] - 5s 130us/step - loss: 0.0223 - accuracy: 0.9937 - val_loss: 0.0396 - val_accuracy: 0.9928 Epoch 46/100 38400/38400 [==============================] - 5s 129us/step - loss: 0.0233 - accuracy: 0.9937 - val_loss: 0.0331 - val_accuracy: 0.9917 Epoch 47/100 38400/38400 [==============================] - 5s 139us/step - loss: 0.0221 - accuracy: 0.9938 - val_loss: 0.0358 - val_accuracy: 0.9923 Epoch 48/100 38400/38400 [==============================] - 6s 157us/step - loss: 0.0231 - accuracy: 0.9939 - val_loss: 0.0384 - val_accuracy: 0.9920 Epoch 49/100 38400/38400 [==============================] - 5s 140us/step - loss: 0.0217 - accuracy: 0.9941 - val_loss: 0.0367 - val_accuracy: 0.9916 Epoch 50/100 38400/38400 [==============================] - 6s 149us/step - loss: 0.0218 - accuracy: 0.9940 - val_loss: 0.0398 - val_accuracy: 0.9924 - loss: 0.0218 - accuracy: 0.99 - ETA: 0s - loss: 0.0219 - accuracy: 0. Epoch 51/100 38400/38400 [==============================] - 6s 150us/step - loss: 0.0220 - accuracy: 0.9940 - val_loss: 0.0385 - val_accuracy: 0.9923 Epoch 52/100 38400/38400 [==============================] - 6s 149us/step - loss: 0.0227 - accuracy: 0.9941 - val_loss: 0.0376 - val_accuracy: 0.9910 Epoch 53/100 38400/38400 [==============================] - 6s 149us/step - loss: 0.0239 - accuracy: 0.9936 - val_loss: 0.0412 - val_accuracy: 0.9908 Epoch 54/100 38400/38400 [==============================] - 6s 154us/step - loss: 0.0230 - accuracy: 0.9943 - val_loss: 0.0455 - val_accuracy: 0.9920 Epoch 55/100 38400/38400 [==============================] - 5s 142us/step - loss: 0.0221 - accuracy: 0.9936 - val_loss: 0.0391 - val_accuracy: 0.9920 Epoch 56/100 38400/38400 [==============================] - 5s 142us/step - loss: 0.0216 - accuracy: 0.9942 - val_loss: 0.0426 - val_accuracy: 0.9923 Epoch 57/100 38400/38400 [==============================] - 6s 166us/step - loss: 0.0218 - accuracy: 0.9933 - val_loss: 0.0418 - val_accuracy: 0.9917 Epoch 58/100 38400/38400 [==============================] - 6s 144us/step - loss: 0.0235 - accuracy: 0.9937 - val_loss: 0.0414 - val_accuracy: 0.9921 Epoch 59/100 38400/38400 [==============================] - 6s 145us/step - loss: 0.0209 - accuracy: 0.9943 - val_loss: 0.0376 - val_accuracy: 0.9922 Epoch 60/100 38400/38400 [==============================] - 5s 126us/step - loss: 0.0246 - accuracy: 0.9940 - val_loss: 0.0441 - val_accuracy: 0.9918 Epoch 61/100 38400/38400 [==============================] - 5s 140us/step - loss: 0.0236 - accuracy: 0.9942 - val_loss: 0.0421 - val_accuracy: 0.9922 Epoch 62/100 38400/38400 [==============================] - 6s 145us/step - loss: 0.0226 - accuracy: 0.9942 - val_loss: 0.0414 - val_accuracy: 0.9923 Epoch 63/100 38400/38400 [==============================] - 6s 149us/step - loss: 0.0215 - accuracy: 0.9943 - val_loss: 0.0420 - val_accuracy: 0.9915 Epoch 64/100 38400/38400 [==============================] - 5s 140us/step - loss: 0.0198 - accuracy: 0.9946 - val_loss: 0.0466 - val_accuracy: 0.9920 Epoch 65/100 38400/38400 [==============================] - 5s 137us/step - loss: 0.0198 - accuracy: 0.9941 - val_loss: 0.0467 - val_accuracy: 0.9914 Epoch 66/100 38400/38400 [==============================] - 5s 123us/step - loss: 0.0219 - accuracy: 0.9943 - val_loss: 0.0416 - val_accuracy: 0.9919- accu Epoch 67/100 38400/38400 [==============================] - 5s 123us/step - loss: 0.0225 - accuracy: 0.9941 - val_loss: 0.0441 - val_accuracy: 0.9921 Epoch 68/100 38400/38400 [==============================] - 6s 148us/step - loss: 0.0210 - accuracy: 0.9943 - val_loss: 0.0386 - val_accuracy: 0.9915 Epoch 69/100 38400/38400 [==============================] - 5s 138us/step - loss: 0.0217 - accuracy: 0.9940 - val_loss: 0.0393 - val_accuracy: 0.9916 Epoch 70/100 38400/38400 [==============================] - 5s 132us/step - loss: 0.0201 - accuracy: 0.9949 - val_loss: 0.0557 - val_accuracy: 0.9920 Epoch 71/100 38400/38400 [==============================] - 5s 136us/step - loss: 0.0206 - accuracy: 0.9943 - val_loss: 0.0548 - val_accuracy: 0.9916 Epoch 72/100 38400/38400 [==============================] - 6s 159us/step - loss: 0.0213 - accuracy: 0.9943 - val_loss: 0.0434 - val_accuracy: 0.9914 Epoch 73/100 38400/38400 [==============================] - 6s 151us/step - loss: 0.0224 - accuracy: 0.9944 - val_loss: 0.0431 - val_accuracy: 0.9912 Epoch 74/100 38400/38400 [==============================] - 5s 143us/step - loss: 0.0190 - accuracy: 0.9947 - val_loss: 0.0562 - val_accuracy: 0.9923 Epoch 75/100 38400/38400 [==============================] - 5s 142us/step - loss: 0.0196 - accuracy: 0.9942 - val_loss: 0.0665 - val_accuracy: 0.9917 Epoch 76/100 38400/38400 [==============================] - 6s 143us/step - loss: 0.0206 - accuracy: 0.9943 - val_loss: 0.0529 - val_accuracy: 0.9914 Epoch 77/100 38400/38400 [==============================] - 5s 136us/step - loss: 0.0202 - accuracy: 0.9944 - val_loss: 0.0510 - val_accuracy: 0.9920 Epoch 78/100 38400/38400 [==============================] - 5s 136us/step - loss: 0.0193 - accuracy: 0.9948 - val_loss: 0.0401 - val_accuracy: 0.9914 Epoch 79/100 38400/38400 [==============================] - 5s 134us/step - loss: 0.0197 - accuracy: 0.9943 - val_loss: 0.0468 - val_accuracy: 0.9919 Epoch 80/100 38400/38400 [==============================] - 6s 149us/step - loss: 0.0230 - accuracy: 0.9940 - val_loss: 0.0523 - val_accuracy: 0.9910 Epoch 81/100 38400/38400 [==============================] - 5s 140us/step - loss: 0.0205 - accuracy: 0.9946 - val_loss: 0.0422 - val_accuracy: 0.9916 Epoch 82/100 38400/38400 [==============================] - 5s 140us/step - loss: 0.0217 - accuracy: 0.9947 - val_loss: 0.0441 - val_accuracy: 0.9917 Epoch 83/100 38400/38400 [==============================] - 5s 141us/step - loss: 0.0192 - accuracy: 0.9945 - val_loss: 0.0519 - val_accuracy: 0.9919 Epoch 84/100 38400/38400 [==============================] - 5s 135us/step - loss: 0.0194 - accuracy: 0.9947 - val_loss: 0.0536 - val_accuracy: 0.9916 Epoch 85/100 38400/38400 [==============================] - 5s 133us/step - loss: 0.0207 - accuracy: 0.9945 - val_loss: 0.0462 - val_accuracy: 0.9912 Epoch 86/100 38400/38400 [==============================] - 5s 138us/step - loss: 0.0193 - accuracy: 0.9949 - val_loss: 0.0492 - val_accuracy: 0.9916 Epoch 87/100 38400/38400 [==============================] - 5s 134us/step - loss: 0.0199 - accuracy: 0.9945 - val_loss: 0.0627 - val_accuracy: 0.9919 Epoch 88/100 38400/38400 [==============================] - 5s 133us/step - loss: 0.0205 - accuracy: 0.9946 - val_loss: 0.0465 - val_accuracy: 0.9915 Epoch 89/100 38400/38400 [==============================] - 5s 136us/step - loss: 0.0190 - accuracy: 0.9948 - val_loss: 0.0477 - val_accuracy: 0.9920 Epoch 90/100 38400/38400 [==============================] - 6s 151us/step - loss: 0.0199 - accuracy: 0.9947 - val_loss: 0.0572 - val_accuracy: 0.9923 Epoch 91/100 38400/38400 [==============================] - 6s 163us/step - loss: 0.0194 - accuracy: 0.9949 - val_loss: 0.0558 - val_accuracy: 0.9911 Epoch 92/100 38400/38400 [==============================] - 6s 145us/step - loss: 0.0208 - accuracy: 0.9945 - val_loss: 0.0598 - val_accuracy: 0.9919 Epoch 93/100 38400/38400 [==============================] - 5s 139us/step - loss: 0.0182 - accuracy: 0.9952 - val_loss: 0.0438 - val_accuracy: 0.9912 Epoch 94/100 38400/38400 [==============================] - 6s 152us/step - loss: 0.0192 - accuracy: 0.9946 - val_loss: 0.0519 - val_accuracy: 0.9914 Epoch 95/100 38400/38400 [==============================] - 6s 143us/step - loss: 0.0201 - accuracy: 0.9946 - val_loss: 0.0520 - val_accuracy: 0.9906 Epoch 96/100 38400/38400 [==============================] - 6s 145us/step - loss: 0.0177 - accuracy: 0.9953 - val_loss: 0.0647 - val_accuracy: 0.9920 Epoch 97/100 38400/38400 [==============================] - 6s 155us/step - loss: 0.0187 - accuracy: 0.9951 - val_loss: 0.0605 - val_accuracy: 0.9914 Epoch 98/100 38400/38400 [==============================] - 6s 160us/step - loss: 0.0190 - accuracy: 0.9952 - val_loss: 0.0551 - val_accuracy: 0.9914 Epoch 99/100 38400/38400 [==============================] - 6s 157us/step - loss: 0.0199 - accuracy: 0.9951 - val_loss: 0.0556 - val_accuracy: 0.9915 Epoch 100/100 38400/38400 [==============================] - 6s 164us/step - loss: 0.0188 - accuracy: 0.9950 - val_loss: 0.0560 - val_accuracy: 0.9920
<keras.callbacks.callbacks.History at 0x155bf23c8>
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f'The loss on the test set is {test_loss:.4f} and the accuracy is {test_acc*100:.4f}%')
12000/12000 [==============================] - 0s 30us/step The loss on the test set is 0.1148 and the accuracy is 98.9500%
Compute the null accuracy
# Use the value_count function to calculate distinct class values
y_test['class'].value_counts()
0 11788 1 212 Name: class, dtype: int64
# calculate the null accuracy
y_test['class'].value_counts(normalize=True).loc[0]
0.9823333333333333