{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Learning\n",
    "\n",
    "This notebook serves as supporting material for topics covered in **Chapter 18 - Learning from Examples** , **Chapter 19 - Knowledge in Learning**, **Chapter 20 - Learning Probabilistic Models** from the book *Artificial Intelligence: A Modern Approach*. This notebook uses implementations from [learning.py](https://github.com/aimacode/aima-python/blob/master/learning.py). Let's start by importing everything from the module:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from learning import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Contents\n",
    "\n",
    "* Machine Learning Overview\n",
    "* Datasets\n",
    "* Distance Functions\n",
    "* Plurality Learner\n",
    "* k-Nearest Neighbours\n",
    "* Naive Bayes Learner\n",
    "* Perceptron\n",
    "* MNIST Handwritten Digits\n",
    "    * Loading and Visualising\n",
    "    * Testing\n",
    "        * kNN Classifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Machine Learning Overview\n",
    "\n",
    "In this notebook, we learn about agents that can improve their behavior through diligent study of their own experiences.\n",
    "\n",
    "An agent is **learning** if it improves its performance on future tasks after making observations about the world.\n",
    "\n",
    "There are three types of feedback that determine the three main types of learning:\n",
    "\n",
    "* **Supervised Learning**:\n",
    "\n",
    "In Supervised Learning the agent observes some example input-output pairs and learns a function that maps from input to output.\n",
    "\n",
    "**Example**: Let's think of an agent to classify images containing cats or dogs. If we provide an image containing a cat or a dog, this agent should output a string \"cat\" or \"dog\" for that particular image. To teach this agent, we will give a lot of input-output pairs like {cat image-\"cat\"}, {dog image-\"dog\"} to the agent. The agent then learns a function that maps from an input image to one of those strings.\n",
    "\n",
    "* **Unsupervised Learning**:\n",
    "\n",
    "In Unsupervised Learning the agent learns patterns in the input even though no explicit feedback is supplied. The most common type is **clustering**: detecting potential useful clusters of input examples.\n",
    "\n",
    "**Example**: A taxi agent would develop a concept of *good traffic days* and *bad traffic days* without ever being given labeled examples.\n",
    "\n",
    "* **Reinforcement Learning**:\n",
    "\n",
    "In Reinforcement Learning the agent learns from a series of reinforcements—rewards or punishments.\n",
    "\n",
    "**Example**: Let's talk about an agent to play the popular Atari game—[Pong](http://www.ponggame.org). We will reward a point for every correct move and deduct a point for every wrong move from the agent. Eventually, the agent will figure out its actions prior to reinforcement were most responsible for it."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Datasets\n",
    "\n",
    "For the following tutorials we will use a range of datasets, to better showcase the strengths and weaknesses of the algorithms. The datasests are the following:\n",
    "\n",
    "* [Fisher's Iris](https://github.com/aimacode/aima-data/blob/a21fc108f52ad551344e947b0eb97df82f8d2b2b/iris.csv): Each item represents a flower, with four measurements: the length and the width of the sepals and petals. Each item/flower is categorized into one of three species: Setosa, Versicolor and Virginica.\n",
    "\n",
    "* [Zoo](https://github.com/aimacode/aima-data/blob/a21fc108f52ad551344e947b0eb97df82f8d2b2b/zoo.csv): The dataset holds different animals and their classification as \"mammal\", \"fish\", etc. The new animal we want to classify has the following measurements: 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1 (don't concern yourself with what the measurements mean)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "To make using the datasets easier, we have written a class, `DataSet`, in `learning.py`. The tutorials found here make use of this class.\n",
    "\n",
    "Let's have a look at how it works before we get started with the algorithms."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Intro\n",
    "\n",
    "A lot of the datasets we will work with are .csv files (although other formats are supported too). We have a collection of sample datasets ready to use [on aima-data](https://github.com/aimacode/aima-data/tree/a21fc108f52ad551344e947b0eb97df82f8d2b2b). Two examples are the datasets mentioned above (*iris.csv* and *zoo.csv*). You can find plenty datasets online, and a good repository of such datasets is [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets.html).\n",
    "\n",
    "In such files, each line corresponds to one item/measurement. Each individual value in a line represents a *feature* and usually there is a value denoting the *class* of the item.\n",
    "\n",
    "You can find the code for the dataset here:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "%psource DataSet"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Class Attributes\n",
    "\n",
    "* **examples**: Holds the items of the dataset. Each item is a list of values.\n",
    "\n",
    "* **attrs**: The indexes of the features (by default in the range of [0,f), where *f* is the number of features. For example, `item[i]` returns the feature at index *i* of *item*.\n",
    "\n",
    "* **attrnames**: An optional list with attribute names. For example, `item[s]`, where *s* is a feature name, returns the feature of name *s* in *item*.\n",
    "\n",
    "* **target**: The attribute a learning algorithm will try to predict. By default the last attribute.\n",
    "\n",
    "* **inputs**: This is the list of attributes without the target.\n",
    "\n",
    "* **values**: A list of lists which holds the set of possible values for the corresponding attribute/feature. If initially `None`, it gets computed (by the function `setproblem`) from the examples.\n",
    "\n",
    "* **distance**: The distance function used in the learner to calculate the distance between two items. By default `mean_boolean_error`.\n",
    "\n",
    "* **name**: Name of the dataset.\n",
    "\n",
    "* **source**: The source of the dataset (url or other). Not used in the code.\n",
    "\n",
    "* **exclude**: A list of indexes to exclude from `inputs`. The list can include either attribute indexes (attrs) or names (attrnames)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Class Helper Functions\n",
    "\n",
    "These functions help modify a `DataSet` object to your needs.\n",
    "\n",
    "* **sanitize**: Takes as input an example and returns it with non-input (target) attributes replaced by `None`. Useful for testing. Keep in mind that the example given is not itself sanitized, but instead a sanitized copy is returned.\n",
    "\n",
    "* **classes_to_numbers**: Maps the class names of a dataset to numbers. If the class names are not given, they are computed from the dataset values. Useful for classifiers that return a numerical value instead of a string.\n",
    "\n",
    "* **remove_examples**: Removes examples containing a given value. Useful for removing examples with missing values, or for removing classes (needed for binary classifiers)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Importing a Dataset\n",
    "\n",
    "#### Importing from aima-data\n",
    "\n",
    "Datasets uploaded on aima-data can be imported with the following line:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "iris = DataSet(name=\"iris\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "To check that we imported the correct dataset, we can do the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[5.1, 3.5, 1.4, 0.2, 'setosa']\n",
      "[0, 1, 2, 3]\n"
     ]
    }
   ],
   "source": [
    "print(iris.examples[0])\n",
    "print(iris.inputs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Which correctly prints the first line in the csv file and the list of attribute indexes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "When importing a dataset, we can specify to exclude an attribute (for example, at index 1) by setting the parameter `exclude` to the attribute index or name."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0, 2, 3]\n"
     ]
    }
   ],
   "source": [
    "iris2 = DataSet(name=\"iris\",exclude=[1])\n",
    "print(iris2.inputs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Attributes\n",
    "\n",
    "Here we showcase the attributes.\n",
    "\n",
    "First we will print the first three items/examples in the dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[5.1, 3.5, 1.4, 0.2, 'setosa'], [4.9, 3.0, 1.4, 0.2, 'setosa'], [4.7, 3.2, 1.3, 0.2, 'setosa']]\n"
     ]
    }
   ],
   "source": [
    "print(iris.examples[:3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Then we will print `attrs`, `attrnames`, `target`, `input`. Notice how `attrs` holds values in [0,4], but since the fourth attribute is the target, `inputs` holds values in [0,3]."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "attrs: [0, 1, 2, 3, 4]\n",
      "attrnames (by default same as attrs): [0, 1, 2, 3, 4]\n",
      "target: 4\n",
      "inputs: [0, 1, 2, 3]\n"
     ]
    }
   ],
   "source": [
    "print(\"attrs:\", iris.attrs)\n",
    "print(\"attrnames (by default same as attrs):\", iris.attrnames)\n",
    "print(\"target:\", iris.target)\n",
    "print(\"inputs:\", iris.inputs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Now we will print all the possible values for the first feature/attribute."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[4.7, 5.5, 6.3, 5.0, 4.9, 5.1, 4.6, 5.4, 4.4, 4.8, 5.8, 7.0, 7.1, 4.5, 5.9, 5.6, 6.9, 6.6, 6.5, 6.4, 6.0, 6.1, 7.6, 7.4, 7.9, 4.3, 5.7, 5.3, 5.2, 6.7, 6.2, 6.8, 7.3, 7.2, 7.7]\n"
     ]
    }
   ],
   "source": [
    "print(iris.values[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Finally we will print the dataset's name and source. Keep in mind that we have not set a source for the dataset, so in this case it is empty."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "name: iris\n",
      "source: \n"
     ]
    }
   ],
   "source": [
    "print(\"name:\", iris.name)\n",
    "print(\"source:\", iris.source)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "A useful combination of the above is `dataset.values[dataset.target]` which returns the possible values of the target. For classification problems, this will return all the possible classes. Let's try it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['setosa', 'virginica', 'versicolor']\n"
     ]
    }
   ],
   "source": [
    "print(iris.values[iris.target])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Helper Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We will now take a look at the auxiliary functions found in the class.\n",
    "\n",
    "First we will take a look at the `sanitize` function, which sets the non-input values of the given example to `None`.\n",
    "\n",
    "In this case we want to hide the class of the first example, so we will sanitize it.\n",
    "\n",
    "Note that the function doesn't actually change the given example; it returns a sanitized *copy* of it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sanitized: [5.1, 3.5, 1.4, 0.2, None]\n",
      "Original: [5.1, 3.5, 1.4, 0.2, 'setosa']\n"
     ]
    }
   ],
   "source": [
    "print(\"Sanitized:\",iris.sanitize(iris.examples[0]))\n",
    "print(\"Original:\",iris.examples[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Currently the `iris` dataset has three classes, setosa, virginica and versicolor. We want though to convert it to a binary class dataset (a dataset with two classes). The class we want to remove is \"virginica\". To accomplish that we will utilize the helper function `remove_examples`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['setosa', 'versicolor']\n"
     ]
    }
   ],
   "source": [
    "iris.remove_examples(\"virginica\")\n",
    "print(iris.values[iris.target])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Finally we take a look at `classes_to_numbers`. For a lot of the classifiers in the module (like the Neural Network), classes should have numerical values. With this function we map string class names to numbers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Class of first example: setosa\n",
      "Class of first example: 0\n"
     ]
    }
   ],
   "source": [
    "print(\"Class of first example:\",iris.examples[0][iris.target])\n",
    "iris.classes_to_numbers()\n",
    "print(\"Class of first example:\",iris.examples[0][iris.target])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "As you can see \"setosa\" was mapped to 0."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Distance Functions\n",
    "\n",
    "In a lot of algorithms (like the *k-Nearest Neighbors* algorithm), there is a need to compare items, finding how *similar* or *close* they are. For that we have many different functions at our disposal. Below are the functions implemented in the module:\n",
    "\n",
    "### Manhattan Distance (`manhattan_distance`)\n",
    "\n",
    "One of the simplest distance functions. It calculates the difference between the coordinates/features of two items. To understand how it works, imagine a 2D grid with coordinates *x* and *y*. In that grid we have two items, at the squares positioned at `(1,2)` and `(3,4)`. The difference between their two coordinates is `3-1=2` and `4-2=2`. If we sum these up we get `4`. That means to get from `(1,2)` to `(3,4)` we need four moves; two to the right and two more up. The function works similarly for n-dimensional grids."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Manhattan Distance between (1,2) and (3,4) is 4\n"
     ]
    }
   ],
   "source": [
    "def manhattan_distance(X, Y):\n",
    "    return sum([abs(x - y) for x, y in zip(X, Y)])\n",
    "\n",
    "\n",
    "distance = manhattan_distance([1,2], [3,4])\n",
    "print(\"Manhattan Distance between (1,2) and (3,4) is\", distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Euclidean Distance (`euclidean_distance`)\n",
    "\n",
    "Probably the most popular distance function. It returns the square root of the sum of the squared differences between individual elements of two items."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Euclidean Distance between (1,2) and (3,4) is 2.8284271247461903\n"
     ]
    }
   ],
   "source": [
    "def euclidean_distance(X, Y):\n",
    "    return math.sqrt(sum([(x - y)**2 for x, y in zip(X,Y)]))\n",
    "\n",
    "\n",
    "distance = euclidean_distance([1,2], [3,4])\n",
    "print(\"Euclidean Distance between (1,2) and (3,4) is\", distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Hamming Distance (`hamming_distance`)\n",
    "\n",
    "This function counts the number of differences between single elements in two items. For example, if we have two binary strings \"111\" and \"011\" the function will return 1, since the two strings only differ at the first element. The function works the same way for non-binary strings too."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hamming Distance between 'abc' and 'abb' is 1\n"
     ]
    }
   ],
   "source": [
    "def hamming_distance(X, Y):\n",
    "    return sum(x != y for x, y in zip(X, Y))\n",
    "\n",
    "\n",
    "distance = hamming_distance(['a','b','c'], ['a','b','b'])\n",
    "print(\"Hamming Distance between 'abc' and 'abb' is\", distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mean Boolean Error (`mean_boolean_error`)\n",
    "\n",
    "To calculate this distance, we find the ratio of different elements over all elements of two items. For example, if the two items are `(1,2,3)` and `(1,4,5)`, the ration of different/all elements is 2/3, since they differ in two out of three elements."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Boolean Error Distance between (1,2,3) and (1,4,5) is 0.6666666666666666\n"
     ]
    }
   ],
   "source": [
    "def mean_boolean_error(X, Y):\n",
    "    return mean(int(x != y) for x, y in zip(X, Y))\n",
    "\n",
    "\n",
    "distance = mean_boolean_error([1,2,3], [1,4,5])\n",
    "print(\"Mean Boolean Error Distance between (1,2,3) and (1,4,5) is\", distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mean Error (`mean_error`)\n",
    "\n",
    "This function finds the mean difference of single elements between two items. For example, if the two items are `(1,0,5)` and `(3,10,5)`, their error distance is `(3-1) + (10-0) + (5-5) = 2 + 10 + 0 = 12`. The mean error distance therefore is `12/3=4`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Error Distance between (1,0,5) and (3,10,5) is 4\n"
     ]
    }
   ],
   "source": [
    "def mean_error(X, Y):\n",
    "    return mean([abs(x - y) for x, y in zip(X, Y)])\n",
    "\n",
    "\n",
    "distance = mean_error([1,0,5], [3,10,5])\n",
    "print(\"Mean Error Distance between (1,0,5) and (3,10,5) is\", distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mean Square Error (`ms_error`)\n",
    "\n",
    "This is very similar to the `Mean Error`, but instead of calculating the difference between elements, we are calculating the *square* of the differences."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Square Distance between (1,0,5) and (3,10,5) is 34.666666666666664\n"
     ]
    }
   ],
   "source": [
    "def ms_error(X, Y):\n",
    "    return mean([(x - y)**2 for x, y in zip(X, Y)])\n",
    "\n",
    "\n",
    "distance = ms_error([1,0,5], [3,10,5])\n",
    "print(\"Mean Square Distance between (1,0,5) and (3,10,5) is\", distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Root of Mean Square Error (`rms_error`)\n",
    "\n",
    "This is the square root of `Mean Square Error`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Root of Mean Error Distance between (1,0,5) and (3,10,5) is 5.887840577551898\n"
     ]
    }
   ],
   "source": [
    "def rms_error(X, Y):\n",
    "    return math.sqrt(ms_error(X, Y))\n",
    "\n",
    "\n",
    "distance = rms_error([1,0,5], [3,10,5])\n",
    "print(\"Root of Mean Error Distance between (1,0,5) and (3,10,5) is\", distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Plurality Learner Classifier\n",
    "\n",
    "### Overview\n",
    "\n",
    "The Plurality Learner is a simple algorithm, used mainly as a baseline comparison for other algorithms. It finds the most popular class in the dataset and classifies any subsequent item to that class. Essentially, it classifies every new item to the same class. For that reason, it is not used very often, instead opting for more complicated algorithms when we want accurate classification.\n",
    "\n",
    "![pL plot](images/pluralityLearner_plot.png)\n",
    "\n",
    "Let's see how the classifier works with the plot above. There are three classes named **Class A** (orange-colored dots) and **Class B** (blue-colored dots) and **Class C** (green-colored dots). Every point in this plot has two **features** (i.e. X<sub>1</sub>, X<sub>2</sub>). Now, let's say we have a new point, a red star and we want to know which class this red star belongs to. Solving this problem by predicting the class of this new red star is our current classification problem.\n",
    "\n",
    "The Plurality Learner will find the class most represented in the plot. ***Class A*** has four items, ***Class B*** has three and ***Class C*** has seven. The most popular class is ***Class C***. Therefore, the item will get classified in ***Class C***, despite the fact that it is closer to the other two classes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Implementation\n",
    "\n",
    "Below follows the implementation of the PluralityLearner algorithm:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "def PluralityLearner(dataset):\n",
    "    \"\"\"A very dumb algorithm: always pick the result that was most popular\n",
    "    in the training data.  Makes a baseline for comparison.\"\"\"\n",
    "    most_popular = mode([e[dataset.target] for e in dataset.examples])\n",
    "\n",
    "    def predict(example):\n",
    "        \"Always return same result: the most popular from the training set.\"\n",
    "        return most_popular\n",
    "    return predict"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "It takes as input a dataset and returns a function. We can later call this function with the item we want to classify as the argument and it returns the class it should be classified in.\n",
    "\n",
    "The function first finds the most popular class in the dataset and then each time we call its \"predict\" function, it returns it. Note that the input (\"example\") does not matter. The function always returns the same class."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Example\n",
    "\n",
    "For this example, we will not use the Iris dataset, since each class is represented the same. This will throw an error. Instead we will use the zoo dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mammal\n"
     ]
    }
   ],
   "source": [
    "zoo = DataSet(name=\"zoo\")\n",
    "\n",
    "pL = PluralityLearner(zoo)\n",
    "print(pL([1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The output for the above code is \"mammal\", since that is the most popular and common class in the dataset."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## k-Nearest Neighbours (kNN) Classifier\n",
    "\n",
    "### Overview\n",
    "The k-Nearest Neighbors algorithm is a non-parametric method used for classification and regression. We are going to use this to classify Iris flowers. More about kNN on [Scholarpedia](http://www.scholarpedia.org/article/K-nearest_neighbor).\n",
    "\n",
    "![kNN plot](images/knn_plot.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Let's see how kNN works with a simple plot shown in the above picture.\n",
    "\n",
    "We have co-ordinates (we call them **features** in Machine Learning) of this red star and we need to predict its class using the kNN algorithm. In this algorithm, the value of **k** is arbitrary. **k** is one of the **hyper parameters** for kNN algorithm. We choose this number based on our dataset and choosing a particular number is known as **hyper parameter tuning/optimising**. We learn more about this in coming topics.\n",
    "\n",
    "Let's put **k = 3**. It means you need to find 3-Nearest Neighbors of this red star and classify this new point into the majority class. Observe that smaller circle which contains three points other than **test point** (red star). As there are two violet points, which form the majority, we predict the class of red star as **violet- Class B**.\n",
    "\n",
    "Similarly if we put **k = 5**, you can observe that there are four yellow points, which form the majority. So, we classify our test point as **yellow- Class A**.\n",
    "\n",
    "In practical tasks, we iterate through a bunch of values for k (like [1, 3, 5, 10, 20, 50, 100]), see how it performs and select the best one. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Implementation\n",
    "\n",
    "Below follows the implementation of the kNN algorithm:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "def NearestNeighborLearner(dataset, k=1):\n",
    "    \"\"\"k-NearestNeighbor: the k nearest neighbors vote.\"\"\"\n",
    "    def predict(example):\n",
    "        \"\"\"Find the k closest items, and have them vote for the best.\"\"\"\n",
    "        best = heapq.nsmallest(k, ((dataset.distance(e, example), e)\n",
    "                                   for e in dataset.examples))\n",
    "        return mode(e[dataset.target] for (d, e) in best)\n",
    "    return predict"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "It takes as input a dataset and k (default value is 1) and it returns a function, which we can later use to classify a new item.\n",
    "\n",
    "To accomplish that, the function uses a heap-queue, where the items of the dataset are sorted according to their distance from *example* (the item to classify). We then take the k smallest elements from the heap-queue and we find the majority class. We classify the item to this class."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Example\n",
    "\n",
    "We measured a new flower with the following values: 5.1, 3.0, 1.1, 0.1. We want to classify that item/flower in a class. To do that, we write the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "setosa\n"
     ]
    }
   ],
   "source": [
    "iris = DataSet(name=\"iris\")\n",
    "\n",
    "kNN = NearestNeighborLearner(iris,k=3)\n",
    "print(kNN([5.1,3.0,1.1,0.1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The output of the above code is \"setosa\", which means the flower with the above measurements is of the \"setosa\" species."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Perceptron Classifier\n",
    "\n",
    "### Overview\n",
    "\n",
    "The Perceptron is a linear classifier. It works the same way as a neural network with no hidden layers (just input and output). First it trains its weights given a dataset and then it can classify a new item by running it through the network.\n",
    "\n",
    "You can think of it as a single neuron. It has *n* synapses, each with its own weight. Each synapse corresponds to one item feature. Perceptron multiplies each item feature with the corresponding synapse weight and then adds them together (aka, the dot product) and checks whether this value is greater than the threshold. If yes, it returns 1. It returns 0 otherwise.\n",
    "\n",
    "![perceptron](images/perceptron.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Implementation\n",
    "\n",
    "First, we train (calculate) the weights given a dataset, using the `BackPropagationLearner` function of `learning.py`. We then return a function, `predict`, which we will use in the future to classify a new item. The function computes the (algebraic) dot product of the item with the calculated weights. If the result is greater than a predefined threshold (usually 0.5, 0 or 1), it returns 1. If it is less than the threshold, it returns 0.\n",
    "\n",
    "NOTE: The current implementation of the algorithm classifies an item into one of two classes. It is a binary classifier and will not work well for multi-class datasets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "def PerceptronLearner(dataset, learning_rate=0.01, epochs=100):\n",
    "    \"\"\"Logistic Regression, NO hidden layer\"\"\"\n",
    "    i_units = len(dataset.inputs)\n",
    "    o_units = 1  # As of now, dataset.target gives only one index.\n",
    "    hidden_layer_sizes = []\n",
    "    raw_net = network(i_units, hidden_layer_sizes, o_units)\n",
    "    learned_net = BackPropagationLearner(dataset, raw_net, learning_rate, epochs)\n",
    "\n",
    "    def predict(example):\n",
    "        # Input nodes\n",
    "        i_nodes = learned_net[0]\n",
    "\n",
    "        # Activate input layer\n",
    "        for v, n in zip(example, i_nodes):\n",
    "            n.value = v\n",
    "\n",
    "        # Forward pass\n",
    "        for layer in learned_net[1:]:\n",
    "            for node in layer:\n",
    "                inc = [n.value for n in node.inputs]\n",
    "                in_val = dotproduct(inc, node.weights)\n",
    "                node.value = node.activation(in_val)\n",
    "\n",
    "        # Hypothesis\n",
    "        o_nodes = learned_net[-1]\n",
    "        pred = [o_nodes[i].value for i in range(o_units)]\n",
    "        return 1 if pred[0] >= 0.5 else 0\n",
    "\n",
    "    return predict"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The weights are trained from the `BackPropagationLearner`. Note that the perceptron is a one-layer neural network, without any hidden layers. So, in `BackPropagationLearner`, we will pass no hidden layers. From that function we get our network, which is just one node, with the weights calculated.\n",
    "\n",
    "`PerceptronLearner` returns `predict`, a function that can be used to classify a new item.\n",
    "\n",
    "That function passes the input/example through the network, calculating the dot product of the input and the weights. If that value is greater than or equal to 0.5, it returns 1. Otherwise it returns 0."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Example\n",
    "\n",
    "We will train the Perceptron on the iris dataset. Because, though, the algorithm is a binary classifier (which means it classifies an item in one of two classes) and the iris dataset has three classes, we need to transform the dataset into a proper form, with only two classes. Therefore, we will remove the third and final class of the dataset, *Virginica*.\n",
    "\n",
    "Then, we will try and classify the item/flower with measurements of 5,3,1,0.1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n"
     ]
    }
   ],
   "source": [
    "iris = DataSet(name=\"iris\")\n",
    "iris.remove_examples(\"virginica\")\n",
    "iris.classes_to_numbers()\n",
    "\n",
    "perceptron = PerceptronLearner(iris)\n",
    "print(perceptron([5,3,1,0.1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The output is 0, which means the item is classified in the first class, *setosa*. This is indeed correct. Note that the Perceptron algorithm is not perfect and may produce false classifications."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## MNIST Handwritten Digits Classification\n",
    "\n",
    "The MNIST database, available from [this page](http://yann.lecun.com/exdb/mnist/), is a large database of handwritten digits that is commonly used for training and testing/validating in Machine learning.\n",
    "\n",
    "The dataset has **60,000 training images** each of size 28x28 pixels with labels and **10,000 testing images** of size 28x28 pixels with labels.\n",
    "\n",
    "In this section, we will use this database to compare performances of different learning algorithms.\n",
    "\n",
    "It is estimated that humans have an error rate of about **0.2%** on this problem. Let's see how our algorithms perform!\n",
    "\n",
    "NOTE: We will be using external libraries to load and visualize the dataset smoothly ([numpy](http://www.numpy.org/) for loading and [matplotlib](http://matplotlib.org/) for visualization). You do not need previous experience of the libraries to follow along."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Loading MNIST digits data\n",
    "\n",
    "Let's start by loading MNIST data into numpy arrays."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import os, struct\n",
    "import array\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from collections import Counter\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0)\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "def load_MNIST(path=\"aima-data/MNIST\"):\n",
    "    \"helper function to load MNIST data\"\n",
    "    train_img_file = open(os.path.join(path, \"train-images-idx3-ubyte\"), \"rb\")\n",
    "    train_lbl_file = open(os.path.join(path, \"train-labels-idx1-ubyte\"), \"rb\")\n",
    "    test_img_file = open(os.path.join(path, \"t10k-images-idx3-ubyte\"), \"rb\")\n",
    "    test_lbl_file = open(os.path.join(path, 't10k-labels-idx1-ubyte'), \"rb\")\n",
    "    \n",
    "    magic_nr, tr_size, tr_rows, tr_cols = struct.unpack(\">IIII\", train_img_file.read(16))\n",
    "    tr_img = array.array(\"B\", train_img_file.read())\n",
    "    train_img_file.close()    \n",
    "    magic_nr, tr_size = struct.unpack(\">II\", train_lbl_file.read(8))\n",
    "    tr_lbl = array.array(\"b\", train_lbl_file.read())\n",
    "    train_lbl_file.close()\n",
    "    \n",
    "    magic_nr, te_size, te_rows, te_cols = struct.unpack(\">IIII\", test_img_file.read(16))\n",
    "    te_img = array.array(\"B\", test_img_file.read())\n",
    "    test_img_file.close()\n",
    "    magic_nr, te_size = struct.unpack(\">II\", test_lbl_file.read(8))\n",
    "    te_lbl = array.array(\"b\", test_lbl_file.read())\n",
    "    test_lbl_file.close()\n",
    "\n",
    "#     print(len(tr_img), len(tr_lbl), tr_size)\n",
    "#     print(len(te_img), len(te_lbl), te_size)\n",
    "    \n",
    "    train_img = np.zeros((tr_size, tr_rows*tr_cols), dtype=np.int16)\n",
    "    train_lbl = np.zeros((tr_size,), dtype=np.int8)\n",
    "    for i in range(tr_size):\n",
    "        train_img[i] = np.array(tr_img[i*tr_rows*tr_cols : (i+1)*tr_rows*tr_cols]).reshape((tr_rows*te_cols))\n",
    "        train_lbl[i] = tr_lbl[i]\n",
    "        \n",
    "    test_img = np.zeros((te_size, te_rows*te_cols), dtype=np.int16)\n",
    "    test_lbl = np.zeros((te_size,), dtype=np.int8)\n",
    "    for i in range(te_size):\n",
    "        test_img[i] = np.array(te_img[i*te_rows*te_cols : (i+1)*te_rows*te_cols]).reshape((te_rows*te_cols))\n",
    "        test_lbl[i] = te_lbl[i]\n",
    "        \n",
    "    return(train_img, train_lbl, test_img, test_lbl)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The function `load_MNIST()` loads MNIST data from files saved in `aima-data/MNIST`. It returns four numpy arrays that we are going to use to train and classify hand-written digits in various learning approaches."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "train_img, train_lbl, test_img, test_lbl = load_MNIST()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Check the shape of these NumPy arrays to make sure we have loaded the database correctly.\n",
    "\n",
    "Each 28x28 pixel image is flattened to a 784x1 array and we should have 60,000 of them in training data. Similarly, we should have 10,000 of those 784x1 arrays in testing data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training images size: (60000, 784)\n",
      "Training labels size: (60000,)\n",
      "Testing images size: (10000, 784)\n",
      "Training labels size: (10000,)\n"
     ]
    }
   ],
   "source": [
    "print(\"Training images size:\", train_img.shape)\n",
    "print(\"Training labels size:\", train_lbl.shape)\n",
    "print(\"Testing images size:\", test_img.shape)\n",
    "print(\"Training labels size:\", test_lbl.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Visualizing MNIST digits data\n",
    "\n",
    "To get a better understanding of the dataset, let's visualize some random images for each class from training and testing datasets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "classes = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]\n",
    "num_classes = len(classes)\n",
    "\n",
    "def show_MNIST(dataset, samples=8):\n",
    "    if dataset == \"training\":\n",
    "        labels = train_lbl\n",
    "        images = train_img\n",
    "    elif dataset == \"testing\":\n",
    "        labels = test_lbl\n",
    "        images = test_img\n",
    "    else:\n",
    "        raise ValueError(\"dataset must be 'testing' or 'training'!\")\n",
    "        \n",
    "    for y, cls in enumerate(classes):\n",
    "        idxs = np.nonzero([i == y for i in labels])\n",
    "        idxs = np.random.choice(idxs[0], samples, replace=False)\n",
    "        for i , idx in enumerate(idxs):\n",
    "            plt_idx = i * num_classes + y + 1\n",
    "            plt.subplot(samples, num_classes, plt_idx)\n",
    "            plt.imshow(images[idx].reshape((28, 28)))\n",
    "            plt.axis(\"off\")\n",
    "            if i == 0:\n",
    "                plt.title(cls)\n",
    "\n",
    "\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nY56uJMR3ww03hP2dXq+8wSnFBmdVHcjatWuzFNITvHwKHjt2LPfff3/Q92655RaTnJwV/LAP06Nr\n167cccfHYAtWAAAgAElEQVQdAFx00UWAExoqUaJEWNuJ5Rzl6VaSjcP1E/ruu++MIiOFHy1btgx3\nGHFVpNavX89PP/0U8jaKFSvGpZdemub1RYsWAW6Y2o+KlDy9r1u3jooVKwLw/vvvA3DbbbcBrpKY\nVaKxDwcPHmxUedlHR44cMWGvzJDjuWnTpiF9PjW///57Cn+t1ET7OJVQccGCBbnmmmsAWLhwYSi/\nGpQqVaoATrESOJ5uUsAUahFIvK+pEnmScXbs2JGJEycCrhIlBRLgzAng6aefBuC3334z8w4VVaQU\nRVEURVFiiW3bcfsD2Fn9U6ZMGXv16tX26tWr7T179th79uyxq1evnuHvDB061B46dKh95MgR+8iR\nI3bt2rXD/t54zjHYn5YtW9pHjx61jx49ap88eTLFn6ZNm0blO7yc3/XXX59mXvLnr7/+itv8YjnH\nzP507NjR7tixo33q1Cn71KlT9tGjR+369evb9evX93yOjRo1sleuXGmvXLnS/v777+3vv/8+5N+t\nXbu2Xbt2bXvPnj1mn44cOdIeOXKkr/Zjrly57EOHDtmHDh0y++Dpp58Oaxu5c+e2y5Url+ZPzpw5\n7Zw5c0Z1jtE+/jp06GB36NDBPnnypL1jxw57x44dZt9F+7uisQ9PnjxpnzhxIuI/cixmZRvxPE7l\nmPzoo4+ivj8Ae8aMGfb+/fvt/fv322XKlLHLlCnj2bkY7E+1atXsjRs32hs3bjT/FwMHDkz388WL\nF7f37t1r792719z727ZtG5NjNWGczSWct2DBAlO9IOG8devWZfi7In/27dsXcMIJoSbT+YVWrVqZ\nBG1BpN6DBw96MaS4EegBkiycccYZACac2a5dO8466yzArez69NNPWbFihTcDTEXv3r35v//7PwAe\ne+yxsH5XqmoKFy5sXnv88cejN7gocezYMS6++GLADaP36NHDJP/PmTMn020cPXo0S1WXXiDu5RIi\nAUyYOdGuk+Eg4dXdu3enea9QoUIAabpigNtp4a677orh6NLns88+i/h3JWH+yJEj/PDDD4B7Xs6b\nN8+kvUhVrR9ayVSoUAFwwuMSfpbQ46uvvprm8xLanTBhgpnb3XffDRCVFJFgaGhPURRFURQlQnyv\n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\nzE94+PDhuH/HbqjexDtbsSSVLl++PGaXLHZpa2sD4ExcB4Di4mI8ePAAgJt/9/bt25TsjGw0NDQE\nwM0TsgXfM+ZhFhQUYP/+/TN+3uLiYgAwuUQ2dnNn8Up5eTnKy8tTfDWpxfmHzOnzti4JE+Y/sV1M\nf3+/uSdGou7evZuSa0uWBQsWmHvk5+3NmzeBX0daPEMsE/ZiaWnBvViCRSKRuNrdzvZ7nO33B+ge\nZ4oLCRYScAF14sSJhDx/su4xPT0dq1evBgDTv660tNQcmcTC/l/saVZXV4fe3l5e53Refgx9Fh1B\n3GNlZSUAmJ5L27ZtS8gmKOh7ZNI1q9bS09PNIoNjVBiQePToUSJeMmXvIwu0enp6sHjxYgDu+1dT\nU5PIl4rrHnW0JyIiIuKTIlJxsmkHlSzaBTt0j3bTPTpm+/0BwUak2GMp3h5wU0nVPd64cQOAc8TH\niBTv7c6dO4l8qZTdI4vOWlpasGXLFgDu1ItEd9dXREpEREQkiRSRipNNO6hk0S7YoXu0m+7RMdvv\nD1BEyna6R4f1VXsiIiLJ0t3dnepLkJDT0Z6IiIiIT4Ee7YmIiIjMJopIiYiIiPikhZSIiIiIT1pI\niYiIiPikhZSIiIiIT1pIiYiIiPikhZSIiIiIT1pIiYiIiPikhZSIiIiIT1pIiYiIiPikhZSIiIiI\nT1pIiYiIiPikhZSIiIiIT1pIiYiIiPikhZSIiIiIT1pIiYiIiPikhZSIiIiIT1pIiYiIiPikhZSI\niIiIT1pIiYiIiPikhZSIiIiIT1pIiYiIiPikhZSIiIiIT1pIiYiIiPj0P62crmW+P233AAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3b11a17f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# takes 5-10 seconds to execute this\n",
    "show_MNIST(\"training\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n4Zi4eM6cOU0ehpRhg222OXTo0IiMK1jEx8d73RkFo6Ag0oji5K5M+Uoed+oOUZKtxX17yJAhpj+l\ndAAYO3ZssnL3rVu3GuXGm22AJLaKFYlTEXfkEiVKmG4JkSrtDzWSYyJmnYmJiea53bt3A565cqIm\nSq6me682+bvFgjGwk5EcNrk+GzZs6PV6Eyd9f/PFnIQoSnIvmjhxYrI8KJfLZfKgRK2S83n48OFh\nG6sqUoqiKIqiKIEituvh+A9w+frv8uXLrsuXL7suXryY7L+VK1e6Vq5c6SpdurTP95D/Kleu7Kpc\nubKrU6dOrpMnT7pOnjzp9X3lv4SEBJ/vF6w5+vNfmzZtXFeuXEn2X9WqVV1Vq1ZN9/unZ47pef/4\n+HhXfHy8yxvx8fEhm1ckjmFq/8n57A15LlrnuHnzZtfmzZtdly5dSvbftm3bXNu2bXP8cSxSpIir\nSJEirp9//tm1bt0617p161w5cuRw5ciRI+Tnhr9z9Pe9ChUq5CpUqJDHvWTmzJmumTNnugDXggUL\nXAsWLPB4ftmyZa5ly5a5ihUr5ipWrJjH+8l9aP78+a758+d7/N7UqVNdU6dOdcQx9Pe/FStWuFas\nWGG+f8aNGxe2Y5iWORYsWNBVsGBB15AhQ1xHjx51HT161ONvv2fPHteePXtcpUuXdpUuXdo1efJk\n81z37t1d3bt3j8h5GuhxrFatmqtatWrm3nH58mWPf1++fNn10ksvJXud/G2KFy8etjk6KrQnvfb6\n9++f7Dkp3Z08ebJxpP3xxx8Bz1DglClTAIyDr5RJpsSmTZsA293WCUgPJHf27NljEmCjDV9NiKPR\n4iA9SHgv2poWBwtxYnYimTJlMn5Z4jc0dOhQc08RD5sWLVqYsFY0ICkL+/fvN27zN998M2Dda8Xa\nQNizZw/Nmzf3+F1JWG/atKlxu7/tttvM74iDdjQWilSsWBHAhI0kdO0UJIz1/PPPA9CrVy/znBR2\nPPTQQ8yZMwewQ9C//PKLeZ1YPEycODH0Aw4SGzZsAOzvjRYtWphwn1yLO3fuNOej/J2kYOTXX38N\n21g1tKcoiqIoihIgjlKkpJzfmyIl1KpVy6hTUkotSeqAcWtNzXRTnG7FPVXMzCKJ9DyaOXNmsuem\nTZvGb7/9Fu4hBQVRX9xVmLT2sPL2HkmpU6eOeV5UHSe5oq9cuTLF8a9atSoqd/OxxNChQ023AHFL\n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\niE//Az1/hR++BpKtAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3b1086e860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# takes 5-10 seconds to execute this\n",
    "show_MNIST(\"testing\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Let's have a look at the average of all the images of training and testing data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "classes = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]\n",
    "num_classes = len(classes)\n",
    "\n",
    "def show_ave_MNIST(dataset):\n",
    "    if dataset == \"training\":\n",
    "        print(\"Average of all images in training dataset.\")\n",
    "        labels = train_lbl\n",
    "        images = train_img\n",
    "    elif dataset == \"testing\":\n",
    "        print(\"Average of all images in testing dataset.\")\n",
    "        labels = test_lbl\n",
    "        images = test_img\n",
    "    else:\n",
    "        raise ValueError(\"dataset must be 'testing' or 'training'!\")\n",
    "        \n",
    "    for y, cls in enumerate(classes):\n",
    "        idxs = np.nonzero([i == y for i in labels])\n",
    "        print(\"Digit\", y, \":\", len(idxs[0]), \"images.\")\n",
    "        \n",
    "        ave_img = np.mean(np.vstack([images[i] for i in idxs[0]]), axis = 0)\n",
    "#         print(ave_img.shape)\n",
    "        \n",
    "        plt.subplot(1, num_classes, y+1)\n",
    "        plt.imshow(ave_img.reshape((28, 28)))\n",
    "        plt.axis(\"off\")\n",
    "        plt.title(cls)\n",
    "\n",
    "\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average of all images in training dataset.\n",
      "Digit 0 : 5923 images.\n",
      "Digit 1 : 6742 images.\n",
      "Digit 2 : 5958 images.\n",
      "Digit 3 : 6131 images.\n",
      "Digit 4 : 5842 images.\n",
      "Digit 5 : 5421 images.\n",
      "Digit 6 : 5918 images.\n",
      "Digit 7 : 6265 images.\n",
      "Digit 8 : 5851 images.\n",
      "Digit 9 : 5949 images.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3b0d96dcc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average of all images in testing dataset.\n",
      "Digit 0 : 980 images.\n",
      "Digit 1 : 1135 images.\n",
      "Digit 2 : 1032 images.\n",
      "Digit 3 : 1010 images.\n",
      "Digit 4 : 982 images.\n",
      "Digit 5 : 892 images.\n",
      "Digit 6 : 958 images.\n",
      "Digit 7 : 1028 images.\n",
      "Digit 8 : 974 images.\n",
      "Digit 9 : 1009 images.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3b0d1ec7f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_ave_MNIST(\"training\")\n",
    "show_ave_MNIST(\"testing\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Testing\n",
    "\n",
    "Now, let us convert this raw data into `DataSet.examples` to run our algorithms defined in `learning.py`. Every image is represented by 784 numbers (28x28 pixels) and we append them with its label or class to make them work with our implementations in learning module."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 784) (60000,)\n",
      "(60000, 785)\n"
     ]
    }
   ],
   "source": [
    "print(train_img.shape, train_lbl.shape)\n",
    "temp_train_lbl = train_lbl.reshape((60000,1))\n",
    "training_examples = np.hstack((train_img, temp_train_lbl))\n",
    "print(training_examples.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Now, we will initialize a DataSet with our training examples, so we can use it in our algorithms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "# takes ~8 seconds to execute this\n",
    "MNIST_DataSet = DataSet(examples=training_examples, distance=manhattan_distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Moving forward we can use `MNIST_DataSet` to test our algorithms."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### k-Nearest Neighbors\n",
    "\n",
    "We will now try to classify a random image from the dataset using the kNN classifier.\n",
    "\n",
    "First, we choose a number from 0 to 9999 for `test_img_choice` and we are going to predict the class of that test image."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n"
     ]
    }
   ],
   "source": [
    "from learning import NearestNeighborLearner\n",
    "\n",
    "# takes ~20 Secs. to execute this\n",
    "kNN = NearestNeighborLearner(MNIST_DataSet,k=3)\n",
    "print(kNN(test_img[211]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "To make sure that the output we got is correct, let's plot that image along with its label."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Actual class of test image: 5\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f3b0df19390>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAHVCAYAAABSR+pHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE8tJREFUeJzt3X+o7XW95/HXO/UapJRxGzN1xjsmQxFpw0kKb4PiXM3+\n0QpCg4sT4ukPmwwuYWh1/SMhhlt3CCKylGuQiZC/oFv3qkR1YRLPEelo5hShHQ8nxcz8QWF6PvPH\nWTJnmnPO3n6/+332XrvHAw5n7bXX+3w+fFny9Lv2WvtbY4wAAGvrVeu9AQDYjAQWABoILAA0EFgA\naCCwANBAYAGggcACQAOBBYAGAgsADQ4/lItVlV8bBcCye3KM8YaVHuQMFgBemUdX8yCBBYAGAgsA\nDWYFtqreW1UPV9UvqupTa7UpAFh2kwNbVYcl+XKS85K8NclFVfXWtdoYACyzOWewpyf5xRjjl2OM\nF5LclOT8tdkWACy3OYE9PsnOfb5+bHEfAPzZa/8cbFVtTbK1ex0A2EjmBHZXkhP3+fqExX3/jzHG\ntUmuTfyiCQD+fMx5ifjeJKdU1V9V1V8kuTDJHWuzLQBYbpPPYMcYL1bVx5L8S5LDklw/xnhwzXYG\nAEusxjh0r9p6iRiATWD7GGPLSg/ym5wAoIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQQGAB\noIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAaCCwANBBY\nAGggsADQQGABoIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA0E\nFgAaCCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHAAkAD\ngQWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQ\nQGABoIHAAkADgQWABgILAA0EFgAaHD5nuKoeSfJskpeSvDjG2LIWmwKAZTcrsAtnjTGeXIN/BwA2\nDS8RA0CDuYEdSf61qrZX1db9PaCqtlbVtqraNnMtAFgaNcaYPlx1/BhjV1X9uyR3JvnvY4wfHuTx\n0xcDgI1h+2reczTrDHaMsWvx9xNJbk1y+px/DwA2i8mBrarXVNXRL99Ock6SB9ZqYwCwzOa8i/jY\nJLdW1cv/zo1jjO+tya4AYMlNDuwY45dJTl3DvQDApuFjOgDQQGABoMFa/CYngCTJa1/72smz73rX\nu2at/Z3vfGfW/BzPPffc5Nk5xyxJHn744cmzZ5xxxqy1f/Ob38ya3+ycwQJAA4EFgAYCCwANBBYA\nGggsADQQWABoILAA0EBgAaCBwAJAA4EFgAYCCwANBBYAGggsADQQWABoILAA0MD1YGET2bJly6z5\nrVu3zpr/4Ac/OHm2qmat/dBDD02eveaaa2atfdJJJ63b2r/61a8mz/7xj3+ctTYH5wwWABoILAA0\nEFgAaCCwANBAYAGggcACQAOBBYAGAgsADQQWABoILAA0EFgAaCCwANBAYAGggcACQIMaYxy6xaoO\n3WKwTo444ohZ81ddddXk2UsvvXTW2k899dSs+S996UuTZ++5555Zaz/44IOTZ88666xZa1933XWT\nZ59++ulZa5955pmTZ3/729/OWvvP2PYxxorXhnQGCwANBBYAGggsADQQWABoILAA0EBgAaCBwAJA\nA4EFgAYCCwANBBYAGggsADQQWABoILAA0EBgAaCBwAJAg8PXewOwEZ177rmTZz/96U/PWvvUU0+d\nPHvTTTfNWvuTn/zkrPmjjjpq8uxHPvKRWWvPuRbte97znllr33XXXZNnr7jiillru6brxuUMFgAa\nCCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHAAkADl6tj\nU7r66qtnzV911VWTZ++///5Za8+5bNuTTz45a+2Pf/zjs+YvueSSybMnnnjirLV37NgxeXbOvpPk\ntttumzz79NNPz1qbjcsZLAA0EFgAaCCwANBAYAGgwYqBrarrq+qJqnpgn/teX1V3VtXPF38f07tN\nAFguqzmD/ack7/2T+z6V5O4xxilJ7l58DQAsrBjYMcYPkzz1J3efn+SGxe0bklywxvsCgKU29XOw\nx44xdi9u/zrJsQd6YFVtTbJ14joAsJRm/6KJMcaoqnGQ71+b5NokOdjjAGAzmfou4ser6rgkWfz9\nxNptCQCW39TA3pHk4sXti5PcvjbbAYDNYTUf0/lWkv+V5D9V1WNVdUmSzyf5m6r6eZL/uvgaAFhY\n8WewY4yLDvCts9d4LwCwafhNTgDQQGABoIHrwbJhzbmm65VXXjlr7XvvvXfy7Lnnnjtr7WeffXby\n7Nzr4H7mM5+ZNX/jjTdOnr3rrrtmrX3rrbdOnn3mmWdmrQ374wwWABoILAA0EFgAaCCwANBAYAGg\ngcACQAOBBYAGAgsADQQWABoILAA0EFgAaCCwANBAYAGggcACQIMaYxy6xaoO3WKsu5NPPnnW/I9+\n9KPJs7fffvustS+//PLJsy+88MKstec47LDDZs2/+tWvnjX/+9//fvLsnj17Zq0Nh9D2McaWlR7k\nDBYAGggsADQQWABoILAA0EBgAaCBwAJAA4EFgAYCCwANBBYAGggsADQQWABoILAA0EBgAaCBwAJA\nA4EFgAaHr/cG2LxOOeWUWfPHHnvs5NkXX3xx1trreU3XOV566aVZ888///wa7QRwBgsADQQWABoI\nLAA0EFgAaCCwANBAYAGggcACQAOBBYAGAgsADQQWABoILAA0EFgAaCCwANBAYAGggcvV0WbHjh2z\n5nfu3Dl59nWve92stV/1qun/77lnz55ZawObgzNYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAa\nCCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAauB4sbXbt2jVrfs71ZD/84Q/PWvvoo4+e\nPHvBBRfMWhvYHJzBAkADgQWABgILAA1WDGxVXV9VT1TVA/vcd3VV7aqq+xd/3te7TQBYLqs5g/2n\nJO/dz/3/OMY4bfHnn9d2WwCw3FYM7Bjjh0meOgR7AYBNY87PYD9WVT9ZvIR8zJrtCAA2gamB/UqS\nk5OclmR3ki8c6IFVtbWqtlXVtolrAcDSmRTYMcbjY4yXxhh7knwtyekHeey1Y4wtY4wtUzcJAMtm\nUmCr6rh9vnx/kgcO9FgA+HO04q9KrKpvJTkzyV9W1WNJ/j7JmVV1WpKR5JEkH23cIwAsnRUDO8a4\naD93X9ewFwDYNPwmJwBoILAA0EBgAaBBjTEO3WJVh24xlt4b3vCGybO33HLLrLXf/e53T5695ppr\nZq399a9/ffLszp07Z60NrMr21Xz01BksADQQWABoILAA0EBgAaCBwAJAA4EFgAYCCwANBBYAGggs\nADQQWABoILAA0EBgAaCBwAJAA4EFgAYuV8emdMwxx8ya/+53vzt59p3vfOestedcru5zn/vcrLVd\n7g5WxeXqAGC9CCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQQGAB\noIHAAkADgQWABq4HC/tx1FFHTZ698MILZ6391a9+dfLs7373u1lrn3POObPmt23bNmseloTrwQLA\nehFYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHAAkADgQWABi5X\nB2usqmbNv/GNb5w8+73vfW/W2m95y1tmzb/97W+fPPuzn/1s1tpwCLlcHQCsF4EFgAYCCwANBBYA\nGggsADQQWABoILAA0EBgAaCBwAJAA4EFgAYCCwANBBYAGggsADQQWABoILAA0ODw9d4AbDZzr7G8\ne/fuybOXXXbZrLV/8IMfzJo/55xzJs+6HiybjTNYAGggsADQQGABoMGKga2qE6vq+1X106p6sKou\nX9z/+qq6s6p+vvj7mP7tAsByWM0Z7ItJ/m6M8dYk70pyWVW9Ncmnktw9xjglyd2LrwGArCKwY4zd\nY4z7FrefTfJQkuOTnJ/khsXDbkhyQdcmAWDZvKKP6VTVSUnekeSeJMeOMV7+PMGvkxx7gJmtSbZO\n3yIALJ9Vv8mpqo5K8u0knxhjPLPv98beD/7t98N/Y4xrxxhbxhhbZu0UAJbIqgJbVUdkb1y/Oca4\nZXH341V13OL7xyV5omeLALB8VvMu4kpyXZKHxhhf3OdbdyS5eHH74iS3r/32AGA5reZnsGck+dsk\nO6rq/sV9Vyb5fJKbq+qSJI8m+VDPFgFg+awY2DHGvyWpA3z77LXdDgBsDn6TEwA0EFgAaOBydbDB\nnHDCCZNnP/vZz67hTl65nTt3ruv6sJE4gwWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHAAkAD\ngQWABgILAA0EFgAaCCwANBBYAGggsADQQGABoIHrwW5yb3rTm2bNX3HFFZNnL7/88llrL6sjjzxy\n1vxVV101efbss8+etfbNN988a/7OO++cNQ+biTNYAGggsADQQGABoIHAAkADgQWABgILAA0EFgAa\nCCwANBBYAGggsADQQGABoIHAAkADgQWABgILAA1qjHHoFqs6dIuRJHnzm988a/6+++6bPHvWWWfN\nWnv79u2z5ud429veNnn2G9/4xqy1Tz311Mmzcy83d+mll86af+6552bNw5LYPsbYstKDnMECQAOB\nBYAGAgsADQQWABoILAA0EFgAaCCwANBAYAGggcACQAOBBYAGAgsADQQWABoILAA0EFgAaCCwANDg\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3b0e46b438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Actual class of test image:\", test_lbl[211])\n",
    "plt.imshow(test_img[211].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Hurray! We've got it correct. Don't worry if our algorithm predicted a wrong class. With this techinique we have only ~97% accuracy on this dataset. Let's try with a different test image and hope we get it this time.\n",
    "\n",
    "You might have recognized that our algorithm took ~20 seconds to predict a single image. How would we even predict all 10,000 test images? Yeah, the implementations we have in our learning module are not optimized to run on this particular dataset, as they are written with readability in mind, instead of efficiency."
   ]
  }
 ],
 "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.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
