{ "metadata": { "name": "", "signature": "sha256:c4c9d1f239f6cf97fbdb6088a489720c3295a21e4f519cfd84f8346ca3b4bbae" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "IFT3395/6390 Devoir 1" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Q.1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La distribution de bernouilli est d\u00e9finie par \n", "$$P(x) = p^x(1-p)^{1-x}$$\n", "o\u00f9 $x \\in \\{0, 1\\}$ et $p \\in (0, 1)$.\n", "\n", "La log vraisemblance se calcul selon\n", "\n", "$$\\begin{array}[b]{l}\n", " E &= \\log \\prod_n P(x_n) \\\\\n", " &= \\sum_n \\log P(x_n) \\\\\n", " &= \\sum_n \\log\\left(p^x_n(1-p)^{1-x_n}\\right) \\\\\n", " &= \\sum_n \\log p^x_n + \\log (1-p)^{1-x_n} \\\\\n", " &= \\sum_n x_n\\log p + (1-x_n)\\log (1-p) \\\\\n", "\\end{array}$$\n", "\n", "\n", "\n", "On peut donc calculer la d\u00e9riv\u00e9 de $E$ par rapport \u00e0 $p$.\n", "\n", "\n", "$$\\begin{array}[b]{l}\n", " \\frac{\\partial E}{\\partial p} &= \\sum_n \\frac{\\partial}{\\partial p} &x_n\\log p &+ \n", " \\frac{\\partial}{\\partial p} &(1-x_n)\\log (1-p) \\\\\n", " &= \\sum_n &\\frac{x_n}{p} &+ &\\frac{1-x_n}{1-p}(-1) \\\\\n", "\\end{array}$$\n", "\n", "En simplifiant\n", "\n", "$$\\begin{array}[b]{l}\n", " \\frac{\\partial E}{\\partial p} &= \\sum_n \\frac{(1-p)x_n - p(1-x_n)}{p(1-p)}\\\\\n", " &= \\sum_n \\frac{x_n - px_n - p + x_n}{p(1-p)}\\\\\n", " &= \\sum_n \\frac{x_n - p}{p(1-p)}\\\\\n", "\\end{array}$$\n", "\n", "On fixe \u00e0 0\n", "\n", "$$\\frac{\\partial E}{\\partial p} = \\sum_n \\frac{x_n - p}{p(1-p)} = 0$$\n", "\n", "On annule le d\u00e9nominateur\n", "\n", "$$\\sum_n x_n - p = 0$$\n", "\n", "Et on retire $p$ de la somme\n", "\n", "$$\\sum_n x_n - \\sum_n p = \\sum_n x_n - np = 0$$\n", "\n", "Et voil\u00e0\n", "\n", "$$p = \\frac{1}{n}\\sum_n x_n$$" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Q.2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. On entra\u00eene une gaussienne diff\u00e9rente avec une variance diagonale sur les donn\u00e9es de chaque classes\n", "2. On calcule les probabilit\u00e9s \u00e0 priori de chaque classe. (l'ordre de 1. et 2. n'importe pas)\n", "2. On calcule la probabilit\u00e9 p(x|C_k) d'un exemple pour chaque gaussienne et la pr\u00e9diction du mod\u00e8le est k tel que p(x|c_k) est maximal\n", "\n", "Pour chaque gaussienne, on a $d$ param\u00e8tres pour la moyenne et $d$ param\u00e8tres pour la variance puisqu'il s'agit d'une gausienne diagonale (classifieur na\u00eff). Soit $c$ le nombre de classes, on a donc $2cd$ param\u00e8tres. On peut compter aussi les probabilit\u00e9 \u00e0 priori, ce qui m\u00e8ne \u00e0 $2cd + c$ param\u00e8tres.\n", "\n", "Estimations du maximum de vraisemblance:\n", "\n", "$$\\vec{\\mu} = \\frac{1}{n}\\sum_{i=1}^n X_i$$\n", "$$diag(\\Sigma) = \\frac{1}{n}\\sum_{i=1}^n (X_i-\\vec{\\mu})^2$$" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Q.3" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "import numpy as np\n", "\n", "train_x = np.loadtxt(\"train_images.txt\", delimiter=\",\")\n", "train_y = np.loadtxt(\"train_labels.txt\", delimiter=\",\")\n", "test_x = np.loadtxt(\"test_images.txt\", delimiter=\",\")\n", "test_y = np.loadtxt(\"test_labels.txt\", delimiter=\",\")\n", "\n", "X = train_x\n", "\n", "l=0.1\n", "\n", "def train(X, T, l):\n", " W = np.dot(np.dot(np.linalg.inv(np.dot(X.T, X) + l*np.identity(784)),X.T),T)\n", " return W\n", "\n", "def test(W, X, T):\n", " predictions = np.dot(X, W).argmax(1)\n", " truth_value = T.argmax(1)\n", " return (predictions != truth_value).mean() * 100.\n", " \n", "lambdas = np.logspace(np.log10(10e-5), np.log10(10e5), 20.)\n", "train_error_rates = []\n", "test_error_rates = []\n", "\n", "for l in lambdas:\n", " print l,\n", " W = train(train_x, train_y, l)\n", " train_error_rates.append(test(W, train_x, train_y))\n", " test_error_rates.append(test(W, test_x, test_y))\n", " print train_error_rates[-1],\n", " print test_error_rates[-1]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n", "0.0001" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 0.3 33.5\n", "0.000335981828628 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.3 33.6\n", "0.00112883789168 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.3 33.6\n", "0.00379269019073 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.3 33.2\n", "0.012742749857 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.3 33.4\n", "0.0428133239872 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.3 32.6\n", "0.143844988829 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.3 31.4\n", "0.483293023857 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.6 29.1\n", "1.62377673919 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.7 26.5\n", "5.45559478117 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "1.4 21.1\n", "18.3298071083 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2.9 17.9\n", "61.5848211066 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "5.5 16.8\n", "206.913808111 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "10.4 16.2\n", "695.192796178 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "14.8 17.7\n", "2335.72146909 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "17.9 20.7\n", "7847.59970351 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "22.1 26.2\n", "26366.5089873 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "23.9 27.6\n", "88586.679041 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "25.5 29.1\n", "297635.144163 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "26.7 30.3\n", "1000000.0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "27.2 30.6\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = plt.subplots()\n", "\n", "line1, = ax.plot(lambdas, train_error_rates, linewidth=2)\n", "line2, = ax.plot(lambdas, test_error_rates, linewidth=2)\n", "\n", "ax.set_xscale(\"log\")\n", "ax.set_xticks(np.logspace(np.log10(min(lambdas)), np.log10(max(lambdas)), 6.))\n", "\n", "ax.set_xlabel(\"lambda\")\n", "\n", "ax.set_yticks(np.linspace(0, 40, 5))\n", "ax.set_yticklabels([\"%d%%\" % i for i in np.linspace(0, 40, 5)])\n", "\n", "ax.set_ylabel(\"Taux d'erreur\")\n", "\n", "ax.set_title(\"Courbe d'apprentissage\")\n", "\n", "legend = ax.legend([line1, line2], [u\"Ensemble d'entra\u00eenement\", \"Ensemble de test\"],\n", " loc=\"upper center\", ncol=2, bbox_to_anchor=(0.5, -0.17))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nMBhB8T9qOl3IRD1TmQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Q.4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "import numpy as np\n", "\n", "images_train = numpy.loadtxt(\"./train_images.txt\", delimiter=\",\")\n", "labels_train = numpy.loadtxt(\"./train_labels.txt\", delimiter=\",\")\n", "images_test = numpy.loadtxt(\"./test_images.txt\", delimiter=\",\")\n", "labels_test = numpy.loadtxt(\"./test_labels.txt\", delimiter=\",\")\n", "\n", "numcases_train, numclasses = labels_train.shape\n", "numcases_test, numdims = images_test.shape\n", "\n", "#NAIVE BAYES:\n", "classconditionals = numpy.zeros((numclasses, numdims))\n", "classpriors = labels_train.sum(0) / float(numcases_train)\n", "for k in range(numclasses):\n", " classconditionals[k, :] = (images_train[labels_train[:,k]==1, :].sum(0) + 1.0 + 0.0) / ((labels_train[:,k]==1).sum()+2.0)\n", "\n", "#visualize class prior probabilities:\n", "ax = pylab.subplot2grid((2, numclasses), (0,0), colspan=numclasses)\n", "bars = ax.bar(range(numclasses), classpriors)\n", "pylab.xlabel(\"class\")\n", "pylab.ylabel(\"prior probability\")\n", "\n", "\n", "#visualize class-conditional probabilities:\n", "for k in range(numclasses):\n", " ax = pylab.subplot2grid((2, numclasses), (1, k))\n", " ax.imshow(classconditionals[k, :].reshape(28, 28), interpolation='nearest')\n", " pylab.gray()\n", " pylab.axis(\"off\")\n", "\n", "pylab.show()\n", "\n", "\n", "#do classification: \n", "scores_train = numpy.zeros((numcases_train, numclasses))\n", "scores_test = numpy.zeros((images_test.shape[0], numclasses))\n", "for k in range(numclasses):\n", " scores_train[:, k] = (images_train*numpy.log(classconditionals[k, :]) + (1-images_train) * numpy.log(1-classconditionals[k, :])).sum(1)+numpy.log(classpriors[k])\n", " scores_test[:, k] = (images_test*numpy.log(classconditionals[k, :]) + (1-images_test) * numpy.log(1-classconditionals[k, :])).sum(1)+numpy.log(classpriors[k])\n", "\n", "print \"NAIVE BAYES: \"\n", "print \"error rate train: \", 1.0 - (numpy.argmax(scores_train, 1) == numpy.argmax(labels_train, 1)).sum() / numpy.float(numcases_train)\n", "print \"error rate test: \", 1.0 - (numpy.argmax(scores_test, 1) == numpy.argmax(labels_test, 1)).sum() / numpy.float(numcases_test)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nS9XYIgAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "NAIVE BAYES: \n", "error rate train: 0.149\n", "error rate test: 0.198\n" ] } ], "prompt_number": 158 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Q.5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\begin{array}[b]{l}\n", " \\frac{\\partial}{\\partial y_k} \\log p(t_n | x_n) \n", " &= \\frac{\\partial}{\\partial y_k}\\log\\frac{\\exp(y_k(x_n))}{\\sum_j\\exp(y_j(x_n))} \\\\\n", " &= \\frac{\\partial}{\\partial y_k} \\left(\\log \\exp(y_k(x_n)) - \\log \\sum_j\\exp(y_j(x_n))\\right) \\\\\n", " &= \\frac{\\partial}{\\partial y_k} \\left(y_k(x_n) - \\log \\sum_j\\exp(y_j(x_n))\\right) \\\\\n", " &= \\left(1 - \\frac{1}{\\sum_j\\exp(y_j(x_n))}\\exp(y_k(x_n)) \\right) \\\\\n", " &= \\left(1 - p(C_k | x)) \\right) \\\\\n", "\\end{array}$$" ] } ], "metadata": {} } ] }