{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Digit Classifier w/ MNIST"},{"metadata":{},"cell_type":"markdown","source":"This is my first time working with image classification so I am following along with Yassine Ghouzam's excellent CNN introduction kernel (https://www.kaggle.com/yassineghouzam). I made some modifications here and there mostly as clarification for myself and for future reference."},{"metadata":{},"cell_type":"markdown","source":"### Table of Contents\n1. Loading in data\n2. Data Preparation\n3. Modeling\n4. Evaluation\n5. Output"},{"metadata":{},"cell_type":"markdown","source":"## 1. Loading in data"},{"metadata":{},"cell_type":"markdown","source":"### 1.1 Load data"},{"metadata":{},"cell_type":"markdown","source":"***\nAs usual the first thing we need to do is load in the various packages we are going to be using.\n***"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport seaborn as sns\nimport random\n%matplotlib inline\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nimport itertools\n\nfrom keras.utils.np_utils import to_categorical \nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D\nfrom keras.optimizers import RMSprop\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau","execution_count":106,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***\nNow that we have the packages we are going to use, we need to load in the data set. Our data has already been added to this notebook under the `../input/` folder so we don't need to go find it. \n***"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"# Path if you are working in the Kaggle environment\ntrain = pd.read_csv('../input/train.csv')\ntest = pd.read_csv('../input/test.csv')\n# If you aren't in Kaggle then you will need to download the datasets and change the paths","execution_count":107,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 1.2 Preliminary Exploration"},{"metadata":{},"cell_type":"markdown","source":"***\nOnce we have loaded our data we want to do some preliminary exploration to get a sense of what we are dealing with. A good place to start is with `describe()` and `columns` as they tells us a lot about the data.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"train.describe()","execution_count":108,"outputs":[{"output_type":"execute_result","execution_count":108,"data":{"text/plain":"              label   pixel0   pixel1    ...     pixel781  pixel782  pixel783\ncount  42000.000000  42000.0  42000.0    ...      42000.0   42000.0   42000.0\nmean       4.456643      0.0      0.0    ...          0.0       0.0       0.0\nstd        2.887730      0.0      0.0    ...          0.0       0.0       0.0\nmin        0.000000      0.0      0.0    ...          0.0       0.0       0.0\n25%        2.000000      0.0      0.0    ...          0.0       0.0       0.0\n50%        4.000000      0.0      0.0    ...          0.0       0.0       0.0\n75%        7.000000      0.0      0.0    ...          0.0       0.0       0.0\nmax        9.000000      0.0      0.0    ...          0.0       0.0       0.0\n\n[8 rows x 785 columns]","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>label</th>\n      <th>pixel0</th>\n      <th>pixel1</th>\n      <th>pixel2</th>\n      <th>pixel3</th>\n      <th>pixel4</th>\n      <th>pixel5</th>\n      <th>pixel6</th>\n      <th>pixel7</th>\n      <th>pixel8</th>\n      <th>pixel9</th>\n      <th>pixel10</th>\n      <th>pixel11</th>\n      <th>pixel12</th>\n      <th>pixel13</th>\n      <th>pixel14</th>\n      <th>pixel15</th>\n      <th>pixel16</th>\n      <th>pixel17</th>\n      <th>pixel18</th>\n      <th>pixel19</th>\n      <th>pixel20</th>\n      <th>pixel21</th>\n      <th>pixel22</th>\n      <th>pixel23</th>\n      <th>pixel24</th>\n      <th>pixel25</th>\n      <th>pixel26</th>\n      <th>pixel27</th>\n      <th>pixel28</th>\n      <th>pixel29</th>\n      <th>pixel30</th>\n      <th>pixel31</th>\n      <th>pixel32</th>\n      <th>pixel33</th>\n      <th>pixel34</th>\n      <th>pixel35</th>\n      <th>pixel36</th>\n      <th>pixel37</th>\n      <th>pixel38</th>\n      <th>...</th>\n      <th>pixel744</th>\n      <th>pixel745</th>\n      <th>pixel746</th>\n      <th>pixel747</th>\n      <th>pixel748</th>\n      <th>pixel749</th>\n      <th>pixel750</th>\n      <th>pixel751</th>\n      <th>pixel752</th>\n      <th>pixel753</th>\n      <th>pixel754</th>\n      <th>pixel755</th>\n      <th>pixel756</th>\n      <th>pixel757</th>\n      <th>pixel758</th>\n      <th>pixel759</th>\n      <th>pixel760</th>\n      <th>pixel761</th>\n      <th>pixel762</th>\n      <th>pixel763</th>\n      <th>pixel764</th>\n      <th>pixel765</th>\n      <th>pixel766</th>\n      <th>pixel767</th>\n      <th>pixel768</th>\n      <th>pixel769</th>\n      <th>pixel770</th>\n      <th>pixel771</th>\n      <th>pixel772</th>\n      <th>pixel773</th>\n      <th>pixel774</th>\n      <th>pixel775</th>\n      <th>pixel776</th>\n      <th>pixel777</th>\n      <th>pixel778</th>\n      <th>pixel779</th>\n      <th>pixel780</th>\n      <th>pixel781</th>\n      <th>pixel782</th>\n      <th>pixel783</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>42000.000000</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.00000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>...</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.00000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.00000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>4.456643</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.00300</td>\n      <td>0.011190</td>\n      <td>0.005143</td>\n      <td>0.000214</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000381</td>\n      <td>0.001310</td>\n      <td>0.010548</td>\n      <td>0.027262</td>\n      <td>0.050905</td>\n      <td>0.066405</td>\n      <td>0.129571</td>\n      <td>...</td>\n      <td>3.772524</td>\n      <td>2.748905</td>\n      <td>1.796452</td>\n      <td>1.089905</td>\n      <td>0.563190</td>\n      <td>0.239571</td>\n      <td>0.093524</td>\n      <td>0.024833</td>\n      <td>0.000857</td>\n      <td>0.001405</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.006143</td>\n      <td>0.035833</td>\n      <td>0.082357</td>\n      <td>0.114905</td>\n      <td>0.178714</td>\n      <td>0.301452</td>\n      <td>0.413643</td>\n      <td>0.513667</td>\n      <td>0.558833</td>\n      <td>0.677857</td>\n      <td>0.60281</td>\n      <td>0.489238</td>\n      <td>0.340214</td>\n      <td>0.219286</td>\n      <td>0.117095</td>\n      <td>0.059024</td>\n      <td>0.02019</td>\n      <td>0.017238</td>\n      <td>0.002857</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>2.887730</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.56812</td>\n      <td>1.626927</td>\n      <td>1.053972</td>\n      <td>0.043916</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.078072</td>\n      <td>0.232634</td>\n      <td>1.131661</td>\n      <td>2.310396</td>\n      <td>3.121847</td>\n      <td>3.259128</td>\n      <td>4.992894</td>\n      <td>...</td>\n      <td>26.957829</td>\n      <td>22.879248</td>\n      <td>18.595109</td>\n      <td>14.434439</td>\n      <td>10.517823</td>\n      <td>6.469315</td>\n      <td>3.976306</td>\n      <td>1.846016</td>\n      <td>0.139556</td>\n      <td>0.287891</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.949803</td>\n      <td>2.350859</td>\n      <td>3.934280</td>\n      <td>4.543583</td>\n      <td>5.856772</td>\n      <td>7.219742</td>\n      <td>8.928286</td>\n      <td>10.004069</td>\n      <td>10.129595</td>\n      <td>11.254931</td>\n      <td>10.69603</td>\n      <td>9.480066</td>\n      <td>7.950251</td>\n      <td>6.312890</td>\n      <td>4.633819</td>\n      <td>3.274488</td>\n      <td>1.75987</td>\n      <td>1.894498</td>\n      <td>0.414264</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>2.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>4.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>7.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>9.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>116.00000</td>\n      <td>254.000000</td>\n      <td>216.000000</td>\n      <td>9.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>16.000000</td>\n      <td>47.000000</td>\n      <td>157.000000</td>\n      <td>254.000000</td>\n      <td>255.000000</td>\n      <td>243.000000</td>\n      <td>255.000000</td>\n      <td>...</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>253.000000</td>\n      <td>28.000000</td>\n      <td>59.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>177.000000</td>\n      <td>231.000000</td>\n      <td>253.000000</td>\n      <td>254.000000</td>\n      <td>254.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>255.00000</td>\n      <td>255.000000</td>\n      <td>255.000000</td>\n      <td>254.000000</td>\n      <td>254.000000</td>\n      <td>253.000000</td>\n      <td>253.00000</td>\n      <td>254.000000</td>\n      <td>62.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.columns","execution_count":109,"outputs":[{"output_type":"execute_result","execution_count":109,"data":{"text/plain":"Index(['label', 'pixel0', 'pixel1', 'pixel2', 'pixel3', 'pixel4', 'pixel5',\n       'pixel6', 'pixel7', 'pixel8',\n       ...\n       'pixel774', 'pixel775', 'pixel776', 'pixel777', 'pixel778', 'pixel779',\n       'pixel780', 'pixel781', 'pixel782', 'pixel783'],\n      dtype='object', length=785)"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"***\nThe data is organized as one row is a digit with 784 values per digit is one long array and one label value. This works out to be a 28x28 image which we will deal with in a bit. For now lets see how many of each digit there is.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = train['label']\nx_train = train.copy(deep = True)\nx_train = x_train.drop('label',axis=1)","execution_count":110,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train.value_counts()","execution_count":111,"outputs":[{"output_type":"execute_result","execution_count":111,"data":{"text/plain":"1    4684\n7    4401\n3    4351\n9    4188\n2    4177\n6    4137\n0    4132\n4    4072\n8    4063\n5    3795\nName: label, dtype: int64"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(1.5*8,8))\nsns.countplot(y_train);","execution_count":112,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 864x576 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"***\nIn our training set there seems to be roughly an even distribution among all numbers. This means we don't have to take into account whether the training set and test set have different distributions and we won't overtrain because of it.\n***"},{"metadata":{},"cell_type":"markdown","source":"### 2.1 Checking for missing values"},{"metadata":{},"cell_type":"markdown","source":"***\nThe next thing we need to do is check to see if theere are any missing values as that will mess up the training process. Luckily the values for each pixel are just one or zero so if there are any null values we won't have to do much work to correct them.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"print(x_train.isnull().any().sum(),y_train.isnull().any().sum())","execution_count":113,"outputs":[{"output_type":"stream","text":"0 0\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"***\nThere are no missing values so we can proceed to the next step.\n***"},{"metadata":{},"cell_type":"markdown","source":"### 2.2 Normalize and Reshape"},{"metadata":{},"cell_type":"markdown","source":"***\nFor the next step we need to reshape our arrays from 1D to 2D and also normalize the values (greyscale going from 0-255) to have our model converge faster between 0-1. To do this we just divide all the values by the maximum, 255.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = x_train / 255.0\ntest = test / 255.0","execution_count":114,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***\nOur arrays are 784 elements long that translates into a 2D array of 28x28. To reshape them we use `reshape()` passing the arguments `(-1,28,28,1)` where the -1 tells `reshape()` to use all the columns for a row, the 28s are for the height and width, and the 1 is for the channel (think RGB) which is for greyscale/brightness.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = x_train.values.reshape(-1,28,28,1)\ntest = test.values.reshape(-1,28,28,1)","execution_count":115,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 2.3 One-Hot Encoding"},{"metadata":{},"cell_type":"markdown","source":"***\nThe next step we need to do is convert our labels from 1-10 to 10 separate lables where a 1 identifies that it is a specific number and a 0 that it is not; this is called One-Hot encoding. We do this because 8 is not 8 times better than 1 so we are changing the labels from values into strings or names.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = to_categorical(y_train,num_classes=10)","execution_count":116,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"### 2.4 Creating training and test sets"},{"metadata":{},"cell_type":"markdown","source":"***\nThe last thing we need to do before beginning the modeling process is to split up our training set further into another training and validation set (not a test set, that is the final step!) using `scikit-learn`'s `train_test_split()`. To prevent overfitting a general guideline for how much of your training set should be set aside for the validation set is about 20%.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train, X_valid, Y_train, Y_valid = train_test_split(x_train, y_train, \n                                                      test_size = 0.2,random_state=42)","execution_count":117,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***\nBefore we move on to modeling let's take a look at the data now that we have reshaped it and normalized it.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Gridspec_kw is the dict that you can pass the keys wspace,hspace = 0 to so that \n# it removes the whitespace between subplots. The aspect ratio is still set to \n# 'equal' however, so depending on the dimensions of the data you are plotting \n# you may need to change the figsize to remove horizontal whitespace.\nfig, ax = plt.subplots(2, 4,figsize=(13,7),gridspec_kw = {'wspace':0, 'hspace':0})\n\nfor i in range(2):\n    for j in range(4):\n        ax[i,j].imshow(X_train[random.randint(0,100)][:,:,0],cmap='Greys') #row=0, col=0\n        ax[i,j].axis('off')\n\nplt.show()","execution_count":118,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 936x504 with 8 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## 3. Modeling"},{"metadata":{},"cell_type":"markdown","source":"### 3.1 Initializing the model"},{"metadata":{},"cell_type":"markdown","source":"***\nNow that are data is ready to go we can begin building our model. The model we will be using for this project is a Convolutional Neural Network (CNN) which are neural nets designed to mimick how the neural cortex works in animals. CNNs are commonly applied to visual learning tasks and are less prone to overfitting problems than their more complex cousin the Perceptron."},{"metadata":{},"cell_type":"markdown","source":"The CNN we are going to be using is a little complex upfront so it would be good to define some of the tools we will use.\n* `Sequential()` is a Keras function that sets up the pipeline for the model by sequentially adding layers as we go.\n* `Conv2D()` is a 2D filter layer with inputs being how many filters you want and the size of each filter.\n* `MaxPool2D()` is a downsampling filter that looks at the neighboring two pixels and picks the highest value. The argument we pass it (2,2) tells it to reduce both the x and y dimensions by half. We use the *relu* rectifier activation function to add non-linearity to the process. The *relu* takes only the positive part of an input using the function $f(x) = x^+ = max(0,x)$.\n* `Dropout()` reduces overfitting by randomly dropping nodes for each training sample and forces the learning of features to be distributed.\n* `Flatten()` takes the features generated by the rest of the model and flattens them into a 1D array.\n* `Dense()` an Artificial Neural Network Layer (ANN) that is fully connected with the input value being how many filters we are inputing into the dense layer (64\\*4 then 10) and outputs then same dimension. \n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Set up the sequential CNN model \nmodel = Sequential()\n\n# Add 2 convolutional layers\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu', input_shape = (28,28,1)))\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu'))\n\n# Add a max pooling layer\nmodel.add(MaxPool2D(pool_size=(2,2)))\n\n# Add dropout layer\nmodel.add(Dropout(0.25))\n\n# Add two more convolutional layers\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\n\n# Add a final max pooling layer\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\n\n# Add another dropout layer\nmodel.add(Dropout(0.25))\n\n# Flatten the model\nmodel.add(Flatten())\n\n# Add a dense layer\nmodel.add(Dense(256, activation = \"relu\"))\n\n# Add final dropout layer\nmodel.add(Dropout(0.5))\n\n# Add final dense layer\nmodel.add(Dense(10, activation = \"softmax\"))","execution_count":119,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***\nNow that we have our model set up there are a couple other things we need to set up. \n***"},{"metadata":{},"cell_type":"markdown","source":"### 3.2 Optimization"},{"metadata":{},"cell_type":"markdown","source":"***\nThe next thing we need to do is set up our loss function (determines how far off the predictions are from the actual distance, we will use `categorical_crossentropy`) and a learning rate annealer. The annealer just optimizes the parameters of our model iteratively in order to minimize our loss. Here we are using RMSprop instead of a Stochastic Gradient Descent (SGD) optimizer as it is faster. \n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Define the optimizer\noptimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)\n\n# Compile the model\nmodel.compile(optimizer = optimizer , loss = \"categorical_crossentropy\", metrics=[\"accuracy\"])\n\n# Set a learning rate annealer\nlearning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', \n                                            patience=3, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.00001)\n\nepochs = 2 # Turn epochs to 30 to get 0.9967 accuracy\nbatch_size = 86","execution_count":120,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 3.3 Increasing the dataset"},{"metadata":{},"cell_type":"markdown","source":"***\nSomething we can do with a dataset of images is make more images to train on by shifting, rotating, and zooming in just slightly. Applying these randomly essentially doubles the training dataset which will help with overfitting. To do this we will use Keras' `ImageDataGenerator` function applying the following random transformations:\n* 10 degree rotations\n* 10% zoom\n* Shift horizontally by 15% of the width\n* Shift vertically by 15% of the height\n\nWe won't do any vertical/horizontal flipping because some digits are close reflections of others, think 6 and 9. Flipping would be more appropriate for images like houses or buildings.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen = ImageDataGenerator(\n        featurewise_center=False,  # set input mean to 0 over the dataset\n        samplewise_center=False,  # set each sample mean to 0\n        featurewise_std_normalization=False,  # divide inputs by std of the dataset\n        samplewise_std_normalization=False,  # divide each input by its std\n        zca_whitening=False,  # apply ZCA whitening\n        rotation_range=10, # 0 to 10 degrees, any more and the model gets less accurate \n        zoom_range = 0.1,  # Higher will clip the image sometimes\n        width_shift_range=0.125, # Higher will clip the image sometimes \n        height_shift_range=0.125, # Higher will clip the image sometimes \n        horizontal_flip=False,\n        vertical_flip=False)\n\n\ndatagen.fit(X_train)","execution_count":121,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***\nNow that we have everything ready to go we can fit the model.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Fit the model\nhistory = model.fit_generator(datagen.flow(X_train,Y_train, batch_size=batch_size),\n                              epochs = epochs, validation_data = (X_valid,Y_valid),\n                              verbose = 2, steps_per_epoch=X_train.shape[0] // batch_size\n                              , callbacks=[learning_rate_reduction])","execution_count":122,"outputs":[{"output_type":"stream","text":"Epoch 1/2\n - 11s - loss: 0.5371 - acc: 0.8265 - val_loss: 0.0579 - val_acc: 0.9821\nEpoch 2/2\n - 10s - loss: 0.1562 - acc: 0.9530 - val_loss: 0.0551 - val_acc: 0.9832\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"## 4. Evaluation"},{"metadata":{},"cell_type":"markdown","source":"### 4.1 Training and Evaluation Curves"},{"metadata":{},"cell_type":"markdown","source":"***\nNow that we have fit our model we can plot loss and accuracy for both the training set and the validation set.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Plot the loss and accuracy curves for training and validation \nfig, ax = plt.subplots(2,1,figsize=(13,10))\nax[0].plot(history.history['loss'], color='b', label=\"Training loss\")\nax[0].plot(history.history['val_loss'], color='r', label=\"validation loss\",axes =ax[0])\nlegend = ax[0].legend(loc='best', fontsize=20, shadow=True)\n\nax[1].plot(history.history['acc'], color='b', label=\"Training accuracy\")\nax[1].plot(history.history['val_acc'], color='r',label=\"Validation accuracy\")\nlegend = ax[1].legend(loc='best', fontsize=20,shadow=True)","execution_count":123,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 936x720 with 2 Axes>","image/png":"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7txzz+WUU06hRRpelXPy5MmpLkHFMBBIpZTX3jSvxenGjcn6g7yAMHRocmvUKOlalBcQ2rVLdeWSpKqoQYMGNGjQINVlFOvQQw9NdQkqhmsIpDKW1970/vvh3XeTC6Q98wyccw7MmAE/+Qkcemhy+/GPYcwYWL061VVLksrS22+/TQiBc889d5fHHHXUUdSsWZPVuf8IbN68mZEjR9KvXz9at25NzZo1ady4Mb179+bVV18t8XPvbg3BpEmT6NatG/vvvz+NGzfmnHPO4aOPPtrtuc4//3zatWtH7dq1qV+/Pl27duXpp58udNyiRYsIIfD6668Dybz8vFvB+fm7WkOwadMmRowYwXHHHUedOnWoX78+3bp144UXXihybN5zDRo0iEWLFnHJJZfQtGlTatWqRXZ2Ni+//HLJ/qD2YO3atdx6660cccQR1KpVi0aNGtG3b18mTZpU5NgYI6NGjaJLly40a9aMWrVqccghh9C3b1+ef/75Qse+//77XHrppbRp04aaNWvSrFkzTjrpJIYMGcKWLVvKpPa95QiBVM6Ka2+aN3qwq/amXbpAVlaqK5ck7atTTjmFI444gldeeYVVq1bRpEmTQvtnzpzJRx99xPnnn0/j3AverF69muuvv54uXbrQp08fmjVrxhdffMHf/vY3+vXrx5/+9Ceuuuqqfa5pzJgxXHzxxWRlZXHxxRfTokULpk+fTufOnTn++OOLfcxPf/pTjjnmGE477TRatGjBqlWreOWVVxg4cCDz58/nrrvuAqBhw4bccccdPPnkkyxevJg77rhjxzn2tIh48+bN9O3bl9dff50jjzySn/3sZ2zYsGFHve+99x733ntvkcctXryYjh070q5dOwYOHMjq1at5/vnnGTBgAJMmTaJHjx77/Gf1zTff0LVrVz744ANOPvlkhgwZwtdff80LL7zAGWecwaOPPsqPf/zjHcffdtttDB8+nLZt23LRRRfRoEEDvvjiC2bNmsXo0aO5+OKLgSQMdOrUiRAC/fv3p23btnz77bcsWLCA3//+99x9993st99++1z3vjIQSBUor73pkUfCtdfCli0wc2Z+QLjvPrj3XqhTJ1mUnBcQjjkmeawkVQlDhsB776W6it074YRkQVgpXHHFFfz3f/83zz77LNdcc02hfaNGjdpxTJ5GjRqxePFiDj744ELHrl27lq5du3LzzTdz+eWXU7t27b2uZf369fz4xz+mWrVqTJs2jezs7B37brjhBn67i9c6d+7cItN8Nm/ezFlnncWIESP4yU9+QsuWLWnYsCHDhg1j6tSpLF68mGHDhpW4tgcffJDXX3+ds846i/Hjx1OjRvLx9I477qBjx44MHz6cH/zgB3Tp0qXQ46ZOncqwYcMKhY/LLruMM888kwceeKBUgeCWW27hgw8+YPDgwfzhD38g5P4jfMstt5Cdnc11111H3759d4SdP/7xj7Rs2ZK5c+dSp06dQuf6+uuvd/w+atQovvvuO8aOHcuAvE4ludasWVPksRXFKUNSCtneVJKqroEDB1KtWrUdH/7zbN68meeee47mzZtz1lln7dhes2bNImEAkjUBV155JWvWrGHWrFn7VMu4ceNYvXo1l112WaEwADBs2LBdrjkobs5/VlYWP/vZz9i6dWuZLBJ+/PHHCSHw61//ekcYAGjevDm33347AH/+85+LPK5169YMHTq00La+ffvSqlUrZs6cuc/1bN68maeffpq6desyfPjwHWEAoH379lx33XVs3ryZp556qtDj9ttvP6oX0z2kadOmRbYVF+oaNWpEtWqp+WjuCIGURmxvKikjlPKb98ri4IMPplevXkycOJEPPviAo48+GoC//e1vrF69mhtuuKHQB2CAefPm8cADD/DGG2/wxRdf8N133xXav2zZsn2q5Z133gHg9NNPL7KvQYMGnHDCCTvm/xe0ZMkS7rvvPiZPnsySJUvYuHFjmdSTZ926dSxYsICWLVty5JFHFtnfs2dPAN59990i+0444YRiP4AfcsghvPXWW/tc0/z589mwYQNdu3bdMZ1r55ruvvvuQjVdfvnlPPzwwxx99NFcdNFFnH766XTu3LlI0Lr44ot56KGHOOecc7jgggvo3bs3Xbt2TfliawOBlMZsbypJldugQYOYOHEio0aN4r777gOKny4EyULknj17snXrVnr16kX//v2pX78+1apV47333mPcuHFs2rRpn+pYu3YtAAcccECx+w888MAi2xYuXEjHjh1Zs2YN3bp144wzzqBBgwZUr16dRYsWMWrUqH2uZ+e6dtUiNW/7N998U2Rfw4YNi31MjRo12L59e4XW9Jvf/IZ27drxxBNPMGLECEaMGEGNGjXo168fDz74IIcddhgAHTt2ZNq0adxzzz2M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mDzZrxi0dCk88QRcfLGSARGRM+kPf/gDr776KlWqVOH111/n3XffpWnTpixdupTmzZuHOryg1K9fn8WLF3PttdeyfPly/v73v7N69Wreeust+vXrBwTmGuTmVD6Pq6++mqVLl3L11VezZMkSnn32WT7++GMiIyMZPXr0Kfe96667eOmll6hSpQqTJk3i448/pkePHsybN48yZcqc9OdUsWJFvvrqKwYOHMjy5ct54YUXWLNmDWPHjmXChAk5Pqd06dLMmjWLcePGUalSJV5//XVeeuklli9fzjXXXJPjikbOuWMrCv3ud7877gTxwsj5ub8FR0xMjMXFxYU6DJETSk31a4OnVwEWLoSkJIiKgi5d/ETgXr3g3HN9ZUBE5Hji4+OJjo4OdRhSyNx999288MILLFiwgIsuynEap5wBAwcO5KOPPmLx4sW0a9cuZHHEx8ezcOFC+vbte2zIVE7S9v/KvtZtFhoyJBKkbdtg5kyfAMyc6b/xBz8P4J57fBJw0UVwknOhREREjmvbtm3Url07U9uyZcuYMGECtWvXDulNaXHz448/MmXKFGJiYorc566EQOQ4jhyBBQsCVYD0wc0l/QAAHUBJREFU4Y/Vq/tv/3v3hp49oVat0MYpIiJF17nnnkvr1q0577zziIyMZO3atcfG+7/88svH9kKQM+ett95iw4YNvP3226SkpPDEE0+EOqQ8p6tIJI0ZrF4dWA507lxISICICOjUCZ5+2icBLVtqN2AREckfd955J9OnT+edd97h4MGDVKpUicsvv5w//vGPdOzYMdThFQsvvvgiK1asoH79+rz66qv06dMn1CHlOSUEUqzt3AlffhmoAmzb5tubNYOhQ30C0KULnMIcJxERkdM2duzYbBtrSf4qDnNblRBIsZKY6PcESN8ZePlyXxmoVMkP/+nVy/+pXz/UkYqIiIjkDyUEUqSZ+U2/0hOAOXP8EqElSvh9AB591FcBYmJ8m4iIiEhxo4RAipy9e2H27EASsHGjb2/UCIYM8RWA7t21G7CIiIgIKCGQIiAlBZYtC8wDWLLEt5Ut62/877vPJwGNG2tPABEREZGslBBIobRpUyAB+PJLXxVwDqKj4f77fQLQoYN2AxYRERHJjRICKRQOHvTLgKYnAWvX+vY6deCqq/w8gB49oGrV0MYpIiIiUtgoIZACKTUVvvkmkAAs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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"***\nA couple things to note about these plots. First, the accuracy in the validation set is always higher than that of the training set which means we didn't over fit. And second, the validation loss is always less than that of the training set which also indicates a good fit.\n***"},{"metadata":{},"cell_type":"markdown","source":"### 4.2 Confusion Matrix"},{"metadata":{},"cell_type":"markdown","source":"***\nWe can also check our errors in a different way using a Confusion Matrix. What this tells us is how often a predicted label was actually a different label. For a good fit we expect the predicated and actual label to be the same.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Look at confusion matrix \n\ndef plot_confusion_matrix(cm, classes,normalize=False,title='Confusion matrix',cmap=plt.cm.Blues):\n    \"\"\"\n    This function prints and plots the confusion matrix.\n    Normalization can be applied by setting `normalize=True`.\n    \"\"\"\n    plt.figure(figsize=(13,10))\n    plt.imshow(cm, interpolation='nearest', cmap=cmap)\n    plt.title(title)\n    plt.colorbar()\n    tick_marks = np.arange(len(classes))\n    plt.xticks(tick_marks, classes, fontsize=15, rotation=45)\n    plt.yticks(tick_marks, classes, fontsize=15)\n\n    if normalize:\n        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n\n    thresh = cm.max() / 2.\n    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n        plt.text(j, i, cm[i, j],\n                 horizontalalignment=\"center\",\n                 color=\"white\" if cm[i, j] > thresh else \"black\",\n                fontsize=15)\n\n    plt.tight_layout()\n    plt.ylabel('True label',fontsize=15)\n    plt.xlabel('Predicted label',fontsize=15)\n\n# Predict the values from the validation dataset\nY_pred = model.predict(X_valid)\n\n# Convert predictions classes to one hot vectors \nY_pred_classes = np.argmax(Y_pred,axis = 1) \n\n# Convert validation observations to one hot vectors\nY_true = np.argmax(Y_valid,axis = 1) \n\n# compute the confusion matrix\nconfusion_mtx = confusion_matrix(Y_true, Y_pred_classes)\n\n# plot the confusion matrix\nplot_confusion_matrix(confusion_mtx, classes = range(10)) ","execution_count":124,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 936x720 with 2 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"***\nOur model worked pretty well except with some errors getting 2's and 7's mixed up as well as 4's and 9's. However, humans also make the same errors when trying to read other's handwriting so we can't expect a machine to get it right 100% of the time either.\n***"},{"metadata":{},"cell_type":"markdown","source":"### 4.3 Exploring errors"},{"metadata":{},"cell_type":"markdown","source":"***\nThe code below shows the top 6 errors the computer made in classifying numbers, getting them confused with others.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Display some error results \n\n# Errors are difference between predicted labels and true labels\nerrors = (Y_pred_classes - Y_true != 0)\n\nY_pred_classes_errors = Y_pred_classes[errors]\nY_pred_errors = Y_pred[errors]\nY_true_errors = Y_true[errors]\nX_val_errors = X_valid[errors]\n\ndef display_errors(errors_index,img_errors,pred_errors, obs_errors):\n    \"\"\" This function shows 6 images with their predicted and real labels\"\"\"\n    n = 0\n    nrows = 2\n    ncols = 3\n    fig, ax = plt.subplots(nrows,ncols,sharex=True,sharey=True,figsize=(13,10))\n    for row in range(nrows):\n        for col in range(ncols):\n            error = errors_index[n]\n            ax[row,col].imshow((img_errors[error]).reshape((28,28)))\n            ax[row,col].set_title(\"Predicted label :{}\\nTrue label :{}\".format(pred_errors[error],obs_errors[error]))\n            n += 1\n\n# Probabilities of the wrong predicted numbers\nY_pred_errors_prob = np.max(Y_pred_errors,axis = 1)\n\n# Predicted probabilities of the true values in the error set\ntrue_prob_errors = np.diagonal(np.take(Y_pred_errors, Y_true_errors, axis=1))\n\n# Difference between the probability of the predicted label and the true label\ndelta_pred_true_errors = Y_pred_errors_prob - true_prob_errors\n\n# Sorted list of the delta prob errors\nsorted_dela_errors = np.argsort(delta_pred_true_errors)\n\n# Top 6 errors \nmost_important_errors = sorted_dela_errors[-6:]\n\n# Show the top 6 errors\ndisplay_errors(most_important_errors, X_val_errors, Y_pred_classes_errors, Y_true_errors)","execution_count":125,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 936x720 with 6 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## 5. Output"},{"metadata":{},"cell_type":"markdown","source":"***\nFinally all that is left is to output the csv file for scoring.\n***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# predict results\nresults = model.predict(test)\n\n# select the indix with the maximum probability\nresults = np.argmax(results,axis = 1)\n\nresults = pd.Series(results,name=\"Label\")","execution_count":126,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.concat([pd.Series(range(1,28001),name = \"ImageId\"),results],axis = 1)\n\nsubmission.to_csv(\"cnn_mnist_datagen.csv\",index=False)","execution_count":127,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***\nAnd we are done.\n***"}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}