{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Reconocimiento de digitos usando KNN"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Importamos las librerías necesarias"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import sklearn\n",
    "import sklearn.datasets as ds\n",
    "import sklearn.model_selection as cv\n",
    "import sklearn.neighbors as nb\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (12, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "cargamos los digitos "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.0, 16.0)\n",
      "(1797, 64)\n"
     ]
    }
   ],
   "source": [
    "digits = ds.load_digits()\n",
    "X = digits.data\n",
    "y = digits.target\n",
    "print((X.min(), X.max()))\n",
    "print(X.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Más infomacion acerca de esta data en \n",
    "http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f6d147427f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nrows, ncols = 2, 5\n",
    "plt.figure(figsize=(6,3));\n",
    "plt.gray()\n",
    "for i in range(ncols * nrows):\n",
    "    ax = plt.subplot(nrows, ncols, i + 1)\n",
    "    ax.matshow(digits.images[i,...])\n",
    "    plt.xticks([]); plt.yticks([]);\n",
    "    plt.title(digits.target[i]);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Separamos nuestra data de entrenamiento y nuestra data de prueba:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "(X_train, X_test, \n",
    " y_train, y_test) = cv.train_test_split(X, y, test_size=.25)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Usamos el clasificador de KNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "knc = nb.KNeighborsClassifier()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "knc.fit(X_train, y_train);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nos da un margen de acierto de un 98.2%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.98666666666666669"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knc.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,  16.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Dibujamos un 1 \n",
    "one = np.zeros((8, 8))\n",
    "one[1:-1, 4] = 16  # The image values are in [0, 16].\n",
    "one[2, 3] = 16\n",
    "one"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f6d147424a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(2,2));\n",
    "plt.imshow(one, interpolation='none');\n",
    "plt.grid(False);\n",
    "plt.xticks(); plt.yticks();\n",
    "plt.title(\"One\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/gerson/anaconda3/envs/py3/lib/python3.6/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([1])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knc.predict(one.ravel())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,  16.,  16.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,  16.,  16.,  16.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  16.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Dibujamos un 7 \n",
    "seven = np.zeros((8, 8))\n",
    "seven[1:-1, 4] = 16  # The image values are in [0, 16].\n",
    "seven[1, 2:5] = 16\n",
    "seven[4, 3:6] = 16\n",
    "seven"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f6d11bd9710>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f6d11c37240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(2,2));\n",
    "plt.imshow(seven, interpolation='none');\n",
    "plt.grid(False);\n",
    "plt.xticks(); plt.yticks();\n",
    "plt.title(\"Seven\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/gerson/anaconda3/envs/py3/lib/python3.6/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([1])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knc.predict(seven.ravel())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "/* This template is inspired in the one used by Lorena Barba\n",
       "in the numerical-mooc repository: https://github.com/numerical-mooc/numerical-mooc\n",
       "We thank her work and hope you also enjoy the look of the notobooks with this style */\n",
       "\n",
       "<link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro|Josefin+Sans:400,700,400italic|Ubuntu+Condensed' rel='stylesheet' type='text/css'>\n",
       "Estilo aplicado\n",
       "<style>\n",
       "\n",
       "\n",
       "\n",
       "#notebook_panel { /* main background */\n",
       "    background: #f7f7f7;\n",
       "}\n",
       "\n",
       "div.cell { /* set cell width */\n",
       "    width: 1000px;\n",
       "}\n",
       "\n",
       "div #notebook { /* centre the content */\n",
       "    background: #fff; /* white background for content */\n",
       "    width: 1100px;\n",
       "    margin: auto;\n",
       "    padding-left: 0em;\n",
       "}\n",
       "\n",
       "#notebook li { /* More space between bullet points */\n",
       "    margin-top:0.6em;\n",
       "}\n",
       "\n",
       "/* draw border around running cells */\n",
       "div.cell.border-box-sizing.code_cell.running { \n",
       "    border: 1px solid #111;\n",
       "}\n",
       "\n",
       "/* Put a solid color box around each cell and its output, visually linking them*/\n",
       "div.cell.code_cell {\n",
       "    font-family: 'Source Sans Pro', sans-serif;\n",
       "    background-color: rgb(256,256,256);\n",
       "    font-size: 110%;\n",
       "    border-radius: 0px; \n",
       "    padding: 0.5em;\n",
       "    margin-left:1em;\n",
       "    margin-top: 1em;\n",
       "}\n",
       "\n",
       "div.text_cell_render{\n",
       "    font-family: 'Josefin Sans', serif;\n",
       "    line-height: 145%;\n",
       "    font-size: 125%;\n",
       "    font-weight: 500;\n",
       "    width:850px;\n",
       "    margin-left:auto;\n",
       "    margin-right:auto;\n",
       "}\n",
       "\n",
       "\n",
       "/* Formatting for header cells */\n",
       ".text_cell_render h1, .text_cell_render h2, .text_cell_render h3,\n",
       ".text_cell_render h4, .text_cell_render h5 {\n",
       "    font-family: 'Ubuntu Condensed', sans-serif;\n",
       "}\n",
       "/*\n",
       ".text_cell_render h1 {\n",
       "    font-family: Flux, 'Ubuntu Condensed', serif;\n",
       "    font-style:regular;\n",
       "    font-weight: 400;    \n",
       "    font-size: 30pt;\n",
       "    text-align: center;\n",
       "    line-height: 100%;\n",
       "    color: #335082;\n",
       "    margin-bottom: 0.5em;\n",
       "    margin-top: 0.5em;\n",
       "    display: block;\n",
       "}\n",
       "*/\n",
       ".text_cell_render h1 {\n",
       "\tfont-family: Flux, 'Ubuntu Condensed', serif;\n",
       "    font-style:regular;\n",
       "    font-weight: 600;\n",
       "    font-size: 35pt;\n",
       "\ttext-align: center;\n",
       "    line-height: 100%;\n",
       "    color: #2c7638;\n",
       "    margin-bottom: 0.2em;\n",
       "    margin-top: 0.3em;\n",
       "    display: block;\n",
       "}\n",
       "\n",
       ".text_cell_render h2 {\n",
       "    margin-top:16px;\n",
       "    font-size: 27pt;\n",
       "    font-weight: 550;\n",
       "    margin-bottom: 0.1em;\n",
       "    margin-top: 0.3em;\n",
       "    font-style: regular;\n",
       "    color: #498550\t;\n",
       "}\t\n",
       "\n",
       ".text_cell_render h3 {\n",
       "    font-size: 20pt;\n",
       "    font-weight: 550\n",
       "    text-align: left;\n",
       "    margin-bottom: 0.1em;\n",
       "    margin-top: 0.3em;\n",
       "    font-style: regular;\n",
       "    color:  #1a66ab;\n",
       "}\n",
       "\n",
       ".text_cell_render h4 {    /*Use this for captions*/\n",
       "    font-size: 18pt;\n",
       "    font-weight: 450\n",
       "    text-align: left;\n",
       "    margin-bottom: 0.1em;\n",
       "    margin-top: 0.3em;\n",
       "    font-style: regular;\n",
       "    color:  #578cb4;\n",
       "}\n",
       "\n",
       ".text_cell_render h5 {  /*Use this for small titles*/\n",
       "    font-size: 18pt;\n",
       "    font-weight: 550;\n",
       "    color: rgb(163,0,0);\n",
       "    font-style: italic;\n",
       "    margin-bottom: .1em;\n",
       "    margin-top: 0.8em;\n",
       "    display: block;\n",
       "    color:  #b21c0d;\n",
       "}\n",
       "\n",
       ".text_cell_render h6 { /*use this for copyright note*/\n",
       "    font-family: 'Ubuntu Condensed', sans-serif;\n",
       "    font-weight: 300;\n",
       "    font-size: 14pt;\n",
       "    line-height: 100%;\n",
       "    color: #252525;\n",
       "    text-align: right;\n",
       "    margin-bottom: 1px;\n",
       "    margin-top: 1px;\n",
       "}\n",
       "\n",
       ".CodeMirror{\n",
       "        font-family: 'Duru Sans', sans-serif;\n",
       "        font-size: 100%;\n",
       "}\n",
       "\n",
       "</style>\n",
       "<script>\n",
       "    MathJax.Hub.Config({\n",
       "                        TeX: {\n",
       "                           extensions: [\"AMSmath.js\"],\n",
       "                           equationNumbers: { autoNumber: \"AMS\", useLabelIds: true}\n",
       "                           },\n",
       "                tex2jax: {\n",
       "                    inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
       "                    displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
       "                },\n",
       "                displayAlign: 'center', // Change this to 'center' to center equations.\n",
       "                \"HTML-CSS\": {\n",
       "                    styles: {'.MathJax_Display': {\"margin\": 4}}\n",
       "                }\n",
       "        });\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Esta celda da el estilo al notebook\n",
    "from IPython.core.display import HTML\n",
    "css_file = '../styles/StyleCursoPython.css'\n",
    "HTML(open(css_file, \"r\").read())"
   ]
  }
 ],
 "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.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}