Heart Disease¶


Description¶

Context¶

This database contains 76 attributes, but all published experiments refer to using a subset of 14 of them. In particular, the Cleveland database is the only one that has been used by ML researchers to this date. The "goal" field refers to the presence of heart disease in the patient. It is integer valued from 0 (no presence) to 4.

Content¶

Attribute Information:¶

  • age
  • sex
  • chest pain type (4 values)
  • resting blood pressure
  • serum cholestoral in mg/dl
  • fasting blood sugar > 120 mg/dl
  • resting electrocardiographic results (values 0,1,2)
  • maximum heart rate achieved
  • exercise induced angina
  • oldpeak = ST depression induced by exercise relative to rest
  • the slope of the peak exercise ST segment
  • number of major vessels (0-3) colored by flourosopy
  • thal: 3 = normal; 6 = fixed defect; 7 = reversable defect

Acknowledgements¶

Creators:¶

  • Hungarian Institute of Cardiology. Budapest: Andras Janosi, M.D.
  • University Hospital, Zurich, Switzerland: William Steinbrunn, M.D.
  • University Hospital, Basel, Switzerland: Matthias Pfisterer, M.D.
  • V.A. Medical Center, Long Beach and Cleveland Clinic Foundation: Robert Detrano, M.D., Ph.D.
  • Donor: David W. Aha (aha '@' ics.uci.edu) (714) 856-8779

Adapted From¶

https://www.kaggle.com/ronitf/heart-disease-uci


Goals¶

Train at least 5 different ML models to identify whether a patient has Heart Disease


Data Dictionary¶

From Imram Faroouq's Discussion Post in Kaggle

  • age - age in years
  • sex - (1 = male; 0 = female)
  • cp - chest pain type
    • 0: Typical angina: chest pain related decrease blood supply to the heart
    • 1: Atypical angina: chest pain not related to heart
    • 2: Non-anginal pain: typically esophageal spasms (non heart related)
    • 3: Asymptomatic: chest pain not showing signs of disease
  • trestbps - resting blood pressure (in mm Hg on admission to the hospital)
    • anything above 130-140 is typically cause for concern
  • chol - serum cholestoral in mg/dl
  • serum = LDL + HDL + .2 * triglycerides
    • above 200 is cause for concern
  • fbs - (fasting blood sugar > 120 mg/dl) (1 = true; 0 = false)
    • '>126' mg/dL signals diabetes
  • restecg - resting electrocardiographic results
    • 0: Nothing to note
    • 1: ST-T Wave abnormality
      • can range from mild symptoms to severe problems
      • signals non-normal heart beat
    • 2: Possible or definite left ventricular hypertrophy
      • Enlarged heart's main pumping chamber
  • thalach - maximum heart rate achieved
  • exang - exercise induced angina (1 = yes; 0 = no)
  • oldpeak - ST depression induced by exercise relative to rest
    • looks at stress of heart during excercise
      • unhealthy heart will stress more
  • slope - the slope of the peak exercise ST segment
    • 0: Upsloping: better heart rate with excercise (uncommon)
    • 1: Flatsloping: minimal change (typical healthy heart)
    • 2: Downslopins: signs of unhealthy heart
  • ca - number of major vessels (0-3) colored by flourosopy
    • colored vessel means the doctor can see the blood passing through
    • the more blood movement the better (no clots)
  • thal - thalium stress result
    • 1,3: normal
    • 6: fixed defect: used to be defect but ok now
    • 7: reversable defect: no proper blood movement when excercising
  • target - have disease or not (1=yes, 0=no) (= the predicted attribute)

Importing Libraries¶

In [1]:
import numpy as np 
import pandas as pd 
from matplotlib import pyplot as plt
import seaborn as sns

Data Analysis¶

Data Import¶

In [2]:
rawData = pd.read_csv("heart.csv");

Data Review and Summaries¶

