[0f681c]: / scripts / Iftah_Classification Analysis.ipynb

Download this file

1398 lines (1397 with data), 149.8 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from seaborn import set_style\n",
    "\n",
    "## This sets the plot style\n",
    "## to have a grid on a white background\n",
    "set_style(\"white\")\n",
    "from sklearn.metrics import recall_score, precision_score, roc_auc_score, accuracy_score, roc_curve"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Classification of the format1_dataset, and format1_dataset_fft\n",
    "We apply several methods"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Set up datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"time_series_data_v1.csv\")\n",
    "data_fft = pd.read_csv(\"time_series_data_v1_fft.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>...</th>\n",
       "      <th>7491</th>\n",
       "      <th>7492</th>\n",
       "      <th>7493</th>\n",
       "      <th>7494</th>\n",
       "      <th>7495</th>\n",
       "      <th>7496</th>\n",
       "      <th>7497</th>\n",
       "      <th>7498</th>\n",
       "      <th>7499</th>\n",
       "      <th>7500</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>-1.919012</td>\n",
       "      <td>-1.919012</td>\n",
       "      <td>-1.919012</td>\n",
       "      <td>-1.919012</td>\n",
       "      <td>37.580988</td>\n",
       "      <td>37.179754</td>\n",
       "      <td>37.580988</td>\n",
       "      <td>77.580988</td>\n",
       "      <td>77.080988</td>\n",
       "      <td>...</td>\n",
       "      <td>10.779934</td>\n",
       "      <td>12.404934</td>\n",
       "      <td>14.404934</td>\n",
       "      <td>15.904934</td>\n",
       "      <td>16.404934</td>\n",
       "      <td>17.404934</td>\n",
       "      <td>18.904934</td>\n",
       "      <td>18.654934</td>\n",
       "      <td>17.904934</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>-2.056393</td>\n",
       "      <td>-2.056393</td>\n",
       "      <td>-2.056393</td>\n",
       "      <td>-2.056393</td>\n",
       "      <td>37.456107</td>\n",
       "      <td>37.443607</td>\n",
       "      <td>37.443607</td>\n",
       "      <td>76.943607</td>\n",
       "      <td>76.943607</td>\n",
       "      <td>...</td>\n",
       "      <td>-1.243339</td>\n",
       "      <td>-0.743339</td>\n",
       "      <td>-0.243339</td>\n",
       "      <td>0.756661</td>\n",
       "      <td>1.256661</td>\n",
       "      <td>2.256661</td>\n",
       "      <td>3.756661</td>\n",
       "      <td>4.256661</td>\n",
       "      <td>4.756661</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>-1.527552</td>\n",
       "      <td>-1.527552</td>\n",
       "      <td>-1.527552</td>\n",
       "      <td>-1.527552</td>\n",
       "      <td>37.972448</td>\n",
       "      <td>37.571214</td>\n",
       "      <td>37.972448</td>\n",
       "      <td>77.972448</td>\n",
       "      <td>77.472448</td>\n",
       "      <td>...</td>\n",
       "      <td>-38.638512</td>\n",
       "      <td>-39.538512</td>\n",
       "      <td>-40.538512</td>\n",
       "      <td>-40.538512</td>\n",
       "      <td>-39.438512</td>\n",
       "      <td>-38.538512</td>\n",
       "      <td>-37.038512</td>\n",
       "      <td>-33.038512</td>\n",
       "      <td>-32.913512</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>-1.683246</td>\n",
       "      <td>-1.683246</td>\n",
       "      <td>-1.683246</td>\n",
       "      <td>-1.683246</td>\n",
       "      <td>37.816754</td>\n",
       "      <td>37.415520</td>\n",
       "      <td>37.816754</td>\n",
       "      <td>77.816754</td>\n",
       "      <td>77.316754</td>\n",
       "      <td>...</td>\n",
       "      <td>5.155963</td>\n",
       "      <td>5.405963</td>\n",
       "      <td>5.905963</td>\n",
       "      <td>6.572629</td>\n",
       "      <td>6.655963</td>\n",
       "      <td>7.405963</td>\n",
       "      <td>8.405963</td>\n",
       "      <td>8.905963</td>\n",
       "      <td>8.905963</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>-1.496040</td>\n",
       "      <td>-1.496040</td>\n",
       "      <td>-1.496040</td>\n",
       "      <td>-1.496040</td>\n",
       "      <td>38.003960</td>\n",
       "      <td>37.602726</td>\n",
       "      <td>38.003960</td>\n",
       "      <td>78.003960</td>\n",
       "      <td>77.503960</td>\n",
       "      <td>...</td>\n",
       "      <td>-2.816436</td>\n",
       "      <td>-2.816436</td>\n",
       "      <td>-2.816436</td>\n",
       "      <td>-2.316436</td>\n",
       "      <td>-1.816436</td>\n",
       "      <td>-1.983103</td>\n",
       "      <td>-1.816436</td>\n",
       "      <td>-1.816436</td>\n",
       "      <td>-2.316436</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 7502 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0         0         1         2         3          4          5  \\\n",
       "0           0 -1.919012 -1.919012 -1.919012 -1.919012  37.580988  37.179754   \n",
       "1           1 -2.056393 -2.056393 -2.056393 -2.056393  37.456107  37.443607   \n",
       "2           2 -1.527552 -1.527552 -1.527552 -1.527552  37.972448  37.571214   \n",
       "3           3 -1.683246 -1.683246 -1.683246 -1.683246  37.816754  37.415520   \n",
       "4           4 -1.496040 -1.496040 -1.496040 -1.496040  38.003960  37.602726   \n",
       "\n",
       "           6          7          8  ...       7491       7492       7493  \\\n",
       "0  37.580988  77.580988  77.080988  ...  10.779934  12.404934  14.404934   \n",
       "1  37.443607  76.943607  76.943607  ...  -1.243339  -0.743339  -0.243339   \n",
       "2  37.972448  77.972448  77.472448  ... -38.638512 -39.538512 -40.538512   \n",
       "3  37.816754  77.816754  77.316754  ...   5.155963   5.405963   5.905963   \n",
       "4  38.003960  78.003960  77.503960  ...  -2.816436  -2.816436  -2.816436   \n",
       "\n",
       "        7494       7495       7496       7497       7498       7499  7500  \n",
       "0  15.904934  16.404934  17.404934  18.904934  18.654934  17.904934   0.0  \n",
       "1   0.756661   1.256661   2.256661   3.756661   4.256661   4.756661   0.0  \n",
       "2 -40.538512 -39.438512 -38.538512 -37.038512 -33.038512 -32.913512   0.0  \n",
       "3   6.572629   6.655963   7.405963   8.405963   8.905963   8.905963   0.0  \n",
       "4  -2.316436  -1.816436  -1.983103  -1.816436  -1.816436  -2.316436   0.0  \n",
       "\n",
       "[5 rows x 7502 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>...</th>\n",
       "      <th>7491</th>\n",
       "      <th>7492</th>\n",
       "      <th>7493</th>\n",
       "      <th>7494</th>\n",
       "      <th>7495</th>\n",
       "      <th>7496</th>\n",
       "      <th>7497</th>\n",
       "      <th>7498</th>\n",
       "      <th>7499</th>\n",
       "      <th>7500</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>8.810730e-13</td>\n",
       "      <td>1754.620136</td>\n",
       "      <td>1111.232507</td>\n",
       "      <td>877.424567</td>\n",
       "      <td>1612.482093</td>\n",
       "      <td>1496.972754</td>\n",
       "      <td>1290.561420</td>\n",
       "      <td>819.749901</td>\n",
       "      <td>1041.156190</td>\n",
       "      <td>...</td>\n",
       "      <td>1667.542984</td>\n",
       "      <td>911.635367</td>\n",
       "      <td>2267.761854</td>\n",
       "      <td>1798.143874</td>\n",
       "      <td>1976.902999</td>\n",
       "      <td>2528.165282</td>\n",
       "      <td>1721.001574</td>\n",
       "      <td>3034.219976</td>\n",
       "      <td>1726.239727</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>5.258016e-12</td>\n",
       "      <td>1717.776454</td>\n",
       "      <td>1575.638489</td>\n",
       "      <td>1551.712801</td>\n",
       "      <td>1049.344949</td>\n",
       "      <td>1242.986193</td>\n",
       "      <td>1173.008962</td>\n",
       "      <td>1595.635646</td>\n",
       "      <td>807.680360</td>\n",
       "      <td>...</td>\n",
       "      <td>857.542235</td>\n",
       "      <td>1317.682629</td>\n",
       "      <td>753.778000</td>\n",
       "      <td>2089.817295</td>\n",
       "      <td>926.026290</td>\n",
       "      <td>955.332643</td>\n",
       "      <td>2225.841039</td>\n",
       "      <td>881.140039</td>\n",
       "      <td>1866.132179</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>3.666401e-12</td>\n",
       "      <td>1222.182666</td>\n",
       "      <td>1160.233433</td>\n",
       "      <td>1075.590271</td>\n",
       "      <td>1604.629377</td>\n",
       "      <td>1295.074248</td>\n",
       "      <td>1460.742239</td>\n",
       "      <td>2711.975076</td>\n",
       "      <td>720.778185</td>\n",
       "      <td>...</td>\n",
       "      <td>475.877793</td>\n",
       "      <td>561.915265</td>\n",
       "      <td>1011.705599</td>\n",
       "      <td>921.503744</td>\n",
       "      <td>831.159064</td>\n",
       "      <td>900.202411</td>\n",
       "      <td>903.285798</td>\n",
       "      <td>863.718676</td>\n",
       "      <td>977.430996</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>3.765876e-12</td>\n",
       "      <td>1402.132765</td>\n",
       "      <td>1482.460656</td>\n",
       "      <td>1269.357953</td>\n",
       "      <td>1423.200436</td>\n",
       "      <td>1098.530975</td>\n",
       "      <td>1201.729242</td>\n",
       "      <td>1233.002046</td>\n",
       "      <td>1588.659021</td>\n",
       "      <td>...</td>\n",
       "      <td>1567.586264</td>\n",
       "      <td>1529.488217</td>\n",
       "      <td>1087.482628</td>\n",
       "      <td>1626.073792</td>\n",
       "      <td>1114.458183</td>\n",
       "      <td>1633.220659</td>\n",
       "      <td>1771.324525</td>\n",
       "      <td>1464.746585</td>\n",
       "      <td>1276.345344</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2.444267e-12</td>\n",
       "      <td>3150.845355</td>\n",
       "      <td>1139.146049</td>\n",
       "      <td>1288.776028</td>\n",
       "      <td>1391.246330</td>\n",
       "      <td>1552.294539</td>\n",
       "      <td>998.176271</td>\n",
       "      <td>762.994498</td>\n",
       "      <td>1182.613670</td>\n",
       "      <td>...</td>\n",
       "      <td>1006.640784</td>\n",
       "      <td>2071.525278</td>\n",
       "      <td>1989.091452</td>\n",
       "      <td>1410.119838</td>\n",
       "      <td>2846.517129</td>\n",
       "      <td>3822.363668</td>\n",
       "      <td>3203.469711</td>\n",
       "      <td>1959.778941</td>\n",
       "      <td>1199.812164</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 7502 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0             0            1            2            3  \\\n",
       "0           0  8.810730e-13  1754.620136  1111.232507   877.424567   \n",
       "1           1  5.258016e-12  1717.776454  1575.638489  1551.712801   \n",
       "2           2  3.666401e-12  1222.182666  1160.233433  1075.590271   \n",
       "3           3  3.765876e-12  1402.132765  1482.460656  1269.357953   \n",
       "4           4  2.444267e-12  3150.845355  1139.146049  1288.776028   \n",
       "\n",
       "             4            5            6            7            8  ...  \\\n",
       "0  1612.482093  1496.972754  1290.561420   819.749901  1041.156190  ...   \n",
       "1  1049.344949  1242.986193  1173.008962  1595.635646   807.680360  ...   \n",
       "2  1604.629377  1295.074248  1460.742239  2711.975076   720.778185  ...   \n",
       "3  1423.200436  1098.530975  1201.729242  1233.002046  1588.659021  ...   \n",
       "4  1391.246330  1552.294539   998.176271   762.994498  1182.613670  ...   \n",
       "\n",
       "          7491         7492         7493         7494         7495  \\\n",
       "0  1667.542984   911.635367  2267.761854  1798.143874  1976.902999   \n",
       "1   857.542235  1317.682629   753.778000  2089.817295   926.026290   \n",
       "2   475.877793   561.915265  1011.705599   921.503744   831.159064   \n",
       "3  1567.586264  1529.488217  1087.482628  1626.073792  1114.458183   \n",
       "4  1006.640784  2071.525278  1989.091452  1410.119838  2846.517129   \n",
       "\n",
       "          7496         7497         7498         7499  7500  \n",
       "0  2528.165282  1721.001574  3034.219976  1726.239727   0.0  \n",
       "1   955.332643  2225.841039   881.140039  1866.132179   0.0  \n",
       "2   900.202411   903.285798   863.718676   977.430996   0.0  \n",
       "3  1633.220659  1771.324525  1464.746585  1276.345344   0.0  \n",
       "4  3822.363668  3203.469711  1959.778941  1199.812164   0.0  \n",
       "\n",
       "[5 rows x 7502 columns]"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_fft.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1404, 7501)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data.iloc[:,1:-1].to_numpy()\n",
    "y = data.iloc[:,-1].to_numpy()\n",
    "y[y !=0] = 1\n",
    "X_fft = data_fft.iloc[:,1:-1].to_numpy()\n",
    "y_fft = data_fft.iloc[:,-1].to_numpy()\n",
    "y_fft[y_fft !=0] = 1\n",
    "\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=111,\n",
    "                                                    stratify=y)\n",
    "\n",
    "X_fft_train, X_fft_test, y_fft_train, y_fft_test = train_test_split(X_fft, y_fft, \n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=111,\n",
    "                                                    stratify=y_fft)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# KNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6255924170616114\n",
      "0.6363636363636364\n",
      "0.08536585365853659\n"
     ]
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors = 3)\n",
    "knn.fit(X_train,y_train)\n",
    "y_pred = knn.predict(X_test)\n",
    "print( accuracy_score(y_test,y_pred))\n",
    "print( precision_score(y_test,y_pred))\n",
    "print( recall_score(y_test,y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7393364928909952\n",
      "0.813953488372093\n",
      "0.4268292682926829\n"
     ]
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors = 3)\n",
    "knn.fit(X_fft_train,y_fft_train)\n",
    "y_pred = knn.predict(X_fft_test)\n",
    "print( accuracy_score(y_fft_test,y_pred))\n",
    "print( precision_score(y_fft_test,y_pred))\n",
    "print( recall_score(y_fft_test,y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Random Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7606635071090048\n",
      "0.8\n",
      "0.5121951219512195\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "forest_clf = RandomForestClassifier(n_estimators=1000,max_samples=800,max_depth = 100, random_state=614)\n",
    "\n",
    "forest_clf.fit(X_train,y_train)\n",
    "y_pred = forest_clf.predict(X_test)\n",
    "print( accuracy_score(y_test,y_pred))\n",
    "print( precision_score(y_test,y_pred))\n",
    "print( recall_score(y_test,y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8056872037914692\n",
      "0.8660714285714286\n",
      "0.5914634146341463\n"
     ]
    }
   ],
   "source": [
    "forest_clf = RandomForestClassifier(n_estimators=1000,max_samples=800,max_depth = 100, random_state=614)\n",
    "\n",
    "forest_clf.fit(X_train,y_train)\n",
    "forest_clf.fit(X_fft_train,y_fft_train)\n",
    "\n",
    "y_pred = forest_clf.predict(X_fft_test)\n",
    "print( accuracy_score(y_fft_test,y_pred))\n",
    "print( precision_score(y_fft_test,y_pred))\n",
    "print( recall_score(y_fft_test,y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras import models\n",
    "from keras import layers\n",
    "from keras import optimizers\n",
    "from keras import losses\n",
    "from keras import metrics\n",
    "from keras.utils import to_categorical"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = models.Sequential()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_12\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_51 (Dense)             (None, 16)                120016    \n",
      "_________________________________________________________________\n",
      "dense_52 (Dense)             (None, 16)                272       \n",
      "_________________________________________________________________\n",
      "dense_53 (Dense)             (None, 2)                 34        \n",
      "=================================================================\n",
      "Total params: 120,322\n",
      "Trainable params: 120,322\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.add(layers.Dense(16, activation='relu', input_shape=(7500,)))\n",
    "model.add(layers.Dense(16, activation='relu'))\n",
    "model.add(layers.Dense(2, activation='softmax'))\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we compile the network like so\n",
    "model.compile(optimizer='rmsprop',\n",
    "                  loss='categorical_crossentropy',\n",
    "                  metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "10/10 [==============================] - 1s 56ms/step - loss: 5.2754 - accuracy: 0.5462 - val_loss: 2.1637 - val_accuracy: 0.5735\n",
      "Epoch 2/100\n",
      "10/10 [==============================] - 0s 32ms/step - loss: 0.9646 - accuracy: 0.7538 - val_loss: 1.9241 - val_accuracy: 0.6303\n",
      "Epoch 3/100\n",
      "10/10 [==============================] - 0s 40ms/step - loss: 0.3817 - accuracy: 0.8508 - val_loss: 1.9844 - val_accuracy: 0.6066\n",
      "Epoch 4/100\n",
      "10/10 [==============================] - 0s 34ms/step - loss: 0.2752 - accuracy: 0.9034 - val_loss: 2.0135 - val_accuracy: 0.6232\n",
      "Epoch 5/100\n",
      "10/10 [==============================] - 0s 34ms/step - loss: 0.2011 - accuracy: 0.9252 - val_loss: 2.3800 - val_accuracy: 0.5687\n",
      "Epoch 6/100\n",
      "10/10 [==============================] - 0s 36ms/step - loss: 0.2796 - accuracy: 0.9022 - val_loss: 2.2682 - val_accuracy: 0.6137\n",
      "Epoch 7/100\n",
      "10/10 [==============================] - 0s 40ms/step - loss: 0.1747 - accuracy: 0.9284 - val_loss: 2.3924 - val_accuracy: 0.6327\n",
      "Epoch 8/100\n",
      "10/10 [==============================] - 0s 40ms/step - loss: 0.1688 - accuracy: 0.9366 - val_loss: 2.3585 - val_accuracy: 0.6019\n",
      "Epoch 9/100\n",
      "10/10 [==============================] - 0s 51ms/step - loss: 0.1040 - accuracy: 0.9580 - val_loss: 3.1101 - val_accuracy: 0.6256\n",
      "Epoch 10/100\n",
      "10/10 [==============================] - 0s 38ms/step - loss: 0.1131 - accuracy: 0.9569 - val_loss: 3.1504 - val_accuracy: 0.6019\n",
      "Epoch 11/100\n",
      "10/10 [==============================] - 0s 26ms/step - loss: 0.1766 - accuracy: 0.9377 - val_loss: 2.6746 - val_accuracy: 0.6351\n",
      "Epoch 12/100\n",
      "10/10 [==============================] - 0s 32ms/step - loss: 0.1017 - accuracy: 0.9634 - val_loss: 2.9461 - val_accuracy: 0.6066\n",
      "Epoch 13/100\n",
      "10/10 [==============================] - 0s 38ms/step - loss: 0.0798 - accuracy: 0.9663 - val_loss: 3.0976 - val_accuracy: 0.5995\n",
      "Epoch 14/100\n",
      "10/10 [==============================] - 0s 27ms/step - loss: 0.1219 - accuracy: 0.9694 - val_loss: 3.3617 - val_accuracy: 0.6280\n",
      "Epoch 15/100\n",
      "10/10 [==============================] - 0s 26ms/step - loss: 0.1008 - accuracy: 0.9772 - val_loss: 3.3141 - val_accuracy: 0.6185\n",
      "Epoch 16/100\n",
      "10/10 [==============================] - 0s 24ms/step - loss: 0.0450 - accuracy: 0.9800 - val_loss: 3.4037 - val_accuracy: 0.6090\n",
      "Epoch 17/100\n",
      "10/10 [==============================] - 0s 19ms/step - loss: 0.0408 - accuracy: 0.9775 - val_loss: 3.3977 - val_accuracy: 0.5972\n",
      "Epoch 18/100\n",
      "10/10 [==============================] - 0s 25ms/step - loss: 0.0265 - accuracy: 0.9917 - val_loss: 3.7474 - val_accuracy: 0.5948\n",
      "Epoch 19/100\n",
      "10/10 [==============================] - 0s 53ms/step - loss: 0.0720 - accuracy: 0.9711 - val_loss: 3.5864 - val_accuracy: 0.5853\n",
      "Epoch 20/100\n",
      "10/10 [==============================] - 0s 41ms/step - loss: 0.0491 - accuracy: 0.9866 - val_loss: 3.8516 - val_accuracy: 0.5900\n",
      "Epoch 21/100\n",
      "10/10 [==============================] - 0s 45ms/step - loss: 0.0491 - accuracy: 0.9820 - val_loss: 3.8599 - val_accuracy: 0.5829\n",
      "Epoch 22/100\n",
      "10/10 [==============================] - 0s 39ms/step - loss: 0.0274 - accuracy: 0.9952 - val_loss: 4.0461 - val_accuracy: 0.6090\n",
      "Epoch 23/100\n",
      "10/10 [==============================] - 0s 42ms/step - loss: 0.0178 - accuracy: 0.9942 - val_loss: 3.8342 - val_accuracy: 0.6114\n",
      "Epoch 24/100\n",
      "10/10 [==============================] - 0s 41ms/step - loss: 0.0104 - accuracy: 0.9987 - val_loss: 3.7767 - val_accuracy: 0.5829\n",
      "Epoch 25/100\n",
      "10/10 [==============================] - 0s 30ms/step - loss: 0.0099 - accuracy: 0.9973 - val_loss: 4.1731 - val_accuracy: 0.5972\n",
      "Epoch 26/100\n",
      "10/10 [==============================] - 0s 24ms/step - loss: 0.0055 - accuracy: 0.9989 - val_loss: 4.1598 - val_accuracy: 0.5900\n",
      "Epoch 27/100\n",
      "10/10 [==============================] - 0s 22ms/step - loss: 0.0029 - accuracy: 0.9997 - val_loss: 4.0787 - val_accuracy: 0.6043\n",
      "Epoch 28/100\n",
      "10/10 [==============================] - 0s 21ms/step - loss: 0.0304 - accuracy: 0.9982 - val_loss: 4.2952 - val_accuracy: 0.5948\n",
      "Epoch 29/100\n",
      "10/10 [==============================] - 0s 25ms/step - loss: 0.0034 - accuracy: 0.9996 - val_loss: 4.6978 - val_accuracy: 0.6043\n",
      "Epoch 30/100\n",
      "10/10 [==============================] - 0s 43ms/step - loss: 0.0733 - accuracy: 0.9874 - val_loss: 4.9619 - val_accuracy: 0.5806\n",
      "Epoch 31/100\n",
      "10/10 [==============================] - 0s 49ms/step - loss: 0.0921 - accuracy: 0.9783 - val_loss: 4.4265 - val_accuracy: 0.6209\n",
      "Epoch 32/100\n",
      "10/10 [==============================] - 0s 24ms/step - loss: 0.0303 - accuracy: 0.9908 - val_loss: 4.4178 - val_accuracy: 0.6469\n",
      "Epoch 33/100\n",
      "10/10 [==============================] - 0s 40ms/step - loss: 0.0103 - accuracy: 0.9961 - val_loss: 4.7055 - val_accuracy: 0.6445\n",
      "Epoch 34/100\n",
      "10/10 [==============================] - 0s 37ms/step - loss: 0.0068 - accuracy: 0.9976 - val_loss: 4.5691 - val_accuracy: 0.6303\n",
      "Epoch 35/100\n",
      "10/10 [==============================] - 1s 52ms/step - loss: 0.0039 - accuracy: 1.0000 - val_loss: 4.5711 - val_accuracy: 0.6232\n",
      "Epoch 36/100\n",
      "10/10 [==============================] - 0s 28ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 4.5921 - val_accuracy: 0.6256\n",
      "Epoch 37/100\n",
      "10/10 [==============================] - 0s 39ms/step - loss: 5.2881e-04 - accuracy: 1.0000 - val_loss: 4.6179 - val_accuracy: 0.6303\n",
      "Epoch 38/100\n",
      "10/10 [==============================] - 0s 37ms/step - loss: 5.0247e-04 - accuracy: 1.0000 - val_loss: 4.6589 - val_accuracy: 0.6303\n",
      "Epoch 39/100\n",
      "10/10 [==============================] - 0s 37ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 4.6807 - val_accuracy: 0.6256\n",
      "Epoch 40/100\n",
      "10/10 [==============================] - 0s 34ms/step - loss: 9.0729e-04 - accuracy: 1.0000 - val_loss: 4.7415 - val_accuracy: 0.6351\n",
      "Epoch 41/100\n",
      "10/10 [==============================] - 0s 46ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 4.7838 - val_accuracy: 0.6327\n",
      "Epoch 42/100\n",
      "10/10 [==============================] - 0s 33ms/step - loss: 4.3027e-04 - accuracy: 1.0000 - val_loss: 4.8555 - val_accuracy: 0.6398\n",
      "Epoch 43/100\n",
      "10/10 [==============================] - 0s 32ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 4.9291 - val_accuracy: 0.6398\n",
      "Epoch 44/100\n",
      "10/10 [==============================] - 0s 33ms/step - loss: 4.6481e-04 - accuracy: 1.0000 - val_loss: 4.9889 - val_accuracy: 0.6374\n",
      "Epoch 45/100\n",
      "10/10 [==============================] - 0s 37ms/step - loss: 4.6932e-04 - accuracy: 1.0000 - val_loss: 5.0577 - val_accuracy: 0.6422\n",
      "Epoch 46/100\n",
      "10/10 [==============================] - 0s 38ms/step - loss: 0.0243 - accuracy: 0.9981 - val_loss: 5.5845 - val_accuracy: 0.6422\n",
      "Epoch 47/100\n",
      "10/10 [==============================] - 1s 56ms/step - loss: 0.1873 - accuracy: 0.9777 - val_loss: 5.1781 - val_accuracy: 0.6398\n",
      "Epoch 48/100\n",
      "10/10 [==============================] - 1s 55ms/step - loss: 0.0625 - accuracy: 0.9858 - val_loss: 5.1501 - val_accuracy: 0.6232\n",
      "Epoch 49/100\n",
      "10/10 [==============================] - 0s 47ms/step - loss: 0.0032 - accuracy: 0.9995 - val_loss: 5.2329 - val_accuracy: 0.6374\n",
      "Epoch 50/100\n",
      "10/10 [==============================] - 0s 42ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 5.2461 - val_accuracy: 0.6374\n",
      "Epoch 51/100\n",
      "10/10 [==============================] - 0s 34ms/step - loss: 6.5261e-04 - accuracy: 1.0000 - val_loss: 5.2607 - val_accuracy: 0.6351\n",
      "Epoch 52/100\n",
      "10/10 [==============================] - 0s 46ms/step - loss: 4.4796e-04 - accuracy: 1.0000 - val_loss: 5.2757 - val_accuracy: 0.6374\n",
      "Epoch 53/100\n",
      "10/10 [==============================] - 0s 29ms/step - loss: 5.8916e-04 - accuracy: 1.0000 - val_loss: 5.2994 - val_accuracy: 0.6374\n",
      "Epoch 54/100\n",
      "10/10 [==============================] - 0s 30ms/step - loss: 4.6451e-04 - accuracy: 1.0000 - val_loss: 5.3299 - val_accuracy: 0.6327\n",
      "Epoch 55/100\n",
      "10/10 [==============================] - 0s 25ms/step - loss: 5.1328e-04 - accuracy: 1.0000 - val_loss: 5.3596 - val_accuracy: 0.6303\n",
      "Epoch 56/100\n",
      "10/10 [==============================] - 0s 41ms/step - loss: 1.5690e-04 - accuracy: 1.0000 - val_loss: 5.4208 - val_accuracy: 0.6232\n",
      "Epoch 57/100\n",
      "10/10 [==============================] - 0s 38ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 5.5118 - val_accuracy: 0.6185\n",
      "Epoch 58/100\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10/10 [==============================] - 1s 65ms/step - loss: 3.4470e-04 - accuracy: 1.0000 - val_loss: 5.5608 - val_accuracy: 0.6185\n",
      "Epoch 59/100\n",
      "10/10 [==============================] - 1s 57ms/step - loss: 5.4293e-04 - accuracy: 1.0000 - val_loss: 5.6400 - val_accuracy: 0.6209\n",
      "Epoch 60/100\n",
      "10/10 [==============================] - 1s 60ms/step - loss: 2.5327e-04 - accuracy: 1.0000 - val_loss: 5.7139 - val_accuracy: 0.6256\n",
      "Epoch 61/100\n",
      "10/10 [==============================] - 0s 35ms/step - loss: 6.6843e-04 - accuracy: 1.0000 - val_loss: 5.8178 - val_accuracy: 0.6280\n",
      "Epoch 62/100\n",
      "10/10 [==============================] - 0s 20ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 5.8706 - val_accuracy: 0.6374\n",
      "Epoch 63/100\n",
      "10/10 [==============================] - 0s 20ms/step - loss: 1.7382e-04 - accuracy: 1.0000 - val_loss: 5.9421 - val_accuracy: 0.6398\n",
      "Epoch 64/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 4.0819e-04 - accuracy: 1.0000 - val_loss: 6.0328 - val_accuracy: 0.6351\n",
      "Epoch 65/100\n",
      "10/10 [==============================] - 0s 22ms/step - loss: 2.3810e-04 - accuracy: 1.0000 - val_loss: 6.1596 - val_accuracy: 0.6374\n",
      "Epoch 66/100\n",
      "10/10 [==============================] - 0s 28ms/step - loss: 1.6936e-04 - accuracy: 1.0000 - val_loss: 6.1936 - val_accuracy: 0.6374\n",
      "Epoch 67/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 6.0139e-04 - accuracy: 1.0000 - val_loss: 7.5113 - val_accuracy: 0.6280\n",
      "Epoch 68/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 0.0890 - accuracy: 0.9820 - val_loss: 7.0024 - val_accuracy: 0.6185\n",
      "Epoch 69/100\n",
      "10/10 [==============================] - 0s 33ms/step - loss: 0.0111 - accuracy: 0.9991 - val_loss: 6.6174 - val_accuracy: 0.6517\n",
      "Epoch 70/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 0.0123 - accuracy: 0.9989 - val_loss: 6.8403 - val_accuracy: 0.6493\n",
      "Epoch 71/100\n",
      "10/10 [==============================] - 0s 36ms/step - loss: 0.0908 - accuracy: 0.9887 - val_loss: 6.5550 - val_accuracy: 0.6493\n",
      "Epoch 72/100\n",
      "10/10 [==============================] - 0s 36ms/step - loss: 0.0180 - accuracy: 0.9964 - val_loss: 6.8218 - val_accuracy: 0.6445\n",
      "Epoch 73/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 4.1974e-04 - accuracy: 1.0000 - val_loss: 6.8185 - val_accuracy: 0.6469\n",
      "Epoch 74/100\n",
      "10/10 [==============================] - 0s 50ms/step - loss: 3.5679e-04 - accuracy: 1.0000 - val_loss: 6.8058 - val_accuracy: 0.6493\n",
      "Epoch 75/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 6.6238e-04 - accuracy: 1.0000 - val_loss: 6.7965 - val_accuracy: 0.6469\n",
      "Epoch 76/100\n",
      "10/10 [==============================] - 0s 42ms/step - loss: 8.1921e-04 - accuracy: 1.0000 - val_loss: 6.7863 - val_accuracy: 0.6469\n",
      "Epoch 77/100\n",
      "10/10 [==============================] - 0s 29ms/step - loss: 4.1447e-04 - accuracy: 1.0000 - val_loss: 6.7894 - val_accuracy: 0.6422\n",
      "Epoch 78/100\n",
      "10/10 [==============================] - 0s 36ms/step - loss: 1.1675e-04 - accuracy: 1.0000 - val_loss: 6.7893 - val_accuracy: 0.6493\n",
      "Epoch 79/100\n",
      "10/10 [==============================] - 0s 22ms/step - loss: 2.3541e-04 - accuracy: 1.0000 - val_loss: 6.7928 - val_accuracy: 0.6493\n",
      "Epoch 80/100\n",
      "10/10 [==============================] - 0s 35ms/step - loss: 2.3172e-04 - accuracy: 1.0000 - val_loss: 6.8043 - val_accuracy: 0.6493\n",
      "Epoch 81/100\n",
      "10/10 [==============================] - 0s 27ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 6.8199 - val_accuracy: 0.6493\n",
      "Epoch 82/100\n",
      "10/10 [==============================] - 0s 38ms/step - loss: 1.6219e-04 - accuracy: 1.0000 - val_loss: 6.8296 - val_accuracy: 0.6517\n",
      "Epoch 83/100\n",
      "10/10 [==============================] - 0s 37ms/step - loss: 0.0010 - accuracy: 1.0000 - val_loss: 6.8613 - val_accuracy: 0.6469\n",
      "Epoch 84/100\n",
      "10/10 [==============================] - 0s 27ms/step - loss: 1.5789e-04 - accuracy: 1.0000 - val_loss: 6.9101 - val_accuracy: 0.6445\n",
      "Epoch 85/100\n",
      "10/10 [==============================] - 0s 36ms/step - loss: 1.0139e-04 - accuracy: 1.0000 - val_loss: 6.9581 - val_accuracy: 0.6469\n",
      "Epoch 86/100\n",
      "10/10 [==============================] - 0s 36ms/step - loss: 4.6446e-04 - accuracy: 1.0000 - val_loss: 6.9780 - val_accuracy: 0.6493\n",
      "Epoch 87/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 2.1412e-04 - accuracy: 1.0000 - val_loss: 7.0232 - val_accuracy: 0.6517\n",
      "Epoch 88/100\n",
      "10/10 [==============================] - 0s 33ms/step - loss: 1.5214e-04 - accuracy: 1.0000 - val_loss: 7.1486 - val_accuracy: 0.6517\n",
      "Epoch 89/100\n",
      "10/10 [==============================] - 0s 40ms/step - loss: 9.7768e-05 - accuracy: 1.0000 - val_loss: 7.2142 - val_accuracy: 0.6564\n",
      "Epoch 90/100\n",
      "10/10 [==============================] - 0s 36ms/step - loss: 4.5052e-04 - accuracy: 1.0000 - val_loss: 7.1945 - val_accuracy: 0.6540\n",
      "Epoch 91/100\n",
      "10/10 [==============================] - 0s 35ms/step - loss: 4.4741e-04 - accuracy: 1.0000 - val_loss: 7.2640 - val_accuracy: 0.6517\n",
      "Epoch 92/100\n",
      "10/10 [==============================] - 0s 26ms/step - loss: 3.5044e-04 - accuracy: 1.0000 - val_loss: 7.3609 - val_accuracy: 0.6540\n",
      "Epoch 93/100\n",
      "10/10 [==============================] - 0s 30ms/step - loss: 5.5626e-04 - accuracy: 1.0000 - val_loss: 7.4325 - val_accuracy: 0.6540\n",
      "Epoch 94/100\n",
      "10/10 [==============================] - 1s 52ms/step - loss: 3.4475e-04 - accuracy: 1.0000 - val_loss: 7.5122 - val_accuracy: 0.6540\n",
      "Epoch 95/100\n",
      "10/10 [==============================] - 0s 40ms/step - loss: 3.4176e-04 - accuracy: 1.0000 - val_loss: 7.5633 - val_accuracy: 0.6540\n",
      "Epoch 96/100\n",
      "10/10 [==============================] - 0s 48ms/step - loss: 9.1906e-04 - accuracy: 1.0000 - val_loss: 7.6119 - val_accuracy: 0.6517\n",
      "Epoch 97/100\n",
      "10/10 [==============================] - 0s 46ms/step - loss: 5.3792e-04 - accuracy: 1.0000 - val_loss: 7.6914 - val_accuracy: 0.6517\n",
      "Epoch 98/100\n",
      "10/10 [==============================] - 0s 32ms/step - loss: 5.3316e-04 - accuracy: 1.0000 - val_loss: 7.8267 - val_accuracy: 0.6540\n",
      "Epoch 99/100\n",
      "10/10 [==============================] - 0s 29ms/step - loss: 5.2841e-04 - accuracy: 1.0000 - val_loss: 7.8598 - val_accuracy: 0.6611\n",
      "Epoch 100/100\n",
      "10/10 [==============================] - 0s 31ms/step - loss: 1.9202e-04 - accuracy: 1.0000 - val_loss: 7.9939 - val_accuracy: 0.6564\n"
     ]
    }
   ],
   "source": [
    "## I now fit the model, and store the training history\n",
    "## I use 100 epochs and a batch_size of 512\n",
    "history = model.fit(X_train,\n",
    "                        to_categorical(y_train),\n",
    "                        epochs = 100,\n",
    "                        batch_size = 100,\n",
    "                        validation_data=(X_test,to_categorical(y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [],
   "source": [
    "history_dict = history.history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAGACAYAAAD7zIVCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABcHklEQVR4nO3dd1xV9f8H8NdlyhI0R4ooaoqkCNe9B4pbM3c5Mg3N1S81Tc20tJLcIzX3zpWIA8W+uM0900LLCaKoyVDgAhc4vz/oXrnce+Fc7obX8/HwUXzu55zzOfdzx/t+pkQQBAFEREREZBVszF0AIiIiIhKPwRsRERGRFWHwRkRERGRFGLwRERERWREGb0RERERWhMEbERERkRWxM3cBTOX69etwdHQ06DnT09MNfk7SH+vFcrFuLBPrxXKxbiyTKeolPT0dAQEBGh8rNsGbo6MjfH19DXrOqKgog5+T9Md6sVysG8vEerFcrBvLZIp6iYqK0voYu02JiIiIrAiDNyIiIiIrwuCNiIiIyIoweCMiIiKyIgzeiIiIiKwIgzciIiIiK8LgjYiIiMiKWEzwdvToUUil0gLz/f333/joo48glUrRpk0brF69GoIgmKCEREREROZnEYv0Xr16FZMmTSow38uXL/Hxxx+jRo0aWLx4Mf78808sXrwYtra2GD58uAlKSkRERGReZg3eMjIysGnTJixZsgTOzs6Qy+X55t+2bRsyMzOxcuVKODk5oXXr1sjIyMDq1asxZMgQ2Nvbm6jkREVD2LVYzDtyB08SZajo4YRJHX0AoNBpPaWeIs75VO/r6FIeS3/OCv88GjpN/3oxRrmNUYeamP751uV5NN17pvBlNG95zFPGpyZ9jeYmEczY5xgZGYmpU6di3LhxSExMxIYNG3Dt2jWt+QcMGIC3334bixcvVqbdunULvXv3xvbt21GvXj2txxpjKwtuW2KZzFEv1viFFXYtFlNDb0Imz1Km2dtIAAkgzxJ0TnOyt0Xv+p7YcyXWYOfUtzxzevnp9Vzmrde2tcoa/f4s7Xk0Z7kNUYdiGPq9YGnPI8to3PersV6j+X2XmTV4e/bsGZycnFCyZEksW7YM69evzzd4a9KkCfr374/x48cr05KSktCoUSPMmTMHvXr10nosg7fiw5D1IiYoM/QXurE+DPLeS2pGJhJS82/t1pWtRIIsCxqD6unhhN+nBBbqWE1f6BIAprg7S3sexTJGuTXVodgfS2LfQ81DjiE2UWbQcuvDGuqfZXxDn8+Z/OT3XWbWbtPy5cvrlD85ORkuLi4qaYq/k5OT8z02PT09301eCyMtLc3g5yT9Gapejt1/jaVn/0X6f4FVbKIME3ddh0QCZGZDmbb1fLTasfJs9Q8MsWkyeRZ+OHgLPiVe6XkHb2i6F2OwtA/zJ4myQr8WfjgYrRK4AaYJ3ADLex7FMka589ah2Pfll7/eQOyTWARWc1M757H7r7HpagJepGSirIsdnqdkGrzc+rCG+mcZ39Dnc6awLGLCgiHY2OQ/cdbR0ZEtb8VEYetFU8tUepbqmz9LgEm+wV+kZOr12hJzL8Zgab/G3Z3s8cm+p4VqjXmRct/IpdPO0p5HsYxR7ooeTirvhU/2HRP1vkzPEvDLzWSM6dpIJT3sWix+Ov9IGZg/T8k0WYuqWNZQ/yzjG3lfo4aSX0BoMUuFiOHq6oqUlBSVNMXfrq6u5igSWaGwa7FoHnIMVaeEo3nIMYRdi1V2kcUmyiAg55e7obsUdVHRw6nQx+pzL/Y2EtjbSgqV5mRviw8ae8HJ3tZg59Q3LSUjU+V5mBp6E2HXYjXcuTptdSDJ87ehy22Jz6O5yu1kb6vsElV4okOrsaa8847c0diiaux6LUr1zzKqXifva9QUrKrlzdvbG48fP1ZJi4mJAQBUq1bNHEUiK5N3HJPiC72EvY3aB7ou8v5y13fMmz4fBpq+nLTxcLKHi6OdQSdaNKhS2iJmm2ka0yeTZ2HekTuiWt8mdfRRG/OmGAR9/PYLo8+Ss5Tn0dzlzltXFT2cRHf7awrAtQV/AnLGLhXV55FltK5Z7QUx64SF3MRMWFi8eDF27tyJo0ePwtnZWZm2fft2nD59Gg4ODlqP5YSF4iO/etF3YHJ+s5oM+YWuy4dB3i5Ssfdnqpl8uZnyPVN1SrjGrjAJgAchXUWdQ9PAeHN8UBubNX2WiZ0Zqu19Oe/IHY3vEWMNOteXNdVNcWKKerHYCQsFiY6ORnx8PAICAgAAH374IbZu3YoRI0Zg+PDhuH37NlavXo2JEyfmG7gRKejS5QKIb5nS9oWuKV1smhiaWhK1jd/RdC9FMRBR0BbI6tIl3VPqWaSfI2ukqA9dZ4ErWtk1LR9hrq4vosKy6OBtxYoV2Lt3L+7cuQMAKFeuHDZs2IDvv/8en332GcqUKYPPP/+cuysUcYZs/dD2he7hZI/0zGy1D/RvetQ2aLBlaPmN38kdwOV3L0WVtm5PbV/SxaWVrSjQFlTnTmseckztvSGTZ+H47ReY08uPdU1WzWKCt3HjxmHcuHEqaSEhIQgJCVFJ8/Pzw44dO0xZNDIjbWPUgMIFUNq+0L/pURuAZYxl0IUu43cs/V4MTVsLjabnwdCvMzI/be+NJ4kytqiS1bOY4I1IE00tS7oMOtfUmpLfr25r+0DX1pJoqeN3TE3sl7S+rzOyPIboNieyVAzeyKLl9+s5r7x7AWob8zKnl1+RCWx07RokzXR5nZF14HuDijIGb2TRxP561tTtte18tNrA/aLWmqJL1yBpx1Yay1XYsYh8b1BRxuCNLJrYX8/aBu5rUtRaUzh+R39spbFM+o5F5HuDiioGb2Q2YjeXFjMzTJeAjK0plBdbaSwTxyISacbgjUwib6CmaTzapN03VBba1GWMmrZuL01LZlhDawqXrTA9ttJYHo5FJNLMqvY2Jeukaa/Nbeej1X5Ry7MFlRXSgTe/sgsyqaOP2h52Tva2GNikMjw9nCBBzgxMU+8oUBiani9d9uSkgmna35Ysj7ZWcraeU3HHljcyOl3Go2lS8MxS8d2r1iC/riLF49Z+j+bENd2sB8ciEmnG4I2MTt8uDjEzS3N3r1r7XoDani/FfTLo0A/HUVkPjkUk0ozBGxmd2PFo2jaXFjOztCh9+Wp7vmwlkiJ936bCcVTWhWMRidRxzBsZlKaxRGLHo83r6495ffwLHKNW1L98tT1fWYLmzuaict+mwnFURGTt2PJGBpNfd6Yu49EK+pVd1BdU1dZVNO/InSJ936bCcVREZO0YvFGh5Z00kJqRqbVb7/cpgQbr+igOX77auoqK+n2bAsdREZG1Y/BGhaKplU0bQ3frFdcv3+J638bAcVREZM0YvFGhaJo0oI0xuvWK65dvcb1vIiJ6gxMWqFDEtqaxW4+IiMiw2PJGouQd3+bhbI+EVLlaPg8ne7g42rFbj4iIyEgYvFGBNI1vs7eRwN5WorYm2zc9ajNYIyIiMiJ2m1KBNI1vk2cLcHGws7p9Q4mIiKwdW96oQNrGtyXJ5Lg+s4OJS0NERFS8MXgrRjRt5i6mpayoL4pLRERkTdhtWkwoxq3FJsog4M3uB2HXYgs8Vtt2TZxFSkREZHoM3oqJ/DZzL0hPqSfm9PLj+DYiIiILwG7TYkLfzdy5OCwREZFlYMtbMaFtfBrHrREREVkXBm/FBMetERERFQ3sNi0muKk5ERFR0cDgrRjRNG6tsMuHEBERkXkweCvGNG17NTX0JgAwgCMiIrJQHPNWjOmzfAgRERGZB1veijFty4TEJsrQPOQYu1KJiIgsEFveijFty4RIgELtxEBERETGx+CtGNO0fIgEgJAnH7tSiYiILAeDt2JM07ZXeQM3BbE7MRAREZFxccxbESV2CZC8y4c0DzmGWA2BGndiICIisgxseSuCFEuAFGbcGndiICIismwM3oogfZYA0dSVOqeXH2ebEhERWQh2mxZB2saniR23pmknBiIiIrIMDN6KgLzj2zyc7ZGQKlfLx3FrRERE1o/Bm5XTtMWVvY0E9rYSyLPezB3luDUiIqKigWPerJym8W3ybAEuDnYct0ZERFQEseXNymkbx5Ykk+P6zA4mLg0REREZG1verJy2cWwc30ZERFQ0MXizclyXjYiIqHhht6mVU4xjE7ObAhEREVk/Bm9FANdlIyIiKj4YvFkosXuTEhERUfHC4M0CaVq7bWroTQBgAEdERFTMccKCBdJnb1IiIiIq2hi8WSB99yYlIiKioovdphaAe5MSERGRWAzezIx7kxIREZEu2G1qZtyblIiIiHRh9pa3Xbt2Ye3atYiLi4Ovry+mTJkCqVSqNf/Bgwfx888/49GjR/D09MTQoUMxYMAAE5bYsLg3KREREenCrC1vYWFhmDlzJnr06IFly5bBzc0Nw4cPR0xMjMb8Bw4cwMSJE/HOO+9gxYoVGDhwIObOnYtVq1aZuOSGw71JiYiISBdmC94EQcDSpUvRr18/jB07Fq1bt8bKlStRqlQpbNq0SeMxq1evhlQqxaJFi9CyZUsMHjwYkydPxooVK5CQkGDiOzAM7k1KREREujBb8Pbo0SPExsYiMDBQmWZvb482bdrg9OnTGo958OABmjdvDolEokyrX78+0tLScOnSJaOX2Rh6Sj0xp5cfx7cRERGRKGYb8/bw4UMAQJUqVVTSvby8EB0djaysLNjaqrZIVahQAU+ePFFJe/z4MQAgNjbWeIU1MrF7k3LLLCIiIjJby1tycjIAwMXFRSXdxcUF2dnZkMnUB/L36NED+/fvx+7du/Hq1Sv88ccfWLhwISQSCVJTU01SbnNRLCkSmyiDgDdbZoVds96glYiIiHRntpY3QchZwyx3F2h+6QAwcuRIvHjxAl9//TWmT58ODw8PfPXVV5g8eTKcnPIf4J+eno6oqCgDlT5HWlqawc+pzQ8HozVumfXDwVvwKfHKJGWwFqasF9IN68YysV4sF+vGMpm7XswWvLm5uQEAUlJSUKZMGWV6amoqbGxs4OzsrHaMg4MDZs2ahcmTJyMuLg6VK1fGixcvIAgC3N3d872eo6MjfH19DXoPUVFRBj+nNi9S7mtJzzRZGayFKeuFdMO6sUysF8vFurFMpqiX/IJDs3WbKsa65V0WJCYmBlWrVtXY8nbu3DlcuHABrq6ueOedd+Dg4IA7d3I2ay/qL24uKUJERESAGYM3b29vVKhQAZGRkco0uVyOEydOoGnTphqPOXToEL777jvl34Ig4JdffkHFihXh41O0l9bgkiJEREQEmLHbVCKRIDg4GLNnz4a7uzvq1auHrVu3IiEhAUOHDgUAREdHIz4+HgEBAQCAfv36Yc+ePfj+++8RGBiIAwcO4MyZM1i4cKHazNSiRjGrlLNNiYiIijezbo81cOBApKenY/Pmzdi4cSN8fX2xbt06eHl5AQBWrFiBvXv3KrtG/fz8sGTJEixZsgS7du2Ct7c3Fi1ahM6dO5vzNkxG7JIiREREVHSZfW/TYcOGYdiwYRofCwkJQUhIiEpaUFAQgoKCTFE0IiIiIotj1r1NiYiIiEg3DN6IiIiIrAiDNyIiIiIrwuCNiIiIyIoweCMiIiKyIgzeiIiIiKwIgzciIiIiK8LgjYiIiMiKMHgjIiIisiIM3oiIiIisCIM3IiIiIivC4I2IiIjIijB4IyIiIrIiDN6IiIiIrAiDNyIiIiIrwuCNiIiIyIoweCMiIiKyIgzeiIiIiKwIgzciIiIiK8LgjYiIiMiKMHgjIiIisiJ25i5AcRN2LRbzjtzBk0QZKno4YVJHH/SUepq7WERERGQlGLyZUNi1WEwNvQmZPAsAEJsow9TQmwDAAI6IiIhEYbepCc07ckcZuCnI5FmYd+SOmUpERERE1obBmwk9SZTplE5ERESUF4M3E6ro4aRTOhEREVFeDN5MaFJHHzjZ26qkOdnbYlJHHzOViIiIiKwNJyyYkGJSAmebEhERUWExeDOxnlJPBmtERERUaOw2JSIiIrIiDN6IiIiIrAiDNyIiIiIrwuCNiIiIyIoweCMiIiKyIgzeiIiIiKwIgzciIiIiK8LgjYiIiMiKMHgjIiIisiIM3oiIiIisiOjgbfz48Th69Cjkcrkxy0NERERE+RC9t+mlS5cQEREBNzc3dOjQAd26dUPjxo0hkUiMWT4iIiIiykV08Hb69GlcuHABhw4dwv/+9z/s2bMHb731Frp27YquXbuibt26xiwnEREREUGH4E0ikaBJkyZo0qQJZs6ciTNnzuDw4cPYt28fNm/ejEqVKqFbt27o3r07qlWrZswyExERERVbhZqwYGtri9atWyMkJATbt29H586dERMTg5UrV6Jr164YMGAAIiMjDV1WIiIiomJPdMtbbnfv3kVERAQOHz6M+/fvw9bWFm3atEH37t0hkUiwY8cOjBs3DmPHjsWYMWMMXWYiIiKiYkt08Hbv3j0cPnwYERERuHfvHgCgXr16mDFjBjp37gwPDw9l3i5duqBfv37YuHEjgzciIhHS09MRHx+P169fIysry6TXlsvliIqKMuk1SRzWjWUqbL04ODigTJkycHd31+v6ooO3rl27AgBq1qyJ8ePHo3v37qhQoYLW/G+//TYyMjL0KhwRUXGQnp6O6OholCpVCt7e3rC3tzfpTH6ZTAYnJyeTXY/EY91YpsLUiyAIkMlkePz4MRwdHVGiRIlCX1908DZixAh0794dNWrUEJV/0aJFsLW1LXTBiIiKi/j4eJQqVQplypQxd1GIyEgkEgmcnZ1RpkwZvHjxAl5eXoU+l+gJCxMmTICLiwvmz5+PpKQkZfrq1asREhKCly9fquRn4EZEJM7r169RsmRJcxeDiEzAzc0NaWlpep1DdPD2999/4/3338eGDRvw9OlTZfqrV6/wyy+/oGfPnoiJidGrMERExVFWVhbs7e3NXQwiMgE7OztkZmbqdQ7RwduCBQvg4uKC8PBw1KpVS5n+xRdfIDw8HPb29pg/f75ehSEiKq64Ww1R8WCI97ro4O369ev46KOP4O3trfaYl5cXBg0ahEuXLuldICIiIiLSTnTwJggC0tPT831c3z5cIiIiIsqf6ODN398fO3fuxKtXr9QeS0lJwe7du+Hv72/QwhERUdExZcoU+Pj4FPhvypQpel8rNDQUPj4+uHDhgk7HXbhwAT4+PggNDdW7DIWxZMkS+Pj44NNPPzXL9ck6iF4qZOzYsRg0aJBy/9IqVapAIpEgOjoa4eHhePHiBebMmaNzAXbt2oW1a9ciLi4Ovr6+mDJlCqRSqdb8V69exbx583D79m2ULl0a77//PkaOHMnBvkREFq5///5o2rSp8u8rV65g586d6N+/P+rXr69Mr1y5st7XatiwIebOnYvq1avrdFz16tUxd+5c1KtXT+8yFEZ4eDicnZ1x+vRpvHjxAq6urmYpB1k20cGbv78/NmzYgB9//BHr16+HIAjKx2rVqoU5c+bkG3RpEhYWhpkzZ2LMmDHw8/PDli1bMHz4cOzbt0/j+ifR0dEYPnw46tWrh2XLluHBgweYP38+UlJS8OWXX+p0bSIiMi2pVKryPZGVlYWdO3ciICAA7733nkGv5eXlVah1tMqUKWPwsoh148YNPHr0CCNHjsSqVauwf/9+fPjhh2YpC1k2nfY2bdCgAXbv3o34+HjExsYiOzsbFSpUQLly5XS+sCAIWLp0Kfr164exY8cCAJo1a4ZOnTph06ZNmD59utoxERERyMrKwrJly+Ds7IwWLVrgxYsX2Lp1KyZPnszZWkREZLUOHDgAABg8eDBCQ0Oxd+9eBm+kkegxb7mVLl0afn5+8Pf3Vwnc4uPjRZ/j0aNHiI2NRWBgoDLN3t4ebdq0wenTpzUek5GRATs7O5UtJTw8PJCamsqtuIiIipBly5bBz88P//vf/9C8eXNIpVLs3r0bAPDnn39i3LhxaNasGWrXro2mTZti4sSJiIuLUx6fd8yb4u/bt29j4sSJaNiwIaRSKcaMGYPHjx8rj8s75k3x9++//45vv/0WTZs2hb+/Pz766CPcvn1bpcxyuRyLFy9GmzZt4O/vj0GDBuH27dt49913sWzZsnzvNysrC4cPH8Y777yDsmXLIjAwEP/88w9u3bqlMf++ffvQu3dvBAQEoFWrVpgxY4bad3B+eR4/fgwfHx+1cuVNV/y9ceNGfPDBB6hTpw6GDh0KAEhOTsaCBQvQqVMn+Pn5QSqVol+/fjh69KhO5e3fvz9atGiB7OxslWPu3bsHHx8fbNu2Ld/nrjjSqeUtLCwMv/32G1JTU1We5KysLKSkpODu3btaX2h5PXz4EABQpUoVlXQvLy9ER0cjKytLbZeGHj16YNOmTViwYAGCg4MRHR2NTZs2ISgoCI6OjrrcChFRsRF2LRbzjtzBk0QZKno4YVJHH/SUepq7WAXKzMzE9OnTMXz4cGRkZKB+/fq4c+cOPvzwQ1SpUgUjRoyAk5MTrl69in379uH58+fYsmVLvuccNWoUqlevjvHjxyMmJgabNm3Cs2fP8Ouvv+Z73PTp01GuXDmMHj0aSUlJWLt2LYKDg3H8+HHY2eV8lX7xxReIiIjA+++/Dz8/Pxw/fhxDhgxRC0o0OXfuHP7991/06dMHABAUFISdO3di//79aNiwoUreNWvWYP78+ahfvz4mTJiAly9fYtOmTYiKisL27dthZ2dXYB5dLVmyBK1bt0b37t3h6OgIQRAwcuRI/PXXXxg0aBAqV66MuLg47NixA+PGjcORI0eU3dYFlaVbt2747rvvcOnSJTRu3Fh5zfDwcNjZ2aFz5846l7eoEx28rVmzBgsXLoS9vT1cXV2RkJCAt99+G4mJiZDJZChRogQGDx4s+sLJyckAABcXF5V0FxcXZGdnQyaTqQ3UrFy5MiZPnowZM2Zg7dq1AIDatWuLmiiRnp6OqKgo0eUTIy0tzeDnJP2xXiwX60YzuVwOmUxmlHMfuBmHGQduI02eE0DEJsowJfQPZMgz0N3vbQBvNsw2NUWPSUZGhtr15XI5srOz0b9/f5Xvlu+//x5AztaM7u7uAHJ+2KelpSEiIgJxcXFwd3dXnjs9PR0ymUz5t6+vLxYsWKA83+vXr7F7927cvn0bVapUUS6JpSiT4u9SpUph3bp1ykYFGxsbLFmyBKdOnULTpk1x9epVRERE4JNPPlEOBXr//fcxceJEHDt2rMA63rt3LwCgVatWkMlk8Pf3R8mSJREREYEvvvgCDg4OAHJ2NVq2bBmaN2+OpUuXKstTrlw5zJo1C8eOHYO/v3+BeapVq6Z8nnOXS7HklyJd8fdbb72FWbNmKScHXrp0CZcvX8b06dOVAScAvPvuuxg9ejQOHz6MwYMHiypvYGAgQkJCcODAAdStW1d5rvDwcDRu3BhOTk5meX3mR9/3jFwu1+uzUHTwFhoailq1amHLli1ISEhAUFAQNm/ejIoVK2Lnzp2YPXu2TkuFKCY85B2npi0dAHbv3o3p06ejf//+6Ny5M54/f46lS5dixIgR2Lhxo/LFrYmjoyN8fX1Fl0+MqKgog5+T9Md6sVysG82ioqLg5ORklHMvOfZAGbgppMmzseTYA/RrVBUAIJPJjHb9/Cg+sx0cHNSurwgS2rZtq/LY7NmzMWHCBJQuXVqZlpycDGdnZwBAdnY2nJyclOd2dHRU+btbt24q56tTpw52796N5ORkODk5KXtxFGVS/N2pUyeVBgU/Pz8AOcGUk5MTTp06BQAIDg5WOf+nn36KY8eOwd7eXutznJaWhuPHj8PT01M569bJyQlt27bFvn37cPbsWWXr04kTJ5Ceno7BgwerlKdPnz4ICAhAtWrVROVR7Eeet1yKYUmKdMXfzZo1U9l/t1GjRrh06RJKlCihfG6zsrKUrZAZGRlwcnISVRYnJyc0adIEx48fx7fffgtbW1v89ddfePjwIUaNGmWW12ZB9H3P2NvbF/hZmF9wJzp4i42NxYQJE+Dq6gpXV1e4u7vj8uXLeP/99/Hhhx/iypUr2LRpEzp16iTqfG5ubgBy1ogrU6aMMj01NRU2NjbKN2Juq1evRuvWrTFr1ixlWp06ddClSxfs379fJfonIiLgSaLm1gFt6ZbmrbfeUvlbIpEgISEBq1atwp07dxAdHY0nT54of/gX1EVZqlQplb9zBx75yR0s5j5Ocb1Hjx7Bw8MDHh4eKvkULVz5OXbsGFJSUhAUFKQy/i4gIAD79u1DaGioMniLjY0FoD7kyNHREbVr1xadR1d57x/I2aNzx44duHjxIh49eoTo6GhlS52iPsSWpXv37jhz5gwuXbqEJk2aIDw8HI6Ojmjfvn2hylvUiQ7e7OzsVLo4q1Spgjt37ij/bty4MRYtWiT6woqKjImJUanUmJgYVK1aVWPL29OnT9GzZ0+VtOrVq8PDwwP37t0TfW0iouKioocTYjUEahU9LK81QxMbG9V5dSdOnMDo0aNRrlw5NGnSBK1atUKdOnVw5swZrFq1SufzFbYcecnlco3rjYoZj62YZRoWFoawsDC1x3///Xc8f/4c5cqVUwaL+ZVHTJ6Cjs0r7xj0V69eYcCAAYiJiUHz5s0RGBiIWrVqwdPTE3379tW5LO3bt0eJEiVw+PBhNGnSBIcPH0abNm24zp0Womu2evXquHbtmvLvqlWrqkxOePXqlU4zPr29vVGhQgVERkYq0+RyOU6cOKGyiGNuVatWxdWrV1XSHj16hMTERFSqVEn0tYmIiotJHX3gZK/6xetkb4tJHX3MVCL9zJ49G1WqVMGhQ4cQEhKCYcOGoVGjRkhISDBruby8vPDy5UvleG4FxeQ8bZKSknD69Gl4enpi+fLlav/at2+PrKws7Nu3DwBQoUIFADnffbllZGTg//7v/xAZGSkqjyIYy/u9/eLFC1H3u3nzZty7dw+rV6/Gzz//jPHjx6Nz587IzMxUySemLADg6uqKtm3b4vjx47h9+zZiY2PRvXt3UWUpjkQHb7169UJoaCi++OILpKamIjAwEJcvX8ZPP/2EQ4cOYePGjahVq5boC0skEgQHB2PHjh1YtGgRTp48idGjRyMhIUE5DTk6OhrXr19XHjN69GicOXMGX331Fc6dO4f9+/cjODgYnp6eZltUkYjIkvWUemJOLz94ejhBAsDTwwlzevlZxWxTTRITE1GxYkWVoTVPnz7Fb7/9BqDg7k9jCQoKQnZ2Nn755ReV9IKWuYiIiIBcLkevXr3Qvn17tX8jR44E8GZCQ7NmzWBvb49du3apLJYfERGBiIgI0Xk8PDxgZ2enNq7q8OHDou43MTERAPDOO+8o0wRBwNatWwFAGcSJKYtC9+7d8ezZM6xatQpubm5o3bq1qLIUR6K7TT/44APExcVh27ZtsLOzQ4cOHdC1a1f89NNPAHKi5i+++EKniw8cOBDp6enYvHkzNm7cCF9fX6xbt045vXjFihXYu3evsnu2c+fOsLW1xcqVK7Fv3z6UKVMGzZo1w8SJE9m0SkSkRU+pp9UGa3m1atUKhw4dwowZM+Dn54fHjx9j165dypl/KSkpZilX8+bN0bZtWyxYsAAPHjyAn58fzp49q1y3VNsi8gcPHoSNjQ169eql8fEaNWpAKpXi2rVruHHjBvz9/TFmzBgsXrwYw4YNQ/v27REXF4etW7eicePGaNu2LWxtbUXladeuHY4cOYJp06ZBKpXi/PnzuHbtmqjtJlu1aoUtW7Zg5MiR6NOnD+RyOQ4fPoxbt27BxsZGWQ9vvfVWgWXJfU4PDw8cOnQIvXr1yncSYnEnOnhLSEjA+PHjMW7cOOVskgULFuCDDz5AYmIipFKp2sBSMYYNG4Zhw4ZpfCwkJAQhISEqaR06dECHDh10vg4REVm/b775Bs7Ozjh27Bj27duHt99+Gz179kRQUBA++OADnD9/Hu+++65ZyrZo0SIsWrQI4eHhOHjwIKRSKRYuXIjRo0drDETi4uJw6dIlNG/eHBUrVtR63g8++ADXrl1DaGgo/P39MWrUKJQtWxabN29GSEgIypYti379+mHcuHHK7lAxeb799ls4OzsjMjIShw8fRtOmTbFlyxZ069atwHtt1aoVvvvuO6xfvx4hISFwd3dH7dq1sXPnTnz99dfKxZHFlgXImYHZsWNH7Ny5U1QZijOJkLsdMx9t2rRB3759MWbMGGOXySiMsUQBlz2wTKwXy8W60czcz4u5lgopSl6/fg0HBwe1CQq3bt1C79698f333xdqRYTiVjczZ87E0aNHcfLkSbVJEpZE33oR857PL4/oMW/x8fEoW7asbqUjIiIqBn777TcEBASoTaoLDw8HAJXFZ0mzxMREREREoGfPnhYduFkC0d2m3bt3x86dO9GsWTPO7CQiIsqlbdu2cHNzw/jx4zFw4EB4eHjg+vXrCA0NRY8ePVCzZk1zF9Fi/fnnn1i7di3++OMPpKenY+DAgeYuksUTHbzZ2Njg/v376NixIypXroy33npLbd0WiUSCTZs2GbyQRERElqx06dLYvn07li1bhs2bN+PVq1fw9PTEhAkTMHz4cHMXz6K5ubnh3LlzcHR0xPz585XLi5B2ooO333//XbkydXp6Op48eWK0QhEREVmb6tWrY/HixeYuhtWpXLkyzp8/b+5iWBXRwduxY8eMWQ4iIiIiEqFw+4QQERERkVmIbnkbMmSIqHybN28udGGIiIiIKH+ig7fHjx+rpWVnZyMhIQHp6enw9PREjRo1DFo4IiIiIlKl95i3rKwsHD16FNOnT+eMGiIiIiIj03vMm62tLTp06IC+ffti/vz5higTEREREWlhsAkL3t7euH37tqFOR0REREQaGCR4y8jIwP79+wu1MT0RERERiSc6eBsyZIjGfwMGDEDLli1x+fLlQm26S0RExcPgwYPh6+uLFy9eaM2TlJSEOnXqYNy4caLOeeHCBfj4+CA0NBRAzuQ6Hx8fLFu2LN/jxObTJiYmRuXvwMBADB48uFDn0kdGRgZWr16NHj16ICAgAPXq1UOvXr2wevVqpKenF/q8ycnJiI+PF5U3JSUFAQEB8PHxwa1btwp9TRJPr9mmQM6Yt2rVqqFbt2748MMPDVYwIiIqWnr06IGLFy/it99+07p/5W+//Qa5XI4ePXoU6hqlS5fG3Llz4ePjo09R87VixQrs3bsX//vf/5Rp06ZNg5OTk9GuqUlmZiaGDx+O69evo2fPnujfvz+ysrJw+fJlLFy4EMeOHcPmzZvh4OCg03lv3bqFUaNGYf78+WjcuHGB+SMjI5GWloYSJUogNDQUderUKewtkUjcYYGIiEyiU6dOmDVrFo4cOaI1eDt06BDc3d3RunXrQl3D2dkZ7733nj7FLNC5c+eQlZWlkta+fXujXlOTw4cP4+LFi1i2bBk6dOigTB8yZAjWrl2LefPm4ddff9W5YeXvv//G8+fPRec/cOAAatSoAU9PT4SHh2PKlCk6B4ykG53GvD158gTz589HUlKSMm3NmjX48ccf8fLlS4MXjoiIig43Nze0bdsWly9f1vid8fLlS1y4cAGdOnXil78I165dAwA0b95c7bGBAwfC3t4e169fN2oZ4uPjce7cOTRo0ACtWrVCYmIiG3tMQHTw9vfff+P999/Hhg0b8PTpU2V6UlIStm3bhp49e6qNASAiIsqte/fuyMrKUulyVIiIiEBWVpayy/TFixeYNWsW2rVrhzp16qB+/foYMmQIrly5ovX8msayZWZm4qeffkJgYCD8/f3x0UcfIS4uTu3Y5ORkLFiwAJ06dYKfnx+kUin69euHo0ePKvMEBgbi4sWLiI2NVbmOpjFvly9fxtChQyGVSiGVSjFkyBBcunRJJU9gYCBmzJiBffv2oWvXrvDz80OHDh2wbdu2Ap9LFxcXAMDOnTvVHnNycsLVq1cxd+5clfS7d+9izJgxaNCgAfz9/TFgwACcPn1a+fiyZcswdepUADkteIGBgfmW4dChQ8jMzESjRo3Qrl07SCQS5fjDvJ49e4Zp06ahRYsWkEql6N27NyIjI3XKM2XKFI1d4nnTp0yZgk6dOmHbtm1o2LAhGjZsiFOnTgHIaTn95JNP0LhxY9SuXRstW7bEjBkz8OrVK9FlOXv2LHx8fDTW0+eff44WLVqotc4akujgbcGCBXBxcUF4eDhq1aqlTP/iiy8QHh4Oe3t7rvNGRGSJ/tgFLKoDfOOR898/dpmtKK1bt4a7uzsiIiLUHjt06BA8PT1Rv359pKWlYeDAgTh8+DDef/99zJw5EwMGDMCtW7cwYsQIJCcni77m9OnTsWzZMkilUkyePBlOTk749NNPVfIIgoCRI0di69atCAoKwowZMzBs2DDExsZi3LhxysaJadOmoVq1aihVqhTmzp2LoKAgjdc8evQoBg8ejKdPn2LUqFEYNWoUnj59iqFDh6oEgwBw+vRpfP/99+jYsSOmTp0KJycnzJo1CydPnsz3vnr06AF7e3v8+OOP6NatGxYvXowLFy4gIyMDANRaL+/cuYP+/fvj7t27GDlyJMaPH4/MzEyMGDEChw4dAgAEBQWhf//+AIBPP/0U06ZNy7cMBw8ehIODA1q2bIny5cvD398fZ86cUZuUkpiYiH79+iE8PBw9evTA5MmTUaJECYwdO1YZEInJo4unT59i+fLlGDt2LPr166cs27BhwyCTyfDZZ5/hq6++Qt26dbFz507MmTNHdHkbN26Mt956S+11nJqaihMnTqBTp06wtbXVucyiCSI1atRI2Lhxo9bH161bJzRt2lTs6Uzur7/+sopzkv5YL5aLdaOZUZ+XGzsF4bvygjCz5Jt/35XPSf9Pamqq8a6vwfTp0wVfX1/h5cuXyrS4uDjBx8dHWLhwoSAIghAeHi7UrFlTOHXqlMqx27dvF2rWrCkcOXJEEARBOH/+vFCzZk1hz549giAIQkxMjFCzZk1h6dKlgiAIwu3bt4WaNWsK3333ncp5vvzyS5V8169fF2rWrCls375dJd+pU6eEmjVrCuvXr1emDRo0SGjbtq1KvrZt2wqDBg0SBEEQ5HK50KpVK6F169bC69evlXmSkpKEli1bCi1bthQyMjKUx/n4+AhRUVHKfM+fPxd8fHyECRMmFFg3x48fF5o2bSrUrFlT+S8gIECYMGGCcP/+fZW8gwYNEtq3by+kpKQo0+RyufDhhx8KzZo1E9LT0wVBEIQ9e/YINWvWFM6fP5/vtaOjo4WaNWsKI0eOVKatXbtWqFmzprBmzRqVvHPnzhVq1qwpXL58WZmWlpYmtG/fXujdu7foPIp6yytvuuJvxetCYfjw4ULbtm2V96rQr18/QSqVii5vamqqMHv2bKFWrVrC8+fPlXkOHDgg1KxZU7h+/Xo+z5y493x+eUS3vAmCkO+0Y0EQkJaWZpCAkoiIDOToLEAuU02Ty3LSzUTRdZq7Berw4cMQBEHZZdqlSxecO3cOLVq0UOZRtCgBOS0cYii6BAcMGKCSPmTIEJW//f39cenSJfTq1UuZlpWVhezsbAA5y2GI9ddffyEuLg4DBw6Eq6urMr1kyZIYNGgQnj17prKkRtWqVVV6tMqWLYsyZcrg33//LfBabdq0wfHjx7Fo0SK89957KFu2LFJTU3Hw4EG89957uHjxIgAgISEBFy9eROvWrZGWlob4+HjEx8fj1atXCAoKwr///oubN2+KvkcgZ6ICAJXWR8XEib1796rkPXHiBGrXro369esr0xwdHbF69WosXbpUdB5d5X79AMCqVauwZ88elVbJhIQEuLq6qrymxJSlW7duyM7OxpEjR5R5wsPD4eXlBX9//0KVVyzRs039/f2xc+dODBgwACVLllR5LCUlBbt37zZ6Ya1N2LVYzDtyB08SZajo4YRJHX3QU+pp7mIRUXGSpHmZJ63pJtCwYUNUrFgRERER6Nu3L4CcL73atWujevXqynwSiQSrV6/GtWvXEB0djejoaMjlcgBQBlUFiY2NBQB4eXmppFerVk0tr52dHXbs2IGLFy/i0aNHiI6OVjZKCIIg+v4US2tVrVpV7THFdZ88eQKpVAogZ3mTvBwcHETfo6OjI7p06YIuXboAAP7880+sX78eBw8exMyZM3H48GFlt++WLVuwZcsWjefJPZ5djPDwcEgkEvj4+CjvWSKRwNvbG3fv3sUff/yBunXrAsipB03j53I/R2Ly6Crv5gG2traIiYnBkiVLcPfuXURHR+PZs2dqxxVUFplMhoCAAHh5eSEiIgKDBg3C69evld2yxiY6eBs7diwGDRqEbt26oXv37qhSpQokEgmio6MRHh6OFy9eqPQXF3dh12IxNfQmZPKcAYuxiTJMDc35VcMAjohMxr0SkKRhMpl7JdOX5T8SiQRdu3bFhg0bkJiYiOTkZPzxxx/KgfJAzpdn//79kZqaihYtWqBLly7w9fWFIAgYM2aMTtcCgPT0dJXWlryB0atXrzBgwADExMSgefPmCAwMRK1ateDp6akMMMXKL9BTPGZvb69Ms7HRfbOj1NRUrFq1CrVr11ZZJgQAateujQULFuDVq1c4deoUEhISlIPnBw4cqHVZk3feeUf09f/66y/cvXsXANC7d2+NeUJDQ5XBW1ZWlrIutBGTJ79jNck77mzHjh2YOXMmqlatigYNGqBDhw7w9/fHli1blC2JupSlW7duWLVqFZ4/f44zZ84gIyMD3bp1K9Q96EKnlrcNGzbgxx9/xPr161VenLVq1cKcOXOUvyIImHfkjjJwU5DJszDvyB0Gb0RkOu1mAAc+U+06tXfKSTejHj16YM2aNTh+/Dji4+Nha2uLrl27Kh//6aef8PLlSxw+fBje3t7K9NxfsGIoWtwePnwIPz8/ZXre1RE2b96Me/fuYePGjWjatKky/erVqzpdDwA8PXM+4+/fv6/22IMHDwAAb7/9ts7nzc3R0RHr1q2DVCpVC94U3nnnHZw+fRolSpRQlsnW1hbNmjVTyXf37l08fvxYp0WGFfUQHByMgIAAlccyMjIwadIkHDp0CNOmTYODgwMqVqyI6OhotfPs3bsXV65cwYwZM0TlUQS6GRkZKsG4mC7m9PR0hISEoHHjxli/fj3s7N6EQEuWLFHJW1BZFBNfunfvjpUrV+LEiRM4efIkfHx8UKNGjQLLoi+dwv0GDRpg9+7d+P3337F7927s3LkTp06dQlhYmKhVmIuTJ4kyndKJiIyibj+g+1LA3QuAJOe/3ZfmpJtRzZo14ePjgxMnTuD48eNo2rQpypYtq3w8MTERTk5OqFixojItIyMDO3bsAKC9pSWvdu3awdbWFhs2bFBJz7vEQ2JiIgDV1idBELB161YAOcuNKNjY2OTbpVm7dm2ULVsW27dvV5kVm5ycjF9++QVly5bVexcCW1tbdOnSBRcvXsS+ffvUHk9MTMSRI0fQrFkzODk5oVy5cqhTpw727t2r0k0ol8sxbdo0fPbZZ8p7VARI2u5REAQcOnQILi4uGD16NNq3b6/yr0uXLggMDERSUpJylmirVq1w8+ZNlbF+crkc69atw61bt+Dg4CAqj+I1EhUVpcwTFxenXPMuP2lpaZDJZPD29lYJ3KKiopRjAxXPQUFlUbScVq9eHe+++y4iIyNx7tw5k7S6ATq0vAE5ffS//PILgoODlb9g1qxZg/j4eHzyySfcmD6Xih5OiNUQqFX0MO32KUREqNvP7MGaJj169MCKFSuQlpaGH374QeWxVq1a4dixYxg5ciQ6deqE169fIywsTNkaInYCQeXKlfHxxx9j7dq1SE1NRcuWLXHlyhWcPXtW7XpbtmzByJEj0adPH8jlchw+fBi3bt2CjY2NyvVKly6NS5cuYcOGDahXr57aeG97e3t8/fXX+Pzzz9G7d2/lvt+//vornj9/jqVLlxaqqzSvKVOm4I8//sDkyZOxf/9+tGzZEq6uroiOjkZoaCjkcjlmzHjTwjp9+nR89NFH6N27Nz744AN4eHggPDwcN27cwMSJE1GqVCnl/QHA9u3b8e+//6J79+4q17148SLi4uLQt29fODs7ayzbgAED8NtvvyE0NBRdunTByJEjERERgY8++giDBg1CuXLlEB4ejnv37mHdunUAICpP586dsWrVKowfPx5Dhw5Feno6tm3bhvLly+Phw4f5Pl/u7u7w9/dHaGgoXF1dUbVqVfzzzz/YvXu3sj5SUlLg7u4uqiwK3bp1w9y5c5XDAUyBi/QayaSOPnCyV+1rd7K3xaSOxttvj4jImnTr1g0ymQwODg5q66UNGDAAEyZMQExMDL777jts27YNNWrUwP79+1GqVCmcP39e9HUmTZqEadOm4f79+wgJCUFsbCxWr16tkqdVq1b47rvvIJPJEBISgrVr18LDwwM7d+6Er68vLly4oMz7ySefwNvbGwsWLMCePXs0XrNjx45Yv349ypUrh+XLl2PVqlWoVKkSNm/ebLCttEqXLo3Q0FD83//9HxITE7F8+XJ88803OHjwIDp06IADBw6odDlLpVJs374dderUwYYNGzBv3jzl/Y4YMUKZr2nTpujcuTNOnjyJ2bNnq600oegy1TbWDQCaNWsGb29vnD17Fs+ePUOZMmWwa9cutG3bFjt27MD8+fMhCALWr1+v7MYVk6dWrVpYvHgxXFxcMHfuXOzatQvBwcHo10/cj5MlS5YgMDAQe/bswQ8//ICzZ89ixIgRynVqFa8rMWVR6NatG2xsbBAQEKDsnjY2iSByCs3IkSPxzz//YP369SovBiBn7MBHH30EPz8/tX5jSxEVFQVfX1+TnpOzTc3DGHVNhsG60czcz4tMJjP5puokDuvGMuWul+fPn6N169b4+uuvRe8jK+Y9n18e0d2m169fx+jRo9UCNyBnQOigQYOwdu1asacrFnpKPRmsERERFWG7du2Cg4ODybpMAR2CNy7SS0RERJRjwYIF+Oeff3Dy5EkMHDgQ7u7uJru26DFvikV6827cCnCRXiIiIipeUlNTcf78ebRv3x4TJkww6bUNtkjv8+fPuUgvERERFQtff/01vv76a7Nc22CL9IaEhHCRXiIiIiIj02mdN8UivfHx8YiNjUV2djYqVKgAANi/fz9mzZqFgwcPGqWgRERERKRj8KZQunRpuLm54ejRo1ixYgV+//13ZGZmqu0hRkRE4giCUOh9HYnIeohcoS1fOgdvt27dwt69e3Hw4EG8evUKgiCgTJky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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "set_style(\"whitegrid\")\n",
    "\n",
    "plt.figure(figsize = (10,6))\n",
    "\n",
    "plt.scatter(range(1,101), history_dict['accuracy'], label = \"Training Accuracy\")\n",
    "plt.scatter(range(1,101), history_dict['val_accuracy'], label = \"Validation Set Accuracy\")\n",
    "\n",
    "plt.xlabel(\"Epoch\", fontsize=18)\n",
    "plt.ylabel(\"Accuracy\", fontsize=18)\n",
    "\n",
    "plt.xticks(fontsize=16)\n",
    "plt.yticks(fontsize=16)\n",
    "\n",
    "plt.legend(fontsize=18)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6))\n",
    "\n",
    "plt.scatter(range(1,101), history_dict['loss'], label = \"Training Loss\")\n",
    "plt.scatter(range(1,101), history_dict['val_loss'], label = \"Validation Set Loss\")\n",
    "\n",
    "plt.xlabel(\"Epoch\", fontsize=18)\n",
    "plt.ylabel(\"Loss Function Value\", fontsize=18)\n",
    "\n",
    "plt.xticks(fontsize=16)\n",
    "plt.yticks(fontsize=16)\n",
    "\n",
    "plt.legend(fontsize=18)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [],
   "source": [
    "fpr,tpr,thresholds=roc_curve(y_test,model.predict(X_test)[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6))\n",
    "\n",
    "plt.scatter(fpr, tpr ,label = \"ROC curve\")\n",
    "\n",
    "plt.xlabel(\"fpr\", fontsize=18)\n",
    "plt.ylabel(\"tpr\", fontsize=18)\n",
    "\n",
    "plt.xticks(fontsize=16)\n",
    "plt.yticks(fontsize=16)\n",
    "\n",
    "plt.legend(fontsize=18)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DNN for fft data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_19\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_77 (Dense)             (None, 256)               1920256   \n",
      "_________________________________________________________________\n",
      "dense_78 (Dense)             (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_79 (Dense)             (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_80 (Dense)             (None, 2)                 514       \n",
      "=================================================================\n",
      "Total params: 2,052,354\n",
      "Trainable params: 2,052,354\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model_fft = models.Sequential()\n",
    "model_fft.add(layers.Dense(256, activation='relu', input_shape=(7500,)))\n",
    "model_fft.add(layers.Dense(256, activation='relu'))\n",
    "model_fft.add(layers.Dense(256, activation='relu'))\n",
    "model_fft.add(layers.Dense(2, activation='softmax'))\n",
    "model_fft.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we compile the network like so\n",
    "model_fft.compile(optimizer='adam',\n",
    "                  loss='categorical_crossentropy',\n",
    "                  metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "3/3 [==============================] - 1s 274ms/step - loss: 323.5108 - accuracy: 0.5140 - val_loss: 379.1971 - val_accuracy: 0.3886\n",
      "Epoch 2/100\n",
      "3/3 [==============================] - 0s 181ms/step - loss: 370.6931 - accuracy: 0.4940 - val_loss: 99.1074 - val_accuracy: 0.6137\n",
      "Epoch 3/100\n",
      "3/3 [==============================] - 0s 126ms/step - loss: 203.1605 - accuracy: 0.5249 - val_loss: 29.0170 - val_accuracy: 0.6825\n",
      "Epoch 4/100\n",
      "3/3 [==============================] - 0s 122ms/step - loss: 68.2622 - accuracy: 0.6373 - val_loss: 175.6203 - val_accuracy: 0.3886\n",
      "Epoch 5/100\n",
      "3/3 [==============================] - 0s 153ms/step - loss: 148.2943 - accuracy: 0.4046 - val_loss: 81.5097 - val_accuracy: 0.6137\n",
      "Epoch 6/100\n",
      "3/3 [==============================] - 0s 186ms/step - loss: 57.9072 - accuracy: 0.6398 - val_loss: 73.8958 - val_accuracy: 0.3934\n",
      "Epoch 7/100\n",
      "3/3 [==============================] - 0s 122ms/step - loss: 65.4854 - accuracy: 0.4901 - val_loss: 40.6952 - val_accuracy: 0.6540\n",
      "Epoch 8/100\n",
      "3/3 [==============================] - 0s 143ms/step - loss: 36.4073 - accuracy: 0.6072 - val_loss: 23.1022 - val_accuracy: 0.7133\n",
      "Epoch 9/100\n",
      "3/3 [==============================] - 0s 178ms/step - loss: 26.3492 - accuracy: 0.7054 - val_loss: 40.5988 - val_accuracy: 0.4313\n",
      "Epoch 10/100\n",
      "3/3 [==============================] - 0s 152ms/step - loss: 32.5370 - accuracy: 0.5210 - val_loss: 32.6041 - val_accuracy: 0.6635\n",
      "Epoch 11/100\n",
      "3/3 [==============================] - 0s 152ms/step - loss: 25.9783 - accuracy: 0.6728 - val_loss: 9.1900 - val_accuracy: 0.7275\n",
      "Epoch 12/100\n",
      "3/3 [==============================] - 1s 225ms/step - loss: 14.9013 - accuracy: 0.7028 - val_loss: 9.7619 - val_accuracy: 0.7654\n",
      "Epoch 13/100\n",
      "3/3 [==============================] - 0s 182ms/step - loss: 15.3855 - accuracy: 0.6879 - val_loss: 13.5203 - val_accuracy: 0.7441\n",
      "Epoch 14/100\n",
      "3/3 [==============================] - 0s 138ms/step - loss: 14.9676 - accuracy: 0.7378 - val_loss: 11.6325 - val_accuracy: 0.6185\n",
      "Epoch 15/100\n",
      "3/3 [==============================] - 0s 146ms/step - loss: 10.7157 - accuracy: 0.6347 - val_loss: 13.1129 - val_accuracy: 0.7133\n",
      "Epoch 16/100\n",
      "3/3 [==============================] - 1s 250ms/step - loss: 9.4280 - accuracy: 0.7263 - val_loss: 6.2801 - val_accuracy: 0.7346\n",
      "Epoch 17/100\n",
      "3/3 [==============================] - 1s 203ms/step - loss: 6.3996 - accuracy: 0.7700 - val_loss: 5.9030 - val_accuracy: 0.7536\n",
      "Epoch 18/100\n",
      "3/3 [==============================] - 0s 191ms/step - loss: 6.1087 - accuracy: 0.7320 - val_loss: 6.8464 - val_accuracy: 0.7773\n",
      "Epoch 19/100\n",
      "3/3 [==============================] - 0s 169ms/step - loss: 5.0864 - accuracy: 0.8029 - val_loss: 6.8025 - val_accuracy: 0.6469\n",
      "Epoch 20/100\n",
      "3/3 [==============================] - 0s 199ms/step - loss: 4.8049 - accuracy: 0.7018 - val_loss: 4.1803 - val_accuracy: 0.7488\n",
      "Epoch 21/100\n",
      "3/3 [==============================] - 0s 199ms/step - loss: 2.9773 - accuracy: 0.7586 - val_loss: 4.4737 - val_accuracy: 0.7607\n",
      "Epoch 22/100\n",
      "3/3 [==============================] - 0s 180ms/step - loss: 2.6376 - accuracy: 0.8037 - val_loss: 4.1319 - val_accuracy: 0.7725\n",
      "Epoch 23/100\n",
      "3/3 [==============================] - 1s 236ms/step - loss: 2.5012 - accuracy: 0.8151 - val_loss: 4.4713 - val_accuracy: 0.7180\n",
      "Epoch 24/100\n",
      "3/3 [==============================] - 0s 177ms/step - loss: 2.5449 - accuracy: 0.7855 - val_loss: 4.0474 - val_accuracy: 0.6967\n",
      "Epoch 25/100\n",
      "3/3 [==============================] - 1s 214ms/step - loss: 2.0026 - accuracy: 0.7957 - val_loss: 4.2487 - val_accuracy: 0.6659\n",
      "Epoch 26/100\n",
      "3/3 [==============================] - 1s 213ms/step - loss: 1.7932 - accuracy: 0.7868 - val_loss: 3.5893 - val_accuracy: 0.7322\n",
      "Epoch 27/100\n",
      "3/3 [==============================] - 1s 214ms/step - loss: 1.4730 - accuracy: 0.8232 - val_loss: 4.1911 - val_accuracy: 0.7749\n",
      "Epoch 28/100\n",
      "3/3 [==============================] - 1s 229ms/step - loss: 1.8753 - accuracy: 0.8200 - val_loss: 4.0598 - val_accuracy: 0.7678\n",
      "Epoch 29/100\n",
      "3/3 [==============================] - 1s 231ms/step - loss: 1.4805 - accuracy: 0.8496 - val_loss: 3.4804 - val_accuracy: 0.7725\n",
      "Epoch 30/100\n",
      "3/3 [==============================] - 1s 223ms/step - loss: 1.1883 - accuracy: 0.8468 - val_loss: 5.2024 - val_accuracy: 0.7512\n",
      "Epoch 31/100\n",
      "3/3 [==============================] - 1s 220ms/step - loss: 2.4175 - accuracy: 0.8071 - val_loss: 3.4513 - val_accuracy: 0.7630\n",
      "Epoch 32/100\n",
      "3/3 [==============================] - 1s 228ms/step - loss: 1.3304 - accuracy: 0.8785 - val_loss: 4.7268 - val_accuracy: 0.6706\n",
      "Epoch 33/100\n",
      "3/3 [==============================] - 1s 240ms/step - loss: 1.5739 - accuracy: 0.8175 - val_loss: 3.4947 - val_accuracy: 0.7156\n",
      "Epoch 34/100\n",
      "3/3 [==============================] - 1s 229ms/step - loss: 1.1133 - accuracy: 0.8473 - val_loss: 3.0268 - val_accuracy: 0.7464\n",
      "Epoch 35/100\n",
      "3/3 [==============================] - 0s 182ms/step - loss: 1.2627 - accuracy: 0.8379 - val_loss: 5.0586 - val_accuracy: 0.7536\n",
      "Epoch 36/100\n",
      "3/3 [==============================] - 1s 212ms/step - loss: 1.7672 - accuracy: 0.8109 - val_loss: 3.7791 - val_accuracy: 0.7891\n",
      "Epoch 37/100\n",
      "3/3 [==============================] - 1s 201ms/step - loss: 0.8419 - accuracy: 0.8951 - val_loss: 3.3435 - val_accuracy: 0.7370\n",
      "Epoch 38/100\n",
      "3/3 [==============================] - 1s 201ms/step - loss: 0.5587 - accuracy: 0.9119 - val_loss: 3.1845 - val_accuracy: 0.7322\n",
      "Epoch 39/100\n",
      "3/3 [==============================] - 1s 243ms/step - loss: 0.4399 - accuracy: 0.9153 - val_loss: 3.2412 - val_accuracy: 0.7227\n",
      "Epoch 40/100\n",
      "3/3 [==============================] - 1s 199ms/step - loss: 0.4906 - accuracy: 0.9103 - val_loss: 3.3044 - val_accuracy: 0.7180\n",
      "Epoch 41/100\n",
      "3/3 [==============================] - 1s 215ms/step - loss: 0.4047 - accuracy: 0.9178 - val_loss: 3.1979 - val_accuracy: 0.7678\n",
      "Epoch 42/100\n",
      "3/3 [==============================] - 1s 214ms/step - loss: 0.3627 - accuracy: 0.9367 - val_loss: 3.1555 - val_accuracy: 0.7488\n",
      "Epoch 43/100\n",
      "3/3 [==============================] - 1s 200ms/step - loss: 0.2807 - accuracy: 0.9426 - val_loss: 3.1864 - val_accuracy: 0.7583\n",
      "Epoch 44/100\n",
      "3/3 [==============================] - 1s 204ms/step - loss: 0.2584 - accuracy: 0.9515 - val_loss: 3.1307 - val_accuracy: 0.7251\n",
      "Epoch 45/100\n",
      "3/3 [==============================] - 1s 235ms/step - loss: 0.2408 - accuracy: 0.9368 - val_loss: 2.9624 - val_accuracy: 0.7512\n",
      "Epoch 46/100\n",
      "3/3 [==============================] - 1s 204ms/step - loss: 0.1493 - accuracy: 0.9572 - val_loss: 3.1834 - val_accuracy: 0.7654\n",
      "Epoch 47/100\n",
      "3/3 [==============================] - 1s 201ms/step - loss: 0.2049 - accuracy: 0.9523 - val_loss: 3.1446 - val_accuracy: 0.7370\n",
      "Epoch 48/100\n",
      "3/3 [==============================] - 1s 226ms/step - loss: 0.1337 - accuracy: 0.9585 - val_loss: 3.2293 - val_accuracy: 0.7630\n",
      "Epoch 49/100\n",
      "3/3 [==============================] - 1s 203ms/step - loss: 0.1437 - accuracy: 0.9588 - val_loss: 3.0202 - val_accuracy: 0.7559\n",
      "Epoch 50/100\n",
      "3/3 [==============================] - 1s 221ms/step - loss: 0.0925 - accuracy: 0.9750 - val_loss: 2.9584 - val_accuracy: 0.7725\n",
      "Epoch 51/100\n",
      "3/3 [==============================] - 1s 179ms/step - loss: 0.1029 - accuracy: 0.9705 - val_loss: 3.3142 - val_accuracy: 0.7607\n",
      "Epoch 52/100\n",
      "3/3 [==============================] - 1s 223ms/step - loss: 0.2186 - accuracy: 0.9445 - val_loss: 3.9986 - val_accuracy: 0.7583\n",
      "Epoch 53/100\n",
      "3/3 [==============================] - 0s 145ms/step - loss: 0.5246 - accuracy: 0.8998 - val_loss: 3.8606 - val_accuracy: 0.7583\n",
      "Epoch 54/100\n",
      "3/3 [==============================] - 1s 251ms/step - loss: 0.4555 - accuracy: 0.9075 - val_loss: 3.0438 - val_accuracy: 0.7725\n",
      "Epoch 55/100\n",
      "3/3 [==============================] - 1s 247ms/step - loss: 0.1544 - accuracy: 0.9699 - val_loss: 3.8247 - val_accuracy: 0.6919\n",
      "Epoch 56/100\n",
      "3/3 [==============================] - 1s 190ms/step - loss: 0.3494 - accuracy: 0.9103 - val_loss: 3.3609 - val_accuracy: 0.7156\n",
      "Epoch 57/100\n",
      "3/3 [==============================] - 0s 172ms/step - loss: 0.2194 - accuracy: 0.9407 - val_loss: 3.6085 - val_accuracy: 0.7678\n",
      "Epoch 58/100\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3/3 [==============================] - 0s 170ms/step - loss: 0.2931 - accuracy: 0.9198 - val_loss: 4.2264 - val_accuracy: 0.7607\n",
      "Epoch 59/100\n",
      "3/3 [==============================] - 0s 169ms/step - loss: 0.4746 - accuracy: 0.9043 - val_loss: 3.7431 - val_accuracy: 0.6967\n",
      "Epoch 60/100\n",
      "3/3 [==============================] - 0s 180ms/step - loss: 0.3227 - accuracy: 0.9072 - val_loss: 3.4211 - val_accuracy: 0.7156\n",
      "Epoch 61/100\n",
      "3/3 [==============================] - 0s 203ms/step - loss: 0.3821 - accuracy: 0.9153 - val_loss: 4.1695 - val_accuracy: 0.7607\n",
      "Epoch 62/100\n",
      "3/3 [==============================] - 1s 221ms/step - loss: 1.0657 - accuracy: 0.8089 - val_loss: 5.9234 - val_accuracy: 0.7393\n",
      "Epoch 63/100\n",
      "3/3 [==============================] - 0s 163ms/step - loss: 1.8602 - accuracy: 0.8021 - val_loss: 4.8653 - val_accuracy: 0.7583\n",
      "Epoch 64/100\n",
      "3/3 [==============================] - 1s 242ms/step - loss: 1.0073 - accuracy: 0.8722 - val_loss: 3.7316 - val_accuracy: 0.7773\n",
      "Epoch 65/100\n",
      "3/3 [==============================] - 1s 233ms/step - loss: 0.5734 - accuracy: 0.9147 - val_loss: 6.4914 - val_accuracy: 0.5948\n",
      "Epoch 66/100\n",
      "3/3 [==============================] - 1s 265ms/step - loss: 2.1370 - accuracy: 0.7497 - val_loss: 6.1624 - val_accuracy: 0.6825\n",
      "Epoch 67/100\n",
      "3/3 [==============================] - 1s 267ms/step - loss: 1.4737 - accuracy: 0.8502 - val_loss: 4.5466 - val_accuracy: 0.7867\n",
      "Epoch 68/100\n",
      "3/3 [==============================] - 1s 257ms/step - loss: 0.7716 - accuracy: 0.9045 - val_loss: 6.3288 - val_accuracy: 0.7512\n",
      "Epoch 69/100\n",
      "3/3 [==============================] - 1s 283ms/step - loss: 2.1650 - accuracy: 0.8333 - val_loss: 5.4946 - val_accuracy: 0.6848\n",
      "Epoch 70/100\n",
      "3/3 [==============================] - 1s 257ms/step - loss: 1.4784 - accuracy: 0.8435 - val_loss: 3.6433 - val_accuracy: 0.7867\n",
      "Epoch 71/100\n",
      "3/3 [==============================] - 1s 285ms/step - loss: 1.8253 - accuracy: 0.8449 - val_loss: 7.8520 - val_accuracy: 0.7204\n",
      "Epoch 72/100\n",
      "3/3 [==============================] - 1s 253ms/step - loss: 2.3706 - accuracy: 0.8260 - val_loss: 9.0336 - val_accuracy: 0.7299\n",
      "Epoch 73/100\n",
      "3/3 [==============================] - 1s 282ms/step - loss: 5.2879 - accuracy: 0.7676 - val_loss: 16.8064 - val_accuracy: 0.5071\n",
      "Epoch 74/100\n",
      "3/3 [==============================] - 1s 238ms/step - loss: 8.3229 - accuracy: 0.6959 - val_loss: 7.1234 - val_accuracy: 0.7725\n",
      "Epoch 75/100\n",
      "3/3 [==============================] - 1s 258ms/step - loss: 2.4902 - accuracy: 0.8271 - val_loss: 5.4197 - val_accuracy: 0.7820\n",
      "Epoch 76/100\n",
      "3/3 [==============================] - 1s 277ms/step - loss: 2.1971 - accuracy: 0.8545 - val_loss: 5.7583 - val_accuracy: 0.7062\n",
      "Epoch 77/100\n",
      "3/3 [==============================] - 1s 203ms/step - loss: 1.4035 - accuracy: 0.8542 - val_loss: 5.4418 - val_accuracy: 0.7630\n",
      "Epoch 78/100\n",
      "3/3 [==============================] - 1s 232ms/step - loss: 0.7602 - accuracy: 0.9063 - val_loss: 4.3786 - val_accuracy: 0.7062\n",
      "Epoch 79/100\n",
      "3/3 [==============================] - 0s 194ms/step - loss: 0.4969 - accuracy: 0.9186 - val_loss: 4.2892 - val_accuracy: 0.7749\n",
      "Epoch 80/100\n",
      "3/3 [==============================] - 0s 190ms/step - loss: 0.2644 - accuracy: 0.9556 - val_loss: 4.1971 - val_accuracy: 0.7630\n",
      "Epoch 81/100\n",
      "3/3 [==============================] - 1s 259ms/step - loss: 0.2202 - accuracy: 0.9691 - val_loss: 4.0625 - val_accuracy: 0.7986\n",
      "Epoch 82/100\n",
      "3/3 [==============================] - 0s 192ms/step - loss: 0.1383 - accuracy: 0.9700 - val_loss: 4.1330 - val_accuracy: 0.7346\n",
      "Epoch 83/100\n",
      "3/3 [==============================] - 0s 187ms/step - loss: 0.1175 - accuracy: 0.9747 - val_loss: 3.7406 - val_accuracy: 0.7749\n",
      "Epoch 84/100\n",
      "3/3 [==============================] - 1s 233ms/step - loss: 0.1076 - accuracy: 0.9758 - val_loss: 3.6174 - val_accuracy: 0.7725\n",
      "Epoch 85/100\n",
      "3/3 [==============================] - 1s 189ms/step - loss: 0.0623 - accuracy: 0.9852 - val_loss: 3.8262 - val_accuracy: 0.7441\n",
      "Epoch 86/100\n",
      "3/3 [==============================] - 0s 138ms/step - loss: 0.0436 - accuracy: 0.9872 - val_loss: 4.0131 - val_accuracy: 0.7749\n",
      "Epoch 87/100\n",
      "3/3 [==============================] - 0s 191ms/step - loss: 0.0951 - accuracy: 0.9809 - val_loss: 3.6759 - val_accuracy: 0.7441\n",
      "Epoch 88/100\n",
      "3/3 [==============================] - 0s 186ms/step - loss: 0.0124 - accuracy: 0.9950 - val_loss: 3.8238 - val_accuracy: 0.7322\n",
      "Epoch 89/100\n",
      "3/3 [==============================] - 1s 244ms/step - loss: 0.0235 - accuracy: 0.9882 - val_loss: 3.5288 - val_accuracy: 0.7583\n",
      "Epoch 90/100\n",
      "3/3 [==============================] - 1s 246ms/step - loss: 0.0037 - accuracy: 0.9984 - val_loss: 3.5886 - val_accuracy: 0.7678\n",
      "Epoch 91/100\n",
      "3/3 [==============================] - 1s 207ms/step - loss: 0.0079 - accuracy: 0.9950 - val_loss: 3.4977 - val_accuracy: 0.7607\n",
      "Epoch 92/100\n",
      "3/3 [==============================] - 1s 212ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 3.4403 - val_accuracy: 0.7488\n",
      "Epoch 93/100\n",
      "3/3 [==============================] - 1s 222ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 3.4378 - val_accuracy: 0.7417\n",
      "Epoch 94/100\n",
      "3/3 [==============================] - 1s 271ms/step - loss: 4.5728e-04 - accuracy: 1.0000 - val_loss: 3.4083 - val_accuracy: 0.7488\n",
      "Epoch 95/100\n",
      "3/3 [==============================] - 1s 238ms/step - loss: 1.7954e-04 - accuracy: 1.0000 - val_loss: 3.3855 - val_accuracy: 0.7512\n",
      "Epoch 96/100\n",
      "3/3 [==============================] - 1s 215ms/step - loss: 1.3999e-04 - accuracy: 1.0000 - val_loss: 3.3713 - val_accuracy: 0.7559\n",
      "Epoch 97/100\n",
      "3/3 [==============================] - 1s 232ms/step - loss: 1.6237e-04 - accuracy: 1.0000 - val_loss: 3.3645 - val_accuracy: 0.7536\n",
      "Epoch 98/100\n",
      "3/3 [==============================] - 1s 239ms/step - loss: 1.7204e-04 - accuracy: 1.0000 - val_loss: 3.3619 - val_accuracy: 0.7536\n",
      "Epoch 99/100\n",
      "3/3 [==============================] - 1s 232ms/step - loss: 1.6825e-04 - accuracy: 1.0000 - val_loss: 3.3625 - val_accuracy: 0.7536\n",
      "Epoch 100/100\n",
      "3/3 [==============================] - 1s 256ms/step - loss: 1.8049e-04 - accuracy: 1.0000 - val_loss: 3.3647 - val_accuracy: 0.7512\n"
     ]
    }
   ],
   "source": [
    "## I now fit the model, and store the training history\n",
    "## I use 100 epochs and a batch_size of 512\n",
    "history_fft = model_fft.fit(X_fft_train,\n",
    "                        to_categorical(y_fft_train),\n",
    "                        epochs = 100,\n",
    "                        batch_size = 400,\n",
    "                        validation_data=(X_fft_test,to_categorical(y_fft_test)))\n",
    "history_fft_dict = history_fft.history"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Naive Bayes Gaussian"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Naive Bayes Gaussian"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}