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

Download this file

1466 lines (1465 with data), 157.2 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from seaborn import set_style\n",
    "\n",
    "## This sets the plot style\n",
    "## to have a grid on a white background\n",
    "set_style(\"white\")\n",
    "from sklearn.metrics import recall_score, precision_score, roc_auc_score, accuracy_score, roc_curve"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Set up datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "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": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data.iloc[:,1:-1].to_numpy()\n",
    "y = data.iloc[:,-1].to_numpy()\n",
    "y[y !=0] = 1\n",
    "X_fft = data_fft.iloc[:,1:-1].to_numpy()\n",
    "y_fft = data_fft.iloc[:,-1].to_numpy()\n",
    "y_fft[y_fft !=0] = 1\n",
    "\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=111,\n",
    "                                                    stratify=y)\n",
    "\n",
    "X_fft_train, X_fft_test, y_fft_train, y_fft_test = train_test_split(X_fft, y_fft, \n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=111,\n",
    "                                                    stratify=y_fft)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# KNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7357142857142858\n",
      "0.9174757281553398\n",
      "0.5294117647058824\n"
     ]
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors = 3)\n",
    "knn.fit(X_train,y_train)\n",
    "y_pred = knn.predict(X_test)\n",
    "print( accuracy_score(y_test,y_pred))\n",
    "print( precision_score(y_test,y_pred))\n",
    "print( recall_score(y_test,y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.82\n",
      "0.8786885245901639\n",
      "0.7507002801120448\n"
     ]
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors = 3)\n",
    "knn.fit(X_fft_train,y_fft_train)\n",
    "y_pred = knn.predict(X_fft_test)\n",
    "print( accuracy_score(y_fft_test,y_pred))\n",
    "print( precision_score(y_fft_test,y_pred))\n",
    "print( recall_score(y_fft_test,y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Random Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8771428571428571\n",
      "0.8613333333333333\n",
      "0.9047619047619048\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "forest_clf = RandomForestClassifier(n_estimators=1000,max_samples=800,max_depth = 100, random_state=614)\n",
    "\n",
    "forest_clf.fit(X_train,y_train)\n",
    "y_pred = forest_clf.predict(X_test)\n",
    "print( accuracy_score(y_test,y_pred))\n",
    "print( precision_score(y_test,y_pred))\n",
    "print( recall_score(y_test,y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8985714285714286\n",
      "0.8994413407821229\n",
      "0.9019607843137255\n"
     ]
    }
   ],
   "source": [
    "forest_clf = RandomForestClassifier()#n_estimators=1000,max_samples=800,max_depth = 100, random_state=614)\n",
    "\n",
    "forest_clf.fit(X_train,y_train)\n",
    "forest_clf.fit(X_fft_train,y_fft_train)\n",
    "\n",
    "y_pred = forest_clf.predict(X_fft_test)\n",
    "print( accuracy_score(y_fft_test,y_pred))\n",
    "print( precision_score(y_fft_test,y_pred))\n",
    "print( recall_score(y_fft_test,y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "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": 195,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = models.Sequential()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_20\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_81 (Dense)             (None, 16)                120016    \n",
      "_________________________________________________________________\n",
      "dense_82 (Dense)             (None, 16)                272       \n",
      "_________________________________________________________________\n",
      "dense_83 (Dense)             (None, 2)                 34        \n",
      "=================================================================\n",
      "Total params: 120,322\n",
      "Trainable params: 120,322\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.add(layers.Dense(16, activation='relu', input_shape=(7500,)))\n",
    "model.add(layers.Dense(16, activation='relu'))\n",
    "model.add(layers.Dense(2, activation='softmax'))\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we compile the network like so\n",
    "model.compile(optimizer='rmsprop',\n",
    "                  loss='categorical_crossentropy',\n",
    "                  metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "17/17 [==============================] - 1s 34ms/step - loss: 3.4800 - accuracy: 0.5942 - val_loss: 0.9082 - val_accuracy: 0.7071\n",
      "Epoch 2/100\n",
      "17/17 [==============================] - 0s 17ms/step - loss: 0.4404 - accuracy: 0.8231 - val_loss: 1.1741 - val_accuracy: 0.7600\n",
      "Epoch 3/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 0.4871 - accuracy: 0.8882 - val_loss: 0.9500 - val_accuracy: 0.7757\n",
      "Epoch 4/100\n",
      "17/17 [==============================] - 0s 15ms/step - loss: 0.1894 - accuracy: 0.9422 - val_loss: 0.9177 - val_accuracy: 0.7557\n",
      "Epoch 5/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 0.1837 - accuracy: 0.9429 - val_loss: 1.0315 - val_accuracy: 0.7871\n",
      "Epoch 6/100\n",
      "17/17 [==============================] - 0s 26ms/step - loss: 0.2868 - accuracy: 0.9291 - val_loss: 1.0552 - val_accuracy: 0.8029\n",
      "Epoch 7/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 0.1027 - accuracy: 0.9667 - val_loss: 1.0030 - val_accuracy: 0.7986\n",
      "Epoch 8/100\n",
      "17/17 [==============================] - 0s 19ms/step - loss: 0.0357 - accuracy: 0.9914 - val_loss: 1.0517 - val_accuracy: 0.8100\n",
      "Epoch 9/100\n",
      "17/17 [==============================] - 0s 24ms/step - loss: 0.0509 - accuracy: 0.9854 - val_loss: 1.3149 - val_accuracy: 0.7957\n",
      "Epoch 10/100\n",
      "17/17 [==============================] - 0s 18ms/step - loss: 0.1221 - accuracy: 0.9743 - val_loss: 1.4089 - val_accuracy: 0.7929\n",
      "Epoch 11/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 0.1572 - accuracy: 0.9748 - val_loss: 1.4016 - val_accuracy: 0.8029\n",
      "Epoch 12/100\n",
      "17/17 [==============================] - 0s 17ms/step - loss: 0.0264 - accuracy: 0.9925 - val_loss: 1.3857 - val_accuracy: 0.8057\n",
      "Epoch 13/100\n",
      "17/17 [==============================] - 1s 32ms/step - loss: 0.0701 - accuracy: 0.9844 - val_loss: 1.5484 - val_accuracy: 0.8057\n",
      "Epoch 14/100\n",
      "17/17 [==============================] - 1s 40ms/step - loss: 0.0547 - accuracy: 0.9869 - val_loss: 1.4543 - val_accuracy: 0.7871\n",
      "Epoch 15/100\n",
      "17/17 [==============================] - 0s 29ms/step - loss: 0.0352 - accuracy: 0.9904 - val_loss: 1.4931 - val_accuracy: 0.8343\n",
      "Epoch 16/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 0.0199 - accuracy: 0.9927 - val_loss: 1.6465 - val_accuracy: 0.8400\n",
      "Epoch 17/100\n",
      "17/17 [==============================] - 1s 30ms/step - loss: 0.0331 - accuracy: 0.9964 - val_loss: 1.7887 - val_accuracy: 0.8100\n",
      "Epoch 18/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 0.0470 - accuracy: 0.9933 - val_loss: 1.6822 - val_accuracy: 0.8114\n",
      "Epoch 19/100\n",
      "17/17 [==============================] - 0s 28ms/step - loss: 0.0075 - accuracy: 0.9986 - val_loss: 1.7925 - val_accuracy: 0.8229\n",
      "Epoch 20/100\n",
      "17/17 [==============================] - 0s 21ms/step - loss: 0.0372 - accuracy: 0.9900 - val_loss: 1.7763 - val_accuracy: 0.8214\n",
      "Epoch 21/100\n",
      "17/17 [==============================] - 1s 36ms/step - loss: 0.0129 - accuracy: 0.9950 - val_loss: 1.8582 - val_accuracy: 0.8029\n",
      "Epoch 22/100\n",
      "17/17 [==============================] - 1s 34ms/step - loss: 0.0225 - accuracy: 0.9964 - val_loss: 1.8326 - val_accuracy: 0.8214\n",
      "Epoch 23/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 0.0114 - accuracy: 0.9958 - val_loss: 1.9295 - val_accuracy: 0.8114\n",
      "Epoch 24/100\n",
      "17/17 [==============================] - 0s 23ms/step - loss: 0.0263 - accuracy: 0.9917 - val_loss: 2.1135 - val_accuracy: 0.7914\n",
      "Epoch 25/100\n",
      "17/17 [==============================] - 0s 19ms/step - loss: 0.0270 - accuracy: 0.9920 - val_loss: 1.9743 - val_accuracy: 0.8271\n",
      "Epoch 26/100\n",
      "17/17 [==============================] - 0s 27ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 1.9064 - val_accuracy: 0.8286\n",
      "Epoch 27/100\n",
      "17/17 [==============================] - 0s 29ms/step - loss: 2.4204e-04 - accuracy: 1.0000 - val_loss: 1.9064 - val_accuracy: 0.8257\n",
      "Epoch 28/100\n",
      "17/17 [==============================] - 0s 29ms/step - loss: 1.3295e-04 - accuracy: 1.0000 - val_loss: 1.9215 - val_accuracy: 0.8243\n",
      "Epoch 29/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 7.3698e-05 - accuracy: 1.0000 - val_loss: 1.9316 - val_accuracy: 0.8243\n",
      "Epoch 30/100\n",
      "17/17 [==============================] - 0s 16ms/step - loss: 4.3785e-05 - accuracy: 1.0000 - val_loss: 1.9665 - val_accuracy: 0.8271\n",
      "Epoch 31/100\n",
      "17/17 [==============================] - 0s 21ms/step - loss: 2.3023e-05 - accuracy: 1.0000 - val_loss: 1.9833 - val_accuracy: 0.8271\n",
      "Epoch 32/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 1.4395e-05 - accuracy: 1.0000 - val_loss: 2.0359 - val_accuracy: 0.8271\n",
      "Epoch 33/100\n",
      "17/17 [==============================] - 0s 17ms/step - loss: 8.3031e-06 - accuracy: 1.0000 - val_loss: 2.1776 - val_accuracy: 0.8200\n",
      "Epoch 34/100\n",
      "17/17 [==============================] - 0s 24ms/step - loss: 0.0226 - accuracy: 0.9964 - val_loss: 2.4028 - val_accuracy: 0.8229\n",
      "Epoch 35/100\n",
      "17/17 [==============================] - 0s 18ms/step - loss: 0.0145 - accuracy: 0.9952 - val_loss: 2.3524 - val_accuracy: 0.8214\n",
      "Epoch 36/100\n",
      "17/17 [==============================] - 0s 18ms/step - loss: 0.0046 - accuracy: 0.9988 - val_loss: 2.3372 - val_accuracy: 0.8300\n",
      "Epoch 37/100\n",
      "17/17 [==============================] - 0s 23ms/step - loss: 0.1186 - accuracy: 0.9874 - val_loss: 2.3193 - val_accuracy: 0.8329\n",
      "Epoch 38/100\n",
      "17/17 [==============================] - 0s 24ms/step - loss: 0.0016 - accuracy: 0.9998 - val_loss: 2.2864 - val_accuracy: 0.8300\n",
      "Epoch 39/100\n",
      "17/17 [==============================] - 0s 28ms/step - loss: 1.4535e-04 - accuracy: 1.0000 - val_loss: 2.3416 - val_accuracy: 0.8314\n",
      "Epoch 40/100\n",
      "17/17 [==============================] - 0s 18ms/step - loss: 7.5005e-05 - accuracy: 1.0000 - val_loss: 2.3577 - val_accuracy: 0.8300\n",
      "Epoch 41/100\n",
      "17/17 [==============================] - 1s 34ms/step - loss: 2.4917e-05 - accuracy: 1.0000 - val_loss: 2.3551 - val_accuracy: 0.8329\n",
      "Epoch 42/100\n",
      "17/17 [==============================] - 1s 33ms/step - loss: 1.3168e-05 - accuracy: 1.0000 - val_loss: 2.3660 - val_accuracy: 0.8329\n",
      "Epoch 43/100\n",
      "17/17 [==============================] - 0s 29ms/step - loss: 8.4370e-06 - accuracy: 1.0000 - val_loss: 2.3815 - val_accuracy: 0.8300\n",
      "Epoch 44/100\n",
      "17/17 [==============================] - 1s 39ms/step - loss: 5.0662e-06 - accuracy: 1.0000 - val_loss: 2.3942 - val_accuracy: 0.8314\n",
      "Epoch 45/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 2.4796e-06 - accuracy: 1.0000 - val_loss: 2.4293 - val_accuracy: 0.8329\n",
      "Epoch 46/100\n",
      "17/17 [==============================] - 1s 36ms/step - loss: 1.0115e-06 - accuracy: 1.0000 - val_loss: 2.4676 - val_accuracy: 0.8329\n",
      "Epoch 47/100\n",
      "17/17 [==============================] - 1s 39ms/step - loss: 5.7316e-07 - accuracy: 1.0000 - val_loss: 2.4995 - val_accuracy: 0.8329\n",
      "Epoch 48/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 0.0061 - accuracy: 0.9984 - val_loss: 2.7894 - val_accuracy: 0.8300\n",
      "Epoch 49/100\n",
      "17/17 [==============================] - 0s 28ms/step - loss: 0.0354 - accuracy: 0.9911 - val_loss: 2.6485 - val_accuracy: 0.8329\n",
      "Epoch 50/100\n",
      "17/17 [==============================] - 0s 21ms/step - loss: 0.0115 - accuracy: 0.9988 - val_loss: 2.4846 - val_accuracy: 0.8386\n",
      "Epoch 51/100\n",
      "17/17 [==============================] - 1s 30ms/step - loss: 0.0042 - accuracy: 0.9983 - val_loss: 2.6672 - val_accuracy: 0.8386\n",
      "Epoch 52/100\n",
      "17/17 [==============================] - 0s 16ms/step - loss: 0.0470 - accuracy: 0.9909 - val_loss: 2.6604 - val_accuracy: 0.8457\n",
      "Epoch 53/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 7.5008e-04 - accuracy: 0.9999 - val_loss: 2.9339 - val_accuracy: 0.8314\n",
      "Epoch 54/100\n",
      "17/17 [==============================] - 0s 30ms/step - loss: 0.0056 - accuracy: 0.9957 - val_loss: 2.9320 - val_accuracy: 0.8329\n",
      "Epoch 55/100\n",
      "17/17 [==============================] - 1s 43ms/step - loss: 0.0055 - accuracy: 0.9974 - val_loss: 3.1210 - val_accuracy: 0.8143\n",
      "Epoch 56/100\n",
      "17/17 [==============================] - 1s 31ms/step - loss: 0.0107 - accuracy: 0.9963 - val_loss: 2.8705 - val_accuracy: 0.8271\n",
      "Epoch 57/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 2.5691e-04 - accuracy: 1.0000 - val_loss: 2.9095 - val_accuracy: 0.8400\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 58/100\n",
      "17/17 [==============================] - 0s 26ms/step - loss: 7.5608e-05 - accuracy: 1.0000 - val_loss: 2.8919 - val_accuracy: 0.8371\n",
      "Epoch 59/100\n",
      "17/17 [==============================] - 1s 47ms/step - loss: 7.0834e-06 - accuracy: 1.0000 - val_loss: 2.8866 - val_accuracy: 0.8343\n",
      "Epoch 60/100\n",
      "17/17 [==============================] - 1s 31ms/step - loss: 4.6043e-06 - accuracy: 1.0000 - val_loss: 2.8816 - val_accuracy: 0.8329\n",
      "Epoch 61/100\n",
      "17/17 [==============================] - 0s 24ms/step - loss: 2.9102e-06 - accuracy: 1.0000 - val_loss: 2.8800 - val_accuracy: 0.8329\n",
      "Epoch 62/100\n",
      "17/17 [==============================] - 0s 16ms/step - loss: 1.2977e-06 - accuracy: 1.0000 - val_loss: 2.8847 - val_accuracy: 0.8329\n",
      "Epoch 63/100\n",
      "17/17 [==============================] - 1s 36ms/step - loss: 8.5360e-07 - accuracy: 1.0000 - val_loss: 2.8969 - val_accuracy: 0.8300\n",
      "Epoch 64/100\n",
      "17/17 [==============================] - 0s 17ms/step - loss: 4.6366e-07 - accuracy: 1.0000 - val_loss: 2.9059 - val_accuracy: 0.8314\n",
      "Epoch 65/100\n",
      "17/17 [==============================] - 1s 31ms/step - loss: 2.0024e-07 - accuracy: 1.0000 - val_loss: 2.9165 - val_accuracy: 0.8329\n",
      "Epoch 66/100\n",
      "17/17 [==============================] - 0s 15ms/step - loss: 1.1975e-07 - accuracy: 1.0000 - val_loss: 2.9278 - val_accuracy: 0.8343\n",
      "Epoch 67/100\n",
      "17/17 [==============================] - 0s 15ms/step - loss: 7.2557e-08 - accuracy: 1.0000 - val_loss: 2.9655 - val_accuracy: 0.8357\n",
      "Epoch 68/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 3.2868e-08 - accuracy: 1.0000 - val_loss: 2.9889 - val_accuracy: 0.8329\n",
      "Epoch 69/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 1.7399e-08 - accuracy: 1.0000 - val_loss: 3.0141 - val_accuracy: 0.8343\n",
      "Epoch 70/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 1.0672e-08 - accuracy: 1.0000 - val_loss: 3.0596 - val_accuracy: 0.8371\n",
      "Epoch 71/100\n",
      "17/17 [==============================] - 0s 19ms/step - loss: 6.3904e-09 - accuracy: 1.0000 - val_loss: 3.1076 - val_accuracy: 0.8371\n",
      "Epoch 72/100\n",
      "17/17 [==============================] - 0s 21ms/step - loss: 8.6816e-09 - accuracy: 1.0000 - val_loss: 3.1891 - val_accuracy: 0.8371\n",
      "Epoch 73/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 6.4090e-09 - accuracy: 1.0000 - val_loss: 3.2443 - val_accuracy: 0.8357\n",
      "Epoch 74/100\n",
      "17/17 [==============================] - 1s 36ms/step - loss: 2.6485e-09 - accuracy: 1.0000 - val_loss: 3.2851 - val_accuracy: 0.8329\n",
      "Epoch 75/100\n",
      "17/17 [==============================] - 1s 31ms/step - loss: 2.7955e-09 - accuracy: 1.0000 - val_loss: 3.3021 - val_accuracy: 0.8343\n",
      "Epoch 76/100\n",
      "17/17 [==============================] - 1s 30ms/step - loss: 1.6577e-09 - accuracy: 1.0000 - val_loss: 3.3525 - val_accuracy: 0.8329\n",
      "Epoch 77/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 1.8567e-09 - accuracy: 1.0000 - val_loss: 3.3681 - val_accuracy: 0.8343\n",
      "Epoch 78/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 1.3122e-09 - accuracy: 1.0000 - val_loss: 3.4063 - val_accuracy: 0.8329\n",
      "Epoch 79/100\n",
      "17/17 [==============================] - 0s 24ms/step - loss: 2.1913e-09 - accuracy: 1.0000 - val_loss: 3.4534 - val_accuracy: 0.8329\n",
      "Epoch 80/100\n",
      "17/17 [==============================] - 1s 33ms/step - loss: 8.2214e-10 - accuracy: 1.0000 - val_loss: 3.4914 - val_accuracy: 0.8314\n",
      "Epoch 81/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 8.7293e-10 - accuracy: 1.0000 - val_loss: 3.5333 - val_accuracy: 0.8329\n",
      "Epoch 82/100\n",
      "17/17 [==============================] - 0s 18ms/step - loss: 7.6187e-10 - accuracy: 1.0000 - val_loss: 3.5691 - val_accuracy: 0.8314\n",
      "Epoch 83/100\n",
      "17/17 [==============================] - 0s 28ms/step - loss: 3.3811e-10 - accuracy: 1.0000 - val_loss: 3.5936 - val_accuracy: 0.8329\n",
      "Epoch 84/100\n",
      "17/17 [==============================] - 1s 37ms/step - loss: 8.5185e-10 - accuracy: 1.0000 - val_loss: 3.6297 - val_accuracy: 0.8314\n",
      "Epoch 85/100\n",
      "17/17 [==============================] - 1s 37ms/step - loss: 2.8228e-10 - accuracy: 1.0000 - val_loss: 3.6437 - val_accuracy: 0.8300\n",
      "Epoch 86/100\n",
      "17/17 [==============================] - 0s 27ms/step - loss: 4.2426e-10 - accuracy: 1.0000 - val_loss: 3.6538 - val_accuracy: 0.8314\n",
      "Epoch 87/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 1.2045e-10 - accuracy: 1.0000 - val_loss: 3.6806 - val_accuracy: 0.8286\n",
      "Epoch 88/100\n",
      "17/17 [==============================] - 0s 22ms/step - loss: 6.4203e-11 - accuracy: 1.0000 - val_loss: 3.6964 - val_accuracy: 0.8271\n",
      "Epoch 89/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 4.1939e-10 - accuracy: 1.0000 - val_loss: 3.7018 - val_accuracy: 0.8271\n",
      "Epoch 90/100\n",
      "17/17 [==============================] - 0s 23ms/step - loss: 1.7513e-10 - accuracy: 1.0000 - val_loss: 3.7258 - val_accuracy: 0.8271\n",
      "Epoch 91/100\n",
      "17/17 [==============================] - 0s 19ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 3.7429 - val_accuracy: 0.8271\n",
      "Epoch 92/100\n",
      "17/17 [==============================] - 0s 29ms/step - loss: 8.0794e-11 - accuracy: 1.0000 - val_loss: 3.7550 - val_accuracy: 0.8257\n",
      "Epoch 93/100\n",
      "17/17 [==============================] - 0s 24ms/step - loss: 2.4327e-10 - accuracy: 1.0000 - val_loss: 3.7616 - val_accuracy: 0.8271\n",
      "Epoch 94/100\n",
      "17/17 [==============================] - 0s 19ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 3.7754 - val_accuracy: 0.8257\n",
      "Epoch 95/100\n",
      "17/17 [==============================] - 0s 20ms/step - loss: 1.6670e-11 - accuracy: 1.0000 - val_loss: 3.7831 - val_accuracy: 0.8257\n",
      "Epoch 96/100\n",
      "17/17 [==============================] - 0s 23ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 3.7904 - val_accuracy: 0.8257\n",
      "Epoch 97/100\n",
      "17/17 [==============================] - 0s 26ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 3.7989 - val_accuracy: 0.8243\n",
      "Epoch 98/100\n",
      "17/17 [==============================] - 0s 25ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 3.8067 - val_accuracy: 0.8243\n",
      "Epoch 99/100\n",
      "17/17 [==============================] - 0s 19ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 3.8134 - val_accuracy: 0.8243\n",
      "Epoch 100/100\n",
      "17/17 [==============================] - 0s 28ms/step - loss: 8.9316e-11 - accuracy: 1.0000 - val_loss: 3.8167 - val_accuracy: 0.8257\n"
     ]
    }
   ],
   "source": [
    "## I now fit the model, and store the training history\n",
    "## I use 100 epochs and a batch_size of 512\n",
    "history = model.fit(X_train,\n",
    "                        to_categorical(y_train),\n",
    "                        epochs = 100,\n",
    "                        batch_size = 100,\n",
    "                        validation_data=(X_test,to_categorical(y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [],
   "source": [
    "history_dict = history.history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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REREZGBGfZLFoEGDMGXKFOzatQsffPABnj17hrVr14rLmqxYsQIDBw4U8/v4+GDZsmU4efIkRo8ejT/++ANLlixBz549xTyNGjXCypUrkZycjHHjxuHIkSOYN28eevToYfDzIyIiIjIGmaCcYkp6GRDJAbCmifViulg3pon1YppYL6bLUJMsNB3DqC14RERERKR7RhuDR5rFXEjBgoMJuJOWhTpOtpjc3Qt9/F2NXSwiIiKqIBjgmZiYCymYFn0FWYrCWcApaVmYFn0FABjkERERkSTsojUxCw4miMGdUpYiHwsOJhipRERERFTRMMAzMXfSij+Dt6R0IiIioqIY4JmYOk62WqUTERERFcUAz8RM7u4FW7mlSpqt3BKTu3sZqURERERU0XCShYlRTqTgLFoiIiIqKwZ4JqiPvysDOiIiIiozdtESERERmRkGeERERERmhgEeERERkZlhgEdERERkZhjgEREREZkZBnhEREREZoYBHhEREZGZYYBHREREZGYY4BERERGZGQZ4RERERGaGAR4RERGRmWGAR0RERGRmGOARERERmRkGeERERERmhgEeERERkZlhgEdERERkZiQHeBMmTMDhw4ehUCj0WR4iIiIiKicrqRnPnj2LAwcOoGrVqujWrRuCg4PRqlUryGQyfZaPiIiIiLQkOcA7duwYTp8+jX379uGnn37Cjh07ULNmTbz++ut4/fXX0axZszIVICoqCmvWrMG9e/fg7e2NTz75BP7+/hrznz9/HgsWLMC1a9dQo0YNvPnmmxg1ahTkcrmYJzg4GH///bfKdk5OTjh9+nSZykhERERUkUgO8GQyGVq3bo3WrVtj1qxZOH78OPbv349du3Zh48aNqFu3LoKDg9GrVy80aNBA0j5jYmIwa9YsjB07Fj4+Pti0aRNCQ0Oxa9cuuLm5FcuflJSE0NBQNG/eHBEREbhx4wYWLlyIjIwMTJ06FQCQm5uLmzdvYuLEiXj11Vf/O1EryadKREREVKGVKeqxtLREx44d0bFjR9y4cQMRERHYt28fVq5cif/7v/+Dr68vRowYgS5dumjchyAICA8PR0hICMaNGwcAaNu2LYKCghAZGYkZM2YU2+bAgQPIz89HREQE7Ozs8Nprr+Hhw4fYvHkzpkyZAplMhsTERCgUCnTu3BkNGzYsy+kRERERVWhlCvD++ecfHDhw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uKoVUeWgi886J1kYiHIiBWfRElFZWFpaQqFQqDxbk4jMU15ensqj0sqCAZ4B9fF3ZUBHRGVStWpVPH36FM7OzsYuChHp2bNnz1ClSpVy7YNdtEREFUCNGjXw+PFjPHr0CLm5ueyuJTJDgiAgMzMTjx49gouLS7n2xRY8IqIKwMbGBvXq1UNqaipu3ryJ/Pz80jfSIYVCAblcbtBjUulYL6arrHVjY2ODWrVqlbsFjwEeEVEFYWNjg9q1a6N27doGP7axn4VL6rFeTJex64ZdtERERERmhgEeERERkZlhgEdERERkZhjgEREREZkZBnhEREREZoYBHhEREZGZYYBHREREZGZkApdDF128eBE2NjbGLgYRERFRqXJycuDn56f2PQZ4RERERGaGXbREREREZoYBHhEREZGZYYBHREREZGYY4BERERGZGQZ4RERERGaGAZ6eREVFoVu3bmjWrBkGDhyICxcuGLtIlU5+fj7Wr1+PHj16wM/PDz179sTmzZuhnDguCAJWrlyJTp06wdfXF++++y4SExONXOrKJTc3Fz169MAnn3wiprFejOvkyZMYMGAAmjVrhoCAAISHhyM/Px8A68ZY8vPz8d1336Fr167w9/fHgAEDcPLkSfF91ovhHT58GP7+/ippUuohNzcXX331Fdq1awd/f3988MEHuH//vl7KyABPD2JiYjBr1iz07t0bERERqFq1KkJDQ5GcnGzsolUqK1aswOLFi9G7d2+sXLkSPXr0wFdffYU1a9YAAJYvX46VK1fivffew+LFi/Hs2TMMHz4cz549M3LJK49vv/0W169fV0ljvRjP77//jrCwMDRs2BCrVq3CoEGD8N1332HlypUAWDfGsnbtWixZsgT9+vXD8uXLUa9ePYSFheHPP/8EwHoxtPPnz2Py5MnF0qXUw6xZs7Br1y5MnDgR8+bNw7Vr1zBy5EjxR5ROCaRTBQUFQkBAgDBz5kwxLTc3VwgMDBTmzJljxJJVLvn5+YK/v7+wZMkSlfTPP/9caN26tfDs2TPBz89PWLVqlfheWlqa4O/vL6xbt87Apa2c/vjjD8HPz09o1aqVMHXqVEEQBNaLkb399tvCyJEjVdIWLFggDB48mHVjREFBQcLkyZPF13l5eULHjh2FL774gvViQDk5OcLq1auFJk2aCK+88org5+cnvielHm7duiU0atRI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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": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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P8LR0REAMHToULz55puYP38+3njjDeVm0Pfu3UNMTIxy0+hu3brBz88Pe/fuLXHuX7NmzbBixQrMmjUL//77L/79919ERkbC3t4e/v7+eO+999CkSRNl/S+++ALVq1fH7t27YW9vDwAYOXIkRo0ahQULFqBr165o3rw5vL29sW3bNrz66qto3779Cz/jF1m9ejVu3bqFlStXomvXrgAUbTB//nxs3rwZb731Fjp27Ih9+/ahWbNm+Oqrr5TXuru74+uvv8a1a9fwyiuv4MCBA6hUqRIiIyMhEil6E1599VVMmjQJV65cgYuLS5njJbIIGhciaFE4REpURux5MxZtmzHGfWaaePB86LRoD9TPP/8MuVyuHDLt1asXTp06hddff11Zp+jKyaysLEH3KhwSLJqQAYohwaJatWqFP/74A/3791eW5efno6CgAACQmZkp6H4A8M8//+D+/fsYMWKEMnEDgCpVqmDkyJF48OAB/v77+T+kTZo0USZuAFCrVi3UrFkTjx8/fuG9OnXqhCNHjuDbb79Fv379UKtWLWRlZeGnn35Cv379cPbsWQCKYcuzZ8+iY8eOyMnJQUpKClJSUpCeno5u3brh8ePHuHz5suD3qIvDhw/D1dVVmbgVmjBhAgAovw/q1q2LGzduYMWKFbhz5w4ARU/t/v378corryjrZGZm4osvvsD169cBAG5ubjh48CB69OhhkPiJzELxERStCxGK4RAp6RF73ozl6R3dyo2gbdu2qF+/Pn755RcMGjQIgOIUi5YtW6ocQyYSiRAVFYW//voLiYmJSExMhEwmAwBlUvUiycnJAKDWI9O0aVO1ujY2Nti6dSvOnj2L27dvIzExETk5OQAUw6pCFSYeRXu9it/37t278PHxAQBl72NRtra2gt+jnZ0devXqhV69egEArly5gjVr1uCnn37C3Llz8fPPPyuHFDdu3IiNGzdqfJ179+4Jup+u7ty5o9J7WqhWrVqoUqWKso0mTpyICxcuYPny5Vi+fDleeukl+Pv7Y9CgQWjYsCEARU/h8ePHsWnTJmzatAkNGjRA586dMXDgQJUEmKhc0TSCAhEU89mKkVQHbB24ipQMgsmbsWhbKm7Cs+pEIhF69+6NtWvXIi0tDRkZGbh06ZJyojygSLqGDBmCrKwsvP766+jVqxfc3d0hl8sxceJEne4FALm5uSpz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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": 202,
   "metadata": {},
   "outputs": [],
   "source": [
    "fpr,tpr,thresholds=roc_curve(y_test,model.predict(X_test)[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAGACAYAAAD7zIVCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA6XElEQVR4nO3de1yUZf7/8fcwjgh4wGMpcrI2JU9gZmq2GpodLLL9lmzZASXctq/59Zepubnqd12TR67liulqeWo1S02p1tpcNDfL9lCSmUu6266AyJaKbHEQBpjfH36ZGJiBGQ4zc8Pr+Xj0eMg19z33Z7hS3lz3dV+XyWaz2QQAAABDCPB1AQAAAHAf4Q0AAMBACG8AAAAGQngDAAAwEMIbAACAgRDeAAAADKSdrwvwls8++0yBgYEtfp2ysjKvXAfuo0/8E/3if+gT/0S/+B9v9ElZWZliY2OdvtZmwltgYKBiYmJa/DpZWVleuQ7cR5/4J/rF/9An/ol+8T/e6JOsrCyXr3HbFAAAwEAIbwAAAAZCeAMAADAQwhsAAICBEN4AAAAMhPAGAABgIIQ3AAAAA/Gbdd4OHDigp556SpmZmfUed+rUKS1btkyff/65unTpogceeEApKSkymUzNUselS5d07tw5Xbp0SRUVFR6fb7Va612bBd7nL31isVjUq1cvde7c2delAAAMzC/C29GjRzV37twGj7tw4YKmTZumH/zgB1q1apVOnDihVatWyWw2Kzk5ucl1/Oc//9HXX3+tnj176sorr1S7du08DoWlpaUKCgpqci1oPv7QJzabTaWlpcrLy5MkAhwAoNF8Gt7Ky8u1detW/frXv1ZwcLCsVmu9x2/fvl0VFRVat26dgoKCNHbsWJWXl2vDhg16+OGHZbFYmlTP+fPn1bdvXwUHBzfpfYDaTCaTgoODFRYWprNnzxLeAMAg0jPztOK9kzpbWKouQRaZTFJhiVV9QvM199b+mhwX5vWafDrn7YMPPtCGDRs0b948Pfjggw0ef+TIEY0aNcphFGXChAkqLCzU8ePHm1xPeXm5z0do0LoFBQU1+EsKAMC70jPzdGPqQUU/vU83ph5UemaevX3u7mPKKyyVTVJhqVUXS6yyScorLNWCPcftx3qTT0feBg8erAMHDqhz585KS0tr8PjTp0/rhhtucGgLDw+3vzZs2LAm19Rcc+cAZ/j/C0BbUXPEqk9oUJNGqVyNfrn6syfXqw5o1kqbpMuhbO7uY5Kk/337hL3dmVJrpVa8d9Lro28+DW9XXHGFR8cXFRUpJCTEoa3666KionrPLSsra3DSutVqVWlpqUc11VY9twn+w9/6xF8eoPC1S5cu8X3wM/SJfzJavxz853f6zZ/P67vy70NPXmGpntr1mfLO5im+XyeP32/1kfMq+78QVVj6/d0LV3/OKyzV/N3H3LreovTTdQKatdKmRemf69uyqgbrO1tY6vX+8YsHFppDQED9d4ADAwMVExNT7zFZWVlNvm3qD5Pj4cjf+sRisTT4/2JbkJWVxffBz9An/smb/eLOCFftUa2a53SwBKjU6jzwVFRJL39aqP+eNMKjmh5986A9uHmirNKmV48XNXi9b8v+6aK94eAmSX1Cg1qkf+oLhIYKbx07dlRxcbFDW/XXHTt29EVJhvX0009r7969ddoDAwPVvXt3jRo1Sk8++aR69OhR55iioiJt3rxZf/jDH5STk6PAwEBFR0dr8uTJuueeexQYGOj0mhcuXNCrr76q/fv368yZMzKZTLr22ms1depU3X777c3+GQEA32voNmbt24f1jWot2PP9PPMFe46r1FopSS6DW7WLJZ7P+T1b2Pg7J005V5JCgywOn722IItZc2/t36RrNIahwltUVJTOnDnj0JabmytJ6tevny9KMrwFCxaoa9eu9q+Lior08ccf64033tAXX3yh3bt3q3379vbX//73v+vRRx/VhQsXNGnSJD3wwAO6dOmS/vSnP2nJkiXavXu31q5dq169ejlcJzMzU0888YSKi4s1efJkPfDAA/ruu+/0u9/9TrNnz1ZWVpaefPJJr31uAPBnNYNWz5B2+tmdnZs0r6q+eV3V79vQ/K6aqud6Vf+5JfUJDVJeI0NYn9CG77q4CmihQRYtSRioubuOyVpV9/sS1sR5fE1hqPA2cuRIvf766yopKbEv55GRkaHQ0FANGDDAx9UZ04QJE9S3b1+HtqlTp2rJkiXasWOHMjIydMcdd0iSvv32W82YMUOVlZXavXu3w/c8KSlJBw8e1OzZszVr1iy9+uqr9lvZBQUFevzxxxUcHKxdu3apd+/e9vOSk5P13//931q/fr2GDh2q8ePHe+FTA4Dv1XeL8ruyClX+X2D4priiTtDylLNgZq206X/fPmF/T09HxRozqhUa5PmSXnNv7e8wuucud0fFnAU0S4BJSxIG2r83tUcs+3f41qdTDPx6e6ycnBx99tln9q8feOABWa1WzZgxQ++//77WrVunDRs2aMaMGQ6jQ2i6e+65R5J07Ngxe9vGjRt19uxZLV++3GlYjo+P12OPPabMzEy9+eab9va1a9eqoKBAqampDsFNksxms5YsWSKz2azXXnuthT4NADSOqyUkmuN9XS1BUVhqtQe3atVBq7FcBbPG3Mas1ic0yK2RrWrVgchTk+PCtPxHgxUWGiSTLgfArsGWev8cFhqk5T8a7FbYnRwXphX3DbW/f1hokFbcN9R+7uS4MH30dLz+lTpJHz0d75ORttr8euRt7dq12rt3r06evDw026tXL23evFnLli3TrFmz1KNHD82ePbtZdleAo+oJ/jbb9/+ApKenKzIyUjfddJPL8x5++GGtXbtWb731lu655x5VVVXp97//vaKjo3X99dc7PefKK6/U22+/raioqAbr+uMf/6iXXnpJJ06cUHBwsEaMGKE5c+bYRw/79++ve+65R6mpqQ7n1W7v37+/fvrTn+rLL7/Uhx9+qIiICPXp00fHjx/XRx99pHbtvv+rcebMGY0fP15PPPGEZs6cKUl6//33tX79emVlZal9+/YaOXKknnzySUVHRzf4GQA0r6YsSeF6AdYg3Tygp17/a269txoby5NblNWaErTc0dD8rppqjmq5MyrWNdiixXcNbPT3bXJcWIuGppZ+/+bmN+HtiSee0BNPPOHQlpqaWueH8ODBgxmh8YLDhw9Lkq699lpJ0r///W/9+9//1t13313veR07dtSgQYP0ySefSJK+/vprnTt3TmPGjKn3vKuuuqrBmvbt26c5c+boBz/4gZ544glZrVZt2rRJx48f1549ezzetWDr1q0aOnSoFi5cqEuXLqlr1646fPiwjhw5oh/+8If249555x1J0l133SVJ2rNnj372s59p1KhRmjt3rv7zn/9ox44dmjJlinbu3EmAA5qZs3D2SXaBdvw5V5U2xwDkScBKz8xzCB61J+Vv+1NOnXNq32psrJYOYrXVN6+rWn3zu0IbWEOtZgAur6hUyf89uNDU0Abn/Ca8tQXNuWBhc/n2229VUFBg/7qoqEiHDx/WmjVrdNVVV2nSpEmSpG+++UaS1LNnzwbfs1evXsrMzFRhYaHOnTvn9nn1qaqq0vLly3XNNddo586d6tChg6TLYX7atGl6++23NXXqVI/e02w2a/Xq1fbQV1xcrKCgIP3+9793CG/vvvuuhg4dqsjISBUVFWnZsmW644479Pzzz9uPmTJliiZNmqRf/epXevHFF5v0WQF8r3bAyiss1ZOvf6b6nml0N2CteO9koybbezt4VWvMfLFq9c3rquZqfldD30ejjVq1BoQ3L3H2D1D1o9a+/J++em5bTUFBQYqPj9fPf/7zOvvF1ryd6Er1MTabTWazWZJUWdm0p5G++OILnTt3To899pg9uEnS6NGjtWvXrkY9bTx06FCH0bqQkBCNHz9eBw4ckNVqlcVi0b/+9S/97W9/08KFCyVJH330kYqKijRhwgSH0Gs2mzVy5Ej98Y9/VEVFhVvfJ6At8vSXWGcBy53Vt9wJWE1dRqIpPLlFKTV+vlg1d4MZQcwY+AnjJc7+AfLVtho1rVixQj169JDVatXhw4e1fft23X777VqyZInDem3VS3+cP3++wff85ptv1L59e3Xt2lXl5eWS5BB0GiMv7/Ik4cjIyDqvDRkypFHv2a1btzptd955p373u9/p448/1g9/+EO98847MpvN9iduc3Iu30b5f//v/7l834KCgjpLpQCQFqYfd7gV6c4tzsYuEeGOxi5B0ZQRsGoNLUFx84Ceev/LczWWChnU5J8VBLPWg/DmJa5+w/Plb36SNGzYMPtk/7FjxyoyMlK//OUvVVhYqLVr19r34rzyyivVt29f+1w2V0pLS3XixAnFxcVJurwFWlhYmMNTw8787Gc/k81mqxMaq1VVXf5du6GdNJxxNepXPSpY05gxY9S1a1e9++67+uEPf6h3331Xo0aNUvfu3R3qWLp0aZ0lVqp16dLF4xqB1i49M69Rc8jMJlOdeW3ucCdgNbQEhSXg8rVr5qumjoBV8+QW5eUdFghd+J5fLxXSmrh6nNqTx6y94aGHHtL48eN18OBBbd261eG1hIQEnT59WgcOHHB5fvU6fAkJCfa2W265Rf/6179cBr/z58/rrbfe0okTJ1zuzlC9xEh2dnad1xYsWKBdu3ZJuhzuqkf7ar6/uywWi2677Ta9//77OnXqlP7+97/bH1SQpLCwy/+AduvWTaNHj3b4z2w2y2QysWwN2qSGltSoXtDVmfpucTYmuLkbsOpbgqJ6uYjnp8S6XEKiqfxxCQoYAyNvXuLsNzxfbavRkF/84hf65JNPtGrVKo0fP17h4eGSpBkzZuitt97SwoUL1bt3b/uTqNU++ugjvfDCC4qNjXWYSzdjxgzt3r1bCxcu1JYtW3TllVfaXysrK9O8efNktVr1+OOPu6xp0KBB6tatm/bs2aN7773XHpCOHj2qPXv22Ned69Gjh7788kvZbDb7qOH+/fs9+vx33XWXduzYoeeff14dOnTQLbfcYn9t9OjRCgwM1Msvv6yxY8fa5wR+/fXXevzxxxUVFaU33njDo+sBRufOnN7G3v4Mc3FrM8gSoPIKmyptNpkkBbc3q6S80uOHwdy5lUiogr8hvHlJY5/i8YUePXroqaee0s9//nMtXrxYmzZtknT5QYaNGzdqxowZmjJliu666y7FxsaqoqJCf/7zn7V//35de+21Wr16tcMtye7du+vXv/61Zs6cqUmTJumee+7RD37wA507d07p6enKzc1VUlKSbrvtNpc1tW/fXk8//bTmz5+v+++/XwkJCSouLtYrr7yiq666Svfdd5+ky3PWNm3apJkzZ2rcuHE6ceKE3n33Xafz21wZNmyYwsLC9P7772vSpEkKCQmxv9atWzc9+eSTWr58uRITE5WQkKCKigq9+uqrKisr0/z58z39dgOGU/uhg5LyiibN6a3vFqerX3zdXYAVaI0Ib15kpMmi9913n9LT0/XRRx8pPT1dkydPlnR5f9k9e/bo9ddf1759+7R//36ZzWb169dPixYt0n/91385vfU5ZswY7d27V5s3b9bhw4e1a9cumc1mDR48WE8//bQmTJjQYE133323OnbsqPXr12vlypXq3Lmzbr75Zs2ZM8e+Xdr//M//qKKiQvv27dOHH36ooUOHav369fanRd1hMpl011136Te/+Y3uvPPOOq8nJSXpiiuu0ObNm/XCCy+oQ4cOGjhwoFasWKHrrrvO7esA/s7Zk6GS6uyR6Yq7o2313eI00i++gLeYbLZGTCgwoMsTPuvfh8ydYxpSWlpq350A/sHf+qQ5/j9rDfg++J+afVL7yVBJsphNam8OUHG5e0v/mE0mfbX88pPaVy14x+n8NZOkf6VOalrhrRx/V/yPN/qkvmsw8gYAfqCh9c9qv169lEReYan9iUxXq+AvTD9u343AbDLp/hvC9cvJg+utxdWToVYP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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6))\n",
    "\n",
    "plt.scatter(fpr, tpr ,label = \"ROC curve\")\n",
    "\n",
    "plt.xlabel(\"fpr\", fontsize=18)\n",
    "plt.ylabel(\"tpr\", fontsize=18)\n",
    "\n",
    "plt.xticks(fontsize=16)\n",
    "plt.yticks(fontsize=16)\n",
    "\n",
    "plt.legend(fontsize=18)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DNN for fft data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_21\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_84 (Dense)             (None, 256)               1920256   \n",
      "_________________________________________________________________\n",
      "dense_85 (Dense)             (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_86 (Dense)             (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_87 (Dense)             (None, 2)                 514       \n",
      "=================================================================\n",
      "Total params: 2,052,354\n",
      "Trainable params: 2,052,354\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model_fft = models.Sequential()\n",
    "model_fft.add(layers.Dense(256, activation='relu', input_shape=(7500,)))\n",
    "model_fft.add(layers.Dense(256, activation='relu'))\n",
    "model_fft.add(layers.Dense(256, activation='relu'))\n",
    "model_fft.add(layers.Dense(2, activation='softmax'))\n",
    "model_fft.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "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": 206,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "5/5 [==============================] - 1s 186ms/step - loss: 668.8413 - accuracy: 0.5319 - val_loss: 44.0859 - val_accuracy: 0.5014\n",
      "Epoch 2/100\n",
      "5/5 [==============================] - 1s 123ms/step - loss: 270.2084 - accuracy: 0.5108 - val_loss: 569.3049 - val_accuracy: 0.5100\n",
      "Epoch 3/100\n",
      "5/5 [==============================] - 1s 131ms/step - loss: 365.4353 - accuracy: 0.5163 - val_loss: 60.2744 - val_accuracy: 0.5100\n",
      "Epoch 4/100\n",
      "5/5 [==============================] - 1s 123ms/step - loss: 82.9828 - accuracy: 0.5218 - val_loss: 25.7717 - val_accuracy: 0.5514\n",
      "Epoch 5/100\n",
      "5/5 [==============================] - 1s 131ms/step - loss: 93.3083 - accuracy: 0.5303 - val_loss: 233.1957 - val_accuracy: 0.5100\n",
      "Epoch 6/100\n",
      "5/5 [==============================] - 0s 106ms/step - loss: 177.3547 - accuracy: 0.5145 - val_loss: 175.4946 - val_accuracy: 0.4900\n",
      "Epoch 7/100\n",
      "5/5 [==============================] - 1s 117ms/step - loss: 125.8578 - accuracy: 0.5587 - val_loss: 36.0824 - val_accuracy: 0.5171\n",
      "Epoch 8/100\n",
      "5/5 [==============================] - 0s 100ms/step - loss: 86.9217 - accuracy: 0.4990 - val_loss: 67.8607 - val_accuracy: 0.5086\n",
      "Epoch 9/100\n",
      "5/5 [==============================] - 0s 101ms/step - loss: 77.3385 - accuracy: 0.5346 - val_loss: 84.1572 - val_accuracy: 0.4971\n",
      "Epoch 10/100\n",
      "5/5 [==============================] - 1s 160ms/step - loss: 55.2668 - accuracy: 0.5356 - val_loss: 22.9971 - val_accuracy: 0.6771\n",
      "Epoch 11/100\n",
      "5/5 [==============================] - 1s 148ms/step - loss: 25.1741 - accuracy: 0.6633 - val_loss: 16.0151 - val_accuracy: 0.6743\n",
      "Epoch 12/100\n",
      "5/5 [==============================] - 1s 130ms/step - loss: 15.4722 - accuracy: 0.6968 - val_loss: 10.9474 - val_accuracy: 0.7114\n",
      "Epoch 13/100\n",
      "5/5 [==============================] - 1s 127ms/step - loss: 9.7629 - accuracy: 0.7271 - val_loss: 7.0434 - val_accuracy: 0.7429\n",
      "Epoch 14/100\n",
      "5/5 [==============================] - 1s 178ms/step - loss: 7.3605 - accuracy: 0.7383 - val_loss: 5.8756 - val_accuracy: 0.7329\n",
      "Epoch 15/100\n",
      "5/5 [==============================] - 1s 152ms/step - loss: 6.1939 - accuracy: 0.7216 - val_loss: 3.7403 - val_accuracy: 0.7371\n",
      "Epoch 16/100\n",
      "5/5 [==============================] - 1s 148ms/step - loss: 4.5153 - accuracy: 0.7219 - val_loss: 9.5329 - val_accuracy: 0.6243\n",
      "Epoch 17/100\n",
      "5/5 [==============================] - 1s 167ms/step - loss: 7.2322 - accuracy: 0.6801 - val_loss: 4.3928 - val_accuracy: 0.7571\n",
      "Epoch 18/100\n",
      "5/5 [==============================] - 1s 112ms/step - loss: 4.6078 - accuracy: 0.7660 - val_loss: 5.8847 - val_accuracy: 0.7343\n",
      "Epoch 19/100\n",
      "5/5 [==============================] - 1s 121ms/step - loss: 4.8300 - accuracy: 0.7732 - val_loss: 10.0567 - val_accuracy: 0.6243\n",
      "Epoch 20/100\n",
      "5/5 [==============================] - 1s 107ms/step - loss: 7.2900 - accuracy: 0.6803 - val_loss: 3.7964 - val_accuracy: 0.7514\n",
      "Epoch 21/100\n",
      "5/5 [==============================] - 1s 161ms/step - loss: 3.6784 - accuracy: 0.7823 - val_loss: 2.9960 - val_accuracy: 0.8100\n",
      "Epoch 22/100\n",
      "5/5 [==============================] - 1s 144ms/step - loss: 3.4123 - accuracy: 0.7908 - val_loss: 2.5648 - val_accuracy: 0.8029\n",
      "Epoch 23/100\n",
      "5/5 [==============================] - 1s 145ms/step - loss: 2.2857 - accuracy: 0.8270 - val_loss: 5.0830 - val_accuracy: 0.6671\n",
      "Epoch 24/100\n",
      "5/5 [==============================] - 1s 154ms/step - loss: 4.2492 - accuracy: 0.7031 - val_loss: 4.2682 - val_accuracy: 0.7129\n",
      "Epoch 25/100\n",
      "5/5 [==============================] - 1s 149ms/step - loss: 2.6757 - accuracy: 0.7756 - val_loss: 6.0220 - val_accuracy: 0.6643\n",
      "Epoch 26/100\n",
      "5/5 [==============================] - 1s 112ms/step - loss: 4.1686 - accuracy: 0.7316 - val_loss: 8.2055 - val_accuracy: 0.6429\n",
      "Epoch 27/100\n",
      "5/5 [==============================] - 1s 153ms/step - loss: 5.5506 - accuracy: 0.7262 - val_loss: 8.7718 - val_accuracy: 0.6386\n",
      "Epoch 28/100\n",
      "5/5 [==============================] - 1s 149ms/step - loss: 5.4512 - accuracy: 0.7161 - val_loss: 8.9510 - val_accuracy: 0.6500\n",
      "Epoch 29/100\n",
      "5/5 [==============================] - 1s 165ms/step - loss: 5.9735 - accuracy: 0.7098 - val_loss: 3.6430 - val_accuracy: 0.7700\n",
      "Epoch 30/100\n",
      "5/5 [==============================] - 1s 119ms/step - loss: 3.3268 - accuracy: 0.7875 - val_loss: 2.8525 - val_accuracy: 0.7829\n",
      "Epoch 31/100\n",
      "5/5 [==============================] - 1s 124ms/step - loss: 1.8482 - accuracy: 0.8250 - val_loss: 1.8496 - val_accuracy: 0.8071\n",
      "Epoch 32/100\n",
      "5/5 [==============================] - 1s 118ms/step - loss: 0.8518 - accuracy: 0.8750 - val_loss: 2.1047 - val_accuracy: 0.7714\n",
      "Epoch 33/100\n",
      "5/5 [==============================] - 1s 121ms/step - loss: 0.9209 - accuracy: 0.8615 - val_loss: 2.8018 - val_accuracy: 0.7429\n",
      "Epoch 34/100\n",
      "5/5 [==============================] - 1s 135ms/step - loss: 1.2811 - accuracy: 0.8451 - val_loss: 2.0684 - val_accuracy: 0.8157\n",
      "Epoch 35/100\n",
      "5/5 [==============================] - 1s 178ms/step - loss: 1.0505 - accuracy: 0.8781 - val_loss: 1.4359 - val_accuracy: 0.8500\n",
      "Epoch 36/100\n",
      "5/5 [==============================] - 1s 116ms/step - loss: 0.6192 - accuracy: 0.8989 - val_loss: 1.4616 - val_accuracy: 0.8229\n",
      "Epoch 37/100\n",
      "5/5 [==============================] - 1s 135ms/step - loss: 0.5381 - accuracy: 0.8999 - val_loss: 1.8011 - val_accuracy: 0.8114\n",
      "Epoch 38/100\n",
      "5/5 [==============================] - 1s 162ms/step - loss: 0.7226 - accuracy: 0.9003 - val_loss: 1.3293 - val_accuracy: 0.8371\n",
      "Epoch 39/100\n",
      "5/5 [==============================] - 1s 152ms/step - loss: 0.4180 - accuracy: 0.9221 - val_loss: 1.4263 - val_accuracy: 0.8429\n",
      "Epoch 40/100\n",
      "5/5 [==============================] - 1s 177ms/step - loss: 0.4432 - accuracy: 0.9168 - val_loss: 1.4712 - val_accuracy: 0.8214\n",
      "Epoch 41/100\n",
      "5/5 [==============================] - 1s 144ms/step - loss: 0.4285 - accuracy: 0.9065 - val_loss: 1.3988 - val_accuracy: 0.8443\n",
      "Epoch 42/100\n",
      "5/5 [==============================] - 1s 152ms/step - loss: 0.3796 - accuracy: 0.9174 - val_loss: 1.5349 - val_accuracy: 0.8314\n",
      "Epoch 43/100\n",
      "5/5 [==============================] - 1s 135ms/step - loss: 0.4479 - accuracy: 0.9121 - val_loss: 1.3893 - val_accuracy: 0.8557\n",
      "Epoch 44/100\n",
      "5/5 [==============================] - 1s 205ms/step - loss: 0.2786 - accuracy: 0.9392 - val_loss: 3.3798 - val_accuracy: 0.7086\n",
      "Epoch 45/100\n",
      "5/5 [==============================] - 1s 189ms/step - loss: 1.1848 - accuracy: 0.8274 - val_loss: 1.5555 - val_accuracy: 0.8371\n",
      "Epoch 46/100\n",
      "5/5 [==============================] - 1s 169ms/step - loss: 0.5219 - accuracy: 0.9136 - val_loss: 1.4113 - val_accuracy: 0.8371\n",
      "Epoch 47/100\n",
      "5/5 [==============================] - 1s 154ms/step - loss: 0.3574 - accuracy: 0.9249 - val_loss: 1.5458 - val_accuracy: 0.8357\n",
      "Epoch 48/100\n",
      "5/5 [==============================] - 1s 124ms/step - loss: 0.3093 - accuracy: 0.9423 - val_loss: 1.4719 - val_accuracy: 0.8314\n",
      "Epoch 49/100\n",
      "5/5 [==============================] - 1s 151ms/step - loss: 0.3219 - accuracy: 0.9313 - val_loss: 1.2659 - val_accuracy: 0.8629\n",
      "Epoch 50/100\n",
      "5/5 [==============================] - 1s 171ms/step - loss: 0.2089 - accuracy: 0.9521 - val_loss: 2.2221 - val_accuracy: 0.7771\n",
      "Epoch 51/100\n",
      "5/5 [==============================] - 1s 139ms/step - loss: 0.5970 - accuracy: 0.8885 - val_loss: 1.6676 - val_accuracy: 0.8214\n",
      "Epoch 52/100\n",
      "5/5 [==============================] - 1s 169ms/step - loss: 0.2218 - accuracy: 0.9367 - val_loss: 2.9995 - val_accuracy: 0.7414\n",
      "Epoch 53/100\n",
      "5/5 [==============================] - 1s 173ms/step - loss: 0.8647 - accuracy: 0.8692 - val_loss: 1.4096 - val_accuracy: 0.8571\n",
      "Epoch 54/100\n",
      "5/5 [==============================] - 1s 201ms/step - loss: 0.4277 - accuracy: 0.9210 - val_loss: 1.3716 - val_accuracy: 0.8557\n",
      "Epoch 55/100\n",
      "5/5 [==============================] - 1s 155ms/step - loss: 0.1871 - accuracy: 0.9521 - val_loss: 1.4880 - val_accuracy: 0.8286\n",
      "Epoch 56/100\n",
      "5/5 [==============================] - 1s 139ms/step - loss: 0.2525 - accuracy: 0.9379 - val_loss: 1.2095 - val_accuracy: 0.8571\n",
      "Epoch 57/100\n",
      "5/5 [==============================] - 1s 200ms/step - loss: 0.1593 - accuracy: 0.9504 - val_loss: 1.1502 - val_accuracy: 0.8786\n",
      "Epoch 58/100\n",
      "5/5 [==============================] - 1s 169ms/step - loss: 0.1301 - accuracy: 0.9653 - val_loss: 1.2333 - val_accuracy: 0.8686\n",
      "Epoch 59/100\n",
      "5/5 [==============================] - 1s 155ms/step - loss: 0.1333 - accuracy: 0.9599 - val_loss: 1.1907 - val_accuracy: 0.8771\n",
      "Epoch 60/100\n",
      "5/5 [==============================] - 1s 137ms/step - loss: 0.1730 - accuracy: 0.9557 - val_loss: 1.5155 - val_accuracy: 0.8314\n",
      "Epoch 61/100\n",
      "5/5 [==============================] - 1s 177ms/step - loss: 0.1984 - accuracy: 0.9503 - val_loss: 1.5048 - val_accuracy: 0.8414\n",
      "Epoch 62/100\n",
      "5/5 [==============================] - 1s 157ms/step - loss: 0.1791 - accuracy: 0.9458 - val_loss: 2.5472 - val_accuracy: 0.7543\n",
      "Epoch 63/100\n",
      "5/5 [==============================] - 1s 143ms/step - loss: 0.7222 - accuracy: 0.8597 - val_loss: 1.9411 - val_accuracy: 0.8214\n",
      "Epoch 64/100\n",
      "5/5 [==============================] - 1s 136ms/step - loss: 0.7179 - accuracy: 0.8668 - val_loss: 1.3057 - val_accuracy: 0.8871\n",
      "Epoch 65/100\n",
      "5/5 [==============================] - 1s 143ms/step - loss: 0.3293 - accuracy: 0.9339 - val_loss: 2.7477 - val_accuracy: 0.7557\n",
      "Epoch 66/100\n",
      "5/5 [==============================] - 1s 137ms/step - loss: 1.2682 - accuracy: 0.8158 - val_loss: 3.8205 - val_accuracy: 0.7400\n",
      "Epoch 67/100\n",
      "5/5 [==============================] - 1s 182ms/step - loss: 1.3911 - accuracy: 0.8621 - val_loss: 2.7817 - val_accuracy: 0.7714\n",
      "Epoch 68/100\n",
      "5/5 [==============================] - 1s 182ms/step - loss: 0.9739 - accuracy: 0.8762 - val_loss: 3.5076 - val_accuracy: 0.7186\n",
      "Epoch 69/100\n",
      "5/5 [==============================] - 1s 142ms/step - loss: 0.9855 - accuracy: 0.8385 - val_loss: 3.3234 - val_accuracy: 0.7571\n",
      "Epoch 70/100\n",
      "5/5 [==============================] - 1s 144ms/step - loss: 0.7558 - accuracy: 0.8736 - val_loss: 1.9545 - val_accuracy: 0.8386\n",
      "Epoch 71/100\n",
      "5/5 [==============================] - 1s 150ms/step - loss: 0.3468 - accuracy: 0.9257 - val_loss: 1.5358 - val_accuracy: 0.8671\n",
      "Epoch 72/100\n",
      "5/5 [==============================] - 1s 169ms/step - loss: 0.1140 - accuracy: 0.9723 - val_loss: 1.7201 - val_accuracy: 0.8300\n",
      "Epoch 73/100\n",
      "5/5 [==============================] - 1s 139ms/step - loss: 0.1078 - accuracy: 0.9663 - val_loss: 1.5763 - val_accuracy: 0.8529\n",
      "Epoch 74/100\n",
      "5/5 [==============================] - 1s 157ms/step - loss: 0.2788 - accuracy: 0.9436 - val_loss: 1.2660 - val_accuracy: 0.8900\n",
      "Epoch 75/100\n",
      "5/5 [==============================] - 1s 186ms/step - loss: 0.0831 - accuracy: 0.9695 - val_loss: 1.7341 - val_accuracy: 0.8443\n",
      "Epoch 76/100\n",
      "5/5 [==============================] - 1s 172ms/step - loss: 0.2608 - accuracy: 0.9517 - val_loss: 1.3608 - val_accuracy: 0.8857\n",
      "Epoch 77/100\n",
      "5/5 [==============================] - 1s 225ms/step - loss: 0.1023 - accuracy: 0.9766 - val_loss: 2.0198 - val_accuracy: 0.8271\n",
      "Epoch 78/100\n",
      "5/5 [==============================] - 1s 168ms/step - loss: 0.1277 - accuracy: 0.9648 - val_loss: 1.3196 - val_accuracy: 0.8786\n",
      "Epoch 79/100\n",
      "5/5 [==============================] - 1s 157ms/step - loss: 0.0739 - accuracy: 0.9771 - val_loss: 1.4343 - val_accuracy: 0.8871\n",
      "Epoch 80/100\n",
      "5/5 [==============================] - 1s 169ms/step - loss: 0.0498 - accuracy: 0.9869 - val_loss: 1.6975 - val_accuracy: 0.8414\n",
      "Epoch 81/100\n",
      "5/5 [==============================] - 1s 151ms/step - loss: 0.0372 - accuracy: 0.9883 - val_loss: 1.3767 - val_accuracy: 0.8743\n",
      "Epoch 82/100\n",
      "5/5 [==============================] - 1s 153ms/step - loss: 0.0456 - accuracy: 0.9839 - val_loss: 1.3798 - val_accuracy: 0.8643\n",
      "Epoch 83/100\n",
      "5/5 [==============================] - 1s 135ms/step - loss: 0.0134 - accuracy: 0.9930 - val_loss: 1.2891 - val_accuracy: 0.8829\n",
      "Epoch 84/100\n",
      "5/5 [==============================] - 1s 155ms/step - loss: 0.0046 - accuracy: 0.9993 - val_loss: 1.2904 - val_accuracy: 0.8814\n",
      "Epoch 85/100\n",
      "5/5 [==============================] - 1s 136ms/step - loss: 0.0074 - accuracy: 0.9971 - val_loss: 1.3100 - val_accuracy: 0.8800\n",
      "Epoch 86/100\n",
      "5/5 [==============================] - 1s 126ms/step - loss: 0.0063 - accuracy: 0.9985 - val_loss: 1.3457 - val_accuracy: 0.8800\n",
      "Epoch 87/100\n",
      "5/5 [==============================] - 1s 151ms/step - loss: 0.0038 - accuracy: 1.0000 - val_loss: 1.2894 - val_accuracy: 0.8814\n",
      "Epoch 88/100\n",
      "5/5 [==============================] - 1s 156ms/step - loss: 0.0030 - accuracy: 0.9987 - val_loss: 1.3312 - val_accuracy: 0.8743\n",
      "Epoch 89/100\n",
      "5/5 [==============================] - 1s 164ms/step - loss: 0.0027 - accuracy: 1.0000 - val_loss: 1.3133 - val_accuracy: 0.8743\n",
      "Epoch 90/100\n",
      "5/5 [==============================] - 1s 164ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 1.2968 - val_accuracy: 0.8771\n",
      "Epoch 91/100\n",
      "5/5 [==============================] - 1s 158ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 1.3257 - val_accuracy: 0.8757\n",
      "Epoch 92/100\n",
      "5/5 [==============================] - 1s 169ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 1.3199 - val_accuracy: 0.8757\n",
      "Epoch 93/100\n",
      "5/5 [==============================] - 1s 171ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 1.2915 - val_accuracy: 0.8814\n",
      "Epoch 94/100\n",
      "5/5 [==============================] - 1s 251ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 1.3020 - val_accuracy: 0.8800\n",
      "Epoch 95/100\n",
      "5/5 [==============================] - 1s 225ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 1.3131 - val_accuracy: 0.8786\n",
      "Epoch 96/100\n",
      "5/5 [==============================] - 1s 149ms/step - loss: 0.0012 - accuracy: 1.0000 - val_loss: 1.2945 - val_accuracy: 0.8800\n",
      "Epoch 97/100\n",
      "5/5 [==============================] - 1s 167ms/step - loss: 0.0010 - accuracy: 1.0000 - val_loss: 1.3119 - val_accuracy: 0.8843\n",
      "Epoch 98/100\n",
      "5/5 [==============================] - 1s 157ms/step - loss: 0.0010 - accuracy: 1.0000 - val_loss: 1.3006 - val_accuracy: 0.8814\n",
      "Epoch 99/100\n",
      "5/5 [==============================] - 1s 166ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.3015 - val_accuracy: 0.8814\n",
      "Epoch 100/100\n",
      "5/5 [==============================] - 1s 141ms/step - loss: 0.0011 - accuracy: 1.0000 - val_loss: 1.3061 - val_accuracy: 0.8829\n"
     ]
    }
   ],
   "source": [
    "## I now fit the model, and store the training history\n",
    "## I use 100 epochs and a batch_size of 512\n",
    "history_fft = model_fft.fit(X_fft_train,\n",
    "                        to_categorical(y_fft_train),\n",
    "                        epochs = 100,\n",
    "                        batch_size = 400,\n",
    "                        validation_data=(X_fft_test,to_categorical(y_fft_test)))\n",
    "history_fft_dict = history_fft.history"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Naive Bayes Gaussian"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6757142857142857\n",
      "0.7663934426229508\n",
      "0.5238095238095238\n"
     ]
    }
   ],
   "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))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6485714285714286\n",
      "0.8135593220338984\n",
      "0.40336134453781514\n"
     ]
    }
   ],
   "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))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7685714285714286\n",
      "0.7545691906005222\n",
      "0.8095238095238095\n"
     ]
    }
   ],
   "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))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8614285714285714\n",
      "0.8282828282828283\n",
      "0.9187675070028011\n"
     ]
    }
   ],
   "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))"
   ]
  },
  {
   "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
}