In [3]:
rawData.head()
Out[3]:
age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal target
0 63 1 3 145 233 1 0 150 0 2.3 0 0 1 1
1 37 1 2 130 250 0 1 187 0 3.5 0 0 2 1
2 41 0 1 130 204 0 0 172 0 1.4 2 0 2 1
3 56 1 1 120 236 0 1 178 0 0.8 2 0 2 1
4 57 0 0 120 354 0 1 163 1 0.6 2 0 2 1
In [4]:
print(rawData.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 303 entries, 0 to 302
Data columns (total 14 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   age       303 non-null    int64  
 1   sex       303 non-null    int64  
 2   cp        303 non-null    int64  
 3   trestbps  303 non-null    int64  
 4   chol      303 non-null    int64  
 5   fbs       303 non-null    int64  
 6   restecg   303 non-null    int64  
 7   thalach   303 non-null    int64  
 8   exang     303 non-null    int64  
 9   oldpeak   303 non-null    float64
 10  slope     303 non-null    int64  
 11  ca        303 non-null    int64  
 12  thal      303 non-null    int64  
 13  target    303 non-null    int64  
dtypes: float64(1), int64(13)
memory usage: 33.3 KB
None

It can be seen that all the data is numerical, complete, and valid. This can be verified from the sources mentioned above. Thus, No encoding or imputing is necessary.

General Sample Statistics¶

The following table describes the center and spread of each data column.

In [5]:
rawData.describe()
Out[5]:
age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal target
count 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000
mean 54.366337 0.683168 0.966997 131.623762 246.264026 0.148515 0.528053 149.646865 0.326733 1.039604 1.399340 0.729373 2.313531 0.544554
std 9.082101 0.466011 1.032052 17.538143 51.830751 0.356198 0.525860 22.905161 0.469794 1.161075 0.616226 1.022606 0.612277 0.498835
min 29.000000 0.000000 0.000000 94.000000 126.000000 0.000000 0.000000 71.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
25% 47.500000 0.000000 0.000000 120.000000 211.000000 0.000000 0.000000 133.500000 0.000000 0.000000 1.000000 0.000000 2.000000 0.000000
50% 55.000000 1.000000 1.000000 130.000000 240.000000 0.000000 1.000000 153.000000 0.000000 0.800000 1.000000 0.000000 2.000000 1.000000
75% 61.000000 1.000000 2.000000 140.000000 274.500000 0.000000 1.000000 166.000000 1.000000 1.600000 2.000000 1.000000 3.000000 1.000000
max 77.000000 1.000000 3.000000 200.000000 564.000000 1.000000 2.000000 202.000000 1.000000 6.200000 2.000000 4.000000 3.000000 1.000000

Plotting the Raw Data¶

We can further analyze the data by plotting histograms for each dataset feature.

In [6]:
rawData.hist(bins=30, figsize=(20,25), grid=False, layout=(7,2), sharex=False);
No description has been provided for this image

General Correlations¶

In [7]:
corr_mat = rawData.corr(method='pearson')
mask = np.triu(np.ones_like(corr_mat, dtype=bool))
plt.figure(dpi=100)
plt.title("Pearson's R Correlation Matrix")
sns.heatmap(corr_mat, mask=mask, annot=False, lw=3, linecolor='white', cmap='rocket');
No description has been provided for this image

Data preprocessing¶

First we scale all the data, since it was seen above that the center, spread, and range of each feature vary wildly.

Input/Output Splitting¶

In [8]:
x = rawData.iloc[:,:-1].values
y = rawData.iloc[:, -1].values

Input Data Scaling¶

Since this is a classification problem, output data is binary (discrete) and must not be scaled.

In [9]:
from sklearn.preprocessing import StandardScaler
ssIN = StandardScaler()
scaledx = ssIN.fit_transform(x)
pd.DataFrame(scaledx)
Out[9]:
0 1 2 3 4 5 6 7 8 9 10 11 12
0 0.952197 0.681005 1.973123 0.763956 -0.256334 2.394438 -1.005832 0.015443 -0.696631 1.087338 -2.274579 -0.714429 -2.148873
1 -1.915313 0.681005 1.002577 -0.092738 0.072199 -0.417635 0.898962 1.633471 -0.696631 2.122573 -2.274579 -0.714429 -0.512922
2 -1.474158 -1.468418 0.032031 -0.092738 -0.816773 -0.417635 -1.005832 0.977514 -0.696631 0.310912 0.976352 -0.714429 -0.512922
3 0.180175 0.681005 0.032031 -0.663867 -0.198357 -0.417635 0.898962 1.239897 -0.696631 -0.206705 0.976352 -0.714429 -0.512922
4 0.290464 -1.468418 -0.938515 -0.663867 2.082050 -0.417635 0.898962 0.583939 1.435481 -0.379244 0.976352 -0.714429 -0.512922
... ... ... ... ... ... ... ... ... ... ... ... ... ...
298 0.290464 -1.468418 -0.938515 0.478391 -0.101730 -0.417635 0.898962 -1.165281 1.435481 -0.724323 -0.649113 -0.714429 1.123029
299 -1.033002 0.681005 1.973123 -1.234996 0.342756 -0.417635 0.898962 -0.771706 -0.696631 0.138373 -0.649113 -0.714429 1.123029
300 1.503641 0.681005 -0.938515 0.706843 -1.029353 2.394438 0.898962 -0.378132 -0.696631 2.036303 -0.649113 1.244593 1.123029
301 0.290464 0.681005 -0.938515 -0.092738 -2.227533 -0.417635 0.898962 -1.515125 1.435481 0.138373 -0.649113 0.265082 1.123029
302 0.290464 -1.468418 0.032031 -0.092738 -0.198357 -0.417635 -1.005832 1.064975 -0.696631 -0.896862 -0.649113 0.265082 -0.512922

303 rows × 13 columns

Train and Test Split¶

In [10]:
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(scaledx, y, test_size = 0.2);
#pd.DataFrame(x_test)
#pd.DataFrame(x_train)

Model Training¶

We train the following models:

  • Linear SVC
  • Kernel SVC
    • RBF
    • Polynomial
  • KNN
  • Naive Bayes
  • Random Forest
  • Logistic Regression
  • Discriminant Analysis
In [11]:
models = [];

SVC¶

In [12]:
from sklearn.svm import SVC
linSVCmodel = SVC() #C Param can be optimized
linSVCmodel.fit(x_train,y_train);
models.append(linSVCmodel);

Kernel SVC: Radial Basis Function¶

In [13]:
from sklearn.svm import SVC
rbfSVCmodel = SVC(kernel='rbf'); #C can be optimized
rbfSVCmodel.fit(x_train,y_train);
models.append(rbfSVCmodel);

Kernel SVC: Polynomial¶

In [14]:
from sklearn.svm import SVC
polySVCmodel = SVC(kernel='poly', degree=3); #Degree can be optimized
polySVCmodel.fit(x_train,y_train);
models.append(polySVCmodel);

KNN¶

In [15]:
from sklearn.neighbors import KNeighborsClassifier
KNNmodel = KNeighborsClassifier(n_neighbors=5, p=2); #K can be optimized
KNNmodel.fit(x_train, y_train);
models.append(KNNmodel);

Naive Bayes¶

In [16]:
from sklearn.naive_bayes import GaussianNB
gaussNBmodel = GaussianNB(); #Epsilon can be optimized?
gaussNBmodel.fit(x_train, y_train);
models.append(gaussNBmodel);

Random Forest¶

In [17]:
from sklearn.ensemble import RandomForestClassifier
RFCmodel = RandomForestClassifier(n_estimators=100); #N_estimators and criterion can be optimized.
RFCmodel.fit(x_train, y_train);
models.append(RFCmodel);

Logistic Regression¶

In [18]:
from sklearn.linear_model import LogisticRegression
LRmodel = LogisticRegression(); #DNC
LRmodel.fit(x_train, y_train);
#models.append(LRmodel); ## Does not converge

Convergence Issues¶

It was noted that the Logistic Regressor does not converge on a solution for this paticular classification problem. This particular model will be discarded from future analysis.

Decision Tree¶

In [19]:
from sklearn.tree import DecisionTreeClassifier
DTmodel = DecisionTreeClassifier();
DTmodel.fit(X=x_train, y=y_train);
models.append(DTmodel);

Linear Discriminant Analysis¶

In [20]:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
LDAmodel = LinearDiscriminantAnalysis();
LDAmodel.fit(X=x_train, y=y_train);
models.append(LDAmodel);

ANN¶

Added as recommended by Ahmad, not for scoring

In [41]:
import tensorflow as tf
from tensorflow import keras

# ANNm = keras.models.Sequential(
#     [
#         keras.layers.Dense(units=13,    activation='relu', name='InputLayer'),
#         keras.layers.Dense(units=13/2,  activation='relu', name='HiddenLayer'),
#         keras.layers.Dense(units=1,   activation='sigmoid', name='OutputLayer')
#     ]);

# ANNm.compile(optimizer='sgd', metrics=['accuracy','mse'], loss='binary_crossentropy');

ANNm.fit(x_train, y_train, batch_size=50, epochs=400, verbose=1)

models[9]=(ANNm);
Epoch 1/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2920 - accuracy: 0.8760 - mse: 0.0891
Epoch 2/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2915 - accuracy: 0.8802 - mse: 0.0890
Epoch 3/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2914 - accuracy: 0.8802 - mse: 0.0889
Epoch 4/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2911 - accuracy: 0.8760 - mse: 0.0888
Epoch 5/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2908 - accuracy: 0.8760 - mse: 0.0887
Epoch 6/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2905 - accuracy: 0.8760 - mse: 0.0886
Epoch 7/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2902 - accuracy: 0.8760 - mse: 0.0885
Epoch 8/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2902 - accuracy: 0.8802 - mse: 0.0885
Epoch 9/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2899 - accuracy: 0.8760 - mse: 0.0884
Epoch 10/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2895 - accuracy: 0.8760 - mse: 0.0882
Epoch 11/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2895 - accuracy: 0.8760 - mse: 0.0882
Epoch 12/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2891 - accuracy: 0.8760 - mse: 0.0881
Epoch 13/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2888 - accuracy: 0.8760 - mse: 0.0880
Epoch 14/400
5/5 [==============================] - 0s 3ms/step - loss: 0.2885 - accuracy: 0.8760 - mse: 0.0879
Epoch 15/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2883 - accuracy: 0.8760 - mse: 0.0878
Epoch 16/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2882 - accuracy: 0.8719 - mse: 0.0878
Epoch 17/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2880 - accuracy: 0.8678 - mse: 0.0877
Epoch 18/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2876 - accuracy: 0.8678 - mse: 0.0876
Epoch 19/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2873 - accuracy: 0.8678 - mse: 0.0875
Epoch 20/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2870 - accuracy: 0.8678 - mse: 0.0874
Epoch 21/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2868 - accuracy: 0.8678 - mse: 0.0873
Epoch 22/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2866 - accuracy: 0.8678 - mse: 0.0872
Epoch 23/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2865 - accuracy: 0.8678 - mse: 0.0872
Epoch 24/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2862 - accuracy: 0.8678 - mse: 0.0871
Epoch 25/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2860 - accuracy: 0.8678 - mse: 0.0870
Epoch 26/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2857 - accuracy: 0.8678 - mse: 0.0869
Epoch 27/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2858 - accuracy: 0.8678 - mse: 0.0870
Epoch 28/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2852 - accuracy: 0.8678 - mse: 0.0868
Epoch 29/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2850 - accuracy: 0.8678 - mse: 0.0867
Epoch 30/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2849 - accuracy: 0.8678 - mse: 0.0867
Epoch 31/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2846 - accuracy: 0.8678 - mse: 0.0866
Epoch 32/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2844 - accuracy: 0.8678 - mse: 0.0865
Epoch 33/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2842 - accuracy: 0.8678 - mse: 0.0864
Epoch 34/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2841 - accuracy: 0.8678 - mse: 0.0864
Epoch 35/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2837 - accuracy: 0.8678 - mse: 0.0863
Epoch 36/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2834 - accuracy: 0.8678 - mse: 0.0862
Epoch 37/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2832 - accuracy: 0.8678 - mse: 0.0861
Epoch 38/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2832 - accuracy: 0.8678 - mse: 0.0861
Epoch 39/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2829 - accuracy: 0.8678 - mse: 0.0859
Epoch 40/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2826 - accuracy: 0.8678 - mse: 0.0859
Epoch 41/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2825 - accuracy: 0.8678 - mse: 0.0858
Epoch 42/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2822 - accuracy: 0.8678 - mse: 0.0857
Epoch 43/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2820 - accuracy: 0.8678 - mse: 0.0857
Epoch 44/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2816 - accuracy: 0.8678 - mse: 0.0855
Epoch 45/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2814 - accuracy: 0.8678 - mse: 0.0854
Epoch 46/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2813 - accuracy: 0.8678 - mse: 0.0854
Epoch 47/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2810 - accuracy: 0.8678 - mse: 0.0853
Epoch 48/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2808 - accuracy: 0.8678 - mse: 0.0853
Epoch 49/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2807 - accuracy: 0.8678 - mse: 0.0852
Epoch 50/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2802 - accuracy: 0.8678 - mse: 0.0851
Epoch 51/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2800 - accuracy: 0.8678 - mse: 0.0850
Epoch 52/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2798 - accuracy: 0.8678 - mse: 0.0849
Epoch 53/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2797 - accuracy: 0.8678 - mse: 0.0849
Epoch 54/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2793 - accuracy: 0.8678 - mse: 0.0848
Epoch 55/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2791 - accuracy: 0.8678 - mse: 0.0847
Epoch 56/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2790 - accuracy: 0.8678 - mse: 0.0846
Epoch 57/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2787 - accuracy: 0.8678 - mse: 0.0845
Epoch 58/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2784 - accuracy: 0.8678 - mse: 0.0844
Epoch 59/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2782 - accuracy: 0.8678 - mse: 0.0844
Epoch 60/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2781 - accuracy: 0.8678 - mse: 0.0844
Epoch 61/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2779 - accuracy: 0.8678 - mse: 0.0843
Epoch 62/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2776 - accuracy: 0.8678 - mse: 0.0842
Epoch 63/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2772 - accuracy: 0.8678 - mse: 0.0840
Epoch 64/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2771 - accuracy: 0.8678 - mse: 0.0840
Epoch 65/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2769 - accuracy: 0.8678 - mse: 0.0839
Epoch 66/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2767 - accuracy: 0.8678 - mse: 0.0839
Epoch 67/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2765 - accuracy: 0.8678 - mse: 0.0838
Epoch 68/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2762 - accuracy: 0.8678 - mse: 0.0837
Epoch 69/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2760 - accuracy: 0.8678 - mse: 0.0836
Epoch 70/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2758 - accuracy: 0.8678 - mse: 0.0836
Epoch 71/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2756 - accuracy: 0.8678 - mse: 0.0835
Epoch 72/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2753 - accuracy: 0.8678 - mse: 0.0834
Epoch 73/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2752 - accuracy: 0.8678 - mse: 0.0834
Epoch 74/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2748 - accuracy: 0.8678 - mse: 0.0832
Epoch 75/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2745 - accuracy: 0.8678 - mse: 0.0831
Epoch 76/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2743 - accuracy: 0.8678 - mse: 0.0830
Epoch 77/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2741 - accuracy: 0.8678 - mse: 0.0829
Epoch 78/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2738 - accuracy: 0.8678 - mse: 0.0828
Epoch 79/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2736 - accuracy: 0.8678 - mse: 0.0827
Epoch 80/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2734 - accuracy: 0.8678 - mse: 0.0827
Epoch 81/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2731 - accuracy: 0.8678 - mse: 0.0826
Epoch 82/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2729 - accuracy: 0.8678 - mse: 0.0825
Epoch 83/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2727 - accuracy: 0.8719 - mse: 0.0825
Epoch 84/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2725 - accuracy: 0.8719 - mse: 0.0823
Epoch 85/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2723 - accuracy: 0.8719 - mse: 0.0823
Epoch 86/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2720 - accuracy: 0.8719 - mse: 0.0822
Epoch 87/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2719 - accuracy: 0.8719 - mse: 0.0822
Epoch 88/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2716 - accuracy: 0.8719 - mse: 0.0820
Epoch 89/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2713 - accuracy: 0.8719 - mse: 0.0819
Epoch 90/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2713 - accuracy: 0.8719 - mse: 0.0819
Epoch 91/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2709 - accuracy: 0.8719 - mse: 0.0818
Epoch 92/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2707 - accuracy: 0.8719 - mse: 0.0817
Epoch 93/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2705 - accuracy: 0.8719 - mse: 0.0817
Epoch 94/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2704 - accuracy: 0.8719 - mse: 0.0816
Epoch 95/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2702 - accuracy: 0.8719 - mse: 0.0816
Epoch 96/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2699 - accuracy: 0.8719 - mse: 0.0815
Epoch 97/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2698 - accuracy: 0.8719 - mse: 0.0814
Epoch 98/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2695 - accuracy: 0.8719 - mse: 0.0813
Epoch 99/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2693 - accuracy: 0.8719 - mse: 0.0812
Epoch 100/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2692 - accuracy: 0.8719 - mse: 0.0813
Epoch 101/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2690 - accuracy: 0.8719 - mse: 0.0811
Epoch 102/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2688 - accuracy: 0.8678 - mse: 0.0811
Epoch 103/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2685 - accuracy: 0.8719 - mse: 0.0810
Epoch 104/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2683 - accuracy: 0.8719 - mse: 0.0809
Epoch 105/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2682 - accuracy: 0.8719 - mse: 0.0809
Epoch 106/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2680 - accuracy: 0.8719 - mse: 0.0808
Epoch 107/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2677 - accuracy: 0.8719 - mse: 0.0808
Epoch 108/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2675 - accuracy: 0.8719 - mse: 0.0807
Epoch 109/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2673 - accuracy: 0.8719 - mse: 0.0806
Epoch 110/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2672 - accuracy: 0.8719 - mse: 0.0806
Epoch 111/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2670 - accuracy: 0.8719 - mse: 0.0805
Epoch 112/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2669 - accuracy: 0.8719 - mse: 0.0805
Epoch 113/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2665 - accuracy: 0.8719 - mse: 0.0803
Epoch 114/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2665 - accuracy: 0.8719 - mse: 0.0803
Epoch 115/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2661 - accuracy: 0.8719 - mse: 0.0802
Epoch 116/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2661 - accuracy: 0.8719 - mse: 0.0803
Epoch 117/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2658 - accuracy: 0.8719 - mse: 0.0802
Epoch 118/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2657 - accuracy: 0.8719 - mse: 0.0801
Epoch 119/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2654 - accuracy: 0.8719 - mse: 0.0800
Epoch 120/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2652 - accuracy: 0.8719 - mse: 0.0799
Epoch 121/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2651 - accuracy: 0.8678 - mse: 0.0799
Epoch 122/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2649 - accuracy: 0.8719 - mse: 0.0799
Epoch 123/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2647 - accuracy: 0.8678 - mse: 0.0798
Epoch 124/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2644 - accuracy: 0.8678 - mse: 0.0796
Epoch 125/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2642 - accuracy: 0.8719 - mse: 0.0796
Epoch 126/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2641 - accuracy: 0.8678 - mse: 0.0796
Epoch 127/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2638 - accuracy: 0.8678 - mse: 0.0795
Epoch 128/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2637 - accuracy: 0.8678 - mse: 0.0794
Epoch 129/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2635 - accuracy: 0.8678 - mse: 0.0794
Epoch 130/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2634 - accuracy: 0.8678 - mse: 0.0794
Epoch 131/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2632 - accuracy: 0.8678 - mse: 0.0793
Epoch 132/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2629 - accuracy: 0.8678 - mse: 0.0792
Epoch 133/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2626 - accuracy: 0.8678 - mse: 0.0791
Epoch 134/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2626 - accuracy: 0.8678 - mse: 0.0791
Epoch 135/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2623 - accuracy: 0.8678 - mse: 0.0790
Epoch 136/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2623 - accuracy: 0.8678 - mse: 0.0790
Epoch 137/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2620 - accuracy: 0.8678 - mse: 0.0789
Epoch 138/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2618 - accuracy: 0.8678 - mse: 0.0788
Epoch 139/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2616 - accuracy: 0.8678 - mse: 0.0787
Epoch 140/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2614 - accuracy: 0.8678 - mse: 0.0787
Epoch 141/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2613 - accuracy: 0.8678 - mse: 0.0786
Epoch 142/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2610 - accuracy: 0.8678 - mse: 0.0786
Epoch 143/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2608 - accuracy: 0.8719 - mse: 0.0785
Epoch 144/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2606 - accuracy: 0.8719 - mse: 0.0784
Epoch 145/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2605 - accuracy: 0.8719 - mse: 0.0784
Epoch 146/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2603 - accuracy: 0.8719 - mse: 0.0783
Epoch 147/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2602 - accuracy: 0.8719 - mse: 0.0782
Epoch 148/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2599 - accuracy: 0.8719 - mse: 0.0782
Epoch 149/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2597 - accuracy: 0.8719 - mse: 0.0781
Epoch 150/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2597 - accuracy: 0.8719 - mse: 0.0781
Epoch 151/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2594 - accuracy: 0.8719 - mse: 0.0780
Epoch 152/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2591 - accuracy: 0.8719 - mse: 0.0779
Epoch 153/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2590 - accuracy: 0.8719 - mse: 0.0778
Epoch 154/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2589 - accuracy: 0.8719 - mse: 0.0778
Epoch 155/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2587 - accuracy: 0.8719 - mse: 0.0777
Epoch 156/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2585 - accuracy: 0.8719 - mse: 0.0777
Epoch 157/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2585 - accuracy: 0.8719 - mse: 0.0777
Epoch 158/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2581 - accuracy: 0.8719 - mse: 0.0776
Epoch 159/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2580 - accuracy: 0.8719 - mse: 0.0776
Epoch 160/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2579 - accuracy: 0.8719 - mse: 0.0775
Epoch 161/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2577 - accuracy: 0.8719 - mse: 0.0774
Epoch 162/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2574 - accuracy: 0.8719 - mse: 0.0773
Epoch 163/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2573 - accuracy: 0.8719 - mse: 0.0773
Epoch 164/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2572 - accuracy: 0.8719 - mse: 0.0772
Epoch 165/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2569 - accuracy: 0.8719 - mse: 0.0771
Epoch 166/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2567 - accuracy: 0.8719 - mse: 0.0770
Epoch 167/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2566 - accuracy: 0.8760 - mse: 0.0770
Epoch 168/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2564 - accuracy: 0.8760 - mse: 0.0770
Epoch 169/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2563 - accuracy: 0.8760 - mse: 0.0769
Epoch 170/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2560 - accuracy: 0.8760 - mse: 0.0769
Epoch 171/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2559 - accuracy: 0.8719 - mse: 0.0769
Epoch 172/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2557 - accuracy: 0.8760 - mse: 0.0767
Epoch 173/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2559 - accuracy: 0.8760 - mse: 0.0769
Epoch 174/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2554 - accuracy: 0.8719 - mse: 0.0767
Epoch 175/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2552 - accuracy: 0.8760 - mse: 0.0766
Epoch 176/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2550 - accuracy: 0.8760 - mse: 0.0765
Epoch 177/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2549 - accuracy: 0.8760 - mse: 0.0765
Epoch 178/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2548 - accuracy: 0.8760 - mse: 0.0764
Epoch 179/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2545 - accuracy: 0.8760 - mse: 0.0764
Epoch 180/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2544 - accuracy: 0.8760 - mse: 0.0763
Epoch 181/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2543 - accuracy: 0.8760 - mse: 0.0762
Epoch 182/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2540 - accuracy: 0.8760 - mse: 0.0762
Epoch 183/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2539 - accuracy: 0.8760 - mse: 0.0761
Epoch 184/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2538 - accuracy: 0.8760 - mse: 0.0760
Epoch 185/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2536 - accuracy: 0.8760 - mse: 0.0760
Epoch 186/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2534 - accuracy: 0.8760 - mse: 0.0760
Epoch 187/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2534 - accuracy: 0.8760 - mse: 0.0760
Epoch 188/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2531 - accuracy: 0.8802 - mse: 0.0759
Epoch 189/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2529 - accuracy: 0.8760 - mse: 0.0758
Epoch 190/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2527 - accuracy: 0.8802 - mse: 0.0758
Epoch 191/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2526 - accuracy: 0.8760 - mse: 0.0757
Epoch 192/400
5/5 [==============================] - 0s 999us/step - loss: 0.2524 - accuracy: 0.8760 - mse: 0.0756
Epoch 193/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2523 - accuracy: 0.8843 - mse: 0.0756
Epoch 194/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2521 - accuracy: 0.8760 - mse: 0.0755
Epoch 195/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2520 - accuracy: 0.8802 - mse: 0.0755
Epoch 196/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2517 - accuracy: 0.8843 - mse: 0.0754
Epoch 197/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2516 - accuracy: 0.8802 - mse: 0.0754
Epoch 198/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2516 - accuracy: 0.8760 - mse: 0.0754
Epoch 199/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2513 - accuracy: 0.8802 - mse: 0.0753
Epoch 200/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2512 - accuracy: 0.8802 - mse: 0.0752
Epoch 201/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2511 - accuracy: 0.8843 - mse: 0.0751
Epoch 202/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2509 - accuracy: 0.8802 - mse: 0.0751
Epoch 203/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2506 - accuracy: 0.8843 - mse: 0.0750
Epoch 204/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2505 - accuracy: 0.8802 - mse: 0.0750
Epoch 205/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2503 - accuracy: 0.8843 - mse: 0.0749
Epoch 206/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2501 - accuracy: 0.8843 - mse: 0.0749
Epoch 207/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2500 - accuracy: 0.8884 - mse: 0.0748
Epoch 208/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2498 - accuracy: 0.8884 - mse: 0.0748
Epoch 209/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2498 - accuracy: 0.8884 - mse: 0.0747
Epoch 210/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2496 - accuracy: 0.8884 - mse: 0.0747
Epoch 211/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2494 - accuracy: 0.8884 - mse: 0.0746
Epoch 212/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2493 - accuracy: 0.8926 - mse: 0.0746
Epoch 213/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2490 - accuracy: 0.8926 - mse: 0.0745
Epoch 214/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2490 - accuracy: 0.8884 - mse: 0.0745
Epoch 215/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2487 - accuracy: 0.8926 - mse: 0.0744
Epoch 216/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2486 - accuracy: 0.8967 - mse: 0.0744
Epoch 217/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2484 - accuracy: 0.8967 - mse: 0.0743
Epoch 218/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2481 - accuracy: 0.8967 - mse: 0.0742
Epoch 219/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2480 - accuracy: 0.8926 - mse: 0.0741
Epoch 220/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2479 - accuracy: 0.8967 - mse: 0.0741
Epoch 221/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2477 - accuracy: 0.8967 - mse: 0.0740
Epoch 222/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2476 - accuracy: 0.8967 - mse: 0.0740
Epoch 223/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2475 - accuracy: 0.8967 - mse: 0.0740
Epoch 224/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2472 - accuracy: 0.8967 - mse: 0.0738
Epoch 225/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2471 - accuracy: 0.9008 - mse: 0.0739
Epoch 226/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2468 - accuracy: 0.8967 - mse: 0.0737
Epoch 227/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2468 - accuracy: 0.8967 - mse: 0.0737
Epoch 228/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2465 - accuracy: 0.9008 - mse: 0.0736
Epoch 229/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2465 - accuracy: 0.8967 - mse: 0.0736
Epoch 230/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2463 - accuracy: 0.8967 - mse: 0.0735
Epoch 231/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2460 - accuracy: 0.8967 - mse: 0.0734
Epoch 232/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2460 - accuracy: 0.9008 - mse: 0.0735
Epoch 233/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2458 - accuracy: 0.9008 - mse: 0.0734
Epoch 234/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2457 - accuracy: 0.8967 - mse: 0.0733
Epoch 235/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2453 - accuracy: 0.9008 - mse: 0.0732
Epoch 236/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2452 - accuracy: 0.9008 - mse: 0.0732
Epoch 237/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2451 - accuracy: 0.9008 - mse: 0.0731
Epoch 238/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2449 - accuracy: 0.9008 - mse: 0.0731
Epoch 239/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2448 - accuracy: 0.9008 - mse: 0.0730
Epoch 240/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2446 - accuracy: 0.9008 - mse: 0.0730
Epoch 241/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2445 - accuracy: 0.9008 - mse: 0.0729
Epoch 242/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2443 - accuracy: 0.9008 - mse: 0.0729
Epoch 243/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2441 - accuracy: 0.9008 - mse: 0.0728
Epoch 244/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2440 - accuracy: 0.9008 - mse: 0.0727
Epoch 245/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2439 - accuracy: 0.9008 - mse: 0.0727
Epoch 246/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2436 - accuracy: 0.9008 - mse: 0.0726
Epoch 247/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2435 - accuracy: 0.9008 - mse: 0.0726
Epoch 248/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2434 - accuracy: 0.9008 - mse: 0.0725
Epoch 249/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2432 - accuracy: 0.9008 - mse: 0.0725
Epoch 250/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2431 - accuracy: 0.9008 - mse: 0.0725
Epoch 251/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2430 - accuracy: 0.9008 - mse: 0.0724
Epoch 252/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2427 - accuracy: 0.9008 - mse: 0.0723
Epoch 253/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2425 - accuracy: 0.9008 - mse: 0.0722
Epoch 254/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2425 - accuracy: 0.9008 - mse: 0.0722
Epoch 255/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2422 - accuracy: 0.9008 - mse: 0.0721
Epoch 256/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2421 - accuracy: 0.9008 - mse: 0.0720
Epoch 257/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2419 - accuracy: 0.9008 - mse: 0.0720
Epoch 258/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2418 - accuracy: 0.9008 - mse: 0.0720
Epoch 259/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2415 - accuracy: 0.9008 - mse: 0.0719
Epoch 260/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2415 - accuracy: 0.9008 - mse: 0.0718
Epoch 261/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2414 - accuracy: 0.9008 - mse: 0.0718
Epoch 262/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2411 - accuracy: 0.9008 - mse: 0.0717
Epoch 263/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2410 - accuracy: 0.9008 - mse: 0.0717
Epoch 264/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2410 - accuracy: 0.9008 - mse: 0.0717
Epoch 265/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2407 - accuracy: 0.9008 - mse: 0.0716
Epoch 266/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2404 - accuracy: 0.9008 - mse: 0.0715
Epoch 267/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2402 - accuracy: 0.9008 - mse: 0.0714
Epoch 268/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2403 - accuracy: 0.9008 - mse: 0.0715
Epoch 269/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2402 - accuracy: 0.9008 - mse: 0.0714
Epoch 270/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2398 - accuracy: 0.9008 - mse: 0.0713
Epoch 271/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2396 - accuracy: 0.9008 - mse: 0.0712
Epoch 272/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2396 - accuracy: 0.9008 - mse: 0.0712
Epoch 273/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2393 - accuracy: 0.9008 - mse: 0.0711
Epoch 274/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2392 - accuracy: 0.9008 - mse: 0.0711
Epoch 275/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2391 - accuracy: 0.9008 - mse: 0.0710
Epoch 276/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2388 - accuracy: 0.9008 - mse: 0.0709
Epoch 277/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2387 - accuracy: 0.9008 - mse: 0.0709
Epoch 278/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2386 - accuracy: 0.9008 - mse: 0.0709
Epoch 279/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2384 - accuracy: 0.9008 - mse: 0.0708
Epoch 280/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2383 - accuracy: 0.9008 - mse: 0.0707
Epoch 281/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2381 - accuracy: 0.9008 - mse: 0.0707
Epoch 282/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2380 - accuracy: 0.9008 - mse: 0.0706
Epoch 283/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2378 - accuracy: 0.9008 - mse: 0.0706
Epoch 284/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2375 - accuracy: 0.9008 - mse: 0.0705
Epoch 285/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2373 - accuracy: 0.9008 - mse: 0.0704
Epoch 286/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2373 - accuracy: 0.9008 - mse: 0.0704
Epoch 287/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2370 - accuracy: 0.9008 - mse: 0.0703
Epoch 288/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2370 - accuracy: 0.9008 - mse: 0.0703
Epoch 289/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2368 - accuracy: 0.9008 - mse: 0.0702
Epoch 290/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2366 - accuracy: 0.9008 - mse: 0.0701
Epoch 291/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2364 - accuracy: 0.9008 - mse: 0.0701
Epoch 292/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2361 - accuracy: 0.9008 - mse: 0.0700
Epoch 293/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2360 - accuracy: 0.9008 - mse: 0.0699
Epoch 294/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2359 - accuracy: 0.9008 - mse: 0.0699
Epoch 295/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2357 - accuracy: 0.9008 - mse: 0.0699
Epoch 296/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2355 - accuracy: 0.9008 - mse: 0.0698
Epoch 297/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2355 - accuracy: 0.9008 - mse: 0.0697
Epoch 298/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2352 - accuracy: 0.9008 - mse: 0.0697
Epoch 299/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2350 - accuracy: 0.9008 - mse: 0.0696
Epoch 300/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2349 - accuracy: 0.9008 - mse: 0.0696
Epoch 301/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2347 - accuracy: 0.9008 - mse: 0.0695
Epoch 302/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2345 - accuracy: 0.9008 - mse: 0.0694
Epoch 303/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2343 - accuracy: 0.9008 - mse: 0.0693
Epoch 304/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2343 - accuracy: 0.9008 - mse: 0.0693
Epoch 305/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2341 - accuracy: 0.9008 - mse: 0.0693
Epoch 306/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2340 - accuracy: 0.9008 - mse: 0.0692
Epoch 307/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2337 - accuracy: 0.9008 - mse: 0.0691
Epoch 308/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2335 - accuracy: 0.9008 - mse: 0.0691
Epoch 309/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2333 - accuracy: 0.9008 - mse: 0.0690
Epoch 310/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2332 - accuracy: 0.9008 - mse: 0.0690
Epoch 311/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2329 - accuracy: 0.9008 - mse: 0.0689
Epoch 312/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2330 - accuracy: 0.9008 - mse: 0.0689
Epoch 313/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2327 - accuracy: 0.9008 - mse: 0.0688
Epoch 314/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2326 - accuracy: 0.9008 - mse: 0.0687
Epoch 315/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2323 - accuracy: 0.9008 - mse: 0.0686
Epoch 316/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2322 - accuracy: 0.9008 - mse: 0.0686
Epoch 317/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2321 - accuracy: 0.9008 - mse: 0.0686
Epoch 318/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2319 - accuracy: 0.9008 - mse: 0.0685
Epoch 319/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2319 - accuracy: 0.9008 - mse: 0.0685
Epoch 320/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2317 - accuracy: 0.9008 - mse: 0.0684
Epoch 321/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2315 - accuracy: 0.9008 - mse: 0.0684
Epoch 322/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2313 - accuracy: 0.9008 - mse: 0.0683
Epoch 323/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2312 - accuracy: 0.9008 - mse: 0.0683
Epoch 324/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2311 - accuracy: 0.9008 - mse: 0.0682
Epoch 325/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2309 - accuracy: 0.9008 - mse: 0.0682
Epoch 326/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2307 - accuracy: 0.9008 - mse: 0.0681
Epoch 327/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2306 - accuracy: 0.9008 - mse: 0.0681
Epoch 328/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2304 - accuracy: 0.9008 - mse: 0.0680
Epoch 329/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2302 - accuracy: 0.9008 - mse: 0.0679
Epoch 330/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2300 - accuracy: 0.9008 - mse: 0.0678
Epoch 331/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2299 - accuracy: 0.9008 - mse: 0.0678
Epoch 332/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2296 - accuracy: 0.9008 - mse: 0.0677
Epoch 333/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2296 - accuracy: 0.9008 - mse: 0.0677
Epoch 334/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2295 - accuracy: 0.9050 - mse: 0.0676
Epoch 335/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2293 - accuracy: 0.9008 - mse: 0.0675
Epoch 336/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2290 - accuracy: 0.9008 - mse: 0.0674
Epoch 337/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2288 - accuracy: 0.9008 - mse: 0.0674
Epoch 338/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2286 - accuracy: 0.9050 - mse: 0.0673
Epoch 339/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2285 - accuracy: 0.9008 - mse: 0.0672
Epoch 340/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2283 - accuracy: 0.9008 - mse: 0.0672
Epoch 341/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2281 - accuracy: 0.9050 - mse: 0.0671
Epoch 342/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2279 - accuracy: 0.9050 - mse: 0.0670
Epoch 343/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2278 - accuracy: 0.9008 - mse: 0.0670
Epoch 344/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2275 - accuracy: 0.9050 - mse: 0.0669
Epoch 345/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2273 - accuracy: 0.9050 - mse: 0.0668
Epoch 346/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2274 - accuracy: 0.9050 - mse: 0.0668
Epoch 347/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2272 - accuracy: 0.9050 - mse: 0.0668
Epoch 348/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2268 - accuracy: 0.9050 - mse: 0.0666
Epoch 349/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2268 - accuracy: 0.9091 - mse: 0.0666
Epoch 350/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2265 - accuracy: 0.9091 - mse: 0.0665
Epoch 351/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2263 - accuracy: 0.9091 - mse: 0.0664
Epoch 352/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2262 - accuracy: 0.9091 - mse: 0.0664
Epoch 353/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2259 - accuracy: 0.9091 - mse: 0.0663
Epoch 354/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2257 - accuracy: 0.9091 - mse: 0.0662
Epoch 355/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2256 - accuracy: 0.9091 - mse: 0.0662
Epoch 356/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2254 - accuracy: 0.9091 - mse: 0.0661
Epoch 357/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2253 - accuracy: 0.9091 - mse: 0.0661
Epoch 358/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2252 - accuracy: 0.9091 - mse: 0.0660
Epoch 359/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2248 - accuracy: 0.9091 - mse: 0.0659
Epoch 360/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2246 - accuracy: 0.9091 - mse: 0.0658
Epoch 361/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2245 - accuracy: 0.9091 - mse: 0.0657
Epoch 362/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2243 - accuracy: 0.9091 - mse: 0.0657
Epoch 363/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2242 - accuracy: 0.9091 - mse: 0.0657
Epoch 364/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2239 - accuracy: 0.9091 - mse: 0.0655
Epoch 365/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2237 - accuracy: 0.9091 - mse: 0.0654
Epoch 366/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2235 - accuracy: 0.9091 - mse: 0.0654
Epoch 367/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2234 - accuracy: 0.9091 - mse: 0.0654
Epoch 368/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2232 - accuracy: 0.9091 - mse: 0.0652
Epoch 369/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2230 - accuracy: 0.9091 - mse: 0.0652
Epoch 370/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2227 - accuracy: 0.9091 - mse: 0.0650
Epoch 371/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2227 - accuracy: 0.9091 - mse: 0.0650
Epoch 372/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2224 - accuracy: 0.9091 - mse: 0.0649
Epoch 373/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2222 - accuracy: 0.9091 - mse: 0.0649
Epoch 374/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2221 - accuracy: 0.9091 - mse: 0.0648
Epoch 375/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2221 - accuracy: 0.9091 - mse: 0.0648
Epoch 376/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2217 - accuracy: 0.9091 - mse: 0.0647
Epoch 377/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2216 - accuracy: 0.9091 - mse: 0.0646
Epoch 378/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2212 - accuracy: 0.9091 - mse: 0.0645
Epoch 379/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2211 - accuracy: 0.9091 - mse: 0.0644
Epoch 380/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2210 - accuracy: 0.9091 - mse: 0.0644
Epoch 381/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2209 - accuracy: 0.9091 - mse: 0.0644
Epoch 382/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2205 - accuracy: 0.9091 - mse: 0.0642
Epoch 383/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2204 - accuracy: 0.9091 - mse: 0.0641
Epoch 384/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2202 - accuracy: 0.9091 - mse: 0.0641
Epoch 385/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2202 - accuracy: 0.9091 - mse: 0.0641
Epoch 386/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2199 - accuracy: 0.9091 - mse: 0.0640
Epoch 387/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2196 - accuracy: 0.9091 - mse: 0.0639
Epoch 388/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2196 - accuracy: 0.9091 - mse: 0.0639
Epoch 389/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2193 - accuracy: 0.9091 - mse: 0.0638
Epoch 390/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2191 - accuracy: 0.9091 - mse: 0.0637
Epoch 391/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2189 - accuracy: 0.9091 - mse: 0.0636
Epoch 392/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2187 - accuracy: 0.9091 - mse: 0.0635
Epoch 393/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2186 - accuracy: 0.9091 - mse: 0.0636
Epoch 394/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2184 - accuracy: 0.9091 - mse: 0.0634
Epoch 395/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2181 - accuracy: 0.9091 - mse: 0.0633
Epoch 396/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2181 - accuracy: 0.9091 - mse: 0.0634
Epoch 397/400
5/5 [==============================] - 0s 1ms/step - loss: 0.2179 - accuracy: 0.9132 - mse: 0.0633
Epoch 398/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2176 - accuracy: 0.9132 - mse: 0.0632
Epoch 399/400
5/5 [==============================] - 0s 2ms/step - loss: 0.2174 - accuracy: 0.9132 - mse: 0.0631
Epoch 400/400
5/5 [==============================] - 0s 1000us/step - loss: 0.2173 - accuracy: 0.9132 - mse: 0.0630

Model Performance¶

RMSE¶

We first evaluate every model's Root Mean Squared Error. We use this metric to compare the generalization error of each model objectively.

In [42]:
from sklearn.metrics import mean_squared_error
RMSEresults = []
for model in models:
    Ypred = model.predict(x_test);
    RMSEresults.append(mean_squared_error(y_test, Ypred));
    
names = np.array(['SVC','rbfSVC','PolySVC','KNN','GaussNB','RF','DT','LDA', 'ANN1', 'ANN2']);
RMSE_scores = pd.DataFrame(np.vstack((names,RMSEresults))).T
RMSE_scores
Out[42]:
0 1
0 SVC 0.11475409836065574
1 rbfSVC 0.11475409836065574
2 PolySVC 0.14754098360655737
3 KNN 0.16393442622950818
4 GaussNB 0.11475409836065574
5 RF 0.18032786885245902
6 DT 0.19672131147540983
7 LDA 0.13114754098360656
8 ANN1 0.16017481457744337
9 ANN2 0.12488600686802184
In [43]:
ax1 = sns.barplot(x=names, y=RMSEresults);
ax1.set(xlabel="Machine Learning Algorithm",
        ylabel="Model RMSE (Lower is better)",
        title="Model Performance: Root Mean Squared Error");
No description has been provided for this image

Cross Validation¶

This section borrows the methodology from Jason Brownlee at machinelearningmastery.com.

In [27]:
# import warnings
# #warnings.filterwarnings('ignore')
# 
# # Number of tests to make.
# N=50;
# 
# from sklearn import model_selection
# results = [];
# names = [];
# scoring = 'accuracy';
# 
# with warnings.catch_warnings():      #Catch warnings in code section
#     #warnings.simplefilter("ignore")           # Suppress Warnings for LR [FIXED].
#     for model in models:
#         kfold = model_selection.KFold(n_splits=N);
#         cv_results = model_selection.cross_val_score(model, x, y, cv=kfold, scoring=scoring);
#         results.append(cv_results);
#     
# #pd.DataFrame(results)
In [ ]:
# names = np.array(['SVC','rbfSVC','PolySVC','KNN','GaussNB','RF','DT', 'LDA']);
# 
# temp1=pd.DataFrame(results).T;
# temp1.columns = names;
# 
# ax2 = sns.boxplot(data=temp1, palette='Spectral')
# ax2.set(xlabel = "ML Algorithm",
#        ylabel = 'Accuracy',
#        title = f"ML Algorithm Accuracy Comparison over {N} tests");
# sns.despine(ax=ax2,offset=5, trim=True)
# 
# #pd.DataFrame(names).T

Confusion Matrices¶

In [31]:
from sklearn.metrics import ConfusionMatrixDisplay
from sklearn.metrics import confusion_matrix

matrices = [];
for model in models:
    disp = ConfusionMatrixDisplay(confusion_matrix(y_test,model.predict(x_test)>0.5))
    #disp.ax_.set_title(f"Conusion Matrix:")
    matrices.append(disp)
num=0;
for m in matrices:
    m.plot()
    #print(names[num])
    num=num+1
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Model Optimization¶

Naive Bayes Optimization¶

This section borrows the methodology from this tutorial.

BUG: Must downgrade sklearn to version 0.23.2 for below code to work due to this bug.

In [ ]:
# # Must downgrade SKlearn to v=0.23.2 for this code to work.
# 
# from skopt import BayesSearchCV
# opt = BayesSearchCV(
#     SVC(),
#     {
#         'C': (1e-6, 1e+6, 'log-uniform'),
#         'gamma': (1e-6, 1e+1, 'log-uniform'),
#         'degree': (1, 8),  # integer valued parameter
#         'kernel': ['linear', 'poly', 'rbf'],  # categorical parameter
#     },
#     n_iter=15,
#     cv=3
# );
# 
# # callback handler
# def on_step(optim_result):
#     score = opt.best_score_;
#     print("best score: %s" % score)
#     if score >= 0.81:
#         print('Interrupting!')
#         return True
# 
# opt.fit(x_train, y_train, callback=on_step);

The optimized score, test score, and parameters are:

In [ ]:
# print("val. score: %s" % opt.best_score_)
# print("test score: %s" % opt.score(x_test, y_test))
# print("best params: %s" % str(opt.best_params_))
In [ ]:
# old_score = np.mean(pd.DataFrame(results).iloc[4,:]);
# print(f'The optimized vs unoptimized improvement is: {(opt.score(x_test, y_test)-old_score)*100/old_score} %')

Conclusions¶

Analysing model performance from RMSE values as well as the cross validation performed in sections 5.1 and 5.2 shows that the Linear Discriminant Analysis (LDA) is the best classifier of all those tested for this dataset.

The RMSE for the dataset is constantly among the lowest 3 of all models (with some run to run variation depending on test/train data split). The figure on section 5.2 clearly shows that 50% of the LDA models perform better than 75% of all other models. Similarly, 75% of the LDA models perform better than 50% of all other models, except for Gaussian Naive-Bayes and Decision Tree models.

Optimization of the SVC classifier using the skopt module showed that the optimal parameters for the Support Vector (Machine) Classifier are:

C = 7879.649123415433

degree = 1

gamma = 0.0035637719586721498

kernel = 'linear'

Performance of the optimized NB was around 1.79 Percent Better than the unoptimized model.

Overall, the recomended classifier based on the above analysis is: Linear Discriminant Analysis.