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

Download this file

2139 lines (2138 with data), 285.7 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "quit()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sn\n",
    "\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, confusion_matrix"
   ]
  },
  {
   "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": 21,
   "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": 184,
   "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": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "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": 185,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_fft.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "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",
    "X = X[:,-1940:]\n",
    "X_fft = X_fft[:,-1940:]\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": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7328571428571429\n",
      "0.897196261682243\n",
      "0.5378151260504201\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "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))\n",
    "\n",
    "\n",
    "confmat = confusion_matrix(y_test,y_pred)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"kNN time-series\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "plt.savefig(\"Long_lead_kNN time-series\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.79\n",
      "0.8409090909090909\n",
      "0.7254901960784313\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors = 3)\n",
    "knn.fit(X_fft_train,y_fft_train)\n",
    "y_fft_pred = knn.predict(X_fft_test)\n",
    "print( accuracy_score(y_fft_test,y_fft_pred))\n",
    "print( precision_score(y_fft_test,y_fft_pred))\n",
    "print( recall_score(y_fft_test,y_fft_pred))\n",
    "\n",
    "confmat = confusion_matrix(y_fft_test,y_fft_pred)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"kNN time-series-fft\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "\n",
    "plt.savefig(\"Long_lead_kNN time-series-fft\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Random Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8342857142857143\n",
      "0.8247978436657682\n",
      "0.8571428571428571\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "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))\n",
    "\n",
    "confmat = confusion_matrix(y_test,y_pred)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"Random Forset time-series\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "plt.savefig(\"Long_lead_Random Forset time-series\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8571428571428571\n",
      "0.8724637681159421\n",
      "0.8431372549019608\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQwAAAD1CAYAAAClZsv2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAklElEQVR4nO3de1xUdf748dcwMEhcctWylEVFRc1EMdSvIpQXwoe39YYoRhqKeVvDO6hohbfUzEuK6VYatoGplV3WzTTT1FzXXa+7aBHeEe/CIDLAfH5/+HNWK+FgM84MvJ89zuMxl8Nn3nOkN+/P53PO5+iUUgohhNDAxd4BCCGchyQMIYRmkjCEEJpJwhBCaCYJQwihmSQMIYRmrvYO4Pdo1KgRAQEBuLi4oNPpKCgowMvLi1dffZVmzZpZ5TO2bNnChx9+SGpqqlXau9umTZuYPXs2vr6+97w+duxYOnXqZPXPu9vbb79N48aN6dy586/ei42NZeHChVSrVo24uDimTJlCgwYNbBrPg5o2bRrdunWjXbt2v7utkpISxowZw88//0xMTAw//vgju3btokePHvj6+mIymRg0aJAVonZeTp0wANauXUu1atUsz999911mzZpFenq6HaPSLjg4mHfeeeehf+6+ffvumwR2795tebx69eqHFdIDmT17ttXaysnJ4fvvv+fgwYPo9XoaN27Mjh07eOKJJ0hISKBhw4ZW+yxn5fQJ427FxcVkZ2fz6KOPAnD58mVmzJjBlStXuHTpErVr12bx4sVUr16djh070rt3b/bu3Ut2djZ/+tOfiI+PB2DJkiV8/vnnVK1alTp16ljaz8vL47XXXiMjIwOdTkdoaCjjx4/H1dWVZs2a8dJLL7Fnzx5u3rzJmDFj2LJlCydOnODxxx9n5cqVPPLII+X6PsuXL+fLL79Er9dTr149kpKSeOyxx4iJieHRRx/l559/ZuDAgdSsWZOUlBR0Oh16vZ7JkyfTqlUr8vLymD17NidOnKCoqIi2bdsyefJk0tPTOXr0KPPnz0ev1xMeHm75zMTERAAGDx7MqlWrGDRoEEuWLOHmzZssWrSIJ598kqysLDw8PBg+fDipqalkZWXx/PPPM3XqVAC2b99OSkoKRUVFVKlShSlTphAUFPSr75eZmcm0adMwmUwopejXr5/lL3hKSgpff/01ZrOZ2rVrM3PmTGrWrPmr7/71118zaNAgunTpwr/+9S8WLlxIQUEBLi4ujBkzhg4dOnDp0iWmTJnCtWvXAHj22Wct/9Z3GI1Ghg0bRnFxMX369OH69esopYiLi6NLly5s376d3bt3U6VKlcpdZSgnFhAQoLp37666d++uQkJCVMeOHVVycrK6fPmyUkqpNWvWqHfeeUcppZTZbFbDhg1T7777rlJKqQ4dOqh58+YppZS6cOGCatasmTp9+rTaunWr6tq1q8rLy1NFRUVq+PDh6oUXXlBKKTV58mSVnJyszGazKiwsVLGxsZb2AwIC1Nq1a5VSSr3zzjsqKChIXbhwQZWUlKjevXurzZs3/yr+jRs3qpYtW6qePXtatqSkJKWUUhs2bFBRUVEqPz9fKaXU0qVLVWxsrFJKqRdeeEElJiZa2unUqZP697//rZRSateuXWrZsmVKKaUSEhLUBx98oJRSqri4WE2cOFGtWrXK0sbf/va3+x7XK1euWI7T4cOH1Q8//KCaNGmijh07ppRSaujQoSoqKkoVFhaqK1euqKZNm6oLFy6orKws1b17d3X16lWllFInTpxQISEhlu9xt8TERMvxu3jxooqPj1clJSXqk08+UfHx8aqoqEgppVRaWpoaNmzYb373O9/j+vXr6vnnn1dnzpyx/JuGhYWpc+fOqbfffttyXPPz81V8fLzKzc39VTxnzpxRLVq0+M3jMGXKFPWXv/zlN49XZeL0FcadLsmxY8cYPnw4bdq0oXr16sDtv5L//Oc/ef/99zl58iQ//vgjzZs3t/zsnXGCmjVrUr16dW7cuMHevXsJDw/Hy8sLgL59+1rGL3bu3MlHH32ETqfDYDAwYMAA1q5dy/DhwwGIiIgAwM/Pj4CAAGrWrAmAr68vN27c+M3479cl2blzJ3369LFUJS+++CIrV67EZDJZfu6Obt26MWbMGJ599llCQkKIi4sDYMeOHRw5coQNGzYAcOvWrXIf37v5+vry1FNPWb6jt7c3BoOBatWq4enpyY0bN9i/fz8XL15kyJAhlp/T6XScPn2axo0b39NeeHg4U6ZM4fDhw7Rt25bp06fj4uLCt99+y5EjR+jbty8AZrOZgoKCe47ZLx08eJBLly4xevToez73+PHjhIaGMnz4cLKzs2nXrh0TJkzA29v7dx2LysrpE8YdTZs2JTExkYSEBJo0aYKvry8LFizg8OHD9O3blzZt2lBcXIy669IZd3d3y2OdTmd57+599Hq95bHZbEan093zvLi42PLczc3tNx8/iLI+6+7uzbhx4+jbty+7d+9m06ZNvPfee2zYsAGz2cySJUuoX78+ALm5ufe0WV4Gg+Ge566uv/71MZvNtG3blsWLF1tey87O5vHHHycuLo6LFy8C/xvY/fvf/86ePXvYu3cvy5cvZ9OmTZjNZoYNG0Z0dDQAJpPpnoT7W127kpIS6tevz8cff2x5LScnh2rVquHm5sa2bdvYu3cvP/zwA5GRkaxevZqPPvqIo0ePAjBgwABCQ0Mf+Ng4kpKSEqZPn05WVhZ6vZ65c+eilCIhIQGdTkfDhg2ZOXMmLi4urF+/nrS0NFxdXRk5ciQdOnQote0KNa3avXt3AgMDmTt3LgDff/89gwcPplevXlSvXp09e/ZQUlJSahthYWFs2bKF3NxczGYzn332meW99u3bs27dOpRSmEwm1q9fb5XR+d8SGhrKxo0buXnzJgCpqam0atXqV//TFhcX07FjRwoKChg4cCAzZ87k+PHjmEwm2rdvz5o1ayzxjhw5knXr1gG3E+HdCehupb1XlrZt27J7924yMzMB+O677+jZsye3bt1i9erVfPbZZ3z22Wd06tSJCRMm8NVXX9GtWzdmzpyJl5cXp0+fpn379mzYsAGj0QjcHlOaPHlyqZ/bokULTp06xf79+wH473//S0REBDk5OSxcuJAVK1bQuXNnpk2bRoMGDfjxxx+ZPXu2JZ6BAweW2v7vOSYP27fffgtAWloaY8eOZe7cucydO5f4+Hj++te/opRi27ZtXLp0idTUVNLS0nj33XdZtGiRpYK9nwpTYdyRlJREz5492bVrF6NHj2b+/PksWbIENzc3WrZsyenTp0v9+WeffZbjx4/Tt29ffHx8aNy4sWWwbPr06cyaNYsePXpQVFREaGgoI0aMsMn36NevH9nZ2URGRmI2m6lTpw4LFy781X6urq5MnTqViRMn4urqik6nY86cORgMBqZNm8bs2bMt8bZr145hw4YB0LFjRxYtWkRRURG9e/e+p80uXboQExPDsmXLyh13gwYNeP311xk/fjxKKVxdXUlJScHT0/NX+44aNYpp06aRnp6OXq+nc+fOtGrViuDgYHJycujfvz86nY4nn3ySefPmlfq51apVY+nSpcyf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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forest_clf = RandomForestClassifier()#n_estimators=1000,max_samples=800,max_depth = 100, random_state=614)\n",
    "\n",
    "forest_clf.fit(X_fft_train,y_fft_train)\n",
    "\n",
    "y_fft_pred = forest_clf.predict(X_fft_test)\n",
    "print( accuracy_score(y_fft_test,y_fft_pred))\n",
    "print( precision_score(y_fft_test,y_fft_pred))\n",
    "print( recall_score(y_fft_test,y_fft_pred))\n",
    "\n",
    "confmat = confusion_matrix(y_fft_test,y_fft_pred)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"Random Forset time-series-fft\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "plt.savefig(\"Long_lead_Random Forset time-series-fft\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "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": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = models.Sequential()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_12\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_59 (Dense)             (None, 16)                31056     \n",
      "_________________________________________________________________\n",
      "dense_60 (Dense)             (None, 32)                544       \n",
      "_________________________________________________________________\n",
      "dense_61 (Dense)             (None, 32)                1056      \n",
      "_________________________________________________________________\n",
      "dense_62 (Dense)             (None, 16)                528       \n",
      "_________________________________________________________________\n",
      "dense_63 (Dense)             (None, 2)                 34        \n",
      "=================================================================\n",
      "Total params: 33,218\n",
      "Trainable params: 33,218\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.add(layers.Dense(16, activation='relu', input_shape=(1940,)))\n",
    "model.add(layers.Dense(32, activation='relu'))\n",
    "model.add(layers.Dense(32, activation='relu'))\n",
    "model.add(layers.Dense(16, activation='relu'))\n",
    "model.add(layers.Dense(2, activation='softmax'))\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we compile the network like so\n",
    "model.compile(optimizer='adam',\n",
    "                  loss='categorical_crossentropy',\n",
    "                  metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "5/5 [==============================] - 1s 114ms/step - loss: 1.1524 - accuracy: 0.5129 - val_loss: 0.8466 - val_accuracy: 0.5643\n",
      "Epoch 2/100\n",
      "5/5 [==============================] - 0s 64ms/step - loss: 0.5970 - accuracy: 0.6788 - val_loss: 0.7218 - val_accuracy: 0.6057\n",
      "Epoch 3/100\n",
      "5/5 [==============================] - 0s 36ms/step - loss: 0.4807 - accuracy: 0.7614 - val_loss: 0.6756 - val_accuracy: 0.6471\n",
      "Epoch 4/100\n",
      "5/5 [==============================] - 0s 40ms/step - loss: 0.4000 - accuracy: 0.8287 - val_loss: 0.6494 - val_accuracy: 0.6643\n",
      "Epoch 5/100\n",
      "5/5 [==============================] - 0s 63ms/step - loss: 0.3483 - accuracy: 0.8691 - val_loss: 0.6351 - val_accuracy: 0.6943\n",
      "Epoch 6/100\n",
      "5/5 [==============================] - 0s 74ms/step - loss: 0.3060 - accuracy: 0.8963 - val_loss: 0.6325 - val_accuracy: 0.6871\n",
      "Epoch 7/100\n",
      "5/5 [==============================] - 0s 50ms/step - loss: 0.2705 - accuracy: 0.9037 - val_loss: 0.6375 - val_accuracy: 0.7071\n",
      "Epoch 8/100\n",
      "5/5 [==============================] - 0s 46ms/step - loss: 0.2400 - accuracy: 0.9240 - val_loss: 0.6421 - val_accuracy: 0.7143\n",
      "Epoch 9/100\n",
      "5/5 [==============================] - 0s 34ms/step - loss: 0.2062 - accuracy: 0.9424 - val_loss: 0.6499 - val_accuracy: 0.7314\n",
      "Epoch 10/100\n",
      "5/5 [==============================] - 0s 32ms/step - loss: 0.1836 - accuracy: 0.9634 - val_loss: 0.6660 - val_accuracy: 0.7586\n",
      "Epoch 11/100\n",
      "5/5 [==============================] - 0s 41ms/step - loss: 0.1672 - accuracy: 0.9677 - val_loss: 0.6738 - val_accuracy: 0.7557\n",
      "Epoch 12/100\n",
      "5/5 [==============================] - 0s 39ms/step - loss: 0.1453 - accuracy: 0.9760 - val_loss: 0.6778 - val_accuracy: 0.7529\n",
      "Epoch 13/100\n",
      "5/5 [==============================] - 0s 38ms/step - loss: 0.1296 - accuracy: 0.9805 - val_loss: 0.6859 - val_accuracy: 0.7514\n",
      "Epoch 14/100\n",
      "5/5 [==============================] - 0s 49ms/step - loss: 0.1162 - accuracy: 0.9810 - val_loss: 0.6978 - val_accuracy: 0.7557\n",
      "Epoch 15/100\n",
      "5/5 [==============================] - 0s 44ms/step - loss: 0.0998 - accuracy: 0.9861 - val_loss: 0.7118 - val_accuracy: 0.7643\n",
      "Epoch 16/100\n",
      "5/5 [==============================] - 0s 35ms/step - loss: 0.0874 - accuracy: 0.9878 - val_loss: 0.7184 - val_accuracy: 0.7729\n",
      "Epoch 17/100\n",
      "5/5 [==============================] - 0s 53ms/step - loss: 0.0799 - accuracy: 0.9908 - val_loss: 0.7169 - val_accuracy: 0.7743\n",
      "Epoch 18/100\n",
      "5/5 [==============================] - 0s 39ms/step - loss: 0.0706 - accuracy: 0.9938 - val_loss: 0.7237 - val_accuracy: 0.7743\n",
      "Epoch 19/100\n",
      "5/5 [==============================] - 0s 51ms/step - loss: 0.0601 - accuracy: 0.9940 - val_loss: 0.7406 - val_accuracy: 0.7671\n",
      "Epoch 20/100\n",
      "5/5 [==============================] - 0s 54ms/step - loss: 0.0555 - accuracy: 0.9943 - val_loss: 0.7597 - val_accuracy: 0.7757\n",
      "Epoch 21/100\n",
      "5/5 [==============================] - 0s 38ms/step - loss: 0.0518 - accuracy: 0.9929 - val_loss: 0.7740 - val_accuracy: 0.7686\n",
      "Epoch 22/100\n",
      "5/5 [==============================] - 0s 46ms/step - loss: 0.0452 - accuracy: 0.9955 - val_loss: 0.7812 - val_accuracy: 0.7657\n",
      "Epoch 23/100\n",
      "5/5 [==============================] - 0s 70ms/step - loss: 0.0395 - accuracy: 0.9958 - val_loss: 0.7874 - val_accuracy: 0.7686\n",
      "Epoch 24/100\n",
      "5/5 [==============================] - 0s 79ms/step - loss: 0.0364 - accuracy: 0.9966 - val_loss: 0.7941 - val_accuracy: 0.7714\n",
      "Epoch 25/100\n",
      "5/5 [==============================] - 0s 69ms/step - loss: 0.0326 - accuracy: 0.9974 - val_loss: 0.8079 - val_accuracy: 0.7729\n",
      "Epoch 26/100\n",
      "5/5 [==============================] - 0s 75ms/step - loss: 0.0285 - accuracy: 0.9984 - val_loss: 0.8226 - val_accuracy: 0.7757\n",
      "Epoch 27/100\n",
      "5/5 [==============================] - 0s 43ms/step - loss: 0.0267 - accuracy: 0.9985 - val_loss: 0.8365 - val_accuracy: 0.7800\n",
      "Epoch 28/100\n",
      "5/5 [==============================] - 0s 99ms/step - loss: 0.0228 - accuracy: 0.9983 - val_loss: 0.8538 - val_accuracy: 0.7771\n",
      "Epoch 29/100\n",
      "5/5 [==============================] - 0s 67ms/step - loss: 0.0213 - accuracy: 0.9986 - val_loss: 0.8718 - val_accuracy: 0.7729\n",
      "Epoch 30/100\n",
      "5/5 [==============================] - 0s 52ms/step - loss: 0.0195 - accuracy: 0.9979 - val_loss: 0.8866 - val_accuracy: 0.7743\n",
      "Epoch 31/100\n",
      "5/5 [==============================] - 0s 76ms/step - loss: 0.0168 - accuracy: 0.9996 - val_loss: 0.9002 - val_accuracy: 0.7786\n",
      "Epoch 32/100\n",
      "5/5 [==============================] - 0s 39ms/step - loss: 0.0152 - accuracy: 1.0000 - val_loss: 0.9125 - val_accuracy: 0.7814\n",
      "Epoch 33/100\n",
      "5/5 [==============================] - 0s 42ms/step - loss: 0.0135 - accuracy: 1.0000 - val_loss: 0.9214 - val_accuracy: 0.7814\n",
      "Epoch 34/100\n",
      "5/5 [==============================] - 0s 66ms/step - loss: 0.0134 - accuracy: 1.0000 - val_loss: 0.9291 - val_accuracy: 0.7829\n",
      "Epoch 35/100\n",
      "5/5 [==============================] - 0s 79ms/step - loss: 0.0116 - accuracy: 1.0000 - val_loss: 0.9345 - val_accuracy: 0.7814\n",
      "Epoch 36/100\n",
      "5/5 [==============================] - 0s 64ms/step - loss: 0.0109 - accuracy: 1.0000 - val_loss: 0.9399 - val_accuracy: 0.7800\n",
      "Epoch 37/100\n",
      "5/5 [==============================] - 0s 66ms/step - loss: 0.0106 - accuracy: 1.0000 - val_loss: 0.9500 - val_accuracy: 0.7800\n",
      "Epoch 38/100\n",
      "5/5 [==============================] - 0s 86ms/step - loss: 0.0097 - accuracy: 1.0000 - val_loss: 0.9609 - val_accuracy: 0.7829\n",
      "Epoch 39/100\n",
      "5/5 [==============================] - 0s 57ms/step - loss: 0.0093 - accuracy: 1.0000 - val_loss: 0.9700 - val_accuracy: 0.7814\n",
      "Epoch 40/100\n",
      "5/5 [==============================] - 0s 57ms/step - loss: 0.0088 - accuracy: 1.0000 - val_loss: 0.9787 - val_accuracy: 0.7786\n",
      "Epoch 41/100\n",
      "5/5 [==============================] - 0s 62ms/step - loss: 0.0081 - accuracy: 1.0000 - val_loss: 0.9846 - val_accuracy: 0.7800\n",
      "Epoch 42/100\n",
      "5/5 [==============================] - 0s 58ms/step - loss: 0.0077 - accuracy: 1.0000 - val_loss: 0.9888 - val_accuracy: 0.7843\n",
      "Epoch 43/100\n",
      "5/5 [==============================] - 0s 66ms/step - loss: 0.0068 - accuracy: 1.0000 - val_loss: 0.9960 - val_accuracy: 0.7857\n",
      "Epoch 44/100\n",
      "5/5 [==============================] - 0s 54ms/step - loss: 0.0067 - accuracy: 1.0000 - val_loss: 1.0044 - val_accuracy: 0.7857\n",
      "Epoch 45/100\n",
      "5/5 [==============================] - 0s 44ms/step - loss: 0.0064 - accuracy: 1.0000 - val_loss: 1.0130 - val_accuracy: 0.7843\n",
      "Epoch 46/100\n",
      "5/5 [==============================] - 0s 76ms/step - loss: 0.0058 - accuracy: 1.0000 - val_loss: 1.0216 - val_accuracy: 0.7843\n",
      "Epoch 47/100\n",
      "5/5 [==============================] - 0s 53ms/step - loss: 0.0064 - accuracy: 1.0000 - val_loss: 1.0295 - val_accuracy: 0.7843\n",
      "Epoch 48/100\n",
      "5/5 [==============================] - 0s 77ms/step - loss: 0.0056 - accuracy: 1.0000 - val_loss: 1.0367 - val_accuracy: 0.7843\n",
      "Epoch 49/100\n",
      "5/5 [==============================] - 0s 51ms/step - loss: 0.0051 - accuracy: 1.0000 - val_loss: 1.0419 - val_accuracy: 0.7857\n",
      "Epoch 50/100\n",
      "5/5 [==============================] - 0s 38ms/step - loss: 0.0052 - accuracy: 1.0000 - val_loss: 1.0473 - val_accuracy: 0.7843\n",
      "Epoch 51/100\n",
      "5/5 [==============================] - 0s 35ms/step - loss: 0.0043 - accuracy: 1.0000 - val_loss: 1.0525 - val_accuracy: 0.7857\n",
      "Epoch 52/100\n",
      "5/5 [==============================] - 0s 77ms/step - loss: 0.0045 - accuracy: 1.0000 - val_loss: 1.0586 - val_accuracy: 0.7857\n",
      "Epoch 53/100\n",
      "5/5 [==============================] - 0s 53ms/step - loss: 0.0043 - accuracy: 1.0000 - val_loss: 1.0648 - val_accuracy: 0.7857\n",
      "Epoch 54/100\n",
      "5/5 [==============================] - 0s 62ms/step - loss: 0.0041 - accuracy: 1.0000 - val_loss: 1.0711 - val_accuracy: 0.7829\n",
      "Epoch 55/100\n",
      "5/5 [==============================] - 0s 41ms/step - loss: 0.0038 - accuracy: 1.0000 - val_loss: 1.0772 - val_accuracy: 0.7829\n",
      "Epoch 56/100\n",
      "5/5 [==============================] - 0s 48ms/step - loss: 0.0037 - accuracy: 1.0000 - val_loss: 1.0832 - val_accuracy: 0.7829\n",
      "Epoch 57/100\n",
      "5/5 [==============================] - 0s 43ms/step - loss: 0.0037 - accuracy: 1.0000 - val_loss: 1.0883 - val_accuracy: 0.7829\n",
      "Epoch 58/100\n",
      "5/5 [==============================] - 0s 40ms/step - loss: 0.0035 - accuracy: 1.0000 - val_loss: 1.0937 - val_accuracy: 0.7814\n",
      "Epoch 59/100\n",
      "5/5 [==============================] - 0s 54ms/step - loss: 0.0033 - accuracy: 1.0000 - val_loss: 1.0994 - val_accuracy: 0.7814\n",
      "Epoch 60/100\n",
      "5/5 [==============================] - 0s 76ms/step - loss: 0.0032 - accuracy: 1.0000 - val_loss: 1.1032 - val_accuracy: 0.7814\n",
      "Epoch 61/100\n",
      "5/5 [==============================] - 0s 64ms/step - loss: 0.0029 - accuracy: 1.0000 - val_loss: 1.1062 - val_accuracy: 0.7814\n",
      "Epoch 62/100\n",
      "5/5 [==============================] - 0s 67ms/step - loss: 0.0029 - accuracy: 1.0000 - val_loss: 1.1092 - val_accuracy: 0.7829\n",
      "Epoch 63/100\n",
      "5/5 [==============================] - 0s 66ms/step - loss: 0.0028 - accuracy: 1.0000 - val_loss: 1.1145 - val_accuracy: 0.7829\n",
      "Epoch 64/100\n",
      "5/5 [==============================] - 0s 68ms/step - loss: 0.0027 - accuracy: 1.0000 - val_loss: 1.1200 - val_accuracy: 0.7800\n",
      "Epoch 65/100\n",
      "5/5 [==============================] - 0s 41ms/step - loss: 0.0026 - accuracy: 1.0000 - val_loss: 1.1250 - val_accuracy: 0.7800\n",
      "Epoch 66/100\n",
      "5/5 [==============================] - 0s 62ms/step - loss: 0.0027 - accuracy: 1.0000 - val_loss: 1.1307 - val_accuracy: 0.7771\n",
      "Epoch 67/100\n",
      "5/5 [==============================] - 0s 67ms/step - loss: 0.0025 - accuracy: 1.0000 - val_loss: 1.1358 - val_accuracy: 0.7786\n",
      "Epoch 68/100\n",
      "5/5 [==============================] - 0s 75ms/step - loss: 0.0024 - accuracy: 1.0000 - val_loss: 1.1398 - val_accuracy: 0.7743\n",
      "Epoch 69/100\n",
      "5/5 [==============================] - 0s 61ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 1.1433 - val_accuracy: 0.7743\n",
      "Epoch 70/100\n",
      "5/5 [==============================] - 0s 67ms/step - loss: 0.0022 - accuracy: 1.0000 - val_loss: 1.1475 - val_accuracy: 0.7743\n",
      "Epoch 71/100\n",
      "5/5 [==============================] - 0s 72ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 1.1519 - val_accuracy: 0.7743\n",
      "Epoch 72/100\n",
      "5/5 [==============================] - 0s 65ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 1.1543 - val_accuracy: 0.7743\n",
      "Epoch 73/100\n",
      "5/5 [==============================] - 0s 51ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 1.1592 - val_accuracy: 0.7743\n",
      "Epoch 74/100\n",
      "5/5 [==============================] - 0s 67ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 1.1653 - val_accuracy: 0.7757\n",
      "Epoch 75/100\n",
      "5/5 [==============================] - 0s 40ms/step - loss: 0.0018 - accuracy: 1.0000 - val_loss: 1.1722 - val_accuracy: 0.7743\n",
      "Epoch 76/100\n",
      "5/5 [==============================] - 0s 37ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 1.1783 - val_accuracy: 0.7743\n",
      "Epoch 77/100\n",
      "5/5 [==============================] - 0s 34ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.1845 - val_accuracy: 0.7729\n",
      "Epoch 78/100\n",
      "5/5 [==============================] - 0s 42ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 1.1898 - val_accuracy: 0.7729\n",
      "Epoch 79/100\n",
      "5/5 [==============================] - 0s 38ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.1947 - val_accuracy: 0.7700\n",
      "Epoch 80/100\n",
      "5/5 [==============================] - 0s 47ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.1993 - val_accuracy: 0.7671\n",
      "Epoch 81/100\n",
      "5/5 [==============================] - 0s 36ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.2033 - val_accuracy: 0.7671\n",
      "Epoch 82/100\n",
      "5/5 [==============================] - 0s 63ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.2078 - val_accuracy: 0.7671\n",
      "Epoch 83/100\n",
      "5/5 [==============================] - 0s 47ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.2113 - val_accuracy: 0.7700\n",
      "Epoch 84/100\n",
      "5/5 [==============================] - 0s 44ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.2145 - val_accuracy: 0.7700\n",
      "Epoch 85/100\n",
      "5/5 [==============================] - 0s 52ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.2175 - val_accuracy: 0.7700\n",
      "Epoch 86/100\n",
      "5/5 [==============================] - 0s 46ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.2205 - val_accuracy: 0.7700\n",
      "Epoch 87/100\n",
      "5/5 [==============================] - 0s 52ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.2234 - val_accuracy: 0.7700\n",
      "Epoch 88/100\n",
      "5/5 [==============================] - 0s 52ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 1.2270 - val_accuracy: 0.7729\n",
      "Epoch 89/100\n",
      "5/5 [==============================] - 0s 53ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 1.2306 - val_accuracy: 0.7729\n",
      "Epoch 90/100\n",
      "5/5 [==============================] - 0s 36ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.2343 - val_accuracy: 0.7729\n",
      "Epoch 91/100\n",
      "5/5 [==============================] - 0s 55ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 1.2370 - val_accuracy: 0.7729\n",
      "Epoch 92/100\n",
      "5/5 [==============================] - 0s 48ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.2406 - val_accuracy: 0.7729\n",
      "Epoch 93/100\n",
      "5/5 [==============================] - 0s 51ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.2449 - val_accuracy: 0.7729\n",
      "Epoch 94/100\n",
      "5/5 [==============================] - 0s 66ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.2493 - val_accuracy: 0.7729\n",
      "Epoch 95/100\n",
      "5/5 [==============================] - 0s 76ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.2536 - val_accuracy: 0.7714\n",
      "Epoch 96/100\n",
      "5/5 [==============================] - 0s 78ms/step - loss: 9.6970e-04 - accuracy: 1.0000 - val_loss: 1.2570 - val_accuracy: 0.7714\n",
      "Epoch 97/100\n",
      "5/5 [==============================] - 0s 74ms/step - loss: 9.9763e-04 - accuracy: 1.0000 - val_loss: 1.2586 - val_accuracy: 0.7729\n",
      "Epoch 98/100\n",
      "5/5 [==============================] - 0s 80ms/step - loss: 9.6090e-04 - accuracy: 1.0000 - val_loss: 1.2609 - val_accuracy: 0.7729\n",
      "Epoch 99/100\n",
      "5/5 [==============================] - 0s 56ms/step - loss: 9.2139e-04 - accuracy: 1.0000 - val_loss: 1.2639 - val_accuracy: 0.7729\n",
      "Epoch 100/100\n",
      "5/5 [==============================] - 0s 88ms/step - loss: 9.6173e-04 - accuracy: 1.0000 - val_loss: 1.2676 - val_accuracy: 0.7729\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 = 400,\n",
    "                        validation_data=(X_test,to_categorical(y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "history_dict = history.history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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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": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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NWvW4NGjR6hVqxaWLl2Kjh25cJSIiIiKPtFBLDw83OQnVygUmDhxIiZOnGjy9yYiIiKydpz/IyIylavbgcW+wEw31der26WuiIisnMERMbE76ecmk8nw559/FrooIiKbo+++kpa6mTcR2SyDQczQmjAiItJD330llWmqdgYxIjLAYBAzx5owIqIiy9B9JQtzv0kiKvJMskYsJycHz549w5EjR0zxdkREtsfVy7h2IiIYcdXks2fPMHfuXBw+fBipqakwdGekmJgYkxVHRGQzgqfrv02RerNVIiI9RI+ILViwALt27UKtWrXQvHlzCIKAN954A82bN4eDgwOcnJywfPlyc9ZKRGS9/Puo7uPoWhmATPWV93UkopcQPSJ2/PhxtG/fHsuXL0dCQgKaN2+Ot99+G/7+/oiJiUFYWBhu3rxpzlqJiKybmPtKEhHlInpELD4+Hi1btgQAlClTBuXLl8fVq1cBqG7U3atXL+zbt888VRIREREVQaKDWMmSJZGTk6N5XKVKFfz111+ax7Vr18a9e/dMWx0RERFRESY6iPn7++PAgQPIzs4GANSqVQsXLlzQLNq/desWHB0dzVMlERERUREkOogNHToUFy9eREhICJKSkvDmm2/i5s2bGDp0KGbOnImNGzfitddeM2etREREREWKwSB2/PhxzegXADRv3hxr1qxB9erVUbp0afj7+2PmzJm4fPkyvv32W9StWxdTpkyxSNFERERERYHBqyZHjx6NMmXKoEuXLujWrRv8/f3x+uuv4/XXX9ccExoairfeegvp6ekoXbq0RQomIiIiKioMjohNmzYN1apVQ2RkJPr27YuQkBCsWLECsbGxWsc5OjoyhBEREREVgMEgNmDAAGzduhXHjx/HxIkTUbp0aaxYsQIdOnRA3759ERkZifj4eEvWSkRERFSkvHSxfvny5TF06FDs2LEDR44cwbhx45Ceno7Zs2ejdevWGD16NH788UdkZGRYol4iIiKiIsOom35XrlwZo0aNwp49e7B//36MGjUKcXFxmDBhAlq0aMHF+kTF0dXtwGJfYKab6uvV7VJXRERkM4wKYrnVrFkTY8eOxc6dO/HJJ5/A3t4eu3fvNmFpRCQpMQHr6nbVja6TYgEIqq/73mMYIyISSfS9JnNLTU3F8ePHcfDgQZw6dQrp6emoWbMmhg0bZur6iEgK6oCl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RGYiOoglJydj/PjxSE5Oxo4dO5CSkoKePXvi/v37EAQBK1euxJYtW1C5cmVz1kuFpb4aMnfouhABvTfp/vuwag8wIiIiMgvRV00uWbIE586d02xZsXPnTty7dw8TJ07Exo0bYWdnhyVLlpirThJD375fedsOfKR7NWTeEKbGhflERERmJXpE7OjRoxgwYADee+89AEBUVBReeeUVDB06FAAQFhaGdevWmadKejl9I127xwAyGZCd+aLNGFyYT0REZFaiR8SePn2KV199FYBqc9fLly+jZcuWmufLlCmDtLS8Iy1kMfr2/cpRvghhLyXTfsiF+URERGYnOoiVL18esbGqEZWoqChkZ2ejbdu2mucvXbqEihUrmrxAEqkw04hyBdB4KOBaGYBM9bXrMi7MJyIiMjPRU5OBgYHYsGEDUlJSsH//fri6uiIoKAgPHz7E2rVrsWfPHowZM8actVJ+DO37pY/CHXAsyashiYiIJCY6iE2cOBFpaWnYuXMnypcvj5kzZ6JEiRL466+/EBkZiW7dumHkyJHmrJXU8m4/ETxd9Sf3GjEAsJNrrxEDVKNfneYxeBEREVkB0UHM0dERc+bMwZw5c7Ta69Spg5MnT8LDw8PkxZEe+hbl73tPNZXYdZluQAN02xjCiIiIrILRG7omJibi9OnTiIuLg1wuR8WKFbUW7ZOZ5Xcz7vG/6w9ZDF5ERERWyaggtmXLFixYsADp6ekQhBd7Tzk5OWHSpEkICwszeYGUB2/GTUREVGSIDmJRUVGYNWsW6tati+HDh6NGjRoQBAE3b97EunXrMGfOHFSqVAmBgYHmrJd4M24iIqIiQ3QQW7t2LerWrYtvv/0Wjo6OmnYfHx906NABffv2xddff80gZm76FuVzzy8iIiKbJHofsWvXrqF79+5aIUxNLpeje/fuiImJMWlxpId/H9WifO75RUREZPOMumoyv53znz9/Dnt7e5MURbno26rCvw+DFxERUREgekSsSZMmiIyMxKNHj3See/jwIbZs2YJGjRqZtLhiT71VRVIsAOHFVhVXt0tdGREREZmA6BGxcePGoW/fvujUqRN69OiBatWqAQBu3ryJvXv3Ijs7G++//7656iye8tuqgiNiRERENk90EKtduzY2bNiAOXPmIDIyUus5X19fTJs2DT4+PiYv0OIMTQVKgVtVEBERFWlG7SPm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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": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "fpr,tpr,thresholds=roc_curve(y_test,model.predict(X_test)[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAGACAYAAAD7zIVCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA6nElEQVR4nO3dfVzV9f3/8efheETAC7zIUkTAWkqKglmp2SQyu7DI9i1ZaoUSrDXz53JqLZZ+50puOZdT0+nmVWmWmlLNtRyay2Xbvk0ya6RbJSCyUpGKC+EA5/cH48SBc+AcLs45H3jcb7dum+/z+ZzzOr5Tnr0/7wuTzWazCQAAAIYQ4OsCAAAA4D7CGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAADIbwBAAAYSBdfF+AtH3zwgQIDA9v9cyoqKrzyOXAffeKf6Bf/Q5/4J/rF/3ijTyoqKhQbG+v0tU4T3gIDAxUdHd3un5OTk+OVz4H76BP/RL/4H/rEP9Ev/scbfZKTk+PyNR6bAgAAGAjhDQAAwEAIbwAAAAZCeAMAADAQwhsAAICBEN4AAAAMhPAGAABgIH6zz9uBAwf0k5/8RNnZ2U1ed/LkST399NP68MMP1atXL02fPl2pqakymUxtUsfFixd19uxZXbx4UVVVVR7fb7Vam9ybBd7nL31isVjUv39/9ezZ09elAAAMzC/C29GjR7VgwYJmrzt//rxmzZql73znO1q5cqU+/vhjrVy5UmazWSkpKa2u46uvvtIXX3yhSy65RJdddpm6dOnicSgsLy9XUFBQq2tB2/GHPrHZbCovL1dBQYEkEeAAAC3m0/BWWVmprVu36te//rWCg4NltVqbvH779u2qqqrSunXrFBQUpIkTJ6qyslIbNmzQAw88IIvF0qp6zp07p0GDBik4OLhV7wM0ZDKZFBwcrLCwMJ05c4bwBgB+LDO7QMvfOqEzxeUaGBqkBbcM1dS4sAbthfZ2b/PpnLd33nlHGzZs0MKFCzVz5sxmrz9y5IjGjRvnMIoyadIkFRcX6/jx462up7Ky0ucjNOjYgoKCmv2PFACA76RnHte8Vz5QQXG5bJIKisu1YPcxpWce1xN7jju0P7HnuDKzC7xeo0/DW0xMjA4cOKAHHnjArceTp06dUkREhENbeHi4/bW20FZz5wBn+PcLAPxXZnaBtv01r1G7tdqml/6Wp3JrtUN7ubVay9864a3y7Hz62PTSSy/16PqSkhKFhIQ4tNX9uqSkpMl7Kyoqmp20brVaVV5e7lFNDdXNbYL/8Lc+8ZcFFL528eJFfh/8DH3in+gX73kq85TL12psztvPFJd7vX/8YsFCWwgIaHoQMTAwUNHR0U1ek5OT0+rHpv4wOR6O/K1PLBZLs/8udgY5OTn8PvgZ+sQ/0S/ekZldoK8rajy+b2BoULv0T1OB0FDhrXv37iotLXVoq/t19+7dfVGSYT3++OPau3dvo/bAwED17dtX48aN02OPPaZ+/fo1uqakpESbN2/Wn/70J+Xl5SkwMFBRUVGaOnWq7r77bgUGBjr9zPPnz+ull17S/v37dfr0aZlMJl111VWaMWOGbrvttjb/jgCAzsvZooP3c4u042/5qrbZZJIU3NWssspqdbMEqNzadHALsgRIMjk8Og2ymLXglqHt+0WcMFR4i4yM1OnTpx3a8vPzJUlDhgzxRUmG98QTT6h37972X5eUlOi9997Tq6++qo8++ki7d+9W165d7a//61//0kMPPaTz589rypQpmj59ui5evKi//vWvWrJkiXbv3q21a9eqf//+Dp+TnZ2tRx99VKWlpZo6daqmT5+ub775Rr///e81b9485eTk6LHHHvPa9wYAGENmdoGWvP6xistrF3v1DrZo8Z3DJcnpitC6exbsPiZrde2zzoLics175QOH97VJKq2sDWLNBTdJWva9kU1+pjcZKryNHTtWr7zyisrKyuzbeWRlZSk0NFTDhg3zcXXGNGnSJA0aNMihbcaMGVqyZIl27NihrKws3X777ZKkr7/+Wmlpaaqurtbu3bsdfs+Tk5N18OBBzZs3T3PnztVLL71kf5RdVFSkRx55RMHBwdq1a5cGDBhgvy8lJUU/+tGPtH79eo0aNUo33XSTF741AMAIMrMLtGDXMVnrTTi7UGbVYzs/kDnA5BDOnthTu+vE1Lgw/e8bH9tfayt1IW1qXJjPH2X79fFYeXl5+uCDD+y/nj59uqxWq9LS0vT2229r3bp12rBhg9LS0hxGh9B6d999tyTp2LFj9raNGzfqzJkzWrZsmdOwnJCQoIcffljZ2dl67bXX7O1r165VUVGRMjIyHIKbJJnNZi1ZskRms1kvv/xyO30bAIDRZGYXaP5Ox+BWp8amRuGs/srPC2VtuyVTWKj/zJuW/Dy8rV27VklJSfZf9+/fX5s3b1ZVVZXmzp2rnTt3at68eW1yugIc1U3wt9m+/cORmZmpiIgI3XDDDS7vq9ss+fXXX5ck1dTU6I9//KOioqJ0zTXXOL3nsssu0xtvvKHf/OY3zdb15z//WTNnzlRcXJyuv/56/fjHP3Z4lD506FA9/vjjje5r2D506FCtXLlSDz/8sEaMGKHbb79dDz30kK677rpGx6KdPn1aQ4cO1Zo1a+xtb7/9tr7//e9r1KhRuuaaa/Too4/q888/b7Z+AEDzMrML9MSe46q2eTZ6dqa47XcW8NW8tqb4TXh79NFHG51rmpGRoRMnHPdPiYmJ0csvv6zjx4/r7bffVlpamjfL7DQOHz4sSbrqqqskSf/5z3/0n//8R7GxsU3e1717d40YMULvv/++JOmLL77Q2bNnm73v8ssvl9lsbvKaffv26Qc/+IG++uorPfroo3rggQd05MgRJScn6+uvv3bvi9WzdetWXbx4Uenp6Zo2bZruvPNOFRcX68iRIw7X/eEPf5Ak3XnnnZKkPXv26Ic//KGCgoK0YMECJScnKzs7W9OmTSPAAejQMrMLdH3GQUU9vk/XZxxstw1ql791otGeau4Y+N8RstCg1p24VKd3sEXLvhfjk3ltTTHUnDejc3Xchi99/fXXKioqsv+6pKREhw8f1po1a3T55ZdrypQpkqQvv/xSknTJJZc0+579+/dXdna2iouLdfbsWbfva0pNTY2WLVumK6+8Ujt37lS3bt0k1Yb5WbNm6Y033tCMGTM8ek+z2axVq1bZj6oqLS1VUFCQ/vjHP+q73/2u/bo333xTo0aNUkREhEpKSvT000/r9ttv169+9Sv7NdOmTdOUKVP0y1/+Us8//3yrvisA+Iv6P7d6BVn0TUWVqmu+nWe2YHft1Jq2/llW4MYImsVscnh0Wn+EbEni8EZz5SwBJl0b1Vt//exCo9WmvYIsqqyqVtl/Fy7ULYrw9c9oVwhvXlI3BFz3XxINJ1f6St3ctvqCgoKUkJCgn/3sZ43Oi+3Spfl/Zequsdls9tG06mrP/wuqvo8++khnz57Vww8/bA9ukjR+/Hjt2rWrRauNR40a5XDGaEhIiG666SYdOHBAVqtVFotFn3/+uf75z38qPT1dkvTuu++qpKREkyZNcgi9ZrNZY8eO1Z///GdVVVW59fsEAP6mflhruH1G3WrP+qzVNv3vGx+3+c8xs8nU5CPT0CCLliQOdzkgUve//jZg0lb4CeMlzoaA6yZX+vJfpuXLl6tfv36yWq06fPiwtm/frttuu01Llixx2K+tbuuPc+fONfueX375pbp27arevXursrJSkhyCTksUFNQOzTc8Hk2SRo4c2aL37NOnT6O2O+64Q7///e/13nvv6bvf/a7+8Ic/yGw221fc5uXVHpvy4x//2OX7FhUVNdoqBQD8XcNBBne2z5DafnGApCaDW5DFrCWJtaNiTf38bO51IyO8eYmrSZTtMbnSE6NHj7ZvFTJx4kRFREToF7/4hYqLi7V27Vr7WZyXXXaZBg0aZJ/L5kp5ebk+/vhjxcXFSao9Ai0sLMxh1bAzP/3pT2Wz2RqFxjo1NbV/iTR3koYzrkb9nM2xmzBhgnr37q0333xT3/3ud/Xmm29q3Lhx6tu3r0MdS5cubbTFSp1evXp5XCMA+FLdyk5PFwi0l7DQIKePTs0mk1/OQfM2v1mw0NENdLHM2FW7r9x///266aabdPDgQW3dutXhtcTERJ06dUoHDhxweX/dPnyJiYn2tptvvlmff/65y+B37tw5vf766/r4449dns5Qt8VIbm5uo9eeeOIJ7dq1S1JtuKsb7av//u6yWCy69dZb9fbbb+vkyZP617/+ZV+oIElhYbV/YfTp00fjx493+MdsNstkMrFtDQC/V3/hQez/7tf8XS0Pbm21OKC+BbcMVZDF8T+wgyxmrZg2qtMHN4mRN69ZcMtQh+FoyT+XH0vSz3/+c73//vtauXKlbrrpJoWHh0uS0tLS9Prrrys9PV0DBgywr0St8+677+q5555TbGysw1y6tLQ07d69W+np6dqyZYsuu+wy+2sVFRVauHChrFarHnnkEZc1jRgxQn369NGePXt0zz332APS0aNHtWfPHvu+c/369dMnn3wim81mHzXcv3+/R9//zjvv1I4dO/SrX/1K3bp1080332x/bfz48QoMDNTvfvc7TZw40T4n8IsvvtAjjzyiyMhIvfrqqx59HgC4q+HCtxuHXaK3PzlrX1BgMtU+xqybMxb637biMqt93pckh9MHnM1lc5clwKQlicPb5LvV19HnrLUW4c1LjPQvYr9+/fSTn/xEP/vZz7R48WJt2rRJUu1Cho0bNyotLc2+tUZsbKyqqqr0t7/9Tfv379dVV12lVatWOTyS7Nu3r379619rzpw5mjJliu6++2595zvf0dmzZ5WZman8/HwlJyfr1ltvdVlT165d9fjjj2vRokW67777lJiYqNLSUr3wwgu6/PLLde+990qqnbO2adMmzZkzR/Hx8fr444/15ptvOp3f5sro0aMVFhamt99+W1OmTFFISIj9tT59+uixxx7TsmXLlJSUpMTERFVVVemll15SRUWFFi1a5OlvNwC4xdnCt21/zbO/Xj+E1Y2i1W+rWygXYGq8wa0negdbHMJge/0c68hz1lqL8OZFRvoX8d5771VmZqbeffddZWZmaurUqZJqz5fds2ePXnnlFe3bt0/79++X2WzWkCFD9NRTT+l//ud/nD76nDBhgvbu3avNmzfr8OHD2rVrl8xms2JiYvT4449r0qRJzdZ01113qXv37lq/fr1WrFihnj176sYbb9T8+fPtx6X9v//3/1RVVaV9+/bpL3/5i0aNGqX169fbV4u6w2Qy6c4779RvfvMb3XHHHY1eT05O1qWXXqrNmzfrueeeU7du3TR8+HAtX75cV199tdufA6Bzaum2US3d+6y+1tzv79tndCYmm81PZie2M3fOIWuLs8rKy8vtpxPAP/hbn/j6TDx/we+D/6FP2l/DA9Ol2v3Klt/jei5XXb9EPr7PW2XaBVnMLBBwwht/Vpr6DEbeAACG13Az2YbzvJoKH57e25rPcnZgurt7pTW395m7TJLceRdG2vwX4Q0AYAiuHjc2HM1yNs9Lcr4hesN5ZM3d6+n1DbnaE82dvdLaIrgFWcz6n6vD9Mrf8x1OHwiQ1MtLc9nQeoQ3AIDXNBXAmhrNkhxXSNY/msnZaFZ9TW2I3tw8sob3enp9W2pq77Mam83t1aZT48I0JqKPIRbQwTnCGwCgTWVmF2jJ6x/bR6WCLQEKtJgbjS7VBbD3c4v06j8KmhzNcrZCsu5xozujVq3ZKL3+NZ5e35ZcbTnVkjlpRlpAh8bYpBcA0GYyswu0YNcxhwBWZq1xGbCs1Ta99Le8ZkezSiudv+7u0Uyt2Si9/jWeXt+Qqw1t3dnodmpcmJZ9L0ZhoUEyqXYkjsUEnRMjbwDQyTk+yiz06BFaeuZx7fhbvqptNplNJnWzBDjMpXKHh5c3EhpkaXKj2aY2RHc2mtXUvZ5e39CSxOFasOuYw++RJxvdMmIGifDWSP2d+YG21kl25kErOZsXJslhTlhlVbXK/ntweP3Hkq7mOjnbib+4zKpeQRZ9U1Gl6prGc8maCwnpmccdNomtttlcjpC1lqsVkqFBFqeBqE5YM/O5Gm6g3tzqUU+vb+7zmG+GliC81WM2m2W1WjmbEu2mqqpKXbrwxw6uNQxEBcXlemznBzIHmFweZ1RmrbEHOVc767vaid/ZiJW7W1fs+Fu+u1+rSUGWAEmmJkeznK2QrBuxam0g8nQ0q7WjX4yeobX4KVJPjx499PXXX6tfv36+LgUd1DfffKNu3br5ugz4qczsAoeQVafGJtW04jijlvDW1hWWAJOWfW+kpOZHs5paIUkgQmdCeKunT58+ysur/YuzZ8+eslgsPEJFm7DZbCovL9e5c+c0ePBgX5cDP+Ds0ejyt074uiyPeLJprOm/zz2beszYXPgioAG1CG/1BAYGavDgwSoqKtKpU6dUXe353A2r1SqLpflVQ/Aef+mTwMBAXXrppYy8GVxr9ilb/tYJFRSXN5q/VTfPrDWHhbc1d1Y/3ndduNORQnOAyT6HTuKIJaCtEd4aCAwM1IABAzRgwIAW3c/ZgP6HPjGulh7g7e57NjUK5Oy6lu5TtmDXManePmXOIpo/BTd3Vz/+YmqMJDmsNr3vunA2gAXaGeENgF9qeAyRO0cPefqero42kuTyuobq9ilrarsLT7fOcGbm2MEOq0XbarVpw9c8DVu/mBpjD3H1EdaA9kN4A+CXnB1D1Nqjh9w92qju/7urDbJZk0KDLE4DUltjlBowBsIbAK+p/yjykpAu+ukdPV0GsdYcZ+SKL482coezLTOCLGa3N3AF0DkQ3gC4zdM5aPWv72YJUPl/H/NJ0pelVU1uBhsabHG6XUVocMsXnwx0cbB3w2skNXtdfc3tU2YJMDnMeXN1TcMtM5gvBsAZwhsAt3g6B63h9fWDW52mNoN1tQNFa7YW8+Roo6auq8/dfcrqXi8oLrfPS6v734anABDWADSF8AbALf/7xscezUFrbn5ZHVebwX7lYpGAq3Z3eHq0kbPrWrtPGQC0FuEN6MSaO0OzfpurkOXq8WJr5465esRZ91izpdzd6JUNYQH4K8Ib0Ek5ewzacD+yukejAU0cNGJ2cQqJO/PLJNebwTp7xFn/sSYAdFYBvi4AQNvLzC7Q9RkHFfX4Pl2fcVCZ2QWNrnlyb+M5XdYaW6NJ9eXWapVWun786ep4pAW3DFWQxdxknQEmuVxJOTUuTMu+F6Ow0CCZJIWFBrFLPwCIkTegw3FnYUF65vEmA5knwlw8xnQ2v6z+xrI9AwP086kjmwxjPLoEgMYIb0AH487mtjv+lu/RezY8i7O+ph5jNhW+ajeEJZgBgKcIb4Cfaum5nq7mmdVvd/Wo05kgi1n/c3WYXvl7fqNjnmaOHczIGAB4GeENaIWWBKz0zOP2g7xNkoK7mlVWWd1oO4pvKqpUXfPtwoGmNrStL8Dk/Lim+osO6vYXcyY0yKKQwC6NvhOHjQOAfyC8AW5qGNRuHHaJXvm/fIeVmc0FrPTM49r21zz7r22Sfe5Z/cPPnR2E3tSGtvW5Omezfvt914U71FHHHGDSksThTj+D+WcA4B9YbQq4IT3zuOa98oEKistlU21Q2/bXvEYrM+sCliuezjVryNVea576xdQYzRw7WPU3+QjpataKe0cR0ADAzzHyhk7Jk8edmdkFTkepXGkqYHky16ylQoMsTkfuGu6n9oupMfrF1Jh2rwcA0LYIb+jQMrML9LO9n+ubys8kScGW2sHmsnrnbDb3uLOpkTRPNTXXzB2uNrStb0nicC3YdcxhcYHlv49DAQDGR3hDh1C7t9mH9sPPA0zSuCF99N5nRQ5zvcqcHI4uNT2fzNNHlU0FLFdzzdzhbgBruL8aiwsAoGMhvMHwMrML9NgrH6h+LKuxSe9+WuTR+7TFfLLmAlbdY8rmVpvWLYh4+5OzLQpgLC4AgI6L8AbDcDVPbflbJ+R8PK1tuJpDJtXuc+ZpwGKuGQCgNQhvMISmjnxy5/Bzd7h63OlsDplUG9wIYQAAbyO8wS80t/qzqSOfWrsIQGr6cSdzyAAA/oTwBq9ytbDg76cuNLnZrTtHPjnj7EzOkK5mlVZW20NfmBthjDlkAAB/QXiD13iysKDh6k9Xo2tmk0mX9ermNMQFWQK07Hsj9czvP9LZ0ipGzAAAHQLhDV7j6cKC+qs/XT0WrbbZtOCWoQ7z4aTaw9SXfS9GU+PCNLTb14qOjm5p2QAA+BWfH4+1c+dOTZ48WSNHjlRSUpKys7ObvP7o0aO67777FBcXp5tuuklr1qyR1do2RwahfWRmF+j6jIOtWlgQFhrksn1qXJiWfS9GYaFBMv23rS64AQDQ0fh05C0zM1OLFy/Wj370I8XExOjFF19USkqKXnvtNYWHhze6Pi8vTykpKRo9erRWr16tzz//XL/85S9VWlqqRYsW+eAboDkNV4l6ov7qT1ejawtuGSqJOWkAgM7DZ+HNZrNp1apVmjZtmubMmSNJGj9+vG699VZt3bpV6enpje754x//qOrqaq1evVrBwcGaMGGCzp49q23btmnhwoUymUyN7kH7crYAYfp1326h4WyVqDMNFxY0XP3Jik8AAGr5LLzl5uaqoKBACQkJ9jaLxaL4+HgdPnzY6T2VlZXq0qWLunXrZm8LDQ1VWVmZKisrFRgY2O5141uuFiDUHf/0i6kxbj8qfS4pttlgxugaAAA+nPN26tQpSVJERIRDe3h4uPLy8lRd3Xi0JjExUWazWStWrFBxcbE+/PBDbd26VTfffDPBzQeaWoCw42/5kmpXgzYnNMiiqXFhevfxBH2eMUXvPp5ASAMAwAWfhbeSkhJJUkhIiEN7SEiIampqVF7eeMRm8ODBWrhwoTZt2qTrrrtO9957r/r27atly5Z5pWZ8KzO7oMlRtbrVoc1tnuvuYesAAKCWT+e8SWo0T81VuyTt2rVL6enpSkpK0m233aYvv/xSq1atUlpamrZs2aKuXbu6/LyKigrl5OS04Tdw7uLFi175HF86+Nk3WnXkXJPXBJiknJwc9Q/poi9Lq5xe0z+kix4c3VtDu32tnJyv26NUSZ2jT4yIfvE/9Il/ol/8j6/7xGfhrUePHpKk0tJS9evXz95eVlamgIAABQcHN7pnw4YNmjhxon7+85/b20aMGKHbb79dr7/+uu655x6XnxcYGOiVvb5ycnI6/J5i03ftV0V10yNq068brOjoaP30jp5N7sHmDZ2hT4yIfvE/9Il/ol/8jzf6pKlw6LPHpnVz3fLz8x3a8/PzFRUV5XTkrbCwUKNGjXJou/zyyxUaGqpPP/20/YqFXWZ2gcPmuc4EWQLsq03Zgw0AgLbls5G3yMhIDRgwQFlZWZowYYIkyWq16tChQ4qPj3d6T1RUlI4ePerQlpubq+LiYg0aNKi9S4ZqFyk0pW5UrT5WiQIA0HZ8Ft5MJpNSU1O1dOlS9erVS6NHj9a2bdt04cIFJScnS6rdlLeoqEixsbGSpEceeUTz5s3Tk08+qTvuuENnz57VmjVrFBYWprvuustXX6VTOdPEIoXewRYtvnM4QQ0AgHbk0xMWZsyYoYqKCr3wwgvasmWLoqOjtXHjRvvpCmvXrtXevXt14kTtaM9tt90ms9msdevW6bXXXlO/fv00fvx4zZ8/X927d/flV+k0BoYGOV1lGhpkUfZTk31QEQAAnYvPD6afPXu2Zs+e7fS1jIwMZWRkOLRNnjxZkycTEnzF1TFVbPcBAIB3+Dy8wVg4pgoAAN8ivMFjLEAAAMB3fLZVCAAAADxHeAMAADAQwhsAAICBEN4AAAAMhPAGAABgIIQ3AAAAAyG8AQAAGAjhDQAAwEAIbwAAAAZCeAMAADAQwhsAAICBEN4AAAAMhPAGAABgIIQ3AAAAAyG8AQAAGAjhDQAAwEAIbwAAAAZCeAMAADAQwhsAAICBEN4AAAAMhPAGAABgIIQ3AAAAAyG8AQAAGAjhDQAAwEAIbwAAAAZCeAMAADAQwhsAAICBEN4AAAAMhPAGAABgIIQ3AAAAAyG8AQAAGAjhDQAAwEAIbwAAAAZCeAMAADAQwhsAAICBEN4AAAAMhPAGAABgIIQ3AAAAAyG8AQAAGAjhDQAAwEAIbwAAAAZCeAMAADAQwhsAAICBEN4AAAAMhPAGAABgID4Pbzt37tTkyZM1cuRIJSUlKTs7u8nri4qKtHDhQl177bUaM2aMHn74YeXn53upWgAAAN/yaXjLzMzU4sWLlZiYqNWrV6tHjx5KSUlxGcasVqtmzZqlDz/8UEuXLlVGRoby8/P10EMPqbKy0svVAwAAeF8XX32wzWbTqlWrNG3aNM2ZM0eSNH78eN16663aunWr0tPTG92TmZmpU6dO6c0339TAgQMlSWFhYUpNTdXJkyc1YsQIr34HAAAAb/NZeMvNzVVBQYESEhLsbRaLRfHx8Tp8+LDTe7KysnTDDTfYg5skRUdH6y9/+Uu71wsAAOAPfPbY9NSpU5KkiIgIh/bw8HDl5eWpurq60T0nTpzQkCFDtGbNGl1//fUaMWKE0tLSdObMGW+UDAAA4HM+G3krKSmRJIWEhDi0h4SEqKamRuXl5erevbvDa0VFRdqzZ4/CwsL09NNPq6ysTL/85S/1gx/8QHv37lWXLq6/TkVFhXJyctr+izRw8eJFr3wO3Eef+Cf6xf/QJ/6JfvE/vu4Tn855kySTyeRWuyRVVVXJarXqt7/9rXr27CmpdqTunnvu0f79+3X77be7/LzAwEBFR0e3Vfku5eTkeOVz4D76xD/RL/6HPvFP9Iv/8UafNBUOffbYtEePHpKk0tJSh/aysjIFBAQoODi40T3BwcEaOXKkPbhJUkxMjHr27KmTJ0+2b8EAAAB+wGfhrW6uW8NtQfLz8xUVFeV05G3w4MGyWq2N2quqqpxeDwAA0NH4LLxFRkZqwIABysrKsrdZrVYdOnRI48aNc3rPhAkTdPToUX3xxRf2tr///e8qKytTXFxcu9cMAADgaz6b82YymZSamqqlS5eqV69eGj16tLZt26YLFy4oOTlZkpSXl6eioiLFxsZKkpKTk/Xqq68qNTVVc+fOVXl5uZ599lnFxcVpwoQJvvoqAAAAXuOz8CZJM2bMUEVFhV544QVt2bJF0dHR2rhxo8LDwyVJa9eu1d69e3XixAlJUp8+fbRjxw5lZGRowYIFslgsSkhI0E9/+lMFBPj8pC8AAIB259PwJkmzZ8/W7Nmznb6WkZGhjIwMh7bBgwdr7dq13igNAADA7zBcBQAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADITwBgAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAG4lF4+9e//iWbzdZetQAAAKAZHoW35ORkrVixor1qAQAAQDM8Cm9lZWUaNGhQe9UCAACAZngU3h588EFt2rRJ77//fnvVAwAAgCZ08eTijz76SGfPntX999+vbt26KTQ0VAEBjvnPZDIpKyurTYsEAABALY/CW0VFhUaMGNFetQAAAKAZHoW3F198sb3qAAAAgBs8Cm/1ffTRRyooKJDZbFZkZKSuuOKKtqwLAAAATngc3vbt26dnn31WX375pX3PN5PJpMjISD311FMaN25cmxcJAACAWh6Ft/3792v+/PmKiIjQokWLFBERoerqap06dUo7duxQWlqatmzZoquvvrq96gUAAOjUPApv69at0/Dhw/XSSy8pMDDQ4bUZM2YoKSlJK1euZG4cAABAO/Fon7fPPvtMd999d6PgJklBQUG655579NFHH7VZcQAAAHDkUXgbNGiQPvvsM5evf/nll7rkkktaXRQAAACc8yi8/eQnP9Hu3bv14osvqqqqyuG1P/zhD9q+fbsWLVrUpgUCAADgWx7NeXvhhRcUGhqqZ555RqtXr1Z4eLgsFotOnz6t8+fPy2w265lnntEzzzxjv4cTFwAAANqOR+GtqqpKERERioiIcGiPiopSVFRUmxYGAACAxjze5+2RRx5xuZfbwYMHtWLFCu3bt6/VhQEAAKCxJsNbeXm5Lly4YP/1//3f/+nf//53o5E3SaqpqdE777yj06dPt32VAAAAkORGeJs6daq++eYbSbXz1xrOaavPZrPp+uuvb/sqAQAAIKmZ8NanTx8tX75cx48fl81m0/PPP6+bb75ZQ4cObXRtQECA+vTpoylTprRbsQAAAJ1ds3PeJk6cqIkTJ0qSzpw5o+9///saNWpUuxcGAACAxjxasLBs2bL2qgMAAABu8GiTXgAAAPgW4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADITwBgAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAG4vPwtnPnTk2ePFkjR45UUlKSsrOz3b539erVGjp0aDtWBwAA4F98Gt4yMzO1ePFiJSYmavXq1erRo4dSUlKUn5/f7L0nT57U+vXrvVAlAACA//BZeLPZbFq1apWmTZumOXPmaOLEiVq3bp169+6trVu3NnlvdXW1nnzySfXp08dL1QIAAPgHn4W33NxcFRQUKCEhwd5msVgUHx+vw4cPN3nvli1bVFJSopkzZ7Z3mQAAAH7FZ+Ht1KlTkqSIiAiH9vDwcOXl5am6utrpfbm5uVqzZo2WLl2qrl27tneZAAAAfqWLrz64pKREkhQSEuLQHhISopqaGpWXl6t79+4Or9lsNqWnpysxMVFjxozRRx995PbnVVRUKCcnp/WFN+PixYte+Ry4jz7xT/SL/6FP/BP94n983Sc+C282m02SZDKZ3GqXpJdfflm5ublat26dx58XGBio6OjoFlTqmZycHK98DtxHn/gn+sX/0Cf+iX7xP97ok6bCoc8em/bo0UOSVFpa6tBeVlamgIAABQcHO7QXFhZq+fLlevLJJ9WtWzdVVVXZg15VVZVqamq8UzgAAIAP+WzkrW6uW35+vsO8t/z8fEVFRTUaeXvvvfdUWlqquXPnNnqv4cOHa86cOXr00Ufbt2gAAAAf81l4i4yM1IABA5SVlaUJEyZIkqxWqw4dOqT4+PhG1994443avXu3Q9u+ffu0efNm7d69W/379/dG2QAAAD7ls/BmMpmUmpqqpUuXqlevXho9erS2bdumCxcuKDk5WZKUl5enoqIixcbGqnfv3urdu7fDe/zjH/+QJMXExHi7fAAAAJ/wWXiTpBkzZqiiokIvvPCCtmzZoujoaG3cuFHh4eGSpLVr12rv3r06ceKEL8sEAADwGz4Nb5I0e/ZszZ492+lrGRkZysjIcHlvcnKyfZQOAACgM/D5wfQAAABwH+ENAADAQAhvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAADIbwBAAAYCOENAADAQAhvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAADIbwBAAAYCOENAADAQAhvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAADIbwBAAAYCOENAADAQAhvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAADIbwBAAAYCOENAADAQAhvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAADIbwBAAAYCOENAADAQAhvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAzE5+Ft586dmjx5skaOHKmkpCRlZ2c3ef3Ro0d1//33a8yYMZowYYIWLlyoc+fOealaAAAA3/JpeMvMzNTixYuVmJio1atXq0ePHkpJSVF+fr7T6z/99FMlJycrJCREK1as0KJFi3T06FGlpKTIarV6uXoAAADv6+KrD7bZbFq1apWmTZumOXPmSJLGjx+vW2+9VVu3blV6enqje7Zt26ZLLrlEq1evlsVikSRFRETo3nvv1ZEjRzRx4kSvfgcAAABv81l4y83NVUFBgRISEuxtFotF8fHxOnz4sNN7rrjiCl1xxRX24CZJQ4YMkSSdPn26fQsGAADwAz4Lb6dOnZJUO3JWX3h4uPLy8lRdXS2z2ezw2owZMxq9z8GDByV9G+IAAAA6Mp/NeSspKZEkhYSEOLSHhISopqZG5eXlzb5HYWGhnn32WY0YMUJjx45tlzoBAAD8iU/nvEmSyWRyq72hwsJCJScnq6amRs8991yz11dUVCgnJ6cVFbvn4sWLXvkcuI8+8U/0i/+hT/wT/eJ/fN0nPgtvPXr0kCSVlpaqX79+9vaysjIFBAQoODjY5b0nT55UamqqqqqqtGnTJg0ePLjZzwsMDFR0dHTrC29GTk6OVz4H7qNP/BP94n/oE/9Ev/gfb/RJU+HQZ49N6+a6NdwWJD8/X1FRUS5H0o4dO6aZM2fKbDZr+/btGjZsWLvXCgAA4C98Ft4iIyM1YMAAZWVl2dusVqsOHTqkcePGOb3n9OnTSk1NVd++fbVjxw5FRkZ6qVoAAAD/4LPHpiaTSampqVq6dKl69eql0aNHa9u2bbpw4YKSk5MlSXl5eSoqKlJsbKwk6emnn1ZJSYmeeuopFRYWqrCw0P5+AwcOVP/+/X3wTQAAALzHZ+FNqt36o6KiQi+88IK2bNmi6Ohobdy4UeHh4ZKktWvXau/evTpx4oSsVqveeecdVVdXa/78+Y3ea+HChUpJSfH2VwAAAPAqn4Y3SZo9e7Zmz57t9LWMjAxlZGRIqt3A9+OPP/ZmaQAAAH7H5wfTAwAAwH2ENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADITwBgAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADITwBgAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADITwBgAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADITwBgAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADITwBgAAYCCENwAAAAMhvAEAABgI4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgfg8vO3cuVOTJ0/WyJEjlZSUpOzs7CavP3nypB588EHFxcUpPj5eGzZskM1m81K1AAAAvuXT8JaZmanFixcrMTFRq1evVo8ePZSSkqL8/Hyn158/f16zZs2SyWTSypUrNW3aNK1cuVKbNm3ycuUAAAC+0cVXH2yz2bRq1SpNmzZNc+bMkSSNHz9et956q7Zu3ar09PRG92zfvl1VVVVat26dgoKCNHHiRFVWVmrDhg164IEHZLFYvP017DKzC7T8rRM6U1yugaGFWnDLUE2NC/NZPQAAoGPy2chbbm6uCgoKlJCQYG+zWCyKj4/X4cOHnd5z5MgRjRs3TkFBQfa2SZMmqbi4WMePH2/3ml3JzC7QE3uOq6C4XDZJBcXlemLPcWVmF/isJgAA0DH5LLydOnVKkhQREeHQHh4erry8PFVXVzu9x9n19d/PF5a/dULlVsd6y63VWv7WCR9VBAAAOiqfPTYtKSmRJIWEhDi0h4SEqKamRuXl5erevXuje5xdX//9XKmoqFBOTk5ry3bqTHG5y/b2+ky47+LFi/SDH6Jf/A994p/oF//j6z7x6Zw3STKZTG61NycgoOlBxMDAQEVHR3v0nu4aGFqoAicBbmBoULt9JtyXk5NDP/gh+sX/0Cf+iX7xP97ok6bCoc8em/bo0UOSVFpa6tBeVlamgIAABQcHN7qne/fuja6v+3XDUTpvWnDLUAVZzA5tQRazFtwy1EcVAQCAjspn4a1u7lrDbUHy8/MVFRXldOQtMjJSp0+fbnS9JA0ZMqSdKm3e1LgwLftejMJCg2SSFBYapGXfi2G1KQAAaHM+e2waGRmpAQMGKCsrSxMmTJAkWa1WHTp0SPHx8U7vGTt2rF555RWVlZXZR+aysrIUGhqqYcOGeat0p6bGhWlqXBjD2wAAoF35LLyZTCalpqZq6dKl6tWrl0aPHq1t27bpwoULSk5OliTl5eWpqKhIsbGxkqTp06dr27ZtSktLU0pKij755BNt2LBB8+fPV9euXX31VQAAALzGpycszJgxQwsXLtRrr72muXPn6ptvvtHGjRvt23+sXbtWSUlJ9uv79++vzZs3q6qqSnPnztXOnTs1b948paSk+OorAAAAeJXPRt7qzJ49W7Nnz3b6WkZGhjIyMhzaYmJi9PLLL3ujNAAAAL/j84PpAQAA4D7CGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAADIbwBAAAYCOENAADAQEw2m83m6yK84YMPPlBgYKCvywAAAGhWRUWF/YSphjpNeAMAAOgIeGwKAABgIIQ3AAAAAyG8AQAAGAjhDQAAwEAIbwAAAAZCePPAzp07NXnyZI0cOVJJSUnKzs5u8vqTJ0/qwQcfVFxcnOLj47VhwwaxuLftedovR48e1f33368xY8ZowoQJWrhwoc6dO+elajsHT/ukvtWrV2vo0KHtWF3n5Wm/FBUVaeHChbr22ms1ZswYPfzww8rPz/dStZ1DS/7+uu+++xQXF6ebbrpJa9askdVq9VK1nc+BAwcUFxfX7HXe/nlPeHNTZmamFi9erMTERK1evVo9evRQSkqKy7/Izp8/r1mzZslkMmnlypWaNm2aVq5cqU2bNnm58o7N03759NNPlZycrJCQEK1YsUKLFi3S0aNHlZKSwl+AbcTTPqnv5MmTWr9+vReq7Hw87Rer1apZs2bpww8/1NKlS5WRkaH8/Hw99NBDqqys9HL1HZOnfZKXl6eUlBQFBwdr9erVSk5O1m9/+1v96le/8nLlncPRo0e1YMGCZq/zyc97G5pVU1Nju/HGG21PPfWUva2ystKWkJBgW7p0qdN7fv3rX9uuvfZaW1lZmb3tueees1177bW2ysrKdq+5M2hJvyxZssSWkJDg0AfHjh2zXXnllbZDhw61e80dXUv6pE5VVZXtnnvusd1www22K6+8sr1L7VRa0i87d+60jRw50lZQUGBv++c//2m7/vrrbcePH2/3mju6lvTJ+vXrbTExMbbS0lJ724oVK2xxcXG2mpqadq+5s6ioqLBt2LDBNnz4cNs111xji42NbfJ6X/y8Z+TNDbm5uSooKFBCQoK9zWKxKD4+XocPH3Z6z5EjRzRu3DgFBQXZ2yZNmqTi4mIdP3683WvuDFrSL1dccYVmz54ti8VibxsyZIgk6fTp0+1bcCfQkj6ps2XLFpWUlGjmzJntXWan05J+ycrK0g033KCBAwfa26Kjo/WXv/xFI0aMaPeaO7qW9EllZaW6dOmibt262dtCQ0NVVlbGaGgbeuedd7RhwwYtXLjQrb+PfPHznvDmhlOnTkmSIiIiHNrDw8OVl5en6upqp/c4u77++6F1WtIvM2bM0IwZMxzaDh48KOnbEIeWa0mfSLU/yNasWaOlS5eqa9eu7V1mp9OSfjlx4oSGDBmiNWvW6Prrr9eIESOUlpamM2fOeKPkDq8lfZKYmCiz2awVK1aouLhYH374obZu3aqbb76Z4x/bUExMjA4cOKAHHnhAJpOp2et98fOe8OaGkpISSVJISIhDe0hIiGpqalReXu70HmfX138/tE5L+qWhwsJCPfvssxoxYoTGjh3bLnV2Ji3pE5vNpvT0dCUmJmrMmDFeqbOzaUm/FBUVac+ePTp8+LCefvppPfvss/r3v/+tH/zgB6qqqvJK3R1ZS/pk8ODBWrhwoTZt2qTrrrtO9957r/r27atly5Z5pebO4tJLL1XPnj3dvt4XP++7tMu7djC2/64YaZjAXbU3JyCAzNwWWtsvhYWFSk5OVk1NjZ577jmP+xGNtaRPXn75ZeXm5mrdunXtX2An1ZJ+qaqqktVq1W9/+1v7D7Lw8HDdc8892r9/v26//fZ2rrpja0mf7Nq1S+np6UpKStJtt92mL7/8UqtWrVJaWpq2bNnCqLUfaq+f96QIN/To0UOSVFpa6tBeVlamgIAABQcHN7qne/fuja6v+3X37t3bqdLOpSX9UufkyZP6/ve/r5KSEm3atEmDBw9u11o7C0/7pLCwUMuXL9eTTz6pbt26qaqqyv7Dq6qqSjU1Nd4pvINryZ+V4OBgjRw50mEEIiYmRj179tTJkyfbt+BOoCV9smHDBk2cOFE///nPNW7cON11113asGGD/vGPf+j111/3St1ozBc/7wlvbqh7lt1w+XZ+fr6ioqKc/hdSZGRkownwdfczt6pttKRfJOnYsWOaOXOmzGaztm/frmHDhrV7rZ2Fp33y3nvvqbS0VHPnztXw4cM1fPhwZWRkSJKGDx+u559/3juFd3At+bMyePBgp9vnVFVVMUrdBlrSJ4WFhRo1apRD2+WXX67Q0FB9+umn7VcsmuSLn/eENzdERkZqwIABysrKsrdZrVYdOnRI48aNc3rP2LFjdeTIEZWVldnbsrKyFBoaSlhoIy3pl9OnTys1NVV9+/bVjh07FBkZ6aVqOwdP++TGG2/U7t27Hf6ZNWuWJGn37t2aNm2a12rvyFryZ2XChAk6evSovvjiC3vb3//+d5WVlbm1aSma1pI+iYqK0tGjRx3acnNzVVxcrEGDBrVrvXDNFz/vmfPmBpPJpNTUVC1dulS9evXS6NGjtW3bNl24cEHJycmSajdPLCoqUmxsrCRp+vTp2rZtm9LS0pSSkqJPPvlEGzZs0Pz585mX0EZa0i9PP/20SkpK9NRTT6mwsFCFhYX29xs4cKD69+/vg2/ScXjaJ71791bv3r0d3uMf//iHpNpHdGgbLfmzkpycrFdffVWpqamaO3euysvL9eyzzyouLk4TJkzw3ZfpIFrSJ4888ojmzZunJ598UnfccYfOnj2rNWvWKCwsTHfddZfvvkwn4xc/79tl97gOauPGjbaJEyfaRo4caUtKSrIdPXrU/tqiRYsabSz64Ycf2pKSkmwjRoywxcfH29avX+/tkjsFd/ulsrLSdtVVV9muvPJKp//87ne/89VX6HA8/bNS3+bNm9mkt5142i+5ubm2H/7wh7bY2FjbNddcY1u0aJHtq6++8nbZHZqnffLWW2/Zpk6dahs+fLht4sSJtieeeMJ27tw5b5fdaaxatarRJr3+8PPeZLNx2CYAAIBRMOcNAADAQAhvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAyE8AYAAGAghDcAcMFms2n58uW67rrrFBsbq+3bt/u6JADghAUAcOXQoUP63e9+p/j4eE2aNElXX321r0sCAMIbALhy4sQJSdJjjz2moUOH+rgaAKjFY1MAcMFqtUqSQkJCfFwJAHyL47EAwImEhAQVFBTYfx0WFiZJGjdunGJjY/Wb3/xG58+f17BhwzRv3jyNHTvW4d7x48erpqZGb7zxhnr37q3MzEz16dPH698DQMdDeAMAJ7KyspSZmak//elPeuKJJzRo0CA988wzstlsOnfunO6//35dcskl2rFjh86cOaNNmzbp2muvlVQb3i5cuKCoqChNmzZN586d05w5c3z8jQB0FIQ3AHBh9erVWrNmjQ4cOKBBgwbZR+Oef/55TZo0SZJUVFSkW265RUOGDNErr7wiqTa8FRYW6q233tLgwYN9+RUAdEDMeQMADwwZMsQe3CSpT58+uuuuu3Ts2DGdP3/e3j548GCCG4B2QXgDAA9cccUVjdoiIiJks9kc5sj17dvXm2UB6EQIbwDgAYvF0qiturpakmQ2m+1t9f8/ALQlwhsAeCAvL69RW25ursxmswYNGuSDigB0NoQ3APDA8ePH9cEHH9h/fe7cOb3++usaO3asevXq5bvCAHQanLAAAB7o2rWrUlNT9eCDD6pbt2566aWXVFNTo4ULF/q6NACdBOENADwQGxurKVOmaO3atfrmm280ZswYzZ8/X8OGDfN1aQA6CfZ5AwA3JSQkKCwsTC+++KKvSwHQiTHnDQAAwEAIbwAAAAZCeAMAADAQ5rwBAAAYCCNvAAAABkJ4AwAAMBDCGwAAgIEQ3gAAAAyE8AYAAGAghDcAAAAD+f9+CLVIg/C7QwAAAABJRU5ErkJggg==\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": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_25\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_122 (Dense)            (None, 64)                124224    \n",
      "_________________________________________________________________\n",
      "dense_123 (Dense)            (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "dense_124 (Dense)            (None, 32)                2080      \n",
      "_________________________________________________________________\n",
      "dense_125 (Dense)            (None, 2)                 66        \n",
      "=================================================================\n",
      "Total params: 130,530\n",
      "Trainable params: 130,530\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model_fft = models.Sequential()\n",
    "model_fft.add(layers.Dense(64, activation='relu', input_shape=(1940,)))\n",
    "model_fft.add(layers.Dense(64, activation='relu'))\n",
    "model_fft.add(layers.Dense(32, activation='relu'))\n",
    "model_fft.add(layers.Dense(2, activation='softmax'))\n",
    "model_fft.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "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": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/150\n",
      "7/7 [==============================] - 1s 75ms/step - loss: 96.6923 - accuracy: 0.4854 - val_loss: 35.8809 - val_accuracy: 0.5071\n",
      "Epoch 2/150\n",
      "7/7 [==============================] - 0s 55ms/step - loss: 28.6141 - accuracy: 0.5648 - val_loss: 22.8140 - val_accuracy: 0.5700\n",
      "Epoch 3/150\n",
      "7/7 [==============================] - 0s 43ms/step - loss: 18.8313 - accuracy: 0.5936 - val_loss: 14.7310 - val_accuracy: 0.6043\n",
      "Epoch 4/150\n",
      "7/7 [==============================] - 0s 38ms/step - loss: 13.0890 - accuracy: 0.6188 - val_loss: 11.7937 - val_accuracy: 0.6186\n",
      "Epoch 5/150\n",
      "7/7 [==============================] - 0s 37ms/step - loss: 11.2396 - accuracy: 0.6389 - val_loss: 10.6772 - val_accuracy: 0.6271\n",
      "Epoch 6/150\n",
      "7/7 [==============================] - 0s 37ms/step - loss: 9.0075 - accuracy: 0.6605 - val_loss: 10.1476 - val_accuracy: 0.6243\n",
      "Epoch 7/150\n",
      "7/7 [==============================] - 0s 30ms/step - loss: 8.4981 - accuracy: 0.6592 - val_loss: 8.0015 - val_accuracy: 0.6586\n",
      "Epoch 8/150\n",
      "7/7 [==============================] - 0s 42ms/step - loss: 6.8115 - accuracy: 0.6729 - val_loss: 6.8114 - val_accuracy: 0.6943\n",
      "Epoch 9/150\n",
      "7/7 [==============================] - 0s 37ms/step - loss: 5.3973 - accuracy: 0.7242 - val_loss: 6.3434 - val_accuracy: 0.7143\n",
      "Epoch 10/150\n",
      "7/7 [==============================] - 0s 44ms/step - loss: 4.0842 - accuracy: 0.7450 - val_loss: 6.8772 - val_accuracy: 0.7086\n",
      "Epoch 11/150\n",
      "7/7 [==============================] - 0s 40ms/step - loss: 4.9251 - accuracy: 0.7402 - val_loss: 6.6226 - val_accuracy: 0.7143\n",
      "Epoch 12/150\n",
      "7/7 [==============================] - 0s 34ms/step - loss: 3.9994 - accuracy: 0.7471 - val_loss: 4.8005 - val_accuracy: 0.7300\n",
      "Epoch 13/150\n",
      "7/7 [==============================] - 0s 54ms/step - loss: 3.2568 - accuracy: 0.7789 - val_loss: 5.1208 - val_accuracy: 0.6914\n",
      "Epoch 14/150\n",
      "7/7 [==============================] - 0s 43ms/step - loss: 3.0077 - accuracy: 0.7715 - val_loss: 4.6467 - val_accuracy: 0.7271\n",
      "Epoch 15/150\n",
      "7/7 [==============================] - 0s 43ms/step - loss: 2.0790 - accuracy: 0.8059 - val_loss: 4.2738 - val_accuracy: 0.7471\n",
      "Epoch 16/150\n",
      "7/7 [==============================] - 0s 46ms/step - loss: 1.7544 - accuracy: 0.8258 - val_loss: 3.9648 - val_accuracy: 0.7600\n",
      "Epoch 17/150\n",
      "7/7 [==============================] - 0s 39ms/step - loss: 1.2878 - accuracy: 0.8463 - val_loss: 3.8681 - val_accuracy: 0.7557\n",
      "Epoch 18/150\n",
      "7/7 [==============================] - 0s 28ms/step - loss: 1.2758 - accuracy: 0.8369 - val_loss: 3.9695 - val_accuracy: 0.7600\n",
      "Epoch 19/150\n",
      "7/7 [==============================] - 0s 33ms/step - loss: 1.2840 - accuracy: 0.8401 - val_loss: 3.7534 - val_accuracy: 0.7629\n",
      "Epoch 20/150\n",
      "7/7 [==============================] - 0s 30ms/step - loss: 0.8514 - accuracy: 0.8694 - val_loss: 4.2098 - val_accuracy: 0.7457\n",
      "Epoch 21/150\n",
      "7/7 [==============================] - 0s 36ms/step - loss: 1.2955 - accuracy: 0.8423 - val_loss: 3.6547 - val_accuracy: 0.7743\n",
      "Epoch 22/150\n",
      "7/7 [==============================] - 0s 48ms/step - loss: 0.8000 - accuracy: 0.8918 - val_loss: 3.7225 - val_accuracy: 0.7757\n",
      "Epoch 23/150\n",
      "7/7 [==============================] - 0s 52ms/step - loss: 0.7972 - accuracy: 0.8728 - val_loss: 3.3448 - val_accuracy: 0.7914\n",
      "Epoch 24/150\n",
      "7/7 [==============================] - 0s 59ms/step - loss: 0.5997 - accuracy: 0.8921 - val_loss: 3.2757 - val_accuracy: 0.7786\n",
      "Epoch 25/150\n",
      "7/7 [==============================] - 0s 68ms/step - loss: 0.6465 - accuracy: 0.8935 - val_loss: 3.3914 - val_accuracy: 0.7786\n",
      "Epoch 26/150\n",
      "7/7 [==============================] - 0s 67ms/step - loss: 0.8082 - accuracy: 0.8748 - val_loss: 3.3227 - val_accuracy: 0.8057\n",
      "Epoch 27/150\n",
      "7/7 [==============================] - 0s 64ms/step - loss: 0.4635 - accuracy: 0.9188 - val_loss: 3.2646 - val_accuracy: 0.7886\n",
      "Epoch 28/150\n",
      "7/7 [==============================] - 0s 63ms/step - loss: 0.5041 - accuracy: 0.9082 - val_loss: 3.1453 - val_accuracy: 0.8014\n",
      "Epoch 29/150\n",
      "7/7 [==============================] - 0s 65ms/step - loss: 0.4147 - accuracy: 0.9182 - val_loss: 3.4267 - val_accuracy: 0.7857\n",
      "Epoch 30/150\n",
      "7/7 [==============================] - 0s 65ms/step - loss: 0.5489 - accuracy: 0.9069 - val_loss: 3.1650 - val_accuracy: 0.7800\n",
      "Epoch 31/150\n",
      "7/7 [==============================] - 0s 55ms/step - loss: 0.4401 - accuracy: 0.9200 - val_loss: 3.1731 - val_accuracy: 0.8057\n",
      "Epoch 32/150\n",
      "7/7 [==============================] - 0s 57ms/step - loss: 0.4046 - accuracy: 0.9248 - val_loss: 3.3053 - val_accuracy: 0.8086\n",
      "Epoch 33/150\n",
      "7/7 [==============================] - 0s 55ms/step - loss: 0.2958 - accuracy: 0.9355 - val_loss: 3.0295 - val_accuracy: 0.8086\n",
      "Epoch 34/150\n",
      "7/7 [==============================] - 0s 49ms/step - loss: 0.2784 - accuracy: 0.9490 - val_loss: 3.0637 - val_accuracy: 0.7943\n",
      "Epoch 35/150\n",
      "7/7 [==============================] - 0s 51ms/step - loss: 0.3644 - accuracy: 0.9201 - val_loss: 3.1210 - val_accuracy: 0.8114\n",
      "Epoch 36/150\n",
      "7/7 [==============================] - 0s 59ms/step - loss: 0.3018 - accuracy: 0.9319 - val_loss: 2.9133 - val_accuracy: 0.8086\n",
      "Epoch 37/150\n",
      "7/7 [==============================] - 0s 62ms/step - loss: 0.3341 - accuracy: 0.9181 - val_loss: 3.6196 - val_accuracy: 0.6986\n",
      "Epoch 38/150\n",
      "7/7 [==============================] - 0s 65ms/step - loss: 1.3230 - accuracy: 0.7957 - val_loss: 4.0344 - val_accuracy: 0.7500\n",
      "Epoch 39/150\n",
      "7/7 [==============================] - 0s 56ms/step - loss: 0.8903 - accuracy: 0.8687 - val_loss: 3.2033 - val_accuracy: 0.8171\n",
      "Epoch 40/150\n",
      "7/7 [==============================] - 0s 62ms/step - loss: 0.2953 - accuracy: 0.9355 - val_loss: 2.8539 - val_accuracy: 0.8086\n",
      "Epoch 41/150\n",
      "7/7 [==============================] - 0s 61ms/step - loss: 0.2751 - accuracy: 0.9462 - val_loss: 2.9457 - val_accuracy: 0.7971\n",
      "Epoch 42/150\n",
      "7/7 [==============================] - 0s 60ms/step - loss: 0.2333 - accuracy: 0.9433 - val_loss: 2.9642 - val_accuracy: 0.8071\n",
      "Epoch 43/150\n",
      "7/7 [==============================] - 0s 63ms/step - loss: 0.1666 - accuracy: 0.9593 - val_loss: 2.8645 - val_accuracy: 0.8300\n",
      "Epoch 44/150\n",
      "7/7 [==============================] - 0s 68ms/step - loss: 0.1358 - accuracy: 0.9693 - val_loss: 2.8603 - val_accuracy: 0.8171\n",
      "Epoch 45/150\n",
      "7/7 [==============================] - 0s 74ms/step - loss: 0.1016 - accuracy: 0.9746 - val_loss: 2.9679 - val_accuracy: 0.8257\n",
      "Epoch 46/150\n",
      "7/7 [==============================] - 0s 52ms/step - loss: 0.0766 - accuracy: 0.9806 - val_loss: 2.9758 - val_accuracy: 0.8157\n",
      "Epoch 47/150\n",
      "7/7 [==============================] - 0s 62ms/step - loss: 0.0995 - accuracy: 0.9744 - val_loss: 2.9087 - val_accuracy: 0.8257\n",
      "Epoch 48/150\n",
      "7/7 [==============================] - 0s 71ms/step - loss: 0.0698 - accuracy: 0.9873 - val_loss: 2.8304 - val_accuracy: 0.8329\n",
      "Epoch 49/150\n",
      "7/7 [==============================] - 0s 62ms/step - loss: 0.0579 - accuracy: 0.9827 - val_loss: 2.7967 - val_accuracy: 0.8257\n",
      "Epoch 50/150\n",
      "7/7 [==============================] - 0s 65ms/step - loss: 0.0608 - accuracy: 0.9894 - val_loss: 2.8346 - val_accuracy: 0.8171\n",
      "Epoch 51/150\n",
      "7/7 [==============================] - 0s 61ms/step - loss: 0.0391 - accuracy: 0.9891 - val_loss: 2.7805 - val_accuracy: 0.8229\n",
      "Epoch 52/150\n",
      "7/7 [==============================] - 0s 68ms/step - loss: 0.0448 - accuracy: 0.9905 - val_loss: 2.7664 - val_accuracy: 0.8329\n",
      "Epoch 53/150\n",
      "7/7 [==============================] - 0s 42ms/step - loss: 0.0452 - accuracy: 0.9902 - val_loss: 2.8147 - val_accuracy: 0.8186\n",
      "Epoch 54/150\n",
      "7/7 [==============================] - 0s 64ms/step - loss: 0.0411 - accuracy: 0.9903 - val_loss: 2.8659 - val_accuracy: 0.8243\n",
      "Epoch 55/150\n",
      "7/7 [==============================] - 0s 70ms/step - loss: 0.0313 - accuracy: 0.9912 - val_loss: 2.7980 - val_accuracy: 0.8257\n",
      "Epoch 56/150\n",
      "7/7 [==============================] - 0s 55ms/step - loss: 0.0351 - accuracy: 0.9902 - val_loss: 2.8821 - val_accuracy: 0.8257\n",
      "Epoch 57/150\n",
      "7/7 [==============================] - 0s 65ms/step - loss: 0.0407 - accuracy: 0.9887 - val_loss: 2.6992 - val_accuracy: 0.8286\n",
      "Epoch 58/150\n",
      "7/7 [==============================] - 0s 74ms/step - loss: 0.0256 - accuracy: 0.9919 - val_loss: 2.7769 - val_accuracy: 0.8186\n",
      "Epoch 59/150\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7/7 [==============================] - 0s 55ms/step - loss: 0.0267 - accuracy: 0.9914 - val_loss: 2.7059 - val_accuracy: 0.8243\n",
      "Epoch 60/150\n",
      "7/7 [==============================] - 0s 62ms/step - loss: 0.0205 - accuracy: 0.9948 - val_loss: 2.7131 - val_accuracy: 0.8214\n",
      "Epoch 61/150\n",
      "7/7 [==============================] - 0s 74ms/step - loss: 0.0163 - accuracy: 0.9961 - val_loss: 2.7067 - val_accuracy: 0.8271\n",
      "Epoch 62/150\n",
      "7/7 [==============================] - 0s 44ms/step - loss: 0.0115 - accuracy: 0.9977 - val_loss: 2.7320 - val_accuracy: 0.8300\n",
      "Epoch 63/150\n",
      "7/7 [==============================] - 0s 63ms/step - loss: 0.0119 - accuracy: 0.9973 - val_loss: 2.7586 - val_accuracy: 0.8243\n",
      "Epoch 64/150\n",
      "7/7 [==============================] - 0s 48ms/step - loss: 0.0178 - accuracy: 0.9948 - val_loss: 2.7376 - val_accuracy: 0.8357\n",
      "Epoch 65/150\n",
      "7/7 [==============================] - 0s 32ms/step - loss: 0.0104 - accuracy: 0.9976 - val_loss: 2.7257 - val_accuracy: 0.8343\n",
      "Epoch 66/150\n",
      "7/7 [==============================] - 0s 42ms/step - loss: 0.0078 - accuracy: 0.9983 - val_loss: 2.7251 - val_accuracy: 0.8371\n",
      "Epoch 67/150\n",
      "7/7 [==============================] - 0s 39ms/step - loss: 0.0070 - accuracy: 0.9992 - val_loss: 2.7167 - val_accuracy: 0.8343\n",
      "Epoch 68/150\n",
      "7/7 [==============================] - 0s 32ms/step - loss: 0.0053 - accuracy: 0.9997 - val_loss: 2.7292 - val_accuracy: 0.8343\n",
      "Epoch 69/150\n",
      "7/7 [==============================] - 0s 31ms/step - loss: 0.0074 - accuracy: 0.9998 - val_loss: 2.7397 - val_accuracy: 0.8329\n",
      "Epoch 70/150\n",
      "7/7 [==============================] - 0s 51ms/step - loss: 0.0066 - accuracy: 0.9988 - val_loss: 2.7266 - val_accuracy: 0.8329\n",
      "Epoch 71/150\n",
      "7/7 [==============================] - 0s 28ms/step - loss: 0.0062 - accuracy: 0.9995 - val_loss: 2.7314 - val_accuracy: 0.8343\n",
      "Epoch 72/150\n",
      "7/7 [==============================] - 0s 53ms/step - loss: 0.0075 - accuracy: 0.9988 - val_loss: 2.7242 - val_accuracy: 0.8329\n",
      "Epoch 73/150\n",
      "7/7 [==============================] - 0s 40ms/step - loss: 0.0064 - accuracy: 1.0000 - val_loss: 2.7190 - val_accuracy: 0.8386\n",
      "Epoch 74/150\n",
      "7/7 [==============================] - 0s 34ms/step - loss: 0.0049 - accuracy: 1.0000 - val_loss: 2.7161 - val_accuracy: 0.8343\n",
      "Epoch 75/150\n",
      "7/7 [==============================] - 0s 33ms/step - loss: 0.0045 - accuracy: 1.0000 - val_loss: 2.7284 - val_accuracy: 0.8329\n",
      "Epoch 76/150\n",
      "7/7 [==============================] - 0s 39ms/step - loss: 0.0037 - accuracy: 1.0000 - val_loss: 2.7279 - val_accuracy: 0.8357\n",
      "Epoch 77/150\n",
      "7/7 [==============================] - 0s 42ms/step - loss: 0.0039 - accuracy: 1.0000 - val_loss: 2.7241 - val_accuracy: 0.8329\n",
      "Epoch 78/150\n",
      "7/7 [==============================] - 0s 37ms/step - loss: 0.0030 - accuracy: 1.0000 - val_loss: 2.7204 - val_accuracy: 0.8343\n",
      "Epoch 79/150\n",
      "7/7 [==============================] - 0s 28ms/step - loss: 0.0032 - accuracy: 1.0000 - val_loss: 2.7192 - val_accuracy: 0.8329\n",
      "Epoch 80/150\n",
      "7/7 [==============================] - 0s 49ms/step - loss: 0.0030 - accuracy: 1.0000 - val_loss: 2.7205 - val_accuracy: 0.8329\n",
      "Epoch 81/150\n",
      "7/7 [==============================] - 0s 26ms/step - loss: 0.0036 - accuracy: 1.0000 - val_loss: 2.7196 - val_accuracy: 0.8329\n",
      "Epoch 82/150\n",
      "7/7 [==============================] - 0s 41ms/step - loss: 0.0035 - accuracy: 1.0000 - val_loss: 2.7148 - val_accuracy: 0.8329\n",
      "Epoch 83/150\n",
      "7/7 [==============================] - 0s 28ms/step - loss: 0.0030 - accuracy: 1.0000 - val_loss: 2.7128 - val_accuracy: 0.8343\n",
      "Epoch 84/150\n",
      "7/7 [==============================] - 0s 51ms/step - loss: 0.0030 - accuracy: 1.0000 - val_loss: 2.7144 - val_accuracy: 0.8329\n",
      "Epoch 85/150\n",
      "7/7 [==============================] - 0s 48ms/step - loss: 0.0028 - accuracy: 1.0000 - val_loss: 2.7186 - val_accuracy: 0.8343\n",
      "Epoch 86/150\n",
      "7/7 [==============================] - 0s 30ms/step - loss: 0.0027 - accuracy: 1.0000 - val_loss: 2.7201 - val_accuracy: 0.8371\n",
      "Epoch 87/150\n",
      "7/7 [==============================] - ETA: 0s - loss: 0.0028 - accuracy: 1.00 - 0s 29ms/step - loss: 0.0028 - accuracy: 1.0000 - val_loss: 2.7172 - val_accuracy: 0.8357\n",
      "Epoch 88/150\n",
      "7/7 [==============================] - 0s 42ms/step - loss: 0.0028 - accuracy: 1.0000 - val_loss: 2.7180 - val_accuracy: 0.8371\n",
      "Epoch 89/150\n",
      "7/7 [==============================] - 0s 30ms/step - loss: 0.0030 - accuracy: 1.0000 - val_loss: 2.7179 - val_accuracy: 0.8371\n",
      "Epoch 90/150\n",
      "7/7 [==============================] - 0s 23ms/step - loss: 0.0027 - accuracy: 1.0000 - val_loss: 2.7196 - val_accuracy: 0.8371\n",
      "Epoch 91/150\n",
      "7/7 [==============================] - 0s 36ms/step - loss: 0.0025 - accuracy: 1.0000 - val_loss: 2.7271 - val_accuracy: 0.8371\n",
      "Epoch 92/150\n",
      "7/7 [==============================] - 0s 26ms/step - loss: 0.0028 - accuracy: 1.0000 - val_loss: 2.7201 - val_accuracy: 0.8371\n",
      "Epoch 93/150\n",
      "7/7 [==============================] - 0s 23ms/step - loss: 0.0024 - accuracy: 1.0000 - val_loss: 2.7203 - val_accuracy: 0.8314\n",
      "Epoch 94/150\n",
      "7/7 [==============================] - 0s 30ms/step - loss: 0.0026 - accuracy: 1.0000 - val_loss: 2.7190 - val_accuracy: 0.8343\n",
      "Epoch 95/150\n",
      "7/7 [==============================] - 0s 26ms/step - loss: 0.0024 - accuracy: 1.0000 - val_loss: 2.7235 - val_accuracy: 0.8343\n",
      "Epoch 96/150\n",
      "7/7 [==============================] - 0s 35ms/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 2.7201 - val_accuracy: 0.8357\n",
      "Epoch 97/150\n",
      "7/7 [==============================] - 0s 54ms/step - loss: 0.0023 - accuracy: 1.0000 - val_loss: 2.7197 - val_accuracy: 0.8357\n",
      "Epoch 98/150\n",
      "7/7 [==============================] - 0s 41ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 2.7167 - val_accuracy: 0.8357\n",
      "Epoch 99/150\n",
      "7/7 [==============================] - 0s 33ms/step - loss: 0.0022 - accuracy: 1.0000 - val_loss: 2.7184 - val_accuracy: 0.8357\n",
      "Epoch 100/150\n",
      "7/7 [==============================] - 0s 32ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 2.7183 - val_accuracy: 0.8371\n",
      "Epoch 101/150\n",
      "7/7 [==============================] - 0s 35ms/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 2.7182 - val_accuracy: 0.8371\n",
      "Epoch 102/150\n",
      "7/7 [==============================] - 0s 53ms/step - loss: 0.0022 - accuracy: 1.0000 - val_loss: 2.7150 - val_accuracy: 0.8371\n",
      "Epoch 103/150\n",
      "7/7 [==============================] - 0s 40ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 2.7160 - val_accuracy: 0.8357\n",
      "Epoch 104/150\n",
      "7/7 [==============================] - 0s 73ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7171 - val_accuracy: 0.8357\n",
      "Epoch 105/150\n",
      "7/7 [==============================] - 0s 62ms/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 2.7147 - val_accuracy: 0.8343\n",
      "Epoch 106/150\n",
      "7/7 [==============================] - 0s 43ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 2.7170 - val_accuracy: 0.8371\n",
      "Epoch 107/150\n",
      "7/7 [==============================] - 0s 54ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7173 - val_accuracy: 0.8357\n",
      "Epoch 108/150\n",
      "7/7 [==============================] - 0s 36ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 2.7158 - val_accuracy: 0.8371\n",
      "Epoch 109/150\n",
      "7/7 [==============================] - 0s 24ms/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 2.7209 - val_accuracy: 0.8314\n",
      "Epoch 110/150\n",
      "7/7 [==============================] - 0s 40ms/step - loss: 0.0018 - accuracy: 1.0000 - val_loss: 2.7174 - val_accuracy: 0.8386\n",
      "Epoch 111/150\n",
      "7/7 [==============================] - 0s 60ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7160 - val_accuracy: 0.8357\n",
      "Epoch 112/150\n",
      "7/7 [==============================] - 0s 53ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 2.7157 - val_accuracy: 0.8371\n",
      "Epoch 113/150\n",
      "7/7 [==============================] - 0s 45ms/step - loss: 0.0018 - accuracy: 1.0000 - val_loss: 2.7185 - val_accuracy: 0.8371\n",
      "Epoch 114/150\n",
      "7/7 [==============================] - 0s 51ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 2.7162 - val_accuracy: 0.8371\n",
      "Epoch 115/150\n",
      "7/7 [==============================] - 0s 45ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7147 - val_accuracy: 0.8343\n",
      "Epoch 116/150\n",
      "7/7 [==============================] - 0s 43ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7143 - val_accuracy: 0.8357\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 117/150\n",
      "7/7 [==============================] - 0s 50ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 2.7136 - val_accuracy: 0.8357\n",
      "Epoch 118/150\n",
      "7/7 [==============================] - 0s 56ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7177 - val_accuracy: 0.8371\n",
      "Epoch 119/150\n",
      "7/7 [==============================] - 0s 52ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7164 - val_accuracy: 0.8343\n",
      "Epoch 120/150\n",
      "7/7 [==============================] - 0s 37ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7153 - val_accuracy: 0.8329\n",
      "Epoch 121/150\n",
      "7/7 [==============================] - 0s 44ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 2.7166 - val_accuracy: 0.8329\n",
      "Epoch 122/150\n",
      "7/7 [==============================] - 0s 52ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 2.7179 - val_accuracy: 0.8371\n",
      "Epoch 123/150\n",
      "7/7 [==============================] - 0s 51ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 2.7206 - val_accuracy: 0.8371\n",
      "Epoch 124/150\n",
      "7/7 [==============================] - 0s 52ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 2.7186 - val_accuracy: 0.8357\n",
      "Epoch 125/150\n",
      "7/7 [==============================] - 0s 50ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 2.7172 - val_accuracy: 0.8357\n",
      "Epoch 126/150\n",
      "7/7 [==============================] - 0s 47ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 2.7172 - val_accuracy: 0.8371\n",
      "Epoch 127/150\n",
      "7/7 [==============================] - 0s 39ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 2.7147 - val_accuracy: 0.8329\n",
      "Epoch 128/150\n",
      "7/7 [==============================] - 0s 60ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 2.7150 - val_accuracy: 0.8357\n",
      "Epoch 129/150\n",
      "7/7 [==============================] - 0s 70ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 2.7191 - val_accuracy: 0.8357\n",
      "Epoch 130/150\n",
      "7/7 [==============================] - 0s 67ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 2.7168 - val_accuracy: 0.8371\n",
      "Epoch 131/150\n",
      "7/7 [==============================] - 0s 59ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 2.7171 - val_accuracy: 0.8371\n",
      "Epoch 132/150\n",
      "7/7 [==============================] - 0s 35ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 2.7179 - val_accuracy: 0.8357\n",
      "Epoch 133/150\n",
      "7/7 [==============================] - 1s 78ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 2.7145 - val_accuracy: 0.8371\n",
      "Epoch 134/150\n",
      "7/7 [==============================] - 0s 58ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 2.7137 - val_accuracy: 0.8371\n",
      "Epoch 135/150\n",
      "7/7 [==============================] - 0s 63ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 2.7140 - val_accuracy: 0.8357\n",
      "Epoch 136/150\n",
      "7/7 [==============================] - 0s 63ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 2.7133 - val_accuracy: 0.8371\n",
      "Epoch 137/150\n",
      "7/7 [==============================] - 0s 60ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7140 - val_accuracy: 0.8343\n",
      "Epoch 138/150\n",
      "7/7 [==============================] - 0s 47ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7122 - val_accuracy: 0.8371\n",
      "Epoch 139/150\n",
      "7/7 [==============================] - 0s 33ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 2.7163 - val_accuracy: 0.8357\n",
      "Epoch 140/150\n",
      "7/7 [==============================] - 0s 37ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7154 - val_accuracy: 0.8371\n",
      "Epoch 141/150\n",
      "7/7 [==============================] - 0s 70ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 2.7143 - val_accuracy: 0.8357\n",
      "Epoch 142/150\n",
      "7/7 [==============================] - 0s 59ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7131 - val_accuracy: 0.8371\n",
      "Epoch 143/150\n",
      "7/7 [==============================] - 0s 70ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7137 - val_accuracy: 0.8343\n",
      "Epoch 144/150\n",
      "7/7 [==============================] - 0s 57ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 2.7157 - val_accuracy: 0.8371\n",
      "Epoch 145/150\n",
      "7/7 [==============================] - 0s 44ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7148 - val_accuracy: 0.8357\n",
      "Epoch 146/150\n",
      "7/7 [==============================] - 0s 46ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7156 - val_accuracy: 0.8371\n",
      "Epoch 147/150\n",
      "7/7 [==============================] - 0s 49ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 2.7150 - val_accuracy: 0.8371\n",
      "Epoch 148/150\n",
      "7/7 [==============================] - 0s 32ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 2.7156 - val_accuracy: 0.8357\n",
      "Epoch 149/150\n",
      "7/7 [==============================] - 0s 33ms/step - loss: 9.9522e-04 - accuracy: 1.0000 - val_loss: 2.7152 - val_accuracy: 0.8371\n",
      "Epoch 150/150\n",
      "7/7 [==============================] - 0s 42ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 2.7152 - val_accuracy: 0.8371\n"
     ]
    }
   ],
   "source": [
    "history_fft = model_fft.fit(X_fft_train,\n",
    "                        to_categorical(y_fft_train),\n",
    "                        epochs = 150,\n",
    "                        batch_size = 250,\n",
    "                        validation_data=(X_fft_test,to_categorical(y_fft_test)))\n",
    "history_fft_dict = history_fft.history"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DNN for fft data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_5\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_23 (Dense)             (None, 512)               993792    \n",
      "_________________________________________________________________\n",
      "dense_24 (Dense)             (None, 512)               262656    \n",
      "_________________________________________________________________\n",
      "dense_25 (Dense)             (None, 256)               131328    \n",
      "_________________________________________________________________\n",
      "dense_26 (Dense)             (None, 128)               32896     \n",
      "_________________________________________________________________\n",
      "dense_27 (Dense)             (None, 2)                 258       \n",
      "=================================================================\n",
      "Total params: 1,420,930\n",
      "Trainable params: 1,420,930\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model_fft = models.Sequential()\n",
    "model_fft.add(layers.Dense(512, activation='relu', input_shape=(1940,)))\n",
    "model_fft.add(layers.Dense(512, activation='relu'))\n",
    "model_fft.add(layers.Dense(256, activation='relu'))\n",
    "model_fft.add(layers.Dense(128, activation='relu'))\n",
    "model_fft.add(layers.Dense(2, activation='softmax'))\n",
    "model_fft.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "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": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/150\n",
      "9/9 [==============================] - 1s 83ms/step - loss: 319.2466 - accuracy: 0.4797 - val_loss: 80.9048 - val_accuracy: 0.5100\n",
      "Epoch 2/150\n",
      "9/9 [==============================] - 1s 67ms/step - loss: 56.2154 - accuracy: 0.5424 - val_loss: 14.3992 - val_accuracy: 0.6543\n",
      "Epoch 3/150\n",
      "9/9 [==============================] - 0s 54ms/step - loss: 15.5494 - accuracy: 0.6300 - val_loss: 30.9866 - val_accuracy: 0.5143\n",
      "Epoch 4/150\n",
      "9/9 [==============================] - 1s 65ms/step - loss: 24.4387 - accuracy: 0.5584 - val_loss: 9.5908 - val_accuracy: 0.6771\n",
      "Epoch 5/150\n",
      "9/9 [==============================] - 1s 59ms/step - loss: 15.4872 - accuracy: 0.6025 - val_loss: 19.5146 - val_accuracy: 0.6014\n",
      "Epoch 6/150\n",
      "9/9 [==============================] - 0s 54ms/step - loss: 13.8549 - accuracy: 0.6317 - val_loss: 6.1533 - val_accuracy: 0.7243\n",
      "Epoch 7/150\n",
      "9/9 [==============================] - 1s 60ms/step - loss: 10.8540 - accuracy: 0.6551 - val_loss: 12.0939 - val_accuracy: 0.5443\n",
      "Epoch 8/150\n",
      "9/9 [==============================] - 1s 62ms/step - loss: 8.8089 - accuracy: 0.6341 - val_loss: 5.7517 - val_accuracy: 0.7100\n",
      "Epoch 9/150\n",
      "9/9 [==============================] - 1s 64ms/step - loss: 3.6163 - accuracy: 0.7337 - val_loss: 3.4111 - val_accuracy: 0.7114\n",
      "Epoch 10/150\n",
      "9/9 [==============================] - 1s 59ms/step - loss: 2.4768 - accuracy: 0.7500 - val_loss: 4.6240 - val_accuracy: 0.6657\n",
      "Epoch 11/150\n",
      "9/9 [==============================] - 1s 56ms/step - loss: 3.2659 - accuracy: 0.6852 - val_loss: 1.8828 - val_accuracy: 0.7543\n",
      "Epoch 12/150\n",
      "9/9 [==============================] - 1s 60ms/step - loss: 1.1256 - accuracy: 0.8159 - val_loss: 2.1167 - val_accuracy: 0.7243\n",
      "Epoch 13/150\n",
      "9/9 [==============================] - 1s 72ms/step - loss: 1.2131 - accuracy: 0.7941 - val_loss: 1.6923 - val_accuracy: 0.7386\n",
      "Epoch 14/150\n",
      "9/9 [==============================] - 1s 98ms/step - loss: 0.7350 - accuracy: 0.8255 - val_loss: 1.7854 - val_accuracy: 0.7543\n",
      "Epoch 15/150\n",
      "9/9 [==============================] - 1s 76ms/step - loss: 0.6075 - accuracy: 0.8589 - val_loss: 3.1547 - val_accuracy: 0.6243\n",
      "Epoch 16/150\n",
      "9/9 [==============================] - 1s 74ms/step - loss: 1.1091 - accuracy: 0.7856 - val_loss: 1.7782 - val_accuracy: 0.7657\n",
      "Epoch 17/150\n",
      "9/9 [==============================] - 1s 72ms/step - loss: 0.8974 - accuracy: 0.8293 - val_loss: 2.3663 - val_accuracy: 0.7100\n",
      "Epoch 18/150\n",
      "9/9 [==============================] - 1s 62ms/step - loss: 0.9764 - accuracy: 0.8087 - val_loss: 1.5685 - val_accuracy: 0.7757\n",
      "Epoch 19/150\n",
      "9/9 [==============================] - 1s 65ms/step - loss: 0.6268 - accuracy: 0.8524 - val_loss: 2.5243 - val_accuracy: 0.6843\n",
      "Epoch 20/150\n",
      "9/9 [==============================] - 1s 63ms/step - loss: 0.7130 - accuracy: 0.8391 - val_loss: 1.5598 - val_accuracy: 0.7800\n",
      "Epoch 21/150\n",
      "9/9 [==============================] - 1s 60ms/step - loss: 0.2788 - accuracy: 0.9204 - val_loss: 2.9394 - val_accuracy: 0.6243\n",
      "Epoch 22/150\n",
      "9/9 [==============================] - 1s 63ms/step - loss: 1.1175 - accuracy: 0.7720 - val_loss: 1.4569 - val_accuracy: 0.8043\n",
      "Epoch 23/150\n",
      "9/9 [==============================] - 1s 58ms/step - loss: 0.4100 - accuracy: 0.8998 - val_loss: 1.8090 - val_accuracy: 0.7929\n",
      "Epoch 24/150\n",
      "9/9 [==============================] - 1s 70ms/step - loss: 0.5964 - accuracy: 0.8713 - val_loss: 1.8664 - val_accuracy: 0.7814\n",
      "Epoch 25/150\n",
      "9/9 [==============================] - 1s 71ms/step - loss: 0.5427 - accuracy: 0.8703 - val_loss: 2.5478 - val_accuracy: 0.6914\n",
      "Epoch 26/150\n",
      "9/9 [==============================] - 1s 70ms/step - loss: 0.4948 - accuracy: 0.8787 - val_loss: 2.1324 - val_accuracy: 0.7286\n",
      "Epoch 27/150\n",
      "9/9 [==============================] - 1s 60ms/step - loss: 0.5975 - accuracy: 0.8601 - val_loss: 1.5547 - val_accuracy: 0.8071\n",
      "Epoch 28/150\n",
      "9/9 [==============================] - 1s 81ms/step - loss: 0.2383 - accuracy: 0.9243 - val_loss: 1.5510 - val_accuracy: 0.8000\n",
      "Epoch 29/150\n",
      "9/9 [==============================] - 1s 80ms/step - loss: 0.1678 - accuracy: 0.9442 - val_loss: 1.4041 - val_accuracy: 0.8257\n",
      "Epoch 30/150\n",
      "9/9 [==============================] - 1s 77ms/step - loss: 0.1288 - accuracy: 0.9529 - val_loss: 1.3468 - val_accuracy: 0.8257\n",
      "Epoch 31/150\n",
      "9/9 [==============================] - 1s 78ms/step - loss: 0.0781 - accuracy: 0.9716 - val_loss: 1.3566 - val_accuracy: 0.8257\n",
      "Epoch 32/150\n",
      "9/9 [==============================] - 1s 72ms/step - loss: 0.0811 - accuracy: 0.9708 - val_loss: 1.2403 - val_accuracy: 0.8471\n",
      "Epoch 33/150\n",
      "9/9 [==============================] - 1s 90ms/step - loss: 0.0753 - accuracy: 0.9710 - val_loss: 1.1775 - val_accuracy: 0.8514\n",
      "Epoch 34/150\n",
      "9/9 [==============================] - 1s 77ms/step - loss: 0.0401 - accuracy: 0.9858 - val_loss: 1.4594 - val_accuracy: 0.8043\n",
      "Epoch 35/150\n",
      "9/9 [==============================] - 1s 68ms/step - loss: 0.1613 - accuracy: 0.9363 - val_loss: 1.3894 - val_accuracy: 0.8314\n",
      "Epoch 36/150\n",
      "9/9 [==============================] - 1s 79ms/step - loss: 0.0635 - accuracy: 0.9716 - val_loss: 1.4103 - val_accuracy: 0.8386\n",
      "Epoch 37/150\n",
      "9/9 [==============================] - 1s 74ms/step - loss: 0.0352 - accuracy: 0.9901 - val_loss: 1.5267 - val_accuracy: 0.8029\n",
      "Epoch 38/150\n",
      "9/9 [==============================] - 1s 90ms/step - loss: 0.0784 - accuracy: 0.9678 - val_loss: 1.4165 - val_accuracy: 0.8200\n",
      "Epoch 39/150\n",
      "9/9 [==============================] - 1s 87ms/step - loss: 0.1301 - accuracy: 0.9534 - val_loss: 1.3933 - val_accuracy: 0.8486\n",
      "Epoch 40/150\n",
      "9/9 [==============================] - 1s 66ms/step - loss: 0.1205 - accuracy: 0.9553 - val_loss: 1.5404 - val_accuracy: 0.8057\n",
      "Epoch 41/150\n",
      "9/9 [==============================] - 1s 69ms/step - loss: 0.5092 - accuracy: 0.8817 - val_loss: 2.7797 - val_accuracy: 0.7243\n",
      "Epoch 42/150\n",
      "9/9 [==============================] - 1s 75ms/step - loss: 0.6156 - accuracy: 0.8752 - val_loss: 1.5964 - val_accuracy: 0.8186\n",
      "Epoch 43/150\n",
      "9/9 [==============================] - 1s 84ms/step - loss: 0.0571 - accuracy: 0.9799 - val_loss: 1.3001 - val_accuracy: 0.8457\n",
      "Epoch 44/150\n",
      "9/9 [==============================] - 1s 102ms/step - loss: 0.0280 - accuracy: 0.9870 - val_loss: 1.3264 - val_accuracy: 0.8443\n",
      "Epoch 45/150\n",
      "9/9 [==============================] - 1s 119ms/step - loss: 0.0440 - accuracy: 0.9783 - val_loss: 1.4786 - val_accuracy: 0.8271\n",
      "Epoch 46/150\n",
      "9/9 [==============================] - 1s 79ms/step - loss: 0.0219 - accuracy: 0.9918 - val_loss: 1.6634 - val_accuracy: 0.8186\n",
      "Epoch 47/150\n",
      "9/9 [==============================] - 1s 78ms/step - loss: 0.0265 - accuracy: 0.9896 - val_loss: 1.5934 - val_accuracy: 0.8186\n",
      "Epoch 48/150\n",
      "9/9 [==============================] - 1s 65ms/step - loss: 0.0153 - accuracy: 0.9943 - val_loss: 1.4815 - val_accuracy: 0.8300\n",
      "Epoch 49/150\n",
      "9/9 [==============================] - 1s 93ms/step - loss: 0.0107 - accuracy: 0.9979 - val_loss: 1.3533 - val_accuracy: 0.8586\n",
      "Epoch 50/150\n",
      "9/9 [==============================] - 1s 83ms/step - loss: 0.0087 - accuracy: 0.9987 - val_loss: 1.4103 - val_accuracy: 0.8543\n",
      "Epoch 51/150\n",
      "9/9 [==============================] - 1s 84ms/step - loss: 0.0070 - accuracy: 0.9997 - val_loss: 1.4279 - val_accuracy: 0.8514\n",
      "Epoch 52/150\n",
      "9/9 [==============================] - 1s 81ms/step - loss: 0.0033 - accuracy: 1.0000 - val_loss: 1.4330 - val_accuracy: 0.8443\n",
      "Epoch 53/150\n",
      "9/9 [==============================] - 1s 100ms/step - loss: 0.0029 - accuracy: 1.0000 - val_loss: 1.3766 - val_accuracy: 0.8571\n",
      "Epoch 54/150\n",
      "9/9 [==============================] - 1s 77ms/step - loss: 0.0027 - accuracy: 1.0000 - val_loss: 1.4376 - val_accuracy: 0.8429\n",
      "Epoch 55/150\n",
      "9/9 [==============================] - 1s 82ms/step - loss: 0.0025 - accuracy: 1.0000 - val_loss: 1.3946 - val_accuracy: 0.8543\n",
      "Epoch 56/150\n",
      "9/9 [==============================] - 1s 79ms/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 1.4190 - val_accuracy: 0.8457\n",
      "Epoch 57/150\n",
      "9/9 [==============================] - 1s 81ms/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 1.4119 - val_accuracy: 0.8486\n",
      "Epoch 58/150\n",
      "9/9 [==============================] - 1s 81ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 1.4219 - val_accuracy: 0.8457\n",
      "Epoch 59/150\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9/9 [==============================] - 1s 90ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 1.4117 - val_accuracy: 0.8500\n",
      "Epoch 60/150\n",
      "9/9 [==============================] - 0s 56ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.4176 - val_accuracy: 0.8486\n",
      "Epoch 61/150\n",
      "9/9 [==============================] - 1s 59ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.4098 - val_accuracy: 0.8514\n",
      "Epoch 62/150\n",
      "9/9 [==============================] - 1s 71ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.4179 - val_accuracy: 0.8500\n",
      "Epoch 63/150\n",
      "9/9 [==============================] - 1s 79ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 1.4159 - val_accuracy: 0.8500\n",
      "Epoch 64/150\n",
      "9/9 [==============================] - 1s 67ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.4164 - val_accuracy: 0.8500\n",
      "Epoch 65/150\n",
      "9/9 [==============================] - 1s 65ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 1.4079 - val_accuracy: 0.8514\n",
      "Epoch 66/150\n",
      "9/9 [==============================] - 1s 73ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 1.4159 - val_accuracy: 0.8486\n",
      "Epoch 67/150\n",
      "9/9 [==============================] - 0s 55ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 1.4130 - val_accuracy: 0.8500\n",
      "Epoch 68/150\n",
      "9/9 [==============================] - 1s 71ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.4139 - val_accuracy: 0.8500\n",
      "Epoch 69/150\n",
      "9/9 [==============================] - 1s 70ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 1.4160 - val_accuracy: 0.8486\n",
      "Epoch 70/150\n",
      "9/9 [==============================] - 1s 72ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 1.4167 - val_accuracy: 0.8500\n",
      "Epoch 71/150\n",
      "9/9 [==============================] - 1s 103ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 1.4110 - val_accuracy: 0.8514\n",
      "Epoch 72/150\n",
      "9/9 [==============================] - 1s 73ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4218 - val_accuracy: 0.8486\n",
      "Epoch 73/150\n",
      "9/9 [==============================] - 1s 74ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4219 - val_accuracy: 0.8486\n",
      "Epoch 74/150\n",
      "9/9 [==============================] - 1s 107ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 1.4087 - val_accuracy: 0.8529\n",
      "Epoch 75/150\n",
      "9/9 [==============================] - 1s 123ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4148 - val_accuracy: 0.8500\n",
      "Epoch 76/150\n",
      "9/9 [==============================] - 1s 100ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 1.4277 - val_accuracy: 0.8471\n",
      "Epoch 77/150\n",
      "9/9 [==============================] - 1s 64ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.4124 - val_accuracy: 0.8500\n",
      "Epoch 78/150\n",
      "9/9 [==============================] - 1s 93ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4245 - val_accuracy: 0.8486\n",
      "Epoch 79/150\n",
      "9/9 [==============================] - 1s 118ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4126 - val_accuracy: 0.8529\n",
      "Epoch 80/150\n",
      "9/9 [==============================] - 1s 113ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4134 - val_accuracy: 0.8514\n",
      "Epoch 81/150\n",
      "9/9 [==============================] - 1s 92ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4123 - val_accuracy: 0.8500\n",
      "Epoch 82/150\n",
      "9/9 [==============================] - 1s 123ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.4036 - val_accuracy: 0.8543\n",
      "Epoch 83/150\n",
      "9/9 [==============================] - 1s 91ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.4284 - val_accuracy: 0.8457\n",
      "Epoch 84/150\n",
      "9/9 [==============================] - 1s 98ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.4126 - val_accuracy: 0.8500\n",
      "Epoch 85/150\n",
      "9/9 [==============================] - 1s 121ms/step - loss: 0.0010 - accuracy: 1.0000 - val_loss: 1.4056 - val_accuracy: 0.8543\n",
      "Epoch 86/150\n",
      "9/9 [==============================] - 1s 96ms/step - loss: 9.9131e-04 - accuracy: 1.0000 - val_loss: 1.4096 - val_accuracy: 0.8500\n",
      "Epoch 87/150\n",
      "9/9 [==============================] - 1s 113ms/step - loss: 9.6264e-04 - accuracy: 1.0000 - val_loss: 1.4031 - val_accuracy: 0.8543\n",
      "Epoch 88/150\n",
      "9/9 [==============================] - 1s 82ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.4133 - val_accuracy: 0.8500\n",
      "Epoch 89/150\n",
      "9/9 [==============================] - 1s 118ms/step - loss: 9.4793e-04 - accuracy: 1.0000 - val_loss: 1.4076 - val_accuracy: 0.8500\n",
      "Epoch 90/150\n",
      "9/9 [==============================] - 1s 99ms/step - loss: 9.8618e-04 - accuracy: 1.0000 - val_loss: 1.4134 - val_accuracy: 0.8500\n",
      "Epoch 91/150\n",
      "9/9 [==============================] - 1s 107ms/step - loss: 8.8239e-04 - accuracy: 1.0000 - val_loss: 1.4145 - val_accuracy: 0.8500\n",
      "Epoch 92/150\n",
      "9/9 [==============================] - 1s 121ms/step - loss: 9.1421e-04 - accuracy: 1.0000 - val_loss: 1.4111 - val_accuracy: 0.8514\n",
      "Epoch 93/150\n",
      "9/9 [==============================] - 1s 104ms/step - loss: 9.3024e-04 - accuracy: 1.0000 - val_loss: 1.4043 - val_accuracy: 0.8529\n",
      "Epoch 94/150\n",
      "9/9 [==============================] - 1s 83ms/step - loss: 9.0920e-04 - accuracy: 1.0000 - val_loss: 1.4167 - val_accuracy: 0.8500\n",
      "Epoch 95/150\n",
      "9/9 [==============================] - 1s 99ms/step - loss: 9.6831e-04 - accuracy: 1.0000 - val_loss: 1.4140 - val_accuracy: 0.8500\n",
      "Epoch 96/150\n",
      "9/9 [==============================] - 1s 104ms/step - loss: 8.6317e-04 - accuracy: 1.0000 - val_loss: 1.4159 - val_accuracy: 0.8471\n",
      "Epoch 97/150\n",
      "9/9 [==============================] - 1s 101ms/step - loss: 8.9219e-04 - accuracy: 1.0000 - val_loss: 1.4048 - val_accuracy: 0.8529\n",
      "Epoch 98/150\n",
      "9/9 [==============================] - 1s 92ms/step - loss: 9.4752e-04 - accuracy: 1.0000 - val_loss: 1.4075 - val_accuracy: 0.8514\n",
      "Epoch 99/150\n",
      "9/9 [==============================] - 1s 100ms/step - loss: 9.0544e-04 - accuracy: 1.0000 - val_loss: 1.4144 - val_accuracy: 0.8514\n",
      "Epoch 100/150\n",
      "9/9 [==============================] - 1s 91ms/step - loss: 8.4986e-04 - accuracy: 1.0000 - val_loss: 1.4088 - val_accuracy: 0.8529\n",
      "Epoch 101/150\n",
      "9/9 [==============================] - 1s 92ms/step - loss: 8.0125e-04 - accuracy: 1.0000 - val_loss: 1.4154 - val_accuracy: 0.8500\n",
      "Epoch 102/150\n",
      "9/9 [==============================] - 1s 72ms/step - loss: 8.5796e-04 - accuracy: 1.0000 - val_loss: 1.4152 - val_accuracy: 0.8486\n",
      "Epoch 103/150\n",
      "9/9 [==============================] - 1s 80ms/step - loss: 8.8981e-04 - accuracy: 1.0000 - val_loss: 1.4136 - val_accuracy: 0.8486\n",
      "Epoch 104/150\n",
      "9/9 [==============================] - 1s 81ms/step - loss: 8.2722e-04 - accuracy: 1.0000 - val_loss: 1.4166 - val_accuracy: 0.8500\n",
      "Epoch 105/150\n",
      "9/9 [==============================] - 1s 95ms/step - loss: 8.4452e-04 - accuracy: 1.0000 - val_loss: 1.4163 - val_accuracy: 0.8457\n",
      "Epoch 106/150\n",
      "9/9 [==============================] - 1s 95ms/step - loss: 7.7318e-04 - accuracy: 1.0000 - val_loss: 1.4139 - val_accuracy: 0.8471\n",
      "Epoch 107/150\n",
      "9/9 [==============================] - 1s 90ms/step - loss: 8.2486e-04 - accuracy: 1.0000 - val_loss: 1.4179 - val_accuracy: 0.8471\n",
      "Epoch 108/150\n",
      "9/9 [==============================] - 1s 97ms/step - loss: 7.7974e-04 - accuracy: 1.0000 - val_loss: 1.4189 - val_accuracy: 0.8471\n",
      "Epoch 109/150\n",
      "9/9 [==============================] - 1s 88ms/step - loss: 7.4714e-04 - accuracy: 1.0000 - val_loss: 1.4161 - val_accuracy: 0.8514\n",
      "Epoch 110/150\n",
      "9/9 [==============================] - 1s 88ms/step - loss: 7.7343e-04 - accuracy: 1.0000 - val_loss: 1.4178 - val_accuracy: 0.8471\n",
      "Epoch 111/150\n",
      "9/9 [==============================] - 1s 85ms/step - loss: 7.6869e-04 - accuracy: 1.0000 - val_loss: 1.4114 - val_accuracy: 0.8514\n",
      "Epoch 112/150\n",
      "9/9 [==============================] - 1s 86ms/step - loss: 8.1816e-04 - accuracy: 1.0000 - val_loss: 1.4342 - val_accuracy: 0.8471\n",
      "Epoch 113/150\n",
      "9/9 [==============================] - 1s 88ms/step - loss: 7.7027e-04 - accuracy: 1.0000 - val_loss: 1.4098 - val_accuracy: 0.8500\n",
      "Epoch 114/150\n",
      "9/9 [==============================] - 1s 81ms/step - loss: 6.8198e-04 - accuracy: 1.0000 - val_loss: 1.4265 - val_accuracy: 0.8457\n",
      "Epoch 115/150\n",
      "9/9 [==============================] - 1s 96ms/step - loss: 7.8881e-04 - accuracy: 1.0000 - val_loss: 1.4127 - val_accuracy: 0.8486\n",
      "Epoch 116/150\n",
      "9/9 [==============================] - 1s 84ms/step - loss: 6.7718e-04 - accuracy: 1.0000 - val_loss: 1.4262 - val_accuracy: 0.8457\n",
      "Epoch 117/150\n",
      "9/9 [==============================] - 1s 68ms/step - loss: 7.3215e-04 - accuracy: 1.0000 - val_loss: 1.4260 - val_accuracy: 0.8457\n",
      "Epoch 118/150\n",
      "9/9 [==============================] - 1s 78ms/step - loss: 6.6924e-04 - accuracy: 1.0000 - val_loss: 1.4183 - val_accuracy: 0.8457\n",
      "Epoch 119/150\n",
      "9/9 [==============================] - 1s 69ms/step - loss: 7.2910e-04 - accuracy: 1.0000 - val_loss: 1.4246 - val_accuracy: 0.8457\n",
      "Epoch 120/150\n",
      "9/9 [==============================] - 1s 95ms/step - loss: 6.5720e-04 - accuracy: 1.0000 - val_loss: 1.4152 - val_accuracy: 0.8486\n",
      "Epoch 121/150\n",
      "9/9 [==============================] - 1s 123ms/step - loss: 6.6320e-04 - accuracy: 1.0000 - val_loss: 1.4242 - val_accuracy: 0.8471\n",
      "Epoch 122/150\n",
      "9/9 [==============================] - 1s 94ms/step - loss: 6.8710e-04 - accuracy: 1.0000 - val_loss: 1.4200 - val_accuracy: 0.8486\n",
      "Epoch 123/150\n",
      "9/9 [==============================] - 1s 98ms/step - loss: 6.6551e-04 - accuracy: 1.0000 - val_loss: 1.4204 - val_accuracy: 0.8486\n",
      "Epoch 124/150\n",
      "9/9 [==============================] - 1s 92ms/step - loss: 7.1184e-04 - accuracy: 1.0000 - val_loss: 1.4252 - val_accuracy: 0.8443\n",
      "Epoch 125/150\n",
      "9/9 [==============================] - 1s 83ms/step - loss: 5.8469e-04 - accuracy: 1.0000 - val_loss: 1.4264 - val_accuracy: 0.8486\n",
      "Epoch 126/150\n",
      "9/9 [==============================] - 1s 91ms/step - loss: 6.4386e-04 - accuracy: 1.0000 - val_loss: 1.4248 - val_accuracy: 0.8457\n",
      "Epoch 127/150\n",
      "9/9 [==============================] - 1s 88ms/step - loss: 6.7852e-04 - accuracy: 1.0000 - val_loss: 1.4233 - val_accuracy: 0.8471\n",
      "Epoch 128/150\n",
      "9/9 [==============================] - 1s 92ms/step - loss: 7.3191e-04 - accuracy: 1.0000 - val_loss: 1.4233 - val_accuracy: 0.8500\n",
      "Epoch 129/150\n",
      "9/9 [==============================] - 1s 102ms/step - loss: 6.3676e-04 - accuracy: 1.0000 - val_loss: 1.4350 - val_accuracy: 0.8429\n",
      "Epoch 130/150\n",
      "9/9 [==============================] - 1s 93ms/step - loss: 6.0794e-04 - accuracy: 1.0000 - val_loss: 1.4286 - val_accuracy: 0.8443\n",
      "Epoch 131/150\n",
      "9/9 [==============================] - 1s 100ms/step - loss: 6.3115e-04 - accuracy: 1.0000 - val_loss: 1.4271 - val_accuracy: 0.8486\n",
      "Epoch 132/150\n",
      "9/9 [==============================] - 1s 89ms/step - loss: 6.3095e-04 - accuracy: 1.0000 - val_loss: 1.4307 - val_accuracy: 0.8457\n",
      "Epoch 133/150\n",
      "9/9 [==============================] - 1s 123ms/step - loss: 5.7126e-04 - accuracy: 1.0000 - val_loss: 1.4264 - val_accuracy: 0.8486\n",
      "Epoch 134/150\n",
      "9/9 [==============================] - 1s 108ms/step - loss: 5.8467e-04 - accuracy: 1.0000 - val_loss: 1.4339 - val_accuracy: 0.8443\n",
      "Epoch 135/150\n",
      "9/9 [==============================] - 1s 89ms/step - loss: 6.1019e-04 - accuracy: 1.0000 - val_loss: 1.4265 - val_accuracy: 0.8486\n",
      "Epoch 136/150\n",
      "9/9 [==============================] - 1s 71ms/step - loss: 5.8053e-04 - accuracy: 1.0000 - val_loss: 1.4346 - val_accuracy: 0.8443\n",
      "Epoch 137/150\n",
      "9/9 [==============================] - 1s 84ms/step - loss: 5.8843e-04 - accuracy: 1.0000 - val_loss: 1.4277 - val_accuracy: 0.8500\n",
      "Epoch 138/150\n",
      "9/9 [==============================] - 1s 90ms/step - loss: 5.3436e-04 - accuracy: 1.0000 - val_loss: 1.4420 - val_accuracy: 0.8414\n",
      "Epoch 139/150\n",
      "9/9 [==============================] - 1s 79ms/step - loss: 5.3219e-04 - accuracy: 1.0000 - val_loss: 1.4257 - val_accuracy: 0.8500\n",
      "Epoch 140/150\n",
      "9/9 [==============================] - 1s 98ms/step - loss: 5.2742e-04 - accuracy: 1.0000 - val_loss: 1.4386 - val_accuracy: 0.8429\n",
      "Epoch 141/150\n",
      "9/9 [==============================] - 1s 83ms/step - loss: 5.7604e-04 - accuracy: 1.0000 - val_loss: 1.4354 - val_accuracy: 0.8471\n",
      "Epoch 142/150\n",
      "9/9 [==============================] - 1s 82ms/step - loss: 5.4351e-04 - accuracy: 1.0000 - val_loss: 1.4334 - val_accuracy: 0.8443\n",
      "Epoch 143/150\n",
      "9/9 [==============================] - 1s 76ms/step - loss: 5.2800e-04 - accuracy: 1.0000 - val_loss: 1.4356 - val_accuracy: 0.8429\n",
      "Epoch 144/150\n",
      "9/9 [==============================] - 1s 77ms/step - loss: 5.0445e-04 - accuracy: 1.0000 - val_loss: 1.4388 - val_accuracy: 0.8429\n",
      "Epoch 145/150\n",
      "9/9 [==============================] - 1s 90ms/step - loss: 5.8336e-04 - accuracy: 1.0000 - val_loss: 1.4373 - val_accuracy: 0.8471\n",
      "Epoch 146/150\n",
      "9/9 [==============================] - 1s 81ms/step - loss: 5.5812e-04 - accuracy: 1.0000 - val_loss: 1.4349 - val_accuracy: 0.8486\n",
      "Epoch 147/150\n",
      "9/9 [==============================] - 1s 83ms/step - loss: 4.8582e-04 - accuracy: 1.0000 - val_loss: 1.4303 - val_accuracy: 0.8500\n",
      "Epoch 148/150\n",
      "9/9 [==============================] - 1s 76ms/step - loss: 4.8091e-04 - accuracy: 1.0000 - val_loss: 1.4448 - val_accuracy: 0.8429\n",
      "Epoch 149/150\n",
      "9/9 [==============================] - 1s 108ms/step - loss: 5.1307e-04 - accuracy: 1.0000 - val_loss: 1.4334 - val_accuracy: 0.8500\n",
      "Epoch 150/150\n",
      "9/9 [==============================] - 1s 102ms/step - loss: 5.0263e-04 - accuracy: 1.0000 - val_loss: 1.4364 - val_accuracy: 0.8500\n"
     ]
    }
   ],
   "source": [
    "history_fft = model_fft.fit(X_fft_train,\n",
    "                        to_categorical(y_fft_train),\n",
    "                        epochs = 150,\n",
    "                        batch_size = 200,\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": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.64\n",
      "0.7142857142857143\n",
      "0.49019607843137253\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.naive_bayes import GaussianNB\n",
    "model_gnb = GaussianNB()\n",
    "model_gnb.fit(X_train, y_train);\n",
    "y_pred_gnb = model_gnb.predict(X_test)\n",
    "print( accuracy_score(y_test,y_pred_gnb))\n",
    "print( precision_score(y_test,y_pred_gnb))\n",
    "print( recall_score(y_test,y_pred_gnb))\n",
    "\n",
    "confmat = confusion_matrix(y_test,y_pred_gnb)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"Gaussian Naive Bayes time-series\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "\n",
    "plt.savefig(\"Long_lead_Gaussian Naive Bayes time-series\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6214285714285714\n",
      "0.7473118279569892\n",
      "0.38935574229691877\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.naive_bayes import GaussianNB\n",
    "model_gnb = GaussianNB()\n",
    "model_gnb.fit(X_fft_train, y_fft_train);\n",
    "y_fft_pred_gnb = model_gnb.predict(X_fft_test)\n",
    "print( accuracy_score(y_fft_test,y_fft_pred_gnb))\n",
    "print( precision_score(y_fft_test,y_fft_pred_gnb))\n",
    "print( recall_score(y_fft_test,y_fft_pred_gnb))\n",
    "\n",
    "confmat = confusion_matrix(y_fft_test,y_fft_pred_gnb)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"Gaussian Naive Bayes time-series-fft\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "\n",
    "plt.savefig(\"Long_lead_Gaussian Naive Bayes time-series-fft\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.78\n",
      "0.7664041994750657\n",
      "0.8179271708683473\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "log_reg = LogisticRegression(max_iter=100000)\n",
    "log_reg.fit(X_train,y_train)\n",
    "y_pred_log_reg = log_reg.predict(X_test)\n",
    "print( accuracy_score(y_test,y_pred_log_reg))\n",
    "print( precision_score(y_test,y_pred_log_reg))\n",
    "print( recall_score(y_test,y_pred_log_reg))\n",
    "\n",
    "confmat = confusion_matrix(y_test,y_pred_log_reg)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"Logistic Regression time-series\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "\n",
    "plt.savefig(\"Long_lead_Logistic Regression time-series\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8114285714285714\n",
      "0.783375314861461\n",
      "0.8711484593837535\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQwAAAD3CAYAAADormr9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAlIUlEQVR4nO3de1xUdf748dcwwygBZkZbXkKFUrwsiZnlBVoviJtZmRcUIw0vedsCbwgqpJipGXkpTa1+9UUTNG1za3e10NT1tn7dFKPQIi94ybvCjDbAzOf7hz/nIaVwcGeYGXg/fZzHgzOc+Zz3GeHN+/M5n3OOTimlEEIIDbxcHYAQwnNIwhBCaCYJQwihmSQMIYRmkjCEEJpJwhBCaOZWCePEiROEhYU5rL3s7GxmzZpV7jbffPMNCxcu1Lz9zU6cOEGLFi149tln7UtkZCSxsbEUFBT8V7E7y+rVq1m+fLnD2ouLi+PixYsAjBgxgp9++slhbTva1KlT2blzp0PaslqtjB49mqioKFauXElqaipdu3bl7bffZu3ataxatcoh+3E7yo0UFBSoNm3aVOk+Fy1apGbMmHFH771VvDabTc2cOVMlJCQ4Ijy316xZM3XhwgVXh1HlTp48qVq3bq1KS0uVUko1b95cnT59WimlVGJionr//fddGZ7TGFydsLQqKipixowZ5OXlodPpCA8PZ/z48RgMBrZu3cr8+fPx8vKiRYsW7Ny5k08++YR///vfbNy4kWXLlrFp0yaWLl2KTqdDr9czefJkjEYjmZmZWK1W/P39ady4sX37c+fOkZqays8//4yXlxcDBw7kxRdfrDBOi8XC2bNnCQgIAKC4uJj58+ezd+9erFYrLVu2ZNq0afj5+ZGTk8Nrr71GSUkJgYGBnDp1iilTpgDw+uuvc9ddd2E2m1m3bh3/+te/WLp0KSUlJdSuXZvExETCwsLIz89n6tSpFBcXo5SiX79+DB48+LavL168mEuXLpGSksKPP/7IzJkzuXz5Mjqdjri4OJ577jn27NnD22+/zYMPPsiPP/5IaWkpM2bM4NFHHy1zrElJSQAMGTKE5cuXM3jwYBYuXMjVq1dJT0+nfv36HDlyBB8fH0aOHElGRgZHjhyhR48eJCcnA7B58+ZbHtdv3e54AJYuXcqmTZuw2Ww0bNiQ1NRU7r//fmJjY7n77rv5+eefGTRoEJs2bWLw4MH07NmT//znP8yfP59r167h5eXFuHHj6NKlC+fOnSMxMZFLly4B8OSTTxIfH18mFpPJxPDhwyktLeX555/n8uXLKKUYMWIEPXv2ZPPmzezYsYPatWvbY6w2XJuvyiqvwpg8ebJKS0tTNptNWSwWFRcXp5YtW6YuXryo2rdvr3744QellFLr169XzZo1UwUFBWrdunVq5MiRSimlunXrpr799lullFLbt29XixcvVkqVrTBu3n7s2LFq7ty5SimlCgsLVa9evdTRo0d/F29ISIh65pln1NNPP606dOigevbsqdLT05XJZFJKKbV48WI1Z84cZbPZlFJKvfXWWyo1NVWVlJSoiIgI9c033yillNq1a5dq3ry52r17t9q9e7cKCQlRJ06cUEopdeTIEfX000+rixcvKqWUOnz4sOrUqZMym80qKSlJLVu2TCml1NmzZ1V8fLyyWq23ff3G8ZaUlKhu3bqpjRs3KqWU+uWXX1R4eLj6z3/+o3bv3q1atGihvv/+e6WUUh988IEaPHjwLf9fbq4wunTponJycuzvz83NVUopNWzYMBUdHa0sFou6cOGCatWqlfrll1/KPa7fut3xfPbZZyo+Pl6VlJQopZTKzMxUw4cPV0op9cILL6ikpCR7Gy+88IL6xz/+oS5fvqx69OihCgoK7MceERGhTp48qd555x01ffp0pZRSZrNZxcfHq8LCwt/F89uf1Zs/B6kw3MC2bdtYvXo1Op0Oo9HIwIED+fjjj2natCnBwcGEhIQA0KdPn1uOQ/Tq1Ytx48bx5JNP0qlTJ0aMGFHu/nbu3MmkSZMA8Pf354svvrjldrVr1+bzzz8HYPv27UyaNIkuXbrg6+sLXB8jKSoqsvedS0pKuPfeezl8+DBw/S8YwBNPPMHDDz9sb7d+/fo0bNgQgB07dnD27FmGDh1q/75Op+P48eNERkaSmJhITk4OHTp0YNq0aXh5ed329RuOHj2KxWKhR48eANx///306NGD7du38/jjj9OgQQNatGgBQMuWLfnss8/K/bx+q1GjRrRs2RKAwMBA/P39MRqN1KtXD19fX65cucLevXtve1w3/j9vuN3xbNmyhYMHD9K3b18AbDYb165ds7+vXbt2v4tt//79nDt3jrFjx5bZ76FDhwgPD2fkyJGcPn2ajh07MmHCBPz9/St17NWZ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\n",
      "text/plain": [
       "<Figure size 288x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "log_reg = LogisticRegression(max_iter=100000)\n",
    "log_reg.fit(X_fft_train[:,:],y_fft_train)\n",
    "y_fft_pred_log_reg = log_reg.predict(X_fft_test[:,:])\n",
    "print( accuracy_score(y_fft_test,y_fft_pred_log_reg))\n",
    "print( precision_score(y_fft_test,y_fft_pred_log_reg))\n",
    "print( recall_score(y_fft_test,y_fft_pred_log_reg))\n",
    "\n",
    "confmat = confusion_matrix(y_fft_test,y_fft_pred_log_reg)\n",
    "plt.matshow(confmat)\n",
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
    "plt.title(\"Logistic Regression time-series-fft\")\n",
    "plt.xlabel(\"Actual\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "\n",
    "plt.savefig(\"Long_lead_Logistic Regression time-series-fft\")"
   ]
  },
  {
   "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
}