{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "author: Aurélien Garivier\n", "\n", "# An experiment with the MNIST dataset\n", "\n", "\n", "The Mnist dataset provides a (somewhat old but) very classical example of Machine Learning. The goal is simple and useful: recognize hand-written digits. This was an important challenge for the postal companies in the 1980s. \n", "\n", "It is available on the webpage of Yann LeCun, a very famous researcher in Machine Learning in general and neural networks in particular. \n", "\n", "

" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "# loading a lot of facilities for numerical computations and graphs\n", "%pylab inline \n", "pylab.rcParams['figure.figsize'] = (20, 6) # to have larger plot\n", "seed(240979) #initialize random number generator\n", "\n", "# set working directory\n", "workingdir = './'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Loading the data set\n", "\n", "### 1.1 Description of the data set\n", "The MNIST data contains $n\\_tot=70000$ images of size $dimX\\times dimY=28\\times28$, and their *labels* (a digit between $0$ and $9$). \n", "The images are stored as lines of the matrix *mnist.data*. \n", "Each image can be reshaped as a matrix $im \\in \\mathcal{M}_{dimX, dimY}(\\mathbb{R})$, where $im[i,j]$ is the intensity level of pixel (i,j): 0 means 'white', 255 means 'black'.\n", "\n", "The labels, stored in *mnist.target*, are numbers (here, we cast them to integers) between $0$ and $9$. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loaded 70000 images of size 28x28\n", "Number of classes: 10\n", "Classes:\n", "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n" ] } ], "source": [ "from sklearn.datasets import fetch_mldata # si besoin: sudo pip install -U scikit-learn ou (pour une install locale) pip install --user --install-option=\"--prefix=\" -U scikit-learn\n", "\n", "mnist = fetch_mldata('MNIST original', data_home='./')\n", "mnist.target = mnist.target.astype(int) # by default the digits are floating numbers: convert to integers\n", "\n", "# defining general variables for use throuhout the notebook \n", "n_tot = len(mnist.data)\n", "dimX = int(sqrt(len(mnist.data[0]))); dimY = dimX # nb of pixels in each dimension\n", "nc = len(unique(mnist.target)) # number of classes\n", "\n", "print(\"Loaded %d images of size %dx%d\"%(n_tot, dimX, dimY))\n", "print(\"Number of classes: %d\"%(nc))\n", "print(\"Classes:\")\n", "print(sorted(unique(mnist.target)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 What does the data look like?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\njIx2gb8B5WOfghWujPAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Showing one image \n", "figure(figsize = (7,7))\n", "ii = random.randint(0, n_tot-1)\n", "plt.imshow(reshape(mnist.data[ii], [dimX, dimY], order='C'), cmap=\"Greys\", interpolation=\"none\") # or \"nearest\"\n", "ax = plt.gca()\n", "ax.set_xticks(arange(-0.5, dimX, 1))\n", "ax.set_yticks(arange(-0.5, dimY, 1))\n", "ax.set_xticklabels(arange(0, dimX+1, 1))\n", "ax.set_yticklabels(arange(0, dimY+1, 1))\n", "ax.grid(color='r', linestyle='--', linewidth=1)\n", "plt.show()\n", "\n", "# Showing a few images in the dataset with their labels\n", "nbRows = 5\n", "nbCols = 15\n", "I = [[0 for k in range(nbCols)] for j in range(nbRows)]\n", "I[0] = [random.randint(0, n_tot-1) for k in range(nbCols)]\n", "I[0][0] = ii\n", "M = np.concatenate([reshape(mnist.data[i], [dimX,dimY], order='C') for i in I[0]], axis=1)\n", "\n", "for j in range(1, nbRows):\n", " I[j] = [random.randint(0, n_tot-1) for k in range(nbCols)]\n", " M = concatenate([M, np.concatenate([np.reshape(mnist.data[i], [dimX, dimY], order='C') for i in I[j]], axis=1)], axis=0)\n", "plt.imshow(M, cmap=\"Greys\", interpolation=\"none\")\n", "for j in range(nbRows):\n", " for k in range(nbCols):\n", " plt.text(dimX*k+2, dimX*j+5, mnist.target[I[j][k]], fontsize=14, color=\"red\")\n", "ax = plt.gca()\n", "ax.set_xticks(np.arange(-0.5, dimX*nbCols, dimX))\n", "ax.set_yticks(np.arange(-0.5, dimY*nbRows, dimY))\n", "ax.set_xticklabels([])\n", "ax.set_yticklabels([])\n", "ax.grid(color='k', linestyle='-', linewidth=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. What is the goal?\n", "\n", "\n", "### 2.1 Classifiers\n", "We must construct a *classifier* $\\mathcal{M}_{dimX, dimY}(\\mathbb{R})\\to \\{0,\\dots,9\\}$ which maps every possible data $X$ (an image) to a label $d$ (a digit).\n", "This is a **classification problem** with $n_c = 10$ classes.\n", "\n", "Classically, this classifiers is assumed to take as input:\n", " * a matrix (table) $X\\in\\mathcal{M}_{n, p}(\\mathbb{R})$, where $X_{i,.}$ contains the relevant information on the $i^{th}$ example (here, image);\n", " * a vector (list) $y\\in\\mathcal{Y}^n$ of *labels* (here, for each image, the corresponding digit)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Classifier: # abstract base class, just providing a template for the classifiers\n", " def __init__(self):\n", " pass\n", " \n", " def fit(self, X, y): \n", " pass\n", " \n", " def predict(self, X): # returns a digit (0,1,...,9) for each line of X\n", " return(apply_along_axis(self.predictOne, axis=1, arr=X))\n", " \n", " def predictOne(self, x):\n", " #return(nc) # nc=10 means \"I don't know\"\n", " return(random.choice(range(nc))) # random choice\n", "\n", "randomClassifier = Classifier()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Dividing the data into a training and a testing set\n", "\n", "\n", "We will separate the data into two sets: the *training set* and the *testing set.\n", "We will use the *training set* only to teach the machine recognize the digits. \n", "The *testing set*, on the other hand, will be used to evaluate the performance of our classifier. It should *not* be used in the construction of the classifier! In usual challenges, it is hidden to the participants." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class DataSet:\n", " def __init__(self, data, target): \n", " self.data = data # input : images\n", " self.X = data # default: features = data itself\n", " self.target = target # output: labels\n", " self.n = len(data)\n", " \n", "# defining the dataSets\n", "# training set: the images we may use to construct the classifier\n", "\n", "n_train = 10000\n", "I = random.choice(range(n_tot), n_train, replace=False)\n", "trainingSet = DataSet(mnist.data[I, :], mnist.target[I]) \n", "\n", "# testing set: we may not use them, except at the end to assert the quality of the classifier\n", "mask = np.ones(n_tot, dtype=bool) #np.ones_like(a,dtype=bool)\n", "mask[I] = False\n", "testingSet = DataSet(mnist.data[mask, :], mnist.target[mask])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set of size 10000\n", "Testing set of size 60000\n", "Histogram of the labels in the training set:\n", "[ 976 1135 1034 1031 944 894 963 1058 963 1002]\n", "Histogram of the labels in the testing set:\n", "[5927 6742 5956 6110 5880 5419 5913 6235 5862 5956]\n" ] } ], "source": [ "print(\"Training set of size %d\"%(trainingSet.n))\n", "print(\"Testing set of size %d\"%(testingSet.n))\n", "print(\"Histogram of the labels in the training set:\")\n", "print(np.histogram(trainingSet.target, [-0.5+k for k in range(11)])[0])\n", "print(\"Histogram of the labels in the testing set:\")\n", "print(np.histogram(testingSet.target, [-0.5+k for k in range(11)])[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluating a classifier\n", "The most natural performance measure is the *proportion of misclassified images*. \n", "One may compute the *training error* \n", "$$ L_{mis}^{train}(classifier) = \\frac{1}{n} \\sum_{i=1}^n \\mathbb{1}\\{classifier\\big(train\\_images[i]\\big) \\neq train\\_labels[i]\\big)\\}$$ \n", "and the *testing error*\n", "$$ L_{mis}^{test}(classifier) = \\frac{1}{n_{test}} \\sum_{i=1}^{n_{test}} \\mathbb{1}\\{classifier\\big(test\\_images[i]\\big) \\neq test\\_labels[i]\\big)\\}\\;.$$ \n", "The testing error is the only correct estimator of the performance of the classifier on future data, because the training sample is used to train the classifier (after all, it may just store them and learn the answers by heart).\n", "\n", "Of course, for the purely random classifier, the results are predictible! (guess the results before running the next cell)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Random classifier: misclassification on the training set=0.9047\n", "Random classifier: misclassification on the testing set=0.900883\n" ] } ], "source": [ "def evaluate(classifier, X, y): # (X,y) is a testing set\n", " return(mean(classifier.predict(X) != y))\n", "\n", "print(\"Random classifier: misclassification on the training set=%g\"%(evaluate(randomClassifier, trainingSet.X, trainingSet.target)))\n", "print(\"Random classifier: misclassification on the testing set=%g\"%(evaluate(randomClassifier, testingSet.X, testingSet.target)))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Without Machine Learning: designing a classifier by hand\n", "\n", "\n", "### 3.1 An expert system\n", "The first, most natural approach, is to try to recognize the features from a few characteristics. For example:\n", " - the contour of a '0' is black, while its center is white,\n", " - a '1' has a more or less vertical bar in the middle, and nothing else,\n", " - the top, bottom, and second diagonal of a '2' are black,\n", " - ...\n", " \n", "Thus, it seems natural to build simple \"detectors\" that sense the presence or absence of writing in the top, bottom, left, right, center, outer part, and diagonals of the image. Then, we can cook a classifier based on these characteristics of the image. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.linalg import toeplitz # for trigonal matrices\n", "\n", "# hand-made masks to detect some characteristics of the images\n", "\n", "top = 0; Mtop = np.concatenate((np.ones(28*8), np.zeros(28*20)))\n", "bottom = 1 ; Mbottom = np.concatenate((np.zeros(28*20), np.ones(28*8)))\n", "left = 2; Mleft = np.tile(np.concatenate((np.ones(8), np.zeros(20))), 28)\n", "right = 3; Mright = np.tile(np.concatenate((np.zeros(20), np.ones(8))), 28)\n", "center = 4; Mcenter = np.concatenate((np.zeros(28*10), np.tile(np.concatenate((np.zeros(10), np.ones(8), np.zeros(10))), 8), np.zeros(28*10)))\n", "outside = 5; Moutside = np.concatenate((np.ones(28*8), np.tile(np.concatenate((np.ones(8), np.zeros(12), np.ones(8))), 12), np.ones(28*8)))\n", "diag1 = 6; Mdiag1 = np.reshape(toeplitz(np.concatenate((np.ones(8), np.zeros(20)))), [28*28])\n", "diag2 = 7; Mdiag2 = np.reshape(np.flipud(toeplitz(np.concatenate((np.ones(8), np.zeros(20))))), [28*28])\n", "\n", "masks = [Mtop, Mbottom, Mleft, Mright, Mcenter, Moutside, Mdiag1, Mdiag2]\n", "p = len(masks)\n", "\n", "# Show the masks\n", "\n", "M = np.concatenate([np.reshape(masks[i], [dimX,dimY], order='C') for i in range(p)], axis=1)\n", "plt.imshow(M, cmap=\"Greys\", interpolation=\"none\")\n", "for j in range(p):\n", " plt.text(dimX*j+12, 15, j, fontsize=14, color=\"red\")\n", "ax = plt.gca()\n", "ax.set_xticks(np.arange(-0.5, dimX*p, dimX))\n", "ax.set_yticks(np.arange(-0.5, dimY, dimY))\n", "ax.set_xticklabels([])\n", "ax.set_yticklabels([])\n", "ax.grid(color='m', linestyle='-', linewidth=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The masks will be used to sum the \"total amount of writing\" in each of the chosen areas of the images. \n", "Each image will be represented by a tuple of values called *features*.\n", "The first job is thus to build, for each image, its feature vector. \n", "Here, the feature vector is made of $p=8$ boolean features, which indicate whether each zone is \"written\" or not.\n", "\n", "We must choose a *threshold* for each mask to decide whether the zone is \"written\" or not. \n", "We could hand-tune these thresholds; for simplicity, here, we chose that a zone is \"written\" if less than $\\alpha = 45\\%$ of the images in the training set are \"more written\" in that zone.\n", "\n", "Doing so, we introduce an important intermediate step: for every image we compute a *feature vector* $x$=featureVector(image), and then the goal is to construction a mapping $\\psi:x\\mapsto \\{0,\\dots,d\\}$. The classifier is of the form: $image \\mapsto \\psi\\big(featureVector(image)\\big)$." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class FeatureMaker: # abstract class, serves as a template for all feature making classes\n", " def __init__(self):\n", " self.p = dimX*dimY # number of features\n", " \n", " def computeFeatures(self, image):\n", " return(np.array(image)/255) # by default, the feature is the input itself\n", " \n", " def computeAllFeatures(self, dataSet): # stores the features in vector X of the dataSet\n", " dataSet.X = np.array([self.computeFeatures(im) for im in dataSet.data]) \n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Features: \n", "[False, False, False, True, True, False, True, True]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWsAAAFpCAYAAABajglzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEYRJREFUeJzt3WuIXHWax/HfL4kjeEEN9oaQMZtZFUFWNkoZxGvW2ZGM\ngpc3koBBcSSCIyiOovhCI7ooy8RZEC/EC6OYcRjRWUVl4y2QHRS1Em+JWdcgURNj0hrERNTB9LMv\n+qgd7U7Xv6tOVz/V3w+EVJ96+tT/WPr1pLrqxBEhAMDENqXbCwAAjI5YA0ACxBoAEiDWAJAAsQaA\nBIg1ACRArAEgAWINAAkQawBIgFgDQALTxvPBDj300JgzZ854PiQATGibNm3Sp59+6tHmxjXWc+bM\nUbPZHM+HBIAJrdFotDTX1ssgthfYftf2RtvXtbMvAMDIxhxr21Ml3Snp15KOlrTI9tGdWhgA4Aft\nnFnPk7QxIt6PiL9L+rOkczqzLADAUO3Eepakj4Z8vbnatgfbS2w3bTf7+/vbeDgAmLxqf+teRCyP\niEZENPr6+up+OADoSe3Eeoukw4Z8/fNqGwCgw9qJ9WuSjrT9C9s/k7RQ0pOdWRYAYKgxv886Ir61\nfbmklZKmSnogItZ3bGUAgO+19aGYiHhG0jMdWgsAYARcGwQAEiDWAJAAsQaABIg1ACRArAEgAWIN\nAAkQawBIgFgDQALEGgASINYAkACxBoAEiDUAJECsASABYg0ACRBrAEiAWANAAsQaABIg1gCQALEG\ngASINQAkQKwBIAFiDQAJEGsASIBYA0ACxBoAEiDWAJAAsQaABIg1ACRArAEgAWINAAkQawBIgFgD\nQALEGgASINYAkACxBoAEiDUAJECsASABYg0ACRBrAEiAWANAAsQaABIg1gCQALEGgASINQAkQKwB\nIAFiDQAJEGsASIBYA0ACxBoAEpjWzjfb3iRpp6Tdkr6NiEYnFgUA2FNbsa78a0R82oH9AABGwMsg\nAJBAu7EOSc/aXmN7SScWBAD4qXZfBjk5IrbY/gdJz9n+34hYPXSgivgSSZo9e3abDwcAk1NbZ9YR\nsaX6fbukv0qaN8zM8ohoRESjr6+vnYcDgElrzLG2vb/tA7+7LekMSes6tTAAwA/aeRlkhqS/2v5u\nP3+KiP/uyKoAAHsYc6wj4n1J/9LBtQAARtCJ91kDE8JXX33V8uyzzz5btO8bb7yxaP7NN98smi+x\nYMGCovk77rijaP6II44omsf44H3WAJAAsQaABIg1ACRArAEgAWINAAkQawBIgFgDQALEGgASINYA\nkACxBoAEiDUAJMC1QTBuIqJo/qWXXiqaP/fcc1ue/eyzz4r2Xaq6GmUtVq5cWTR/zDHHFM2/++67\nLc/yF4qMH86sASABYg0ACRBrAEiAWANAAsQaABIg1gCQALEGgASINQAkQKwBIAFiDQAJ8HFzjJsP\nP/ywaP6UU06paSXljjvuuKL55cuXtzx7zz33FO37vvvuK5r/5ptviuZL1n7LLbcU7Rtjx5k1ACRA\nrAEgAWINAAkQawBIgFgDQALEGgASINYAkACxBoAEiDUAJECsASABYg0ACXBtELTlgw8+aHl23rx5\nNa5E2nfffVueffTRR4v2feKJJxbNT58+veXZO+64o2jf06aV/Wdbeu2RZcuWtTx79tlnF+277n8H\nehln1gCQALEGgASINQAkQKwBIAFiDQAJEGsASIBYA0ACxBoAEiDWAJAAsQaABIg1ACTAtUGwh6+/\n/rpo/tRTT215tr+/v2jfpdfAePrpp1uePf3004v2XaeSa5pI0sKFC4vmS68N8s0337Q822w2i/bN\ntUHGjjNrAEhg1FjbfsD2dtvrhmybbvs52+9Vvx9S7zIBYHJr5cz6j5IW/GjbdZJeiIgjJb1QfQ0A\nqMmosY6I1ZJ2/GjzOZIerG4/KOncDq8LADDEWF+znhERW6vbn0ia0aH1AACG0fYPGCMiJMVI99te\nYrtpu1n6bgAAwKCxxnqb7ZmSVP2+faTBiFgeEY2IaPT19Y3x4QBgchtrrJ+UdGF1+0JJT3RmOQCA\n4bTy1r1HJL0s6Sjbm23/RtJtkn5l+z1J/1Z9DQCoyagfEYuIRSPc9csOrwUAMAI+bo49XHzxxUXz\nH330UU0rkW6++eai+Yn0EfI6ffzxx91ewvdmzZrV7SVMGnzcHAASINYAkACxBoAEiDUAJECsASAB\nYg0ACRBrAEiAWANAAsQaABIg1gCQALEGgAS4NkiP+/zzz4vmn3rqqZpWIh111FFF89dcc01NK5EG\n/86M+thueXbnzp1F+77hhhtKl1PkgAMOaHn2tNNOq3ElGIozawBIgFgDQALEGgASINYAkACxBoAE\niDUAJECsASABYg0ACRBrAEiAWANAAsQaABLg2iA9bsWKFUXzu3btqmkl0ssvv1w0P2VKfecSDz/8\ncNH86tWri+Zvuummlmdvvvnmon1v3LixaL7URRdd1PLswQcfXN9CsAfOrAEgAWINAAkQawBIgFgD\nQALEGgASINYAkACxBoAEiDUAJECsASABYg0ACfBx8x63atWqWvd/xhlntDx70EEH1biSMmeddVbR\n/CWXXFI0f//99xfN12nq1KlF8xdffHFNK0E7OLMGgASINQAkQKwBIAFiDQAJEGsASIBYA0ACxBoA\nEiDWAJAAsQaABIg1ACRArAEgAa4N0uM2b95c6/77+vpanrVd40rKTJ8+vWj+oYceKppftGhR0Xyd\nrrrqqqL5uXPn1rQStIMzawBIYNRY237A9nbb64ZsW2p7i+03ql9n1rtMAJjcWjmz/qOkBcNs/0NE\nzK1+PdPZZQEAhho11hGxWtKOcVgLAGAE7bxmfbntt6qXSQ7p2IoAAD8x1ljfLelwSXMlbZW0bKRB\n20tsN203+/v7x/hwADC5jSnWEbEtInZHxICkeyXN28vs8ohoRESj5G1eAIAfjCnWtmcO+fI8SetG\nmgUAtG/UD8XYfkTSfEmH2t4s6UZJ823PlRSSNkm6tMY1AsCkN2qsI2K4j2JNnL+6GQAmAT7BCAAJ\ncG0QtGXt2rUtzw4MDBTte8qUsnOJL7/8suXZZrNZtO8nnniiaL5O++yzT9H8tddeW9NKMJ44swaA\nBIg1ACRArAEgAWINAAkQawBIgFgDQALEGgASINYAkACxBoAEiDUAJECsASABrg3S4y677LKi+Vdf\nfbVofsOGDS3PHnHEEUX7vuCCC4rm77rrrpZnd+zI+9eKXn311UXz06dPr2klGE+cWQNAAsQaABIg\n1gCQALEGgASINQAkQKwBIAFiDQAJEGsASIBYA0ACxBoAEnBEjNuDNRqNaDab4/Z4kAYGBormFyxY\nUDT//PPPF83jp04++eSi+RdffLFofto0rioxkTUaDTWbTY82x5k1ACRArAEgAWINAAkQawBIgFgD\nQALEGgASINYAkACxBoAEiDUAJECsASABYg0ACXDRgB43ZUrZ/49XrlxZNL9mzZqWZ1esWFG07927\ndxfNn3DCCS3PXnHFFUX7/uyzz4rmS/65L126tGjfXOtjcuLMGgASINYAkACxBoAEiDUAJECsASAB\nYg0ACRBrAEiAWANAAsQaABIg1gCQALEGgAS4yAD2YLtovtFo1DI7Fjt27Gh5tvRaH6UWLlzY8uzp\n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\n7tW/Bj6tAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "class LogicalFeatureMaker(FeatureMaker): \n", " def __init__(self, masks, thresholds=[]):\n", " self.masks = masks\n", " self.p = len(masks)\n", " self.thresholds = thresholds\n", "\n", " def computeFeatures(self, image):\n", " return([self.isWritten(image, self.masks[k], self.thresholds[k]) for k in range(self.p)])\n", " \n", " def isWritten(self, image, mask, threshold): \n", " return(sum(image*mask) > threshold)\n", "\n", " def computeThresholds(self, dataSet):\n", " self.trainingSet = dataSet\n", " self.thresholds = [self.computeThreshold(mask) for mask in masks]\n", " \n", " def computeThreshold(self, mask):\n", " alpha = 0.45 # value obtained after some hand tuning...\n", " return(sorted([sum(im*mask) for im in trainingSet.data])[int(alpha*len(trainingSet.data))])\n", "\n", "logicalFeatureMaker = LogicalFeatureMaker(masks, 8000 * np.array([0.5, 0.7, 0.1, 0.2, 0.7, 1.3, 2, 2]))\n", "logicalFeatureMaker.computeThresholds(trainingSet) # overwrite arbitrary features \n", "\n", "plt.imshow(np.reshape(mnist.data[ii], [dimX, dimY], order='C'), cmap=\"Greys\", interpolation=\"none\")\n", "print(\"Features: \")\n", "print(logicalFeatureMaker.computeFeatures(mnist.data[ii]))\n", "\n", "logicalFeatureMaker.computeAllFeatures(trainingSet) # updates trainingSet.X\n", "logicalFeatureMaker.computeAllFeatures(testingSet) # updates testingSet.X" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class HandMadeClassifier(Classifier):\n", " def __init__(self):\n", " self.featureMaker = logicalFeatureMaker\n", " self.p = logicalFeatureMaker.p\n", " \n", " def fit(self, X, y): # no data fitting!\n", " pass\n", " \n", " def predict(self, X):\n", " return([self.predictOne(x) for x in X])\n", "\n", " def predictOne(self, x):\n", " if x[outside] and not x[center]:\n", " return(0)\n", " elif not x[left] and not x[right] and x[center] and not x[outside]:\n", " return(1)\n", " elif x[top] and x[diag2] and x[bottom] and not x[center]:\n", " return(2)\n", " elif x[top] and x[bottom] and x[center] and x[right]:\n", " return(3)\n", " elif x[diag2] and x[bottom] and not x[top] and not x[outside]:\n", " return(4)\n", " elif x[top] and x[bottom] and x[diag1] and not x[diag2]:\n", " return(5)\n", " elif x[top] and x[center] and x[bottom] and x[diag1] and not x[right]:\n", " return(6)\n", " elif x[top] and x[diag2] and not x[bottom] and not x[left]:\n", " return(7)\n", " elif x[top] and x[center] and x[bottom] and x[left]:\n", " return(8)\n", " elif x[top] and x[center] and x[bottom] and x[right] and not x[left]:\n", " return(9)\n", " else:\n", " # return(10) # 10 means: I don't know\n", " return(random.randint(0, 10)) # random guessing" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "training error: 0.8057\n", "testing error: 0.804783\n" ] } ], "source": [ "handMadeClassifier = HandMadeClassifier()\n", "\n", "trainingError = evaluate(handMadeClassifier, trainingSet.X, trainingSet.target)\n", "print(\"training error: %g\" % (trainingError))\n", "\n", "testingError = evaluate(handMadeClassifier, testingSet.X, testingSet.target)\n", "print(\"testing error: %g\" % (testingError))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "* -> Training and testing error are slightly better than random classification (90%), but not by far! They are really not satisfactory. It would require a huge effort to obtain decent performance. \n", "\n", "* One can observe here, as expected, that training and testing errors coincide statistically.\n", "\n", "### 3.2 Questions\n", "* Try improving the decision rule coded in the function HandMadeClassifier.predictOne\n", "* Try adding new, relevant features. What is the best score you can reach?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nearest-neighbor classifier\n", "Distance-based methods consider some notion of *distance* in the feature space, and assume that if to feature vectors are close, then the corresponding targets are likely to be equal.\n", "\n", "### 7.1 What distance?\n", "The first problem, of course, is to provide the feature space with a relevant distance. There are a few default choices, and in particular the Euclidian distance (o $L^2$ distance) in $\\mathbb{R}^p$ :\n", "$$d(x,y) = \\sqrt{\\sum_{i=1}^p (x_i-y_i)^2}$$\n", "\n", "Is this distance really relevant on images? \n", "A better alternative would be the *earthmoving distance*, but it is much more costly in computation time and we will see that the $L^2$ distance already performs well.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you code it by yourself, the result will be good butthe computation time ridiculously high...\n", "\n", "The classifiers of scikitlearn are usually well coded, and much more efficient than a few \"quick and dirty\" lines.\n", "\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Proportion of misclassified images in testing set: 0.024\n", "elapsed: 73.2381 seconds\n" ] } ], "source": [ "import time\n", "\n", "n_train = 10000\n", "I = random.choice(range(n_tot), n_train, replace=False)\n", "trainingSet = DataSet(mnist.data[I, :], mnist.target[I]) \n", "\n", "# testing set: we may not use them, except at the end to assert the quality of the classifier\n", "mask = np.ones(n_tot, dtype=bool) #np.ones_like(a,dtype=bool)\n", "mask[I] = False\n", "testingSet = DataSet(mnist.data[mask, :], mnist.target[mask])\n", "\n", "from sklearn.neighbors import KNeighborsClassifier\n", "k = 1\n", "nearestNeighborsClassifier2 = KNeighborsClassifier(n_neighbors=k) # L2 distance is the default\n", "nearestNeighborsClassifier2.fit(trainingSet.X, trainingSet.target)\n", "\n", "J = random.choice(range(len(testingSet.target)), 1000, replace=False)\n", "\n", "start_time = time.time()\n", "print(\"Proportion of misclassified images in testing set: %g\" %(evaluate(nearestNeighborsClassifier2, testingSet.X[J, :], testingSet.target[J])))\n", "print(\"elapsed: %g seconds\"%(time.time()-start_time))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### 7.2 k-nearest neighbors\n", "The idea of the k-nearest neighbors classifier is very simple: \n", "* choose an integer $k$;\n", "* if you want to guess which target corresponds to some $x$ in the feature space, then simply\n", " - look at the $k$ points of the training set whose feature vectors are closest to $x$, \n", " - and take the most common label among the targets of these points \n", "\n", "Nearest neighbor classification with 1, 3 or 5 neighbors seems to reach around 3% errors, but still quite slow! (for example more than 6 minutes for a 10000 images testing set).\n", "Note that the fitting seems to get faster when more and more points are given (check!)\n", "\n", "### 7.3 Exercices:\n", "* Try another number of neighbors. Find the best such number\n", "* How does the performance improve with the size of the training set?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.4 Can we do better? \n", "The most obvious possibility is to improve the measure of distance between images: after all, a small translation can lead to large L2 distance but should be considered as harmless in terms of classification.\n", "\n", "The best possible distance would be an editing distance with no cost on translation nor small rotations. \n", "A popular choice recently is the *earthmoving distance*, which measures how much \"black\" much be move to go from one image to the other." ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 2 }