{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np \n",
"import pandas as pd \n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline \n",
"import seaborn as sns \n",
"import warnings \n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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>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>...</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",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 785 columns</p>\n",
"</div>"
],
"text/plain": [
" label pixel0 pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 \\\n",
"0 1 0 0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 0 0 0 \n",
"2 1 0 0 0 0 0 0 0 0 \n",
"3 4 0 0 0 0 0 0 0 0 \n",
"4 0 0 0 0 0 0 0 0 0 \n",
"\n",
" pixel8 ... pixel774 pixel775 pixel776 pixel777 pixel778 pixel779 \\\n",
"0 0 ... 0 0 0 0 0 0 \n",
"1 0 ... 0 0 0 0 0 0 \n",
"2 0 ... 0 0 0 0 0 0 \n",
"3 0 ... 0 0 0 0 0 0 \n",
"4 0 ... 0 0 0 0 0 0 \n",
"\n",
" pixel780 pixel781 pixel782 pixel783 \n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 0 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
"\n",
"[5 rows x 785 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('train.csv')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(42000, 785)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 4684\n",
"7 4401\n",
"3 4351\n",
"9 4188\n",
"2 4177\n",
"6 4137\n",
"0 4132\n",
"4 4072\n",
"8 4063\n",
"5 3795\n",
"Name: label, dtype: int64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.countplot(df['label']);\n",
"df['label'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## We see that digit 1 count is litle higher than any one else in dataFrame."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting some of data to visualize. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df1 = df.iloc[3, 1:]\n",
"df1 = df1.values.reshape(28,28)\n",
"plt.imshow(df1, cmap='gray');"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df2 = df.iloc[8, 1:]\n",
"df2 = df2.values.reshape(28,28)\n",
"plt.imshow(df2, cmap='gray');"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df3 = df.iloc[2, 1:]\n",
"df3 = df3.values.reshape(28,28)\n",
"plt.imshow(df3, cmap='gray');"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"X = df.drop('label', axis = 1).values\n",
"\n",
"y = df['label'].values"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Shape of X: (42000, 784) \n",
" Shape of y: (42000,)\n"
]
}
],
"source": [
"print('Shape of X:', X.shape, '\\n', 'Shape of y:', y.shape)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcwAAAG/CAYAAADVbefpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deZhUxdn38V8JiiIgKoLGJUCUuEs07vu+xR0VVFwSl6BExUcjUTEqJi4RUIOax5VEfYwLoIKKgru4RDRigkFeY1QUDKKAIAqI5/0DquZup3umZno5fXq+n+vi8k7NdPedMzOnuu6uxSVJIgAA0LAV0k4AAIAsoMMEACACHSYAABHoMAEAiECHCQBABDpMAAAi0GECABAhUx2mc66Nc+4O59yHzrn5zrm/O+cOTDuvWuac6++cm+ScW+ScG5F2PrXOObeJc+4Z59w859x7zrkj0s6plvH7XVlZv4dnqsOU1FrSdEm7S1pN0iBJDzjnuqaYU62bIelKSXemnUitc861lvSIpLGS1pB0uqR7nHM9Uk2stvH7XVmZvoe7rO/045x7W9LlSZKMTDuXWuacu1LSekmSnJx2LrXKObe5pFcltU+W/2E6556S9FqSJINSTa7G8fudnizdw7M2wszhnOsiqYekKWnnApSAK9C2eaUTASoha/fwzHaYzrkVJd0r6c9JkkxNOx+gBKZKmiXpAufcis65/bSsdNU23bSA0sviPTyTHaZzbgVJd0taLKl/yukAJZEkyRJJh0s6WNKnkv5H0gOSPk4zL6DUsnoPb512Ak3lnHOS7pDURdJBy28yQE1IkuRtLRtVSpKccy9L+nN6GQGlleV7eOY6TEm3SNpE0j5JknyddjK1bvnMzdaSWklq5ZxbWdK3SZJ8m25mtck5t6WkaVpW/TlT0jqSRqSZUy3j9zsVmb2HZ6ok65z7oaQzJPWU9KlzbsHyf8ennFotu0TS15IGSjpheXxJqhnVtr6SZmrZZ5l7S9o3SZJF6aZU0/j9rqCs38Mzv6wEAIBKyNQIEwCAtNBhAgAQgQ4TAIAIdJgAAERocFmJc44ZQU2UJEm+7c2icc2brphrzvVuOq53ZXFPqbxC15wRJgAAEegwAQCIQIcJAEAEOkwAACLQYQIAEIEOEwCACHSYAABEyOLxXgCAjFpnnXUkSR06dAhtp512Woi33XbbEF900UWSpFdeeSW0fffdd+VOsSBGmAAARKDDBAAgQoPnYZZrS6UDDjggxI8//ni9r/+///f/Qjx06NAQP/roo5KkmTNnliOtkmAbq8pjq7bK4npXVi3cU9q1axfid999V1JdaTbG4MGDQ/zEE0+E+NVXXy1BdvWxNR4AAEWgwwQAIEIqJVk7vPazoGIsXrxYkjR9+vTQ9uKLL4b4zTffDPFjjz0mSfrggw+am2az1EL5pCnWXHPNEPtSeteuXUPbl19+WfYcKBFWVi1d7z333FOSdPPNN4e2W2+9NcTDhg2reE7fl4V7SqtWrSRJxx9/fGi7/PLLQ7zCCnVjs/XXX7+o1/rmm29CPGTIkBAPGjSoqOe1KMkCAFCEVNZh3nPPPSE+55xzJEmrrrpqo49baaWVJEkbbrhhaPvRj34U4pNPPjnEv/71r+u91m233RbiSo88a9Xpp58e4ilTpkiSFixYkFY6mWTfffvfbftu2b5rd67ujW++6tDIkSNDfOqpp4Z43rx5pUm2xhx55JGSpB//+MehbdNNN00rnczykzf33XffZj3+iy++CPEaa6zR4PeuvPLKIe7UqVOzXq+5GGECABCBDhMAgAiplGT9OhyprgS12WabhbaePXuGuFu3biH26zdtSbaQ9dZbT5I0cODA0HbWWWeF+O677w6xn3g0f/78uP8DCHbbbbcQP/3005LS3boqK+xHCYccckiI7SQGz5ZeG5qkJ9WVGL//GltvvXWz8qx1e++9d9op1ISmlLEnTZokSRo/fnxou+uuu0Lcv3//EJ999tklyK50GGECABCBDhMAgAipn1Yya9asnP9K0rPPPpv3e/32Sl26dAltRx99dIiPOuqoEG+xxRaSpBVXXDG0tW/fPsRnnnlmiPfZZx9JubvkM9OzMFsS32WXXUJ81VVXpZFOZtiPGiZOnBhiO+sPyCK/jvWII44Iba1b13UvfltTSbr22mslSQsXLgxt+++/f4jtzPvGLFmypOnJFoERJgAAEegwAQCIkHpJtil8mdSWS6+++uq88Q477CBJ6tOnT2izQ32/CYIk9ejRQ5L00EMPhTZ7ogpy2Wu6dOnSEL/zzjtppFP1/KkMTz75ZGhrrAxrt3m84YYbQvzJJ5/U+97dd989xHbDAztL9qc//amkuhmKQCn5j2Oa+7HM4YcfHuKmfEQxatSoZr1eczHCBAAgQqZGmE3hz0mz56WNGTMmb+xHm3ZNlh2N2s2YW6qOHTuG2E6YsqPy2bNnVzSnambP+nvkkUckFd7Gy24mffvtt0vKHSk2toH9V199FWL7uG+//TbE/uACoFrYbfROOOGEZj2HnVhUCYwwAQCIQIcJAECEmi3J5jNhwoQQX3PNNSH2ZSx7aoSdSEFJtm6tqpRbnr333nvTSKfqbbXVViHeZptt6n3dbh94/fXXh/jiiy+Ofo1TTjlFUu5aZDshrlevXiF+++23o58XKKfu3btLku68887QFnNaled/7yXpueeeK1leMRhhAgAQgQ4TAIAILaoka9nDpO3MQuRnZ7HZUwYKbWPY0tmDnvMZOnRoiO36TLs+2LMHSNstxHzJ1b6WPRidn03z7LnnniFu1apViO2aYzSNnc160003SZLWXXfd6MfPmTMnxM8880yI7UzwSmCECQBABDpMAAAipF6S9SeIHHzwwaFtr732CvFaa63V4ONnzpwZYlvmeu+99xp8nD1lI5+PPvqowa+3NIcddliIzznnnBQzyYbzzz8/+uuNfW9j7KHSgwcPLuq5kLuloJ05T0m2+fzWjFLuxwqxLrroohBPnz69JDk1ByNMAAAilHWEabcC23nnnUN83HHHhdiuIYtlJznYd9dHHnlkiC+99FJJuWso7Vof+07cP5/dPmz48OFNzqsWnXjiiZKkqVOnhjZ/9h0Ke/DBB0O84447SpLatGlTlte65ZZbQjxixIiyvEZLYu8ptsI1Y8aMNNLJlA4dOoT4sssuC3G/fv2Ket677767qMeXCiNMAAAi0GECABChLCVZv43ayJEjQ1u7du3yfq8tfzRHofKJL7na00psucB+sO+fY8mSJaEt37mDLdGAAQMkSePGjQttlV77lEV/+tOf6rUNGzYsxPnWWzaVPwWFSVjlc9RRR4X4j3/8Y4qZVDe/XtVulWkncjaFPZ3n/vvvl1Q9p+0wwgQAIAIdJgAAEUpWkrUzYn3pqVAZ1lq4cKGk3KH85MmTQ/ziiy+GeNddd633+P322y/Ehx56aL18nnjiiUZz8DiVZBm7ZmqzzTaTJB100EFppZN5vjw7adKk0FZoxmzXrl0lSX/5y18afd4rr7xSUu7JJ2ga/zdv13Cj6a699lpJzS/DWr4MK0lnnHFG0c9XSowwAQCIQIcJAECEkpVk7YHMm266ab2vv/XWWyG+8MILQ+wPtp01a1ajr/HPf/6zXpstuW699dYhXm+99SRJa6+9dqPPO3fuXEm52y+1ZGeeeWaIH3vsMUm5WxCieWxJ1lpllVVCfMEFFzT4HP/+97/zxmied999N+0UMsXeT+2sYbtpTKyvv/46xHZFxVlnndXM7MqPESYAABFKNsK075LzsaPKCRMmlOpl9fnnn4f45ZdfDvExxxzT4OPsWh//wfKiRYtKllfW2J/fTjvtFOJit7RC4/y6ZUk65JBDGvzeG264IcTz5s0rW04txdNPP512ClVvgw02CPF5550XYrtGtSn8VqQTJ04MbXbCZTWv82aECQBABDpMAAAiVOw8zFKeL7nhhhuG2J6csffee0c/x2uvvRbihx56qDSJZVj//v1DbMvcL7zwQhrp1LyLL744xPZUh3xGjx4dYk6KqSy7/rilbo1nT5Q6++yzi34+vxWp/Shizz33DPGzzz4b4lGjRkmSbr/99tCWZsmWESYAABHoMAEAiFCykuy0adMa/Ppf//rXEPfp0yfE77//viSpY8eOoc2e5NCtW7cQ9+rVS1JuWaCx007sCSRjx44NsT+FoyWzpe1BgwaF2F7fpUuXVjSnWta+ffsQH3DAASFeYYX671vtuuVf/epXIS72dB/k8veHQvenmPXhtc7+3paLP+1Eyi3V+vjGG28MbY8//niI/Yk9Ul35tpyzxxlhAgAQgQ4TAIAIJSvJ5tsmyZ90IUlbbbVViN95550Qv/nmm5KkjTbaKLQ1twRgy8IPPPCAJOnRRx8NbW+88UaznrdW2Z/PjBkzQlzKjSVQ58EHHwyx3RzC8geX25N32JawfHyJ25+aZNukwtsZtiQnnXRS2imodeu6rsr+bdjYf6xnD2ovNUaYAABEKNkI067dO+644yRJd955Z2izI0z7bsFumB7rvffeC7E9O+2KK64IsZ3sg1z+A3b/c5Kk2267LcQff/xxxXOqZX6NWb7zXL/PT1jwI02kq5q3aasUux2evcfaCpW/TnbN5r/+9a8Qb7vttiHefvvto1+7d+/eknLPW/YHQki51ciYM2SLxQgTAIAIdJgAAERwDa3rcs6VbNHX5ptvHmK7rqxdu3aSck/L8G1S7hZ2r7/+uqTciTzVJkkSV8zjS3nNC+nQoYOkunNApdx1sPYklywo5ppX4nr7M1v322+/Rr/34YcfltT8kyAqodqvd3PYrdd+/vOfh7hNmzYhTutjnizcU2pNoWvOCBMAgAh0mAAARKjYaSX//Oc/Q+wPbEa65syZE+K2bduGOGsl2WrnP0KIKcl27ty53OkgjylTpoR46tSpIf7uu+/SSAdVihEmAAAR6DABAIhQsVmyLQUz2iqv2mdt+tN3/v3vf4e2tddeO8TXXXddiMeMGSNJevnll8udVrNV+/WuNdxTKo9ZsgAAFIERZonxbrDyGPFUFte7srinVB4jTAAAikCHCQBABDpMAAAi0GECABCBDhMAgAgNzpIFAADLMMIEACACHSYAABHoMAEAiECHCQBABDpMAAAi0GECABCBDhMAgAh0mAAARKDDBAAgAh0mAAAR6DABAIhAhwkAQAQ6TAAAItBhAgAQgQ4TAIAIdJgAAESgwwQAIAIdJgAAEegwAQCIQIcJAEAEOkwAACLQYQIAECFzHaZz7h7n3Ezn3JfOuWnOuVPTzqmWOeeec85945xbsPzfu2nnVKucc22cc3c45z50zs13zv3dOXdg2nnVOudcV+fc4865Oc65T51zw51zrdPOq1Y55/o75yY55xY550aknU9TZK7DlHSVpK5JknSQdKikK51z26ScU63rnyRJu+X/fpx2MjWstaTpknaXtJqkQZIecM51TTGnluBmSbMkrSOpp5Zd/zNTzai2zZB0paQ7006kqTLXYSZJMiVJkkX+fy7/96MUUwJKIkmSr5IkuSxJkg+SJPkuSZKxkv4jiTeE5dVN0gNJknyTJMmnksZJ2izlnGpWkiSjkiR5WNLnaefSVJnrMCXJOXezc26hpKmSZkp6POWUat1VzrnZzrmJzrk90k6mpXDOdZHUQ9KUtHOpcTdI6u2ca+ucW1fSgVrWaQI5MtlhJklypqT2knaVNErSooYfgSJcKKm7pHUl3SppjHOOEX2ZOedWlHSvpD8nSTI17Xxq3PNaNqL8UtLHkiZJejjVjFCVMtlhSlKSJEuTJHlJ0nqS+qWdT61KkuS1JEnmJ0myKEmSP0uaKOmgtPOqZc65FSTdLWmxpP4pp1PTll/rJ7XsjfeqkjpJWl3SNWnmheqU2Q7TaC0+w6ykRJJLO4la5Zxzku6Q1EXSUUmSLEk5pVq3hqT1JQ1f/qbwc0l3iTeFyCNTHaZzrrNzrrdzrp1zrpVzbn9JfSQ9k3Zutcg519E5t79zbmXnXGvn3PGSdtOyd+Qoj1skbSLpkCRJvk47mVqXJMlsLZtY1W/573hHSSdJmpxuZrVr+XVeWVIrSa38/SXtvGK4JEnSziGac24tSQ9J2krLOvsPJd2YJMltqSZWo5Zf78clbSxpqZZNshqUJMn4VBOrUc65H0r6QMs+k//WfOmMJEnuTSWpFsA511PS9Vp2X1kq6VlJZyVJMivVxGqUc+4ySb/9XvPlSZJcVvlsmiZTHSYAAGnJVEkWAIC00GECABCBDhMAgAh0mAAARGhwKq9zjhlBTZQkSVFrFLnmTVfMNed6Nx3Xu7K4p1ReoWvOCBMAgAh0mAAARKDDBAAgAh0mAAARMrF/H1Br2rZtG+J///vfIf7www8lSQceeGBomzNnTuUSA1AQI0wAACLQYQIAEKHBzddZv9N0WVoztcIKde+XVlxxxRB/9913IV555ZXrfW+rVq2iX2P+/PkhXrKkPEc7Zn1dYN++fUN8223LDt558803Q9vBBx8c4mooz2b9emdNlu4ptYJ1mAAAFIEOEwCACJRkSyxL5ZOTTz45xCeeeGKIbRl1yy23lCR16NAhtHXs2DH6NcaNGxfiZ599NsT/+c9/6n39q6++in5eq5ZKhI888ogk6ZBDDgltDz/8cIiPPPLIiuf0fbV0vbMgS/eUUvN/B48++mhoO+igg0L8xBNPlOV1KckCAFAEOkwAACKUpSS7/vrrS5KGDBkS/Zijjz46b/v06dNDPGzYsJz/VqMslE/8jNe77747tPXu3bvcL5vX2LFjQ3zYYYc16zlqqUS40korSZLee++90LbeeuuF+IADDgjxU089VbnEjFq63lmQhXtKKbVp0ybE/nd8l112CW19+vQJ8QMPPFCWHCjJAgBQhLJsjbfuuutKKjxqbAo/WpWkoUOH1nvenXbaqejXaGl69OghKb1RpbVgwYK0U6gqixcvliTtscceoW3y5Mkh7tWrV4jTGmFWuy5dukiSNtpoo9B2xhlnhPj444+v95gzzzwzxHZS24Ybbtjk15Wkb775RpI0b9680HbVVVeF2G6HiFwDBgwIsR9ZPvjgg6HtoYceqnhOHiNMAAAi0GECABChrOswbTnVl2klaYMNNqj3vYU+vD3mmGNCfP/99+fLsZgUSy4LH9APGjRIknTZZZcV/Vz2Z7J06VJJ0mOPPRba7PpN67XXXpMkzZo1K7TNnDmzWTnU+iQUW5Lt3r17iLt16yZJmj17dkXzqcbr/cMf/jDE/qObTz/9NLT169cv+rm+/fbbEC9atCjEq666ar3v9aVXKXcdsd9S0j7GTuSyp9E0Vp7Nwj2llL744osQ+y07TznllNBWiZIsk34AACgCHSYAABEytTVevlwpyTZdYyVZW1J95plnJEkjR47M+70ff/xxiBv6XSqnaiwRlpL/eUnSeeedF+LVV189jXQyc7133nnnEL/44ot5v8dvrTZ69OjQNnXq1BDbsu6mm24qqW6WuSRNmDAhxG+99VaI/ezae+65J7Rtt912Ib7jjjtCfNpppzX4/yML95Ri/fKXvwzxjTfeGOJXX31VkrTbbrtVNB9KsgAAFIEOEwCACGXZuKBcXnnlFUnSjjvuGNp22GGHEPvhOxpmFwZ7d955Z4jtjEI7YxDp+Mc//hHi9u3bh/inP/2pJGnSpEkVzynL7AkX/jQMe2h6IXaWa+z3nnvuuaHNf7yBZXr27Bni66+/PsT2gPq77rqrojk1hhEmAAARqn6Eaddn+pGl3SaJUWXT+bVNlt3g247ap0yZIkmaM2dO+RNDXvvuu2+I7bvvfOsC0bjtt98+xH7EbrewK6Vdd901xH5tJpaxa1HtPen9998PsT1DtxowwgQAIAIdJgAAEaqyJGvLsPlOPLFnZNqt8/ykoO9/D3L5dZb22u633355Y7/OslBp5KWXXgrxc889J6lpkyPQuLZt24Z44cKFIX733XfTSCcz7BptG6+xxhohbt26PLdAf4pS//79Q9vbb78d4ksuuaQsr5sFvgx+zjnn5P26n4glSR988EElUorGCBMAgAh0mAAAREi9JOtPNLGnXth1lvnY7cEK8SXZYcOGhTYbt2Tjxo2TlLt12A9+8IO83+tnz/bt2zfv1227Lxfa9Wa33357iMeMGdPMjOHZEzHstm2o74033gjxI488EuJDDz20qOe1fysnnHBCiH/+85+HuGvXrpJyTzOxW+D997//LSqHLPOHea+11lqhza41rrYyrMUIEwCACHSYAABEqFhJ1i6Gt7MzfWwPm7Yl108++aTB57WLkO1z+Nfzh8lKuVvCnX/++SEudHh1rRoxYoSkulmtkvSLX/wixFtssUWId9llF0lxJ2P42Zw/+9nPQptduD1q1KgQ+xlytsTYknTu3DnEdhbs4sWLJUkzZszI+7g//vGP5U2shnz99dchfvnll0PclJKsP3VEqlto/6tf/Srv1+1pJb78On78+NBGCX2ZfNf/qaeeCrEtY1cbRpgAAESo2HmYjZ2VaCf6lHK7uyFDhoS40GQh/9qleN1aO7vOT17YdtttQ5vd0uonP/lJiLfccsvo5/WjTTtpYtGiRc3KMSvnM9pqyDXXXBPimTNnhti/+7Yjos033zzEdmP8hx9+uCx5NiYr19v69a9/HeKrr746xP5vv0uXLqFt4MCBIbbVFr8Vod3s/sQTTwyxnaxSylFSLdxT7PaOY8eOlZS7HaGtQNqt8dLCeZgAABSBDhMAgAgVm/RjS642fuihhySVbyu7//mf/wmx3+ZNyp0M5CcecfJJfb7MZMtN9rSYdu3ahXjttdeWJF166aWh7fjjj8/7vEceeaSk3AkvzS3JVruOHTtKkh599NHQttlmm4V47ty5IT7qqKMk5Z4DaE+52HjjjcuWZy3baKON8rbb7TTzuffee0N8yy23SJJef/310LZkyZISZFf77Mc4fjvC0aNHh7ZqKMPGYIQJAEAEOkwAACJUbJZstcn3/9ueaFDE82Z+RltTrLTSSiH218+22bLLnnvuWe/xnTp1CnFzD6mu9lmb1157rSRpk002CW32RIZ8Ro4cGeIjjjgi7/f42Z4XXXRRsSk2SbVf7169ekmSTjrppNBm1wbbv32/VvPKK68MbfbaT5s2rWx5xsrqPcV+XDNx4sQQ+1nfdrtC/xFNtWCWLAAARaDDBAAgQuqnlVSDxmbKVZMOHTqE2G79tc466zT5uewM1bPOOqtZ+Wy99dYh9iUYu9C+pfIbPkh113abbbZp9HG77767JOmAAw4IbRdffHGIf/nLX4b4N7/5jaTcUzlsObHW2d8zOzP74IMPlpR72Pbs2bNDvOaaa4bYz5a/6qqrypZnS2UPybY/q9dee02SdOqpp1Y8p2IxwgQAIEKLGmHa7ZesLI0w/QQSKfdcPv+uGtXBr72UpFVWWUVS3ObbfhN8uy756aefDvETTzwR4jvvvFNS7prNL7/8MsR24+9a0aZNmxDbs1bthKrhw4dLki688MLQZieXzZo1K8QtaUReCXbCn62SWP738osvvqhITqXECBMAgAh0mAAARGhRJdlCp5XYrd6q3RlnnBHi7777LsVMiuPPe/z2229TzqRyVltttRDb7fDsOsudd95ZkrTXXnuFtg8//DDv8/nvGTduXGizJcYbbrghxIMGDWpu2lWlUBnWr72UmlaK3m233STlnmWJ5uvWrVuI7UkvtYIRJgAAEegwAQCIUDUlWTuDtZSnhhxzzDEh9qeSSLkzY7N0SondBs1u51WtXnrppRC/8MILIb7jjjskSfPnz694TpWwYMGCEPvDhO1pJTfeeGOI7WxOf7pOoTKs5cu6vqxoHy9Jl19+eYj9ulDb9t577zX6GtXCH05ut1A755xzQtxYGbZHjx5525966qkSZAeve/fujX7PlClTKpBJeTDCBAAgAh0mAAARqua0ko8++ijEw4YNyxs3hS/xPvDAA6Ft/fXXD7E9xLqUJdlynyzQqlWrENvt1w4//HBJhUtP1sknnyyp7iDXYkyaNCnEfqbhmDFjQtszzzwTYrtVWSlV++kZfjs7e3qGLzFKuae4/O1vfyvZ69rDpv3fgz0Rxp4W0RRpXG//O7X//vuHNjuT2Jb+87nuuutC7H//JelHP/qRJGnevHnNSasisnRaye9+97sQDxw4MMR2FvKuu+4qqXz3g1LgtBIAAIpQlSPMjz/+OMQ77bRT9HMMGTIkxPnWXJZrVGll4d2g37atFOd/+gktUu5m8JVU7SPMWpPG9fZrju0m6p07d27wMfZggJdffjnEdntJu2l7tcrCPcWzWzrarTttpa9Pnz6VSqfZGGECAFAEOkwAACJUzTrM888/P8T3339/iG0pxW9hZ0urdv2mndTj11kee+yxoc2WC1oyuy0bkCX2PNjtttsuxPkmS9kzXu1HBzfffHOZsoP9KMyWu99+++000ik5RpgAAESgwwQAIELVzJK1bJl16NChIfalWLutnZ1Ra783re3usjSjrVYwS7ay0rje/pQeewLLokWLQmwP0d53330l5a5Ttmsvs3Q6kcQ9JQ3MkgUAoAh0mAAARKjKkmyWUT6pPEqylZXm9R48eHCI+/btG+INNtggxNOmTZMkXXzxxaHNHqydNdxTKo+SLAAARWCEWWK8G6w8RpiVxfWuLO4plccIEwCAItBhAgAQgQ4TAIAIdJgAAESgwwQAIEKDs2QBAMAyjDABAIhAhwkAQAQ6TAAAItBhAgAQgQ4TAIAIdJgAAESgwwQAIAIdJgAAEegwAQCIQIcJAEAEOkwAACLQYQIAEIEOEwCACHSYAABEoMMEACACHSYAABHoMAEAiECHCQBABDpMAAAi0GECABCBDhMAgAiZ6zCdc/c452Y65750zk1zzp2adk4tgXNuI+fcN865e9LOpdY5555bfq0XLP/3bto51TKud2Vl+R6euQ5T0lWSuiZJ0kHSoZKudM5tk3JOLcFNkl5PO4kWpH+SJO2W//tx2sm0AFzvysnsPTxzHWaSJFOSJFnk/+fyfz9KMaWa55zrLWmupKfTzgVAtmX5Hp65DlOSnHM3O+cWSpoqaS3ngJUAAB1ySURBVKakx1NOqWY55zpIukLS/6SdSwtzlXNutnNuonNuj7STaQG43hWU1Xt4JjvMJEnOlNRe0q6SRkla1PAjUITBku5IkmR62om0IBdK6i5pXUm3ShrjnMvEO/CM4npXWFbv4ZnsMCUpSZKlSZK8JGk9Sf3SzqcWOed6StpH0rC0c2lJkiR5LUmS+UmSLEqS5M+SJko6KO28ahXXOx1ZvIe3TjuBEmitjNS/M2gPSV0lfeSck6R2klo55zZNkmTrFPNqaRJJLu0kWhCud2Vl5h6eqRGmc66zc663c66dc66Vc25/SX0kPZN2bjXqVi37Re65/N+fJD0maf80k6plzrmOzrn9nXMrO+daO+eOl7SbpCfTzq0Wcb0rK+v38KyNMBMtG7r/Scs6+w8lnZskySOpZlWjkiRZKGmh/9/OuQWSvkmS5LP0sqp5K0q6UtLGkpZq2aSIw5MkYW1geXC9KyvT93CXJEnaOQAAUPUyVZIFACAtdJgAAESgwwQAIAIdJgAAERqcJeucY0ZQEyVJUtT6La550xVzzbneTcf1rizuKZVX6JozwgQAIAIdJgAAEegwAQCIQIcJAEAEOkwAACLQYQIAEIEOEwCACHSYAABEoMMEACACHSYAABGydoA0ACAlP/jBD0J87LHHhvjQQw+VJO2xxx6h7bvvvmvwuR55pO7M6COPPLJEGZYXI0wAACLQYQIAEMElSeGN7Cuxy32rVq0kSZtsskloO/HEE/N+b79+/SRJ7dq1C22Fhv0PPfSQJOm4444LbUuXLi0u2Qi1drLAW2+9JUk67LDDQtuHH36YVjp51frpGRtvvHGIV1111RD/61//kiQtXLiwovnU+vWuNtV0T9lhhx1C/NJLL+V7rRA31Ld834wZM0K83XbbhfjTTz9taoolwWklAAAUIZVJP507dw7x8OHDJTXtQ187qiz0Luaoo46SlPvufMqUKU3Ks6U6/vjjQ9y1a1dJ0qJFi0r6Gm3btpUkPf3006HN/y5I0r333lvS18uaiy++OMQDBw4Msb9ukvTOO+9Ikv7617+GNvu38fnnn9f73nyjAiBt6667bojHjBkT4ssuu0yS9Nhjj1U6pbwYYQIAEIEOEwCACKlM+nnllVdC7D/gbcoHxE35YHnIkCEhvvDCC6Nfo7mq6QP6plh99dVD/NFHH4X4ueeekyQdcsghJX293/zmN5Kk3//+96Ht6quvrvf1GLU0CWWttdaSJP33v/8NbfZ3PN/vfqG/hxVWqHs/7Eu1+dqkusl3MWrpemdBNd1T1lxzzRCPGDEixDvuuKMk6fHHHw9tjz76aN7n6Nu3ryRpyy23DG0bbLBBiO3v8Jtvvikpd31nJSa5MekHAIAi0GECABAhlVmyv/jFL0L8j3/8o8mP9zP+pNz1m2gaW5675JJLQmzXuV533XVlee1jjjlGkjR//vzQ9r//+79lea1q58uwUl1Jy5al7O+7LVv7dZinnXZaaBs9enSIZ8+eHeIjjjii3uva70V52HWzK620Ut7vWbJkiSRpwYIFFcmpGHbmtV3jvtFGG0mqK6E2xK+Rt2u7R40alfd7t956a0nSQQcdVO/xaWCECQBABDpMAAAipFKStSWmPn36SJK22WabvN/7l7/8JcSfffaZJOn8888PbY2VZCdNmtTsPGudnaV23nnnhXjx4sUhnjx5cslez28mIdX93OwGBR988EHJXitLzj777BD7EpSdCXjppZeGOF8Z1W8Z2ZCYUllL5DeCsKVTe+2/+uqreo9ZccUVQ9yxY8cQ/+xnPwvxTjvtJEk6+OCDQ9s666yTN4e///3vkup+9llhP05pyu+Xv07nnntuaCs0e7vaMMIEACBC6udhPvDAAzn/bYhfi2PX5Ng1aNY999wjSXrwwQeLS7AGrbLKKpKkYcOG5f167969Qzx37tyiXsuu7/PbXEl1EyBifu61yG59d9FFF4XYT/ax61OZnFO8Tp06hXjbbbcN8U033SRJ6tatW2j75z//GeLbbrstxJtvvnm9x/fs2bNZ+dhNxSdOnNis58iSU045JcQ33nijpLr7kFR4u9M33nhDElvjAQCQKXSYAABESL0k2xi7Zdvll18uKXeCUKGt8ewWTcjlP3S3pe2PP/44xIW2tGoOe7apL2lJ0q233ipJevLJJ0v2WtVuwIABIb7iiitCbD9W8OXXp556KrTZ33e7baGfBIdcfgKJLQMOHTo0xB06dGjw8fb39IYbboh+XXum4+uvvy4p9yOh//znPyF+9dVXQ1zNk1xi+VON1l577dBmJ6v5SVBSbik2H7vW03+M8/XXX5cgy+IxwgQAIAIdJgAAEVI5raQxdkf8+++/P8S+hFjodAY72/CWW26RlLtWqBKq6WQBq0uXLiH2swBXW2210Oa3tpKkDz/8sGSv9cILL4S4R48eId53330lSRMmTCjqtaTqPz3Db0v3pz/9KbTZ3/GmnEDi1+xJ0oEHHigpdwu8SqjG623X8fmPbux2j801Z86cEPuDum1Z/JlnngnxW2+9FWK7lrlY1XpPsfwWmvZjh+aeQDV27NgQ+20fZ82aVWyKTcJpJQAAFIEOEwCACFUzS9bOhs1Xhi3ElkzszNhKl2Kr3V577RViv4j7xRdfDG3FlmEtOyPRlmH9zFhJevbZZ0v2etXIzmz1pVh7KkmhQ6F9edWW/TbeeOMGn7dXr16lSjuzzjzzzBAXW4r1pVcpd8vImTNnFvW8iGO3E/QbF9g+YcyYMSF+/vnnK5eYGGECABClaib92DMyGzsX0b4jtxtP2xFMWqrpA/p11103xK+88kqI/Wh+hx12CG1Tpkwp+vX22WcfSdIjjzwS2uwas0033TTE06dPL/r1vGqchGI3lvYTIuz6Mnv+n91+Ld8I8ze/+U2Ir7zyyhD7v127bnDq1KlF596YarzenTt3DrEfIdo1ga1b1xXT7AS3fBYtWhTi8ePHh9iP5O3XK6Ga7imFDBkyRFLuiLwp60ubu/m6PYjD/x2V4lxRJv0AAFAEOkwAACKkXpL1ZZNPPvkk+jExw3d/jubgwYND2/vvv9+cFJukmson9913X4jtCSQjRoyQlLt1WCF+vWD79u1Dmz078NBDDw2xfz5b8vrlL38Z4sZK7c1VjSVCy07a8ZpSOrWPt+ta/c/m//7v/0Jb3759m5Nik1T79c7HnmFpfz9/8pOfSKorm0u5pVzrV7/6lSRp+PDh5UixoGq6pxTit8C86667QpvtW+zHEXbtqmc/ZrMfJe24444Nvq59nN/y84knnohNuyBKsgAAFIEOEwCACKmXZH1Zya4JtGv38im0bVhjfvCDH4S4XFstpV0+OfbYY0N89913h9iWpPx6sg8++KDR5/MH6xYqU+Vz++23h/iMM84IcblOZchiibC57PZ6p556qqTc7fLs4cblkub1Pv7440Nsf3+LPYTZfrRgZ3lbfuvNq666qqjXaqq07ylNYWfe23uznbna2Ix8u21kvm0lLdsXvPvuu5LqtoyUmr++nJIsAABFoMMEACBC6lvj+dlTfoaTJN10000htrOk2rVrV9Rr2VJLY7Ovssof5Crlliu+/fbbEPst2tZZZ528z2FLpz62j7eLwK1p06ZJkgYNGpT3uVA8u72e/fm2FH6mqpR7EPFWW21V1PPamZW+tCdJP/7xj0O82267SZJuvPHG0PbVV18V9bq1xh6M3Vx2Rm1TVk9MnjxZUmm3+fw+RpgAAERIfYTp2TWS9kPbDTfcMMQrr7yypNx1mPYdt19fKOUfPf3whz8sSa7V7JprrskbW/46HnLIIXm//re//S3E/t2avXZvv/12iO27fD/h6NNPP21q2miAn/ggSYcffniI/aQKu81eS7LllluG+Oqrrw7xk08+KSl3Is97770XYntupT+UwP5+d+/ePe/rLVmyRBKjynK79NJLQ+zPw6wWjDABAIhAhwkAQITU12EWy55SYM9Gy3cigV17addkllKW1kw1xYQJE0K89957h/jyyy8P8WWXXVbJlIJaXIdpz72057zajyA+++wzSVKXLl0ql5jSvd52co89tzLf9oOlYNd6+pNi7rjjjrK8ViFZuKfsvvvukqStt94679ftz8qvyfTriL/PThpcbbXVGnxd+/HceuutJ6lpE4UKYR0mAABFoMMEACBCpkqy/pSMY445JrTZbdgas/3224d40qRJpUvMyEL5pCn8uk47M9auybSHF8+YMaNieVmVKhFefPHFIf7d737X3Jes5/TTTw+xnxFrS1t2qzC7Rs3PJn/zzTdLlkuMaimB2y007ccEfjtHew3btGmT93H+Ix1beh07dmyI7c85rdnfWbin+NNeBgwYENps3+I/PpDq7h92JUNztzu163JvvfVWSdLSpUujH18IJVkAAIpAhwkAQITUNy7wu9v369cvtI0cOTLEfjsqKf9MrMaG73/+859DXK4ybC3zMzTtAdL77bdfiNMqw6bBnpRxzz33SMrdhsvO1LTbOPr2XXfdNe/32nb/+zx9+vTQZg+I/v3vfx/iphxCXYv8Vozfj/OxsyntZhv+FJ9FixaFtq+//rpUKWI5O7u7OezPx87Mv+WWW4p63qZihAkAQIRUJv3YNTlHH320pKZ90BvzAbFfK2U/FF68eHGT8myOLHxA3xh7zYYNGyZJeuedd0KbnTxVDe/GKzUJxU4m8JMY7EjQjhrbtm1r8/OvVa9Nkl566aUQjx49WpJ07733hrbZs2fHplgR1TLpp6XIwj3Fr4995plnQltjaygt+7dhtx70E9rsNp92o/xyYdIPAABFoMMEACBCKiVZO1HEb+tVipKsnTjkJ2VUumSYhfJJY+w6y1atWkmStt1229BWbZOnKlUizLdeslOnTo0+7l//+pek3NKrPWGk2kqujaEkW1lZuqfYCZnjx48PcWPlWXtPP+GEE0J83333lTC7eJRkAQAoAh0mAAARUinJ2gNC/XZ3Bx10UGjbZJNNQjxw4MAQ+9KWLQna/OfOnRviSsyIzSdL5RPLHqBrD/P+4osvJOX+TKqthEiJsLK43pWV1XtKllGSBQCgCHSYAABEyNRpJVlA+aTyKBFWFte7srinVB4lWQAAikCHCQBABDpMAAAi0GECABCBDhMAgAh0mAAARKDDBAAgQoPrMAEAwDKMMAEAiECHCQBABDpMAAAi0GECABCBDhMAgAh0mAAARKDDBAAgAh0mAAAR6DABAIhAhwkAQAQ6TAAAItBhAgAQgQ4TAIAIdJgAAESgwwQAIAIdJgAAEegwAQCIQIcJAEAEOkwAACLQYQIAEIEOEwCACHSYAABEyFyH6Zxbwzk32jn3lXPuQ+fccWnnVMucc/2dc5Occ4uccyPSzqfWcb0rj3tKZTnnujrnHnfOzXHOfeqcG+6ca512XjEy12FKuknSYkldJB0v6Rbn3GbpplTTZki6UtKdaSfSQnC9K497SmXdLGmWpHUk9ZS0u6QzU80oUqY6TOfcqpKOkjQoSZIFSZK8JOlRSX3Tzax2JUkyKkmShyV9nnYuLQHXu7K4p6Sim6QHkiT5JkmSTyWNk5SJNyiZ6jAl9ZC0NEmSaaZtsjJysQFUHe4plXeDpN7OubbOuXUlHahlnWbVy1qH2U7SvO+1zZPUPoVcAGQf95TKe17L3pB8KeljSZMkPZxqRpGy1mEukNThe20dJM1PIRcA2cc9pYKccytIelLSKEmrSuokaXVJ16SZV6ysdZjTJLV2zm1k2raSNCWlfABkG/eUylpD0vqShidJsihJks8l3SXpoHTTipOpDjNJkq+07J3JFc65VZ1zO0s6TNLd6WZWu5xzrZ1zK0tqJamVc27lrEwBzyKud2VxT6msJElmS/qPpH7Lf9c7SjpJyz43rnqZ6jCXO1PSKlo2Lfk+Sf2SJOHdYPlcIulrSQMlnbA8viTVjGob17vyuKdU1pGSDpD0maT3JH0raUCqGUVySZKknQMAAFUviyNMAAAqjg4TAIAIdJgAAESgwwQAIEKD09Wdc8wIaqIkSVwxj+eaN10x15zr3XRc78rinlJ5ha45I0wAACLQYQIAEIEOEwCACHSYAABEoMMEACACHSYAABHoMAEAiECHCQBABDpMAAAi0GECABAh9ZPc11xzTUnSaaedFtouuOCCEK+++uohnjlzpiRpwoQJoW306NEhfvjhh8uWJ+qMHDkyxBtvvHGIN9tsszTSqSlbbbWVJOn5558PbZtuummIZ8yYUfGcatkOO+wgSXrllVdC23fffRfiVq1aVTwn1OnZs6ckqV+/fqHt9NNPD/Hvf//7EF9yybJz1st5xjMjTAAAItBhAgAQwTU0fC3XLve2zDp+/HhJ0k9+8pNGH+fcsg3kbc62fPLZZ5+F+A9/+IMkafjw4aFtyZIlzcw4Xks4WWDp0qUhtj+L1q3TqfDX0ukZK664oiTpjTfeCG133XVXiIcNG1bxnL4v69f7/vvvD/H2228vSVp//fVDm72n/PrXvw6xv/b28fb3v3fv3qVPVi3jnrLCCnVjt0MPPTTEv/3tbyXVfVTRkDXWWEOSNHfu3KLz4bQSAACKkMoI869//WuIjznmGElxH9TmG2E29r0vvfRSaDvqqKNCbEejpdQS3g0WGtV36dIljXQyP+LJ56233grx5MmTQ3zSSSelkU6OLF5vP7lHkl5++eUQ+3uJv1/YNkl66KGHQnzsscdKyv39t99rn2PIkCGScicwNlet3lPatGkT4sGDB4f4/PPPb9bzMcIEAKBK0GECABAhlVkaHTt2jP7eW2+9NcR+rZQtrf7sZz9r8PE777xziAcNGhTis88+OzoH5K63tGWoUaNGpZFOi9K9e/e0U8ikfJN7pPyTBu2kE1tyzTfJqtCkQ/sc5557rqTSlGRrzVprrSVJuu2220Kbnehjff3115Kkyy67LLSttNJKIT7hhBNCvHjx4lKmmRcjTAAAItBhAgAQIZWS7Kefflqvzc4wmzdvXoivuOKKEPut8f7yl7+EtlVWWSXEN998c4j9bEL7vP379w/xpEmTQmyfD/ltsskmIbbXFOVhr7H9WAGN8zNi/Qx8Kbd0aq/tq6++Kknaddddo5/fzpy15Vn7er48a1/Xft0+R0vQtm3bEF977bWSCpdhP/744xDvt99+kqSpU6eGNruOf8SIESFeuHBhSXJtCCNMAAAi0GECABAhlZLsm2++GeITTzxRUm5pw8+MkurKsIXY7z3llFNC7EuuQ4cODW126zY7e42SbNOU8zSAls5/xGAXdc+ZMyetdDLDbkzgN0ax5dBCs1mvv/76Jr+W38Dg+44++uh6r2df65xzzglxSyvJ2s0I8m2+4UvjknTqqaeG2JZiPfv3UOm/DUaYAABESGWEedBBBzX4dX9GppS7ZZJdR9mYm266SVLuO7zrrrsuxPaMQb+Wc+zYsdHP39LY62UnTdi1VChejx49cv4rSXfffXda6WRGvvMs7d++ZUc79mzXYr322msh9us+7d/KTjvtVLLXyoL27duH+Oc//3m9rxcaVb7zzjvlTawIjDABAIhAhwkAQIR0DjBsxLhx40L8wgsvFPVcf/zjH0NsywJbbrlliLfZZhtJlGTz8dtY2ZIJk34q6+mnn047hao0YMCAEBea4OP500Ok8p0patdZ3nfffZJyy7D58qpldjvCDTbYIMT+XOLzzjsvtDVWhrWPP/zww0Pcq1evEPst8/baa6/QVuq1mYwwAQCIQIcJAECEipVkV1tttRBvscUW9b7+8MMPh9ieRlJK/fr1C7E9RPa3v/2tJOmRRx4JbfYA35bMl0JsScSWOSqxHVVLkm8mZWNrkVuS9ddfP8S2HGdno/rZsZ988kloq8SpOnZLtxkzZhTMq6UoNCv4iSeekJQ7S9bq1KlTiP12pgMHDgxt9rQS68Ybb5QkLVq0qOnJRmpZP0EAAJqJDhMAgAgVK8mus846IV577bXrfd1ul1cuH3zwQYjtTE9fNtl7771DGyXZXPZ62e2q8m1dheazZUbU57e9k6TtttsuxPkOdbazVguV/8rF51PosOmWwG5XaLVq1UpS7u+6jffYY48Qd+7cud7jJ06cGGI7+3nMmDGSpKVLlzYv4QiMMAEAiFCxEWZj75znzp1boUwKq+YtmdLGGZiV4bcgtO+SFy9enFY6VcOPVnbcccfQlq9KJNVNrqn0qNJOSPJxS570M378+BAfcMABIT744INz/vt99kCNt99+W5J09dVXhza7cf23335bmmQjtayfIAAAzUSHCQBAhIqVZBtbW/nGG29UKJPCOHewMLbDq6zPPvssxM8//3yKmVSHc889V1LhSTS23GknglRSvglJNt+08kpLx44do7/3wQcfDPEdd9wR4qeeeqqkORWLESYAABHoMAEAiFCxkuy9994b4q222qre17t16xbics1us+s/88363HnnncueQ9b400rs9Zo9e3Za6dSkzTffPMR+C8nhw4enlU7VsOsojz76aEmFZ53aQ6HLdRqJZ2fD2jJsvhm8ld6eLy0bb7yxJGmfffYJbXYW7IIFC0Lcrl07SblbCZ5++ukhnjdvXtnyLBYjTAAAItBhAgAQoWIlWbvY9JprrgmxL7FUYuMCWy7It+jZ5ohl/GGt9nqNHj06rXRq0tlnnx3ilVdeWVJltoqsduecc06I/YxYW4a1s2TLXYa1mrI9nz0VqdY+5tltt91CPG7cOEm5G2588cUXIfant0hSjx49JEnrrbdeaDvwwANDbK9vtWGECQBAhIqNML/66qsQ2/PK/DvqY489NrRNmDAhxEuWLClZDv61Cvnmm29K9lq1wn8Yb989v/DCC2mlU5Psu2+PbRpzz1P0I7ZKbzXnJxtJdWtBY7bn86PJ3r17lzvFimrduq7LOOOMM0Ls7622SnfppZeG2E7wGTp0qCTp1FNPDW0bbbRR6ZMtA0aYAABEoMMEACBCxUqydqsvW9Lbb7/9JEl9+/YNbZMnTw5xKT/ML7Q9n18rRUm2vnzn+nEGZml179497RSq0nXXXRdiXw4tNOlnwIABIW7OPeP+++8Psf1dtyVZ/3qFtufr06dPiGttgo9n16rb/7/+RJ0rr7wytBW6T2T55CNGmAAARKDDBAAgQsVKspbdImr//fev93W7q/9ZZ50VYl+ief/99xt9DT/D7oILLghtq6yySt7vveiiiyRV95ZMafElMFt6QmntsssuIc5yuarURo4cGWK/TZ7dlq7QCSX+PlFohmq+8qu97o0dTG1ngtrvbQnruAt9fOBPFfEHPjck5v5drRhhAgAQgQ4TAIAIqZRkb7311hD36tVLkrT33nvn/V57isnNN98sKe4wY19Ksd9b6HHVcHh1NTniiCNC7EuxLKQvn65du4bYbydmS18xZa5aZGeavvLKK5Jyt1MrdIC0b7dbrNnvzTfLtdDsW5vD9ddfLym3VIxl/MkkdkvHt956K+/32m3wsoYRJgAAEVIZYVp+beTvfve70Ga3XLJbMRXr888/D7Fd98noKVfnzp1D7N95b7rppmmlU/Ps+t/VV19dktSxY8e00qlKfgJPock59uxM/ztbaBu9pkzkqbWt7Yr10UcfhXjWrFkh9veMnj17hjYbNybf9pDViBEmAAAR6DABAIjgGppA45xrfHZNGeywww4hPuyww0J84YUXSso9Z83y5SypbohvSy233HJLiKdNm1aaZL8nSZKiFtKldc2tTp06hfj555+XlDsRYosttqh4Tg0p5ppXw/X220NK0l133SUp929g+vTpFc+pIdV4vf3kQanuHM18p51IuVu6+ftfNU/kqdZ7ij396Q9/+IOk3NL4Wmutlfdx8+fPlyQNHjw4tNl1tDGTOsut0DVnhAkAQAQ6TAAAIlRlSTbLqrV8UsuqsURYy7jelcU9pfIoyQIAUAQ6TAAAItBhAgAQgQ4TAIAIdJgAAESgwwQAIAIdJgAAEegwAQCIQIcJAEAEOkwAACI0uDUeAABYhhEmAAAR6DABAIhAhwkAQAQ6TAAAItBhAgAQgQ4TAIAI/x+6MELKUL8TLgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 576x576 with 20 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def plot_images(images, labels ):\n",
" cols = min(5, len(images))\n",
" rows= len(images) // cols \n",
" fig = plt.figure(figsize=(8,8))\n",
" \n",
" for i in range (rows * cols):\n",
" ax = fig.add_subplot(rows,cols,i+1)\n",
" plt.axis('off')\n",
" plt.imshow(images[i], cmap = 'gray')\n",
" ax.set_title(labels[i])\n",
" plt.show()\n",
"# lets plot range of 20 images \n",
"a = np.random.permutation(len(X))\n",
"a = a[:20]\n",
"plot_images(X[a].reshape(-1,28,28),y[a])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.30, random_state=10)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.neural_network import MLPClassifier"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"nl = MLPClassifier()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,\n",
" beta_2=0.999, early_stopping=False, epsilon=1e-08,\n",
" hidden_layer_sizes=(100,), learning_rate='constant',\n",
" learning_rate_init=0.001, max_iter=200, momentum=0.9,\n",
" n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,\n",
" random_state=None, shuffle=True, solver='adam', tol=0.0001,\n",
" validation_fraction=0.1, verbose=False, warm_start=False)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nl.fit(X_train,y_train)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"pred = nl.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import metrics"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9501587301587302\n"
]
}
],
"source": [
"accuracy = metrics.accuracy_score(y_test,pred)\n",
"print(accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12600,)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred.shape"
]
},
{
"cell_type": "code",
"execution_count": 20,
"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>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>...</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",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 784 columns</p>\n",
"</div>"
],
"text/plain": [
" pixel0 pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 pixel8 \\\n",
"0 0 0 0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 0 0 0 \n",
"2 0 0 0 0 0 0 0 0 0 \n",
"3 0 0 0 0 0 0 0 0 0 \n",
"4 0 0 0 0 0 0 0 0 0 \n",
"\n",
" pixel9 ... pixel774 pixel775 pixel776 pixel777 pixel778 pixel779 \\\n",
"0 0 ... 0 0 0 0 0 0 \n",
"1 0 ... 0 0 0 0 0 0 \n",
"2 0 ... 0 0 0 0 0 0 \n",
"3 0 ... 0 0 0 0 0 0 \n",
"4 0 ... 0 0 0 0 0 0 \n",
"\n",
" pixel780 pixel781 pixel782 pixel783 \n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 0 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
"\n",
"[5 rows x 784 columns]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test = pd.read_csv('test.csv')\n",
"test.head()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(28000, 784)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.shape"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"y_pred = nl.predict(test)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 0, 9, ..., 3, 9, 2], dtype=int64)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"submission = pd.DataFrame({ 'ImageId': range(1, 28001), 'Label': y_pred })\n",
"submission.to_csv(\"digit_Recognition.csv\", index=False)"
]
}
],
"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.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}