{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "PCA, Nearest-Neighbors Classification and Clustering\n", "====================================================\n", "\n", "*Important:* Please read the [installation page](http://gpeyre.github.io/numerical-tours/installation_matlab/) for details about how to install the toolboxes.\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n", "$\\newcommand{\\eqdef}{\\equiv}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tour details [Principal Component Analysis](https://en.wikipedia.org/wiki/Principal_component_analysis) (dimentionality reduction), supervised classification using nearest neighbors\n", "and unsupervised [clustering](https://en.wikipedia.org/wiki/Unsupervised_learning) using [$k$-means](https://en.wikipedia.org/wiki/K-means_clustering).\n", "\n", "\n", "We recommend that after doing this Numerical Tours, you apply it to your\n", "own data, for instance using a dataset from [LibSVM](https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/).\n", "\n", "\n", "_Disclaimer:_ these machine learning tours are intended to be\n", "overly-simplistic implementations and applications of baseline machine learning methods.\n", "For more advanced uses and implementations, we recommend\n", "to use a state-of-the-art library, the most well known being\n", "[Scikit-Learn](http://scikit-learn.org/)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "using PyPlot\n", "using NtToolBox" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dataset Loading\n", "---------------\n", "We use here the famous\n", "[IRIS dataset](https://en.wikipedia.org/wiki/Iris_flower_data_set) of Fisher.\n", "The data set consists of 50 samples from each of three species of Iris (Iris setosa, Iris virginica and Iris versicolor).\n", " Four features were measured from each sample: the length and the width of the sepals and petals, in centimetres." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load the dataset." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "A = readdlm(\"iris_dataset.csv\", ',');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Randomly permute it." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "A = A[randperm(size(A,1)),:];" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Separate the features $ (x_i)_{i=1}^n $from the class information.\n", "The feature are stored as the row of a matrix $X \\in \\RR^{n \\times p}$\n", "Be sure to start the class at index 1." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "X = A[:,1:end-1]\n", "y = Int.(A[:,end])\n", "y = y-minimum(y)+1;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$n$ is the number of samples, $p$ is the dimensionality of the features,\n", "$k$ is the number of classes." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "n,p = size(X)\n", "k = maximum(y);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dimensionality Reduction and PCA\n", "-------------------------------\n", "In order to display in 2-D or 3-D the data, [dimensionality reduction](https://en.wikipedia.org/wiki/Dimensionality_reduction)\n", "is needed.\n", "The simplest method is the [Principal Component Analysis](https://en.wikipedia.org/wiki/Principal_component_analysis) (PCA),\n", "which perform an\n", "orthogonal linear projection on the principal axsis (eigenvector) of the\n", "covariance matrix.\n", "\n", "\n", "Compute [empirical mean](https://en.wikipedia.org/wiki/Sample_mean_and_covariance)\n", "$$ m = \\frac{1}{n} \\sum_{i=1}^n x_i \\in \\RR^p $$\n", "and [covariance](https://en.wikipedia.org/wiki/Sample_mean_and_covariance)\n", "$$ C = \\frac{1}{n} \\sum_{i=1}^n (x_i-m) (x_i-m)^\\top \\in \\RR^{p \\times p}. $$\n", "Denoting $\\tilde X = X - 1_p m^\\top $, one has $C=\\tilde X^\\top\n", "\\tilde X$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "Xm = X -> X-repeat(mean(X,1), outer=(size(X,1), 1))\n", "Cov = X -> Xm(X)'*Xm(X);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the covariance matrix." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "imshow(Cov(X), extent=[0, 1, 0, 1], cmap = get_cmap(\"jet\"));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute PCA ortho-basis using the\n", "[SVD decomposition](https://en.wikipedia.org/wiki/Singular_value_decomposition)\n", "$$ \\tilde X = U \\text{diag}(d) V $$\n", "where $U \\in \\RR^{n \\times p}$ and $V \\in \\RR^{p \\times p}$ have\n", "orthonormal columns. $V$ are the principal directions of variance\n", " and\n", "are order by decreasing variances." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "U,D,V = svd(Xm(X),thin=true);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the feature in the PCA basis, $z_i=V^\\top (x_i-m) $, stored in matrix\n", "format as $Z=\\tilde X V$." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "Z = Xm(X) * V;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the singular values of the covariances, which corresponds to the standard deviation of the data\n", "along the principal directions." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "length(D)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure(figsize = (5,3))\n", "plot(D, \".-\", linewidth= 2, markersize= 20); " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first dimensions of the $z_i$ are the optimal way to linearly\n", "embed the data in a low dimensional space.\n", "This can be used for display in 2-D using the first two dimension." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure(figsize=(7,3))\n", "col = [ [1 0 0]; [0 1 0]; [0 0 1]; [0 0 0]; [0 1 1]; [1 0 1]; [1 1 0]; \n", " [1 .5 .5]; [.5 1 .5]; [.5 .5 1] ]';\n", "ms = 25;\n", "lgd = [];\n", "for i=1:min(k,size(col,2))\n", " I = find(y.==i)\n", " plot(Z[I,1], Z[I,2], \".\", markersize= ms, c=col[:,Int(i)], markersize=ms, label=i);\n", " append!(lgd,i);\n", "end\n", "axis(\"tight\"); axis(\"equal\"); box(\"on\");\n", "legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similar display in 3-D." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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+eSTmDt3rtThEGIzoiji559/NqoaFBUVwdPTE+Hh4YbEIDIyEt26daOlOOKUKFkgTiM7OxvTpk3DsWPH0KtXL6nDIcQkq1atwtSpUxEUFARRFNHU1ITi4mKjqkF1dTUGDRpkWE6IiopCUFAQtTsnLoOSBdKiK1euICUlBd988w1YlsXUqVPx97//HZ07d77raxITE7F582ajx8aOHYs9e/aYfN8JEyagb9++1DKWuARRFDF79mwcPnwYcXFxKCgoQHFxMTp37mzUCTEiIgJdunShqgFxWZQskBaNGzcOFy9exIcffojm5mYkJSUhPDwcn3322V1fk5iYiNraWmRkZBge69ChA+655x6T71tWVoZhw4bh4MGDCAoKsup7IMSWRFFEY2MjioqKjJYUampqwHEcoqOjkZiYiJiYGKhUKhrJ7CTWrFmDhQsXYs6cOXj33XelDsdlUbJA7nDy5EkMGjQI+fn5ht4He/bswaOPPoqqqir06dOnxdclJiairq4OX331lVX3V6vVOH36NLZv327VdQixhiAIOH/+vNHRxePHj6Nbt25GVYPw8HDs378fTz/9NE6ePAlfX1+pQye/y8/PxxNPPIEuXbogNjaWkgUrUOpL7nD48GF069bNqElSXFwcWJbFkSNHWn1tbm4uvL29ERgYiOTkZPz6669m33/FihU4fPgwcnJyzH4tIZYQRRE3btzADz/8gPXr1+PJJ5+Ev78/QkJCkJaWBgB46aWXcOLECdTU1OCbb77B4sWL8fDDD8PLywvx8fEYM2YM5s+fL/F3QvTq6+sxffp0fPTRR2ZVN0nLZFIHQJxPTU0NvL29jR6TyWTo3r07ampq7vq6Rx55BFOmTMF9992H06dPY9GiRRg3bhwOHz5s1kaunj17YsmSJVi0aBEOHTpEm8CIzQmCgDNnzhhVDUpKStCjRw/D6YQFCxZg+PDh6NSpk0l7Df7+97+jtrbWAdETU8yePRvjx49HXFwcXn/9danDcXmULLQjqampWLt2bavPOXnypMXXT0hIMPz/DzzwAIYMGYKBAwciNzcXo0aNMutaKSkpSE9Px6efforExESLYyJEFEXU19ejsLAQR44cMbRLrqurQ0hICCIiIvDyyy8jOjoa/fv3t3ivga+vLy1BOIl//etfKCwsRH5+vtShuA1KFtqRBQsWtPmLd8CAAfD19cWlS5eMHtdqtbhy5YpZb4YDBgxAz549UVFRYXay0KFDB7z55puYPXs2pk6dCi8vL7NeT9oHjUaDDRs2IDk5GR07dgSgqxqcOnXKqGpw4sQJ9O7dGxERERgxYgRSU1MRFhYGT09POqHgZiorKzFnzhxkZWVBoVBIHY7boA2O5A76DY4FBQUICwsDAHz33Xd45JFHWt3geLuqqir069cPX331FR577DGz4xBFEQ899BBiYmKwfPlys19P3B/P8xg5ciT8/f0REBBgSA5u3ryJYcOGGY1k7tevHyUG7cBXX32FyZMnGy1f8jwPhmHAsiyamppoadMClCyQFo0bNw61tbX44IMPDEcnhw8fbnR0MigoCKtXr8bkyZNRX1+PlStXYurUqfD19cXp06fxyiuv4Pr16/jxxx8tbuGcn5+PkSNHoqioCH5+frb69oiL4nke5eXlyM/PNxxdLC0tBQCMHj0aY8aMQVRUFEJDQ6FQKCg5kEh6ejrS09Nx7tw5AMD999+PZcuWYdy4cXa/9/Xr13H+/Hmjx5KSkhAUFIRXX30VgwcPtnsM7oiSBdKiK1euQK1WGzVleu+994yaMjEMg4yMDCQmJqKhoQGTJk1CUVER6urq0KdPH4wZMwavvfYafHx8rIrl6aefBs/z+Pjjj639togLEUURdXV1KCgoMNpr0NTUhNDQUKNuiG+//TaKiorw/fffU4LgBL755htwHAeVSgVRFLF582asW7cORUVFuP/++x0ez8iRIxESEkJHJ61AyQJxehUVFRg8eDCef/551NTUQKVSYcmSJVKHRWyM53mUlZXhyJEjhuWE8vJy3HvvvYa+BlFRURg2bBjkcrlRUnD9+nUEBwfjjTfewIwZMyT8LsjddO/eHevWrcOzzz7r8HtTsmA9ShaIU9q5cye+//57/Pe//0VRURFkMhk6dOiAlJQUPPzwwwgPD5c6RGIFURRx5coVw3JCfn4+jh49Cq1Wi7CwMKOmR7179zapWvD999+jR48eGDJkiAO+A2Iqnufxn//8BzNnzkRRUREGDRokdUjEApQsEKc0Z84cCIJg+DTp7e2NgIAArF+/HpMmTZI6PGImrVaL0tJSo6pBRUUFBg4ciIiICMPf89ChQyGXy6UOl9jAjz/+iOjoaDQ2NqJz58747LPP8Oijj0odFrEQJQvEZWzcuBGrVq3C0aNHLd4wSWzrt99+w9GjRxEXF2d4TBRFXL582ejo4tGjRwEAYWFhhsQgOjoa3t7etMfATWk0Gly4cAFXr17FF198gY8//hj79++nyoKLomSBuAye5xEaGoqEhATMmTNH6nAIdK3BJ06ciM2bN+P8+fPIz89HXl4ezp49C39/f0NiEBUVhSFDhkAmo9Yu7VVcXBwGDhyIDz/8UOpQiAXoXy5xGRzHYf369Zg2bRqmT5+Onj17Sh1SuyOKImpra42mLjY2NiIhIQEPPfQQoqKi8NRTTyEqKgo9e/akqoFEVq9ejS+//BJlZWXw9PRETEwM1q5di8DAQMliEgQBTU1Nkt2fWIcqC8TlTJgwAX5+fli/fr3Uobg1URTR3NyM48ePGx1dPH/+PAIDAxEVFYXIyEgEBgZi8uTJ2LZtG8aOHSt12AS6OS0JCQkIDw+HVqvFokWLUFJSgtLSUnTq1Mnu91+4cCHGjRuHfv364fr16/jss8+wdu1a7N27F6NHj7b7/YntUbJAXE5ZWRmGDRuGQ4cOSfpJyd2Iooiff/7ZqGpQVFQEhUKB8PBwwz6DyMhI3HPPPUZVg7S0NLz33ntWNeAi9vPLL7/A29sb+/fvx0MPPWT3+z377LPIycnBxYsX0bVrVwwZMgSvvvoqJQoujJIF4pLUajXOnDmDL774QupQXJIoimhqasKxY8eMqgZVVVUYNGiQ0SbEoKCgNtvj8jyPl19+GYsWLUKvXr0c9F0QU1VUVEClUuHHH3+kDobEIpQsEJd0+fJl+Pv745///CcefvhhqcNxeqIooqqqyujo4rFjx9CpUyfD/ISoqChERESga9eutNfAjQiCgMceewx1dXU4cOCA1OEQF0XJAnFZb731FrZs2YKDBw+228EwZ86cQb9+/YxOGYiiiMbGRhQVFRkdX6ypqcHgwYMNew1iYmIQEBBg8Uhm4hqSk5Px7bff4sCBAzRfhViMkgXispqamjBo0CC8/PLLmDlzptThOJwoioiMjERSUhLGjRtnVDU4fvw4unbtatQJMTw8HF5eXlQ1aEfUajV27tyJH374Affdd5/U4RAXRskCcWlffPEFUlJSUFxcDC8vL6nDsTtRFHHz5k0UFhYiLy8Pu3btQn5+PhiGwdChQw3JQUxMDAYOHEhVg3ZKFEWkpKRgx44dyM3NhUqlkjok4uIoWSAuTRRF/PnPf8aDDz6IZcuWSR2OzQmCgLNnzxo2Iebl5aGkpAQ9evRAZGQkIiMjkZmZicDAQGzcuJGqBk7ihx9+wLp163D06FFcvHgRO3bscGib8lmzZuGzzz7Dzp07jU4Mde3aFZ6eng6Lg7gPShaIy8vLy0NsbCyKiopcek1WFEXU19ejsLDQ6IRCXV3dHVWD/v37G6oGp0+fxgMPPIADBw4gNDRU4u+CAMC3336LgwcPIiwsDFOmTHF4snC3pFE/Up4Qc1GyQGxu1apVyMzMRHFxMeRyOerq6tp8jSiKWL58OT766CPU1dXhT3/6E9LT000un/7lL3+BIAj4+OOPrQ3fYQRBQEVFhVHV4MSJE/D19TVUDaKjozF8+HB4enq2WjVYuXIlevXqhVmzZjnwOyCmYBjG4ckCIbZGyQKxueXLl6Nbt26oqqrCxo0bTUoW1q5di9WrV2Pz5s247777sHTpUvz4448oLS2FQqFo8/UXLlxAUFAQ9u7di7CwMFt8GzYliiKuX7+OgoICo6pBfX09hg0bZji+GBMTg379+tFyghuhZIG4A0oWiN1s2rQJc+fObTNZEEURffr0wYIFC/Dyyy8DAK5evQofHx9s2rQJCQkJJt1v8eLFyM3NxXfffeeQX7aiKEKr1cKwfuUhAAAHfElEQVTDw+OO/43nefz0009GRxdPnjyJvn37GlUNQkNDoVAoKDlwY5QsEHdAg6SI5M6ePYuamhqjMcf6Y3+HDx82OVlITU3Fxo0bsXPnToe8Mb/++uu4evUq1q1bh6tXryI/P99QNdAPWAoNDUVERASWLVuG6Oho+Pn5UWJACHE5lCwQydXU1AAAfHx8jB738fEx/G+m8PLywuuvv44lS5Zg3LhxdptRwPM8ysrKwHEc/vd//xd79uzBuXPncO+99yIiIgKPPvooXnvtNYSEhKBDhw6UHBBCXB4dwiYmSU1NBcMwrf4pKyuTOkwkJSWhc+fO+OCDD2xyPVEU8euvv2LPnj1YuXIl4uPj4efnh5EjR+KHH37AkCFD0LVrV1RWVuLMmTPYtm0b5s2bh6ioKFpekNj777+P/v37Q6FQIDIyEnl5eVKHRIjLosoCMcmCBQvaPHI1YMAAi67t6+sLAKitrUXv3r0Nj9fW1iIkJMSsa3Ech7fffhvTpk3D9OnT0bNnT7Ner9VqUVpaanRCoaKiAgMGDEBERAQmTZqEtWvXYujQofDw8MBvv/0GlUqFY8eOoW/fvmbdi9jPtm3bMH/+fHzwwQeIjIzEu+++i7Fjx6K8vBze3t52v399fT0qKioMX589exbFxcXo3r07+vXrZ/f7E2JrtMGR2I25GxxffvllLFiwAABw7do1eHt7m7XB8Vbjx49Hv379sH79+lbve/nyZaNNiEePHgUAhIWFGTYhRkVFwcfH565VgrS0NHzxxRfIzc01O05iH5GRkQgPD0daWhoA3TFVpVKJlJQUpKam2v3+ubm5iI2NvePxmTNnYtOmTXa/PyG2RskCsbkLFy7gypUr+Prrr7Fu3Tr83//9HwDA398fnTt3BgAEBQVh9erVmDx5MgDd0ck1a9YYHZ08fvy4yUcnb3fy5EmEhobi0KFDhg52zc3NKCkpMaoanDlzBiqVytDwKCoqCkOGDGnxhMPdaLVaNDQ0tIt2065Ao9GgY8eO+OKLL4w2us6cORN1dXXYuXOnhNER4ppoGYLY3LJly7B582bD18OGDQMAfP/99xg5ciQAoLy8HFevXjU855VXXsGNGzfwwgsvoK6uDg8++CD27NljUaIAAMHBwZg5cyaee+45jBgxAvn5+SgsLATHcRg+fDiioqLw1FNPITIyEr169bJqb4FMJqNEwYlcvnwZPM+3uGHWGfbVEOKKqLJA3NbZs2cxaNAgTJw4ESNHjkR0dDTuv/9+o3HOxP38/PPP6Nu3Lw4dOoTo6GjD46+88gr279+PI0eOSBgdIa6J3jWJ27rvvvtw8+ZNOpHQzvTs2RMcx6G2ttbo8draWsNmWkKIeejoJHFrlCg4j1WrViEmJgYdO3ZEt27d7HYfuVyOsLAw5OTkGB4TBAE5OTlGlQZCiOkoWSCEOIRGo8Hjjz+O5ORku99r/vz5+Oijj7B582acPHkSycnJuHHjBpKSkux+b0LcES1DEEIcYuXKlQDgkKODTz75JH755RcsW7YMNTU1CAkJwZ49e+7Y9EgIMQ0lC4QQt6RWq6FWq6UOgxC3QMsQhBBCCGkVJQuEEIu5yswQQoh1aBmCEGIxe84MIYQ4D0oWCHFz586dw2uvvYZ9+/ahpqYGffr0wV/+8hcsXrwYcrncqmv36tULvXr1slGkhBBnRckCIW6urKwMgiDgww8/hL+/P0pKSvD888/jxo0beOuttxwWh35myIULF8DzPIqLiwEYzwwhhDgnavdMSDu0bt06pKen48yZMw67Z2JiotHMEL1bZ4YQQpwTbXAkpB26evUqunfv7tB7btq0CaIo3vGHEgVCnB8lC4S0MxUVFdiwYQP++te/Sh0KIcRFULJAiIuy5NhidXU1HnnkETz++ON4/vnnJYqcEOJqaM8CIS7ql19+wa+//trqcwYMGGA48fDzzz9j5MiRiIqKwqZNm8Cy9FmBEGIaShYIcYDHHnsMxcXFuHTpEu655x7ExcVh7dq16NOnj0PuX11djdjYWISFheGf//wnOI5zyH0JIe6BkgVCHOCdd95BdHQ0evfujerqarz88ssAgEOHDtn93tXV1Rg5ciTuvfdebN682ShR8PX1tfv9CSGuj5IFQiTw9ddfY9KkSWhqaoKHh4dd77Vp06a7jmamf/6EEFNQskCIg125cgXJycmorq7GgQMHpA6HEELaRDucCHGQV199FZ06dUKPHj1w4cIF7Ny5U+qQCCHEJJQsEGIhc48u/u1vf0NRURG+++47cByHGTNm0DIAIcQl0DIEIRYy9+jiraqqqqBUKnHo0CFER0fbK0RCCLEJGiRFiIWsmbgoCAIAoKmpyZYhEUKIXVBlgRA7O3LkCPLz8/Hggw/innvuwenTp7F06VLU1tbixIkT6NChg9QhEkJIq2jPAiF21rFjR3z55ZcYNWoUAgMD8eyzz2LIkCHYv38/JQqEEJdAlQVCCCGEtIoqC4QQQghpFSULhBBCCGkVJQuEEEIIaRUlC4QQQghpFSULhBBCCGkVJQuEEEIIaRUlC4QQQghp1f8DMr+nqtXMmdMAAAAASUVORK5CYII=", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#figure(figsize=(10,5))\n", "for i=1:k\n", " I = find(y.==i)\n", " plot3D(Z[I,1], Z[I,2], Z[I,3], \".\", c=col[:,Int(i)], markersize=ms, label=Int(i))\n", "end\n", "gca()[:view_init](50, 250)\n", "axis(\"equal\"); axis(\"tight\"); gca()[:grid](false);\n", "legend(loc=\"best\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Supervised Learning: Nearest Neighbor Classification\n", "----------------------------------------------------\n", "Probably the simplest method for supervised classification is [Nearest\n", "Neighbor](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm) ($R$-NN), where $R$ is a parameter indexing the number of neighbor.\n", "Increasing $R$ is important to cope with noise and obtain smoother\n", "decision boundary, and hence better generalization performance.\n", "\n", "\n", "The class predicted for a point $x$ is the one which is the most\n", "represented among the $R$ points $(x_i)_i$ which are the closed to\n", "$x$.\n", "\n", "\n", "\n", "Split into training and testing." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "n0 = Int(round(.5*n)); n1 = n-n0\n", "X0 = X[1:n0,:]; y0 = y[1:n0]\n", "X1 = X[n0+1:end,:]; y1 = y[n0+1:end];" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Macro to compute pairwise squared Euclidean distance matrix." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "distmat = (X,Z) -> broadcast(+,sum(X'.*X',1)',sum(Z'.*Z',1))-2*(X*Z');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute Euclidean distance between some $x$\n", "and all other $x_{1,j}$ in the training set." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "i = 1; x = X1[i,:]'; # could be any point\n", "D = distmat(X0,x);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sort the distance and generate the list of sorted classes $ y_\\sigma = (y_{\\si(i)})_i$. This\n", "generate an indexing $\\si$ (a permutation of $\\{1,\\ldots,n\\}$) such that\n", "$$ \\norm{x-x_{\\si(1)}} \\leq \\norm{x-x_{\\si(2)}} \\leq \\ldots \\leq \\norm{x-x_{\\si(n)}}. $$" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "I = sortperm(D[:])\n", "ys = Int.(y[I]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For a given $R$, one can compute the histogram of class apparition\n", "$$ h_\\ell \\eqdef \\frac{1}{R} \\enscond{ i }{ \\si(i) \\in \\{1,\\ldots,R\\} }\n", " = \\sharp \\si^{-1}( \\{1,\\ldots,R\\} ). $$\n", "The decision class for $x$ is then the maximum of the histogram\n", "$$ c(x) \\eqdef \\text{argmax}_{\\ell} h_\\ell $$" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "custom_hist (generic function with 1 method)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function custom_hist(h)\n", " return [sum(h .== i) for i in 1:k]\n", "end" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c(x)=2 [true class=2]\n" ] } ], "source": [ "R = 5\n", "h = custom_hist(ys[1:R,:])\n", "h = h / R\n", "c = indmax(h);\n", "print(\"c(x)=\",c,\" [true class=\",Int(y1[i]), \"]\\n\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the histigram $(h_\\ell)_\\ell$ of reparttion of class indexes as $R$ grows." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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cd11E/K2EMaAPZ787PHkZ4+/GOzz5GePJ7/x2OO8v8cCAADg743tHRsAAMAXkmABAACkJlgAAACpCRYAAEBqEyZYtLW1xdy5c2PKlCmxdOnSOHjw4IhzOzo6oqSk5JKjp6fnGlZMPt5444245557YtasWVFSUhI7d+684pqOjo5YtGhRZDKZmD9/fmzdunX8C2XU8t1jfVxcWltb44477ogbbrghZs6cGffee28cO3bsiuv0cXEZzT7r5eLyi1/8Im6//fbcl981NDTEb37zm8uu0cfFJd89HssenhDBYtu2bdHS0hIbN26Mzs7OqK+vj6ampjhz5sxl1x07diy6u7tzx8yZM69RxeSrv78/6uvro62t7armnzx5MlasWBHLly+Prq6uaG5ujtWrV8eePXvGuVJGK989/pw+Lg779++PtWvXxttvvx179+6Nv/71r/Gtb30r+vv7R1yjj4vPaPb5c3q5OMyePTuefvrpOHToULzzzjvxjW98I7797W/He++9N+x8fVx88t3jz41JDycTwJIlS5K1a9fmHl+8eDGZNWtW0traOuz8119/PYmI5E9/+tO1KpExFBHJjh07Ljtn3bp1ya233jpk7L777kuamprGszTGyNXssT4ubmfOnEkiItm/f/+Ic/Rx8buafdbLxe+mm25KtmzZMuzP9PHkcLk9HsseLvg7FhcuXIhDhw5FY2Njbqy0tDQaGxvjwIEDl127YMGCqKmpibvvvjveeuut8S6Va+jAgQNDXhMREU1NTVd8TVB89HFx6uvri4iI6dOnjzhHHxe/q9nnz+nl4nPx4sV4+eWXo7+/PxoaGoado4+L29Xs8efGoocLHizOnj0bFy9ejKqqqiHjVVVVI362q6amJjZv3hzbt2+P7du3R21tbSxbtiw6OzuvRclcAz09PcO+JrLZbJw/f75AVTGW9HHxGhwcjObm5rjrrrvitttuG3GePi5uV7vPern4vPvuu3H99ddHJpOJNWvWxI4dO+KWW24Zdq4+Lk757PFY9nBRfk97XV1d1NXV5R7feeedcfz48di0aVO89NJLBawMuFr6uHitXbs2jhw5Em+++WahS2EcXe0+6+XiU1dXF11dXdHX1xe/+tWvYuXKlbF///4Rf/Gk+OSzx2PZwwV/x2LGjBlRVlYWvb29Q8Z7e3ujurr6qs+zZMmS+OCDD8a6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AKQmWAAAAKkJFgAAQGqCBQAAkJpgAQAApCZYAAAAqQkWAABAaoIFAACQmmABAACkJlgAAACpCRYAAEBqggUAAJCaYAEAAKR2XaELABgrc9fvKnQJUHAfPr2i0CUAX1DesQAAAFITLAAAgNQECwAAIDXBAgAASE2wAAAAUhMsAACA1AQLAAAgNcECAABITbAAAABSEywAAIDUBAsAACA1wQIAAEhtVMGira0t5s6dG1OmTImlS5fGwYMHR5zb0dERJSUllxw9PT2jLhoAAJhY8g4W27Zti5aWlti4cWN0dnZGfX19NDU1xZkzZy677tixY9Hd3Z07Zs6cOeqiAQCAiSXvYPHss8/Ggw8+GKtWrYpbbrklNm/eHNOmTYsXXnjhsutmzpwZ1dXVuaO0dORLDwwMRDabHXIAAAATV17B4sKFC3Ho0KFobGz82wlKS6OxsTEOHDhw2bULFiyImpqauPvuu+Ott9667NzW1taorKzMHbW1tfmUCQAAXGN5BYuzZ8/GxYsXo6qqash4VVXViPdM1NTUxObNm2P79u2xffv2qK2tjWXLlkVnZ+eI19mwYUP09fXljtOnT+dTJgAAcI1dN94XqKuri7q6utzjO++8M44fPx6bNm2Kl156adg1mUwmMpnMeJcGAACMkbzesZgxY0aUlZVFb2/vkPHe3t6orq6+6vMsWbIkPvjgg3wuDQAATGB5BYvy8vJYvHhxtLe358YGBwejvb09Ghoarvo8XV1dUVNTk8+lAQCACSzvj0K1tLTEypUr42tf+1osWbIknnvuuejv749Vq1ZFxGf3R3z88cfx4osvRkTEc889F/PmzYtbb701/vKXv8SWLVti37598eqrr47tMwEAAAom72Bx3333xR/+8Id44oknoqenJxYsWBC7d+/O3dDd3d0dp06dys2/cOFC/OAHP4iPP/44pk2bFrfffnu89tprsXz58rF7FgAAQEGVJEmSFLqIK8lms1FZWRl9fX1RUVFR6HKACWru+l2FLgEK7sOnVxS6BGCCG6/frfP+gjwAAIC/J1gAAACpCRYAAEBqggUAAJCaYAEAAKQmWAAAAKkJFgAAQGqCBQAAkJpgAQAApCZYAAAAqQkWAABAaoIFAACQmmABAACkJlgAAACpCRYAAEBqggUAAJCaYAEAAKQmWAAAAKkJFgAAQGrXFboAAID/a+76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UFwu10yWRjmSTo+ZY7WNjo4KAAmFQpOuYY7Vl06fmWX1LVu2TG7evJnyGnM8N0zV41xmOO/vWPz+/Ru9vb2ora1NnisqKkJtbS26u7un3Guz2WA0GrF79248f/58pkulWdTd3T3hngAAl8s17T1B6mGO1TQ2NgYAKC0tnXQNc6y+dPo8jllWTzweR0tLC2KxGBwOR8o1zLHa0unxuFxkOO+DxZcvXxCPx1FeXj7hfHl5+aSf7TIajbhx4wZaW1vR2tqKqqoqOJ1O9PX1zUbJNAui0WjKe+Lbt2/4+fNnnqqiXGKO1ZVIJNDQ0IBt27Zh48aNk65jjtWWbp+ZZfX09/dj4cKFMBgMOHbsGAKBANavX59yLXOsJi09zmWG52VbeD5YLBZYLJbk461bt+LDhw9obGzE7du381gZEaWLOVaXx+PB69ev8ezZs3yXQjMo3T4zy+qxWCyIRCIYGxvDvXv34Ha7EQqFJn3hSerR0uNcZjjv71gsX74cxcXFGBkZmXB+ZGQEFRUVaf8du92O9+/f57o8ypOKioqU98TixYsxf/78PFVFM405Lnz19fW4f/8+urq6YDKZplzLHKtLS59TYZYLm16vh9lsRnV1NXw+H6xWK65cuZJyLXOsJi09TiXTDOd9sNDr9aiurkZHR0fyXCKRQEdHx7SfBfu3SCQCo9E4EyVSHjgcjgn3BAC0t7druidIPcxx4RIR1NfXIxAIoLOzE2vWrJl2D3Osnkz6nAqzrJZEIoFfv36lvMYczw1T9TiVjDOc9de/c6ClpUUMBoM0NzfLwMCAHD16VJYuXSrRaFRERLxerxw6dCi5vrGxUdra2uTdu3fS398vJ06ckKKiInny5Em+ngJN4/v37xIOhyUcDgsAuXz5soTDYfn8+bOI/N3jjx8/yoIFC+T06dPy9u1b8fv9UlxcLA8fPszXU6BpaO0xc6yW48ePy5IlSyQYDMrw8HDy+PHjR3INc6y+TPrMLKvF6/VKKBSSoaEhefXqlXi9XtHpdPL48ePkdeZYbVp7nMsMF8RgISLS1NQkK1euFL1eL3a7XXp6epLX3G63bN++Pfn4woULsm7dOikpKZHS0lJxOp3S2dmZh6opXeM/Zfb/h9vtFpG/ezy+x2aziV6vl7Vr18qtW7dmvW5Kn9YeM8dqSdVbABNyyRyrL5M+M8tqOXz4sKxatUr0er2sWLFCdu3alXzBKcIczwVae5zLDOtERLS/z0FERERERPQ/ef+OBRERERERqY+DBRERERERZY2DBRERERERZY2DBRERERERZY2DBRERERERZY2DBRERERERZY2DBRERERERZY2DBRERERERZY2DBRERERERZY2DBRERERERZY2DBRERERERZe0fu4lfWZw0CKgAAAAASUVORK5CYII=", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure(figsize=(8,6))\n", "Rlist = round([.05 .1 .5 1]*n0); # [5 50 100]\n", "clf()\n", "for i=1:length(Rlist)\n", " R = Int(Rlist[i]);\n", " h = custom_hist(ys[1:R,:])\n", " h = h / R;\n", " subplot(length(Rlist),1,i);\n", " bar(1:k,h); \n", " axis([0.5 k+.5 0 1]');\n", "end\n", "tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 1__\n", "\n", "Perform the NN classification for all the points in the test set, and for varying $R$.\n", "Show how the classification score $S$ (number of correctly classified points)\n", "evolves with $R$\n", "lot(1:Rmax, S, '.-', 'MarkerSize', ms);" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAG2CAYAAABrrBJlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XtYVWX+///XBjl5AhMDTQby65FUMExELS35DFlaTDNGHlIxsROemOwTjdnBZphyVKyc0BRR09HMtCaNIjyVkgQe8og6VqKywSMkFiDs3x/+2tP+sDS2ARvw+biudV3ue933vd/LdVmva617r2WyWCwWAQAAwIaTowsAAACoiwhJAAAABghJAAAABghJAAAABghJAAAABghJAAAABghJAAAABghJAAAABghJAAAABghJAAAABhwakrZu3aohQ4aoTZs2MplMWrdu3a+O2bx5s26//Xa5ubmpffv2SklJqdRn9erV6ty5s9zd3dWtWzdt2LChBqoHAAANmUNDUnFxsYKCgjRv3rwq9f/22291//336+6779bu3bs1efJkjRs3Tp9++qm1z/bt2zVs2DA99thj2rVrlyIjIxUZGal9+/bV1GEAAIAGyFRXXnBrMpm0du1aRUZGXrXP//7v/2r9+vU2geeRRx7RhQsXlJqaKkmKiopScXGxPv74Y2uf3r17Kzg4WElJSTV3AAAAoEFp5OgC7JGRkaHw8HCbtoiICE2ePNmmT1xcXKU+17qVV1JSopKSEuvniooKnTt3Ti1btpTJZKqm6gEAQE2yWCz64Ycf1KZNGzk5/fabZfUqJJnNZvn4+Ni0+fj4qKioSD/++KM8PDyu2sdsNl913oSEBL388ss1UjMAAKhdubm5atu27W+ep16FpJoSHx9vc/WpsLBQv/vd75Sbm6vmzZs7sDIAAFBVRUVF8vPzU7NmzaplvnoVknx9fZWfn2/Tlp+fr+bNm8vDw+OafXx9fa86r5ubm9zc3Cq1N2/enJAEAEA9U11LZerVc5LCwsKUnp5u05aWlqawsDC7+gAAAPwah4akixcvavfu3dq9e7ekKz/x3717t44fPy7pym2wUaNGWfs/8cQTOnbsmJ599lkdOnRI//znP/Xee+9pypQp1j6TJk1SamqqZs2apUOHDumll15SVlaWYmNja/fgAABAvebQkJSVlaUePXqoR48ekqS4uDj16NFD06dPlyTl5eVZA5Mk3XrrrVq/fr3S0tIUFBSkWbNmaeHChYqIiLD26dOnj1as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pj/+8Y/Wz0uXLlV5ebmOHDmiPXv2KC4uTjNnzqyRIgEAAGpblUPSyZMn1aFDB+vn9PR0/fGPf5Snp6ckafTo0b/6+g8AAID6osohyd3d3eap2l999ZVCQ0Nt9l+8eLF6qwMAAHCQKoek4OBgLVu2TJL0xRdfKD8/X/fcc491/3/+8x/rs4oAAADquyov3J4+fboGDRqk9957T3l5eRozZozNU6zXrl2rvn371kiRAAAAta3KIal///7Kzs7WZ599Jl9fXw0dOtRmf3BwsHr16lXtBQIAADiCXQ+T7NKli7p06WK4b/z48dVSEAAAQF1g9wtuAQAAbgSEJAAAAAOEJAAAAAOEJAAAAAN2Ldz+paysLB08eFDSlQXdPXv2rLaiAAAAHM3ukHTixAkNGzZM27Ztk5eXlyTpwoUL6tOnj1auXKm2bdtWe5EAAAC1ze7bbePGjVNZWZkOHjyoc+fO6dy5czp48KAqKio0bty4mqgRAACg1tl9JWnLli3avn27OnXqZG3r1KmT3nzzTd15553VWhwAAICj2H0lyc/PT2VlZZXay8vLeXcbAABoMOwOSTNnztSECROUlZVlbcvKytKkSZP0j3/8o1qLAwAAcBS7b7eNGTNGly5dUmhoqBo1ujL88uXLatSokcaOHauxY8da+547d676KgUAAKhFdoekxMTEmqgDAACgTrE7JI0ePbom6gAAAKhTrvthkpL0008/qbS01KatefPmv6kgAACAusDuhdvFxcWKjY3VzTffrCZNmqhFixY2GwAAQENgd0h69tlntXHjRr399ttyc3PTwoUL9fLLL6tNmzZaunRpTdQIAABQ6+y+3fbvf/9bS5cu1YABAxQdHa0777xT7du3l7+/v5YvX64RI0bURJ0AAAC1yu4rSefOnVO7du0kXVl/9PPP/Pv166etW7dWb3UAAAAOYndIateunb799ltJUufOnfXee+9JunKF6ecX3gIAANR3doek6Oho7dmzR5L03HPPad68eXJ3d9eUKVM0derUai8QAADAEexekzRlyhTrn8PDw3Xo0CFlZ2erffv26t69e7UWBwAA4Ch2XUkqKyvTwIEDdeTIEWubv7+/HnroIQISAABoUOwKSS4uLvrmm29qqhYAAIA6w+41SSNHjtSiRYuqrYB58+YpICBA7u7uCg0NVWZm5jX7L1++XEFBQWrc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+HFr/6ZNmyotLU0TJkxQz5491bJlSz388MN69dVXrX3Onz+vmJgYmc1mtWjRQiEhIdq+fbsCAwNr/fgAAED95dCQJEmxsbGKjY013JeSklKprXPnzkpLS7vqfHPmzNGcOXOqqzwAAHCDqle/bgMAAKgthCQAAAADDr/dBgAAbhwBz62/5v7v/n6/Xf1qEleSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADBCSAAAADDg8JM2bN08BAQFyd3dXaGioMjMzr9m/pKREf/nLX+Tv7y83NzcFBAQoOTnZps/q1avVuXNnubu7q1u3btqwYUNNHgIAAGiAHBqSVq1apbi4OL344ovauXOngoKCFBERoYKCgquOefjhh5Wenq5FixYpJydH//rXv9SpUyfr/u3bt2vYsGF67LHHtGvXLkVGRioyMlL79u2rjUMCAAANhEND0uzZsxUTE6Po6GgFBgYqKSlJjRs3rnRl6GepqanasmWLNmzYoPDwcAUEBCgsLEx9+/a19pk7d67uvfdeTZ06VV26dNGMGTN0++2366233qqtwwIAAA2Aw0JSaWmpsrOzFR4e/t9inJwUHh6ujIwMwzEfffSRevbsqddff1233HKLOnbsqGeeeUY//vijtU9GRobNnJIUERFx1TmlK7fwioqKbDYAAHBja+SoLz5z5ozKy8vl4+Nj0+7j46NDhw4Zjjl27Ji+/PJLubu7a+3atTpz5oyeeuopnT17VosXL5Ykmc1mwznNZvNVa0lISNDLL7/8G48IAAA0JA5fuG2PiooKmUwmLV++XL169dJ9992n2bNna8mSJTZXk+wVHx+vwsJC65abm1uNVQMAgPrIYVeSvL295ezsrPz8fJv2/Px8+fr6Go5p3bq1brnlFnl6elrbunTpIovFohMnTqhDhw7y9fW1a05JcnNzk5ub2284GgAA0NA47EqSq6urQkJClJ6ebm2rqKhQenq6wsLCDMf07dtXp06d0sWLF61thw8flpOTk9q2bStJCgsLs5lTktLS0q46JwAAgBGH3m6Li4vTO++8oyVLlujgwYN68sknVVxcrOjoaElXboONGjXK2n/48OFq2bKloqOjdeDAAW3dulVTp07V2LFj5eHhIUmaNGmSUlNTNWvWLB06dEgvvfSSsrKyFBsb65BjBAAA9ZPDbrdJUlRUlE6fPq3p06fLbDYrODhYqamp1oXXeXl5On78uLV/06ZNlZaWpgkTJqhnz55q2bKlHn74Yb366qvWPn369NGKFSs0bdo0Pf/88+rQoYPWrVunrl271vrxAQCA+suhIUmSYmNjr3qVJyUlpVJb586dlZaWds05hw4dqqFDh1ZHeQAA4AZVr37dBgAAUFsISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYaOboAAACA6xXw3HrrnytKLlXr3FxJAgAAMEBIAgAAMEBIAgAAMMCaJAMWi0WS7b3NoqKiSm1GqtqvJua80frVhxrrer/6UGNd71cfaqwv/epDjfW9X32o8bf0+/nPP/9//LcyWaprpgbkxIkT8vPzc3QZAADgOvznP/9Ru3btfvM8hCQDFRUVOnXqlJo1ayaTyeTochq0oqIi+fn5KTc3V82bN3d0Ofj/cV7qHs5J3cM5qXsKCwv1u9/9TufPn5eXl9dvno/bbQacnJzUtm1bR5dxQ2nevDn/kamDOC91D+ek7uGc1D1OTtWz5JqF2wAAAAYISQAAAAacX3rppZccXQRubM7OzhowYIAaNeLub13Ceal7OCd1D+ek7qnOc8LCbQAAAAPcbgMAADBASAIAADBASAIAADBASAIAADBASEKt2Lp1q4YMGaI2bdrIZDJp3bp1NvstFoumT5+u1q1by8PDQ+Hh4Tpy5IiDqr0xJCQk6I477lCzZs108803KzIyUjk5OTZ9OC+16+2331b37t2tDycMCwvTJ598Yt3P+XC8v//97zKZTJo8ebK1jfNSu1566SWZTCabrXPnztb91Xk+CEmoFcXFxQoKCtK8efMM97/++ut64403lJSUpB07dqhJkyaKiIjQTz/9VMuV3ji2bNmip59+Wl999ZXS0tJUVlam3//+9youLrb24bzUrrZt2+rvf/+7srOzlZWVpXvuuUcPPvig9u/fL4nz4Whff/215s+fr+7du9u0c15q32233aa8vDzr9uWXX1r3Vev5sAC1TJJl7dq11s8VFRUWX19fy8yZM61tFy5csLi5uVn+9a9/OaLEG1JBQYFFkmXLli0Wi4XzUle0aNHCsnDhQs6Hg/3www+WDh06WNLS0iz9+/e3TJo0yWKx8O/EEV588UVLUFCQ4b7qPh9cSYLDffvttzKbzQoPD7e2eXp6KjQ0VBkZGQ6s7MZSWFgoSbrpppskcV4crby8XCtXrlRxcbHCwsI4Hw729NNP6/7777f5+5f4d+IoR44cUZs2bdSuXTuNGDFCx48fl1T954NHhMLhzGazJMnHx8em3cfHx7oPNauiokKTJ09W37591bVrV0mcF0fZu3evwsLC9NNPP6lp06Zau3atAgMDtX37dkmcD0dYuXKldu7cqa+//rrSPv6d1L7Q0FClpKSoU6dOysvL08svv6w777xT+/btq/bzQUgCoKefflr79u2zua8Px+jUqZN2796twsJCvf/++xo9erS2bNni6LJuWLm5uZo0aZLS0tLk7u7u6HIgadCgQdY/d+/eXaGhofL399d7772nLl26VOt3cbsNDufr6ytJys/Pt2nPz8+37kPNiY2N1ccff6xNmzapbdu21nbOi2O4urqqffv2CgkJUUJCgoKCgjR37lzOh4NkZ2eroKBAt99+uxo1aqRGjRppy5YteuONN9SoUSPrFQvOi+N4eXmpY8eOOnr0aLX/OyEkweFuvfVW+fr6Kj093dpWVFSkHTt2KCwszIGVNWwWi0WxsbFau3atNm7cqFtvvdVmP+elbqioqFBJSQnnw0EGDhyovXv3avfu3datZ8+eGjFihHbv3q127dpxXhzs4sWLOnr0qFq3bl3t/06cX3rppZeqsVbA0MWLF3XgwAGZzWbNnz9foaGh8vDwUGlpqby8vFReXq6//e1vCgwMVGlpqSZOnKhLly7pzTff5O3aNeTpp5/W8uXL9f7776tNmza6ePGiLl68KGdnZ7m4uMhkMnFeall8fLxcXV1lsViUm5urxMRELV++XK+//rr+3//7f5wPB3Bzc9PNN99ss61YsULt2rXTqFGj+HfiAM8884zc3NwkSQcOHNATTzyhgoICJSUlqUmTJtV7Pq7zF3iAXTZt2mSRVGkbPXq0xWK58rPNF154weLj42Nxc3OzDBw40JKTk+PYohs4o/MhybJ48WJrH85L7Ro7dqzF39/f4urqamnVqpVl4MCBls8++8y6n/NRN/zyEQAWC+eltkVFRVlat25tcXV1tdxyyy2WqKgoy9GjR637q/N8mCwWi6W60h0AAEBDwZokAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAPXOd999J5PJpN27d0uSNm/eLJPJpAsXLlx1TEBAgBITE62fTSaT1q1bV+O1Aqi/CEkAqsxkMlk3T09P9e3bVxs3brRrjtLSUr3++usKCgpS48aN5e3trb59+2rx4sUqKyurocqlr7/+WuPHj6+x+WvSL//emzdvrjvuuEMffviho8sCGjxCEoCrOn/+vC5evGjTtnjxYuXl5Wnbtm3y9vbW4MGDdezYsSrNV1paqoiICP3973/X+PHjtX37dmVmZurpp5/Wm2++qf3799fEYUiSWrVqpcaNG9fI3KWlpTUy7y/9/PeelZWlvn376k9/+pP27t1r3X/hwgUVFRXVeB3AjYSQBMDG5cuXtX79eg0dOlStW7fWf/7zH5v9Xl5e8vX1VdeuXZWUlKQff/xRaWlpWrp0qVq2bKmSkhKb/pGRkXr00UclSYmJidq6davS09P19NNPKzg4WO3atdPw4cO1Y8cOdejQQZKUmpqqfv36ycvLSy1bttTgwYMr1WGv/3u77Zf+9Kc/KTY21vp58uTJMplMOnTokKQrIahJkyb6/PPPJUkDBgxQbGysJk+eLG9vb0VEREiSZs+erW7duqlJkyby8/PTU089ZRMyU1JS5OXlpXXr1qlDhw5yd3dXRESEcnNzf7X+n//eO3bsqFdffVWXL1/Wpk2brPv37NkjX19fjRw5UmlpaaqoqLD/LwmADUISAEnS3r179ec//1lt27bVqFGj1KpVK23atElBQUFXHePu7i7pSogYOnSoysvL9dFHH1n3FxQUaP369Ro7dqwkafny5QoPD1ePHj0qzeXi4qImTZpIkoqLixUXF6esrCylp6fLyclJf/jDH2rsf/z9+/fX5s2brZ+3bNkib29va9vXX3+tsrIy9enTx9pnyZIlcnV11bZt25SUlCRJcnJy0htvvKH9+/dryZIl2rhxo5599lmb77p06ZL++te/aunSpdq2bZsuXLigRx55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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "include(\"NtSolutions/ml_1_pca_nn/exo1.jl\");" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# Insert your code here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 2__\n", "\n", "Display, as a function of the position in 2-D PCA space, the class output by\n", "the $R$-NN method when applied in 2-D.\n", "ounding boxes\n", "est for different R" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGzCAYAAADuc1ebAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3X2MHPWd5/FPzwN+wI+YwYw9BBuvIoUkmxUx3uSEDzZAsivIifhCFBARRFkQyRIg2g2RgoIE4iHZrE7AgpQTSuKsWBAXbwjc3R+HswHF5IENSiTW2iiRAWexGRMbwtjGM+CZqfujusY9PdVdT7+q+lbV+yVZ4HZPd0931ae/v8dqeZ7nCQAAwKiBsl8AAABAPxQrAADANIoVAABgGsUKAAAwjWIFAACYRrECAABMo1gBAACmUawAAADTKFYAAIBpFCsAAMA0ihVE2r59u1qt1tyfoaEhrV+/Xtdcc43279/v5Dmeeuopfe5zn9P73vc+DQ4OasOGDU4eF0A5isiNCy64YN5zBH/+8i//0snjw46hsl8AquOOO+7Qxo0bNTU1pV/84hfavn27nn32We3evVuLFy/O9NiPPPKIHnvsMZ1zzjlat26do1cMoGx55oYkjY2N6Z577pl3GxlSPxQriO2v/uqvtHnzZknSX//1X+vUU0/VN77xDT355JP61Kc+lemx7777bj300EMaHh7WpZdeqt27d7t4yQBKlmduSNLKlSt11VVXZX4c2MYwEFLbunWrJOnFF1/M/Fjr1q3T8PBw5scBYJvL3AhMT0/r6NGjzh4P9tCzgtT27t0rSVq9evXcbUePHtXU1FTkzw4PD2vlypV5vTQARrnOjd/97nc6+eST9c4772jt2rW69tprddttt9H4qRmKFcQ2MTGhQ4cOaWpqSs8995xuv/12LVq0SJdeeuncfW644QZ973vfi3ys888/X88880yOrxaABXnmxqZNm/QXf/EXev/736+33npLO3bs0J133qnf/e53euyxx/L4dVASihXEdtFFF837+4YNG/Twww9rbGxs7rZbbrkl1vhxZ6sKQH3lmRvf/va35/39M5/5jK677jo99NBD+tKXvqQPfehDGV45LKFYQWwPPvig3v3ud2tiYkLf+c539JOf/ESLFi2ad5+zzz5bZ599dkmvEIA1RefG3/7t3+qhhx7Sj370I4qVGqFYQWxbtmyZm9V/2WWX6bzzztOVV16p3/72t1q2bJkkv8t3cnIy8rFOOukknXLKKbm+XgDl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7/7u7/SlL31JGzZs6FmskB31RLGCBS666KJ5f9+wYYMefvhhjY2Nzd12yy236Kqrrop8rM4WVRKTk5NatGjRgtuDSXqTk5OpHhdAfvLMjq9//es6fvy4vvrVr/b9ObKjnihWsMCDDz6od7/73ZqYmNB3vvMd/eQnP1lw8p999tk6++yzc3sNS5Ys0dtvv73g9qD7eMmSJbk9N4B08sqOvXv36pvf/KYefPBBLVu2rO99yY56oljBAlu2bNHmzZslSZdddpnOO+88XXnllfrtb387FxQTExOxWignnXSSTjnllMSvYXR0VE8//bQ8z5vXnTs+Pi5JkcueARQvr+y47bbbtH79el1wwQVzwz8HDhyQJB08eFB79+7Vu971Lg0MDJAdNcVqIPQ1ODioe+65R6+++qoeeOCBudtvuukmjY6ORv7Ztm1bquf9sz/7Mx07dky/+c1v5t3+3HPPzf07ALtcZsd//ud/as+ePTrrrLO0ceNGbdy4UVdccYUk6Qtf+II2btyow4cPSyI76qrleZ5X9ouADdu3b9dnP/tZ/fKXv5xrHQX+/M//XL///e+1d+9eLV68WP/xH/8Ra6La6tWr9cEPfjD03y699FLt3r07dKLcvn37dNZZZ+m6666bCzrP83T++efrpZde0u9//3sNDg4m/yUBOJd3djz77LM6dOjQvH/fvXu3vva1r+mWW27Rhz/8YV1yySUaHh4mO2qKYSDE8uUvf1mXX365tm/fruuvvz71nJUXXnhBTz75pCRpz549mpiY0J133ilJ+sAHPqCPf/zjkqSxsTHdfPPN+uY3v6njx4/r3HPP1Q9/+EPt2rVL//zP/0zYABXhIjvClhqvWrVKknTuuefqsssum7ud7KipMnekgy29dqH0PM+bmZnxNm3a5G3atCnTDpDBc4T9ufrqqxc859133+2deeaZ3kknneS9973v9R5++OHUzw0gH0VkR7enn346dAfb4DnJjnphGAgAAJjGBFsAAGAaxQoAADCNYgUAAJhGsQIAAEyjWAEAAKZRrAAAANPYFC5M16XFkUzLymJ4My/EPTYcMIjciC33U7PG535aVc8MelYAAIBpFCsAAMA0ihU4Re8rgNJ5DMnVDcUK6ovAAsyhQYM0KFYAAIBpFCsAAMA0ihUAQP0wDFwrFCsAgEIwXwVpUawAAADTKFYAAPXEUFBtUKwAAADTKFYAAIBpFCuoN7qBAROYXIssKFYAAIBpFCsAAMA0ihUAQK5KHQJiKLgWKFYAAIBpFCtwhgl0AEyid6XyKFYAAIBpFCuoP1pVAMiBSqNYAQAAplGsAAAA0yhW4ASTawEAeaFYAQA0A/NWKotiBQAAmEaxgswYAgIA5IliBQAAmEaxAgAATKNYQSaVGQJiYh1QispkBEyjWAEAAKZRrAAAmoNe1kq8Hrm5AAAUFUlEQVSiWEFqleveJaQAoJIoVgAAgGkUK2gWelcAkAOVQ7ECAMhF5YaKYRbFCpqHVhUAVArFCgAAMI1iBanQvQsAKArFCpqJoSAAqAyKFQAAYBrFChKrzRAQvStAbmqTEzCBYgUAAJhGsQIAaB56ViuFYgUAAJhGsYJEGIcGABSNYgUAAJhGsQIAAEyjWEFsDAEBAMowVPYLAJrLkzQpaVr+qbhEEisUAPTTzNygWDHC+uFHr4prRyQdlP+JB4YkjUhaXsorQjVZzw7TvFbFwq25uUGxYkBzD7+mOiJpPOT26Y7b+eQRjexokmbnBnNWShYcftNdtweH35HCXxHy5cn/eunnYPt+QG9kR5OQG/SsFKyzy3ZQ8Q6/ZaJbtz6CT7+faUmvS1oqOvURIDuaLG5u/FH+13r9BgQpVgoU1mUbZVr+Ybo0l1cUT6WGdM2L++m/0f5Dpz6qmx2VUIl5K3E/+UMd/1+v7KBYKUiv0cY4kgQUrEt6yjVjPBq9kR1I91Vdr+xgzkoB4ow29kNFWSdLlO4Trfd4NMKRHfClzQ2pLtlBsVKAOKONvQQjj6iLlvyu2aSCTn00SVWzw/yoSuWkzQ2pLtlB4V2ALF2xI6rTFCn4gi7ZNLMQ0CRkB05ImxtKcX97KFYKkOZNrtfUKCy0XP5ajUlJb8mfxR+F07VpyI6CVGKSrTQ/N6bbfw71/Qlf9bOj+r9BBSyRP942G+O+K+UfjoslTUk6rDouQoOvpRPLk4+of+uHAcEmqmJ2VOI7v9KC3JD8uShvqgnZQbFSgJakVfIXokZZLmlG0l6xK2VzBOPR/dZ80KnfRGQH+mtOdlCsFGSN/I7+fo2OIfkhcyDk38pahEYrKau4V27pNR7NV03TrVF0sWIxO5BFkis+NSM7KFYKclTRi8eWKXr0kV0pqyTplVu6x6MZAES8pcsjMe5HdkQwM28lzRWf6p8dFCsFiLtXwpsx7lPkrpQmztskTF1+NuqiY2/LbzN3v8DO8Wg03azi5cKU4m3Gzo62PQTZccmj0sFR6fmt0uxgCS8kKjcm5RclYeFW7+xoeZ5Xta+k/LXcfsMdk7TP4eOdLmmFw8cLU7lCJe3lZ3P5RT1JLyv66yN9Ny1nrUGOc0Pyh3/irPWIi+wIEZYd42PSXfdJO7cV+ELi5oaUJjuqnhlsClcA1yvc8+4Oq2TYmLr8bNytvLg+Lvo77vjxyI4uvbJj7X7p/k9KF/+gwBeTZAvA5mUHxUoBXAZEPRahOWTiyume/P6zw+3/Jv2KOSi/w7/zMaqW+sjDsMPHIju69MuOgfb599WbpYGZHF9AltyQmpQdzFkpQHBVBxc9LPVYhOZQkiunr1YOb15YH3LSse5pSS9p/m4a9ZrJj3RWyd0wUN7ZUblelajsGPCkda9IV/2j9PAXHc9hcZEbUpOygzkrYXIYe85y5dTAmvafvJkNnbAJtEcUvl4zTNg5nPiX7XwR7yjeDhhZjCosdDhrDcohNzxJe5S9rVxEdpjNDSl7dmSew1J0bkjd2VH1zKBYCZND6LiYZBv+teWeydDpNYF2hZKf951v5NwvG2cpUdiLKMLCaZGctQYZzQ0p/+wwmRkBF9kx2/5sb9zRVbBYzg2pMzuqnhkUK2FyCJ3Dil/E99PI0InqlmopWdNzSNJGnRiX7plmK+XPGhiSvzdo1r6xLOrVSqolw7kh5ZsdJnNDcpsdsy3pwJh04cvtIaE8cyNpqPXjf/JVzwzmrBTE1RvduI2d4kygTXoSzrtier99DV5P+MB5atwnD7kN6LyOILOFiuvsCOawbN4l/dsHlW9uuHxT65EdrAYqiKsOwHnfs02QZDVfEp96RPG368tLkgl1jfvkIbeHfuOOoLyy49RxlZsbUhOzg2KlAH+Qu65cqZyRz9K4/mVnBqTntkjvvC1/iVBZ7+aApA1K1nY+rmCJ4jPPHNPMjNUmLVxwnRtSw7LjqMPHCnLj/1wiTbRUbm6slz+OnSQ73tKjj1Y7N5izEsbh2LPLMefAmPLbVNlcl+5bkvY7eqynLpbuulU6MOroAbMaU7Ix7cH2/ds/PTak++4b0bZt9VqiWFnGc0PKJzvMZYbkbhmVZDQ3lirtGtOq5gbFSpgEodNvLrgn6UXNXwGfVTA3NK/RR1PB48k/F120kJ66WLrx/nZ4WelQDGbqpwud4DDdsWO0csFTS4ZzQ8onO0zlRcCTX+m52NzVdG5IabKjqrlBsRImZuhEXY7G9TWBpAbN6D8i6TW5SeyZAekjP5YOrJWdwJHmt3PTtaVbLb+l9PLLGzU4WO0JdJVnODekfLLDVGZIBeeGp3ImrXb3jyXPjirmhqXkrpQ4l6NxeV2PATWsUBmXu6bl85vbXbiWDvfuzc9XyP+Eu8eh+79mz5NeeWVau3ZVfwJdE8TJjTyuJVbUHk2lKjw3yviSD7toQq/s6K2KucHS5RTirCF5zfFzrlVDCpU8FugcHHH8gC6EbX6+XP4Sw84BgmnFaTWNjzdq6mQlxb2MleurIue18Tq5UYZeF03ozo54u+RWKTcsNTUrI86KuFm5HXPO61p8pgJH8rcocH3+jJS9zLBTVDu3Jb+Ld0X7v/HaE6OjtDusi3sZK9cbsed+HU8L8limXKnckBZmR7Qq5UZ1XqkhZdSiwUp5lzP5Sy9UumcZ5pHUkvTB56XTxwues7JSfrBMt/8Myt/VMmw77n76XwYzGHveupXr6VpXVhs2j+woVdjsZJfLlAOb27nx2lrJIzfKRrGSQllvWnU67GLI63IZMwP+WPPBEWnNIT/YXj9Vuvx/Sf/4RcdP1ssqSac5eqyW/K7fhTP+g/mc9947UplJck1WZtjWJjt6Xaw4azd2d25I0qF2bjzwxfYTFFGwLJWbsrJ+uUGxkkL/mjU/tfmwXFyCulMQND+6UPrBJ6SjK8PvNzjt3zd3R9V7bDmNoOt3fkqPjQ3p3nurt19CU5WVG1JNsqNXbsyE3BZH3NwYmvEbPWmfJxGXW+PXKzdqcQwXrXfNmp9BLZwDnkVpQ0CuJ8Il2bBppqjDPY+O9/kT6J5+2u/CrVLLqOnKyA0pfP1IVoXnR5m5MZ1ka/usXGfHidx45JFpjY5WNzfYZyVMhv0SBuR+MyfJ7cCClFPYxLlauusdaW+8X/JaIU9Uts6Nm9zjrDUo4z4ra+R+FaFUkf1VorLD5eYzpnNDyis7qp4ZFCthMuxE6cndd3En19tkOw+bqJ2uPPkrfVxNoDW70Vsgz4siVD94ainjDraTcr8Z3Jr2H9ec5ke/7Ag6E9+QX7BkZT43pLyyo+qZwTBQRsFiscDhHJ4jj25cZ/oVIcFOV5Py3xiXXU5zGzZZZPoTgwHduSG5n8syKOkUx4/pVJzscN1VbTo3JLKjN4oVx97J4TFdTtWUHLaK4q7oedPR83UyuWFTwPUnhro7Iv8qyy6dJsNHYdzscD2mbjo3JLKjN4oVh47I7TYhnaMo5rhe0ZOUqQ2bAqY/MRjl+lQalF+omN3xuszsMJkbEtkRjWIlo86xZ1cto5MlrVbybYDicNKrksfW1kmVsmFTL8FGTnl8YqijPHJD8uennCLDR2HZ2WEqNySyIz4Ln1ZlHZH0svxJcQfkpsdyQNI6+ePZZg/dPLa2TmpwVrr1rvZfyp45tlzGPzEYkkduSP6qnzUyfhSWnR2mckMiO+KjWEmp19VTs1qr/A5bZ3NVyi5UAh/dKd1/ozSa7PLobjEhDvHllRunqyIDCBayw0RuSGRHMixdDhOxBNGT3zJyed4VMWLprFhxueeBC+8MSY9cKe09U/rhJ6TJLC2Vlvyu2QnFa3nlsYtFNM5ag0rIjbznp3TLnCGWsmNmQPq3c6WffVj6p6ulqaxDMcHPxn2Tis2OqmcGc1ZScNmTuVT+GHPeI5ZO90Uoc9/wbqE7UXrtP2neUU/+5g4j8pN1UtLb7f92dtgzIQ7JuB4BMT8/JYyl7PjXC3tkR9p31JO0vv3/kx2PdVi9N6BCXBQrKbg4z4puETlV1r7h3eZ2ogz7xywRPt3++ZPbf6R42/MCvbn6fq70V10lsiOLGfm7z57ccdsakR3ZMQwUJqI710VP5nrNP5zzFqtnJen3cV5XTo4j150o89191gXOWoMKyA2p+OzoFJojaer4I/KvLZDHtUmiNDQ7qp4Z9Kyk4KIns5ALeLbFKlSitssPs1x+ar6k4kMnt50omfSGfLgaASkyOyKlyQ3JH2l1vQteXGRHJbEaKIWgJzMLU1ViryUKwZbXR/r87JSKKVS6W2q57UTJDpLIh4vckAxlR5bcmFR5VRfZUUkUKyktlz+Xuzs44ryhpurvOJs0HVTvsd28h4Ba8tdlnt51u/OdKIdU1soeNEe/3KhUdljPDcnv9e3ODYnsqCgzRXoVLdeJi4J2Dtcekb/ZUy+m6u84SxSm2/cLG4rN+whap/kD9EGXc+adKIfkL1EeFpPeUKReuSFFX5jcTHZYzw3J3wY82MWgc6gqyI7Uc1bIjjLQs5JRcPXUFTpxXqyQX2eHvbnm3vC4LZxe9wsG4vMwpPlBt1zSRvlz2NbPSv/jrtAf629l+wE2yp+l3/nJAcUIy42WpFMlrerxM6tkqO0eNzeOKbx3Jc/ckOZXgJ25cbqkM2elB5Jmx6L2D5MdZTH33VknYVM5ZhU9nFuouIHxmvztArq5GogPE9aM7Ez5K3ZKO25UssOY7a1h1xH1vkj5myo3N+ZN1I+bG29IelELsyPP3JAWZkd3dfjfd0q3/2PCB6Q4KRNLl8NELEGMEmenyiH59XkRh33f1UBJt9VcJX+DmG4ulyLG3Uhi7hebVbwlSUW+6/nirDWoZrnRbV6OpNmONyw7XG9/kGQTmpkB6cwfS/tPV/93tB65UfXMoGclB0mGc/MWuWw5aQunV/NuuaRN8ntH0xxVp2p+L2ui/u4B+VdVimJmxB9YwFJuRErTMxKWHZ1DNKtUbHYMzkr336UTO173Qm5YQLGSg6zTQFzy4pxjwRKFwZgP+geFn9st+cXKJp0YHz5V0ef5kPzJcEl6WRdUYcEv0WumELP1YZul3Iil19KmfsKyIxiiOU1+dqyXfx2B1Yr+hkqTHZ227ZT+5UZpTdjgG7lhCcNAYTJ258bdqbKIvQ4TXRNoQv5QThxJXnywH0Mvo5KWDki7NkvjI9LoQWnr837Lp5eev5gn/xM4Jj+5lqiO48yctQbVKDfC9D3lDkn6Y8wHKjs7wswMSM+cK130v1XX3Kh6ZrB0OQdxdqo0s19Cp+EE9w26c+Os2gsaJr12utx5sXTTrdK+jl0lx8al++7yWz6JdF/TB6iGyuZGcMrFLVbeUvzVvkVlx+CsdOFzynfWL7KgZyVMxhaSFK9BUETnYqKeFU/+zP0kjZIkE9rCriHy+MXSJ4MLinX0+bbaL2LHjQtDx+klpKuJs9agGuVGt8hTLml2JL0ao6vsiFLjbKl6ZlCshHEQOlL6y2a4lPjcO6z+O9r1kiZFZwakDT+W9vXYnKk1K40dkF6+cH63bo0DJS7OWoNqlBvdYp1yabIjbfWVNjui1Dhbqp4ZTLDNUfdeRKkWuhRthXrvStVPv621e9m1ud192+Mw9AakV9b59wMaopK5IaXLjjS5IeWXHbFWJKAMzFnJWTDRvVJOk9/N+gfFv9hYv621exmPOT4c935ATVQyN6Tk2ZEmNySyo4EoVhCu8wImR+SvFIqSdE3laMwLisW9H4DyBdkRdaGjQJq12GRH4zAMhN6C5l3c/uekpe/W5/2Z+60eY8qtWemMV/37zd1W8YFXoAmSdA2laTKnyQ5UGsUKosW56FiaNZWDs/4SQ2lh6AR/v/fu5HsmAChfXrkh5ZsdzFsxiWIF0eJsrZ12R+pt7YsRru/ajW7sQLqlhwBsyDM3JLKjYVi6HMbREkQLnI6a5LmmcibBLpQMBVV+GWIt1Sg3umU65fJei50kO+KqYcZUPTMoVsLUJHRyOd/CNmcq+u2qYZAkxVlrUE1yI0zmU85CbiRRw4ypemZQrISpSejU8Hzz1fYXi4+z1qCa5EaYRp5yNfulq54ZzFkBAPRUs+9sVBTFCgAA3VgVZArFSk3RGgIA1AXFCgAAMI1iBQCAMAwFmUGxgmphfAsAGodipYb4PgcA1AnFCgAAMI1iBQAQil5aWEGxAgAATKNYQbUwOx8AGodipWbotgUAh2ggmUCxAgAATKNYQfXQ0gGARqFYAQAAplGs1AjzVQAgB/Tmlo5iBQAAmEaxgmqipQMAjUGxAgBAFBpIpaJYAQAAplGsAAAQB70rpaFYAQAswOpCWEKxAgAATKNYAQAgLoaCSkGxUhN02QIA6opiBQAAmEaxAgAATKNYAQAAplGsAAAA0yhWAACAaRQrAADANIoVAABgGsUKAABJsDFc4ShWAADzsMkkrKFYAQAAplGsAAAA0yhWaoAuWwBAnVGsAAAA0yhWAACAaRQrAIA5DCvDIooVAABgGsVKxdEKAoASsDFcoShWAACAaRQrAADANIoVAABgGsVKhTFfBQDQBBQrqC4muAFAI1CsAACQBg2mwlCsVBRDQACApmh5nsfXHgAAMIueFQAAYBrFCgAAMI1iBQAAmEaxAgAATKNYAQAAplGsAAAA0yhWAACAaRQrAADANIoVAABgGsUKAAAwjWIFAACYRrECAABMo1gBAACmUawAAADTKFYAAIBpFCsAAMA0ihUAAGAaxQoAADCNYgUAAJhGsQIAAEyjWAEAAKZRrAAAANMoVgAAgGkUKwAAwDSKFQAAYBrFCgAAMI1iBQAAmEaxAgAATKNYAQAAplGsAAAA0yhWAACAaRQrAADANIoVAABg2v8Hgw0kfhq6mf4AAAAASUVORK5CYII=", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "include(\"NtSolutions/ml_1_pca_nn/exo2.jl\");" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# Insert your code here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Unsupervised Learning: $k$-means\n", "----------------------------------\n", "In an [un-supervised setting](https://en.wikipedia.org/wiki/Unsupervised_learning), the class information $y$ is not\n", "available. The basic problem is then to recover class information from\n", "the knowledge of $x$ only. This corresponds to the [clustering problem](https://en.wikipedia.org/wiki/Cluster_analysis).\n", "\n", "\n", "Select a subset of classes" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "if k>=4\n", " ksvg = k; Xsvg = X; ysvg = y\n", " k = 3\n", " I = find(y.<=k)\n", " X = X(I,:); y = y(I)\n", " n = length(I)\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "PCA" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "U,D,V = svd(Xm(X),thin=true)\n", "Z = Xm(X) * V;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most basic algorithm is the , which tries to recover the\n", "class index $\\bar y_i=\\ell$ from the distance $ \\norm{x_i-c_\\ell} $\n", "between the feature point $x_i$ and the class centroid $c_\\ell$\n", "(which are the unknown of the problem).\n", "\n", "\n", "It does so by minimizing the following non-convex energy\n", " $$ \\umin{ (c_\\ell)_\\ell } \\sum_i \\umin{\\ell} \\norm{x_i-c_\\ell}^2 $$\n", "\n", "\n", "We first initialize the class centroids $ (c_\\ell)_\\ell $ at random among the points.\n", "They are stored in as the row of a matrix $ C \\in \\RR^{k \\times p} $." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "I = randperm(n); I = I[1:k]\n", "C = X[I,:];" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The $k$-means algorithm iterate between first determining the class of\n", "each point using the distance to the centroids\n", " $$ \\forall i \\in \\{1,\\ldots,n\\}, \\quad \\bar y_i \\leftarrow\n", " \\uargmin{\\ell} \\norm{x_i-c_\\ell}. $$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "D = distmat(X,C)\n", "yb = mapslices(indmin,D, 2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the centroids and the classes using colors.\n", "This corresponds to a Voronoi diagram segmentation in the high\n", "dimensional space, but here the display is done in 2D." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i=1:k\n", " I = find(yb.==i);\n", " plot(Z[I,1], Z[I,2], \".\", c=col[:,i], ms=12)#, 'Color', col(:,i), 'MarkerSize', 25);\n", "end\n", "CV = (C-repeat(mean(X,1), outer=(k,1)))*V;\n", "for i=1:k\n", " plot(CV[i,1], CV[i,2], \"o\", c= col[:,i]*0.9,ms=20)#, markedgecolor ='k');\n", "end\n", "axis(\"tight\"); axis(\"equal\"); axis(\"off\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The second step of the $k$-means algorithm is to update the centroids\n", "position to be the mean of the points inside each class\n", " $$ \\forall \\ell \\in \\{1,\\ldots,k\\}, \\quad c_\\ell \\leftarrow\n", " \\frac{ \\sum_{i:y_i=\\ell} x_i }{ \\sharp \\{i:y_i=\\ell\\} }. $$" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "for l=1:k\n", " C[l,:] = mean(X[find(yb.==l),:], 1)\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 3__\n", "\n", "Peform several step of the $k$-means algorithm.\n", "nit" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiUAAAGzCAYAAADwumcoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X18VPWd9//XmWEw4dbcwQKTirVeXt7Q7a60tmo0CNTHr95Q0xQhai+7rUu3Xe7a1V0tK7CrF121FbRq9Ver16UkIpAuvYqXu2JDjTc/q1tbStdry654LQREEpAIBjKZOb8/Tk6SmczNOXN7Zub95DGPkMmZOWcyk8/5nO/N52uYpmkiIiIiUmC+Qh+AiIiICCgpEREREY9QUiIiIiKeoKREREREPEFJiYiIiHiCkhIRERHxBCUlIiIi4glKSkRERMQTlJSIiIiIJygpEREREU9QUlKmnnzySQzD4M033xy677nnnmPNmjV5PY6f/vSnXHnllUyfPp3TTjuNYDBIc3Mzu3fvHrXtpk2buPHGGzn77LMxDIPGxsa8HquIFF/s6Onp4d577+Wyyy6jrq6O008/nc9+9rNs2rQpr8crzigpkSHPPfcca9euzes+f/e731FVVcXy5ct5+OGH+Yu/+AveeustPvOZz/Db3/42attHHnmEbdu2UV9fT1VVVV6PU0QS83LseO211/jud79LdXU1q1at4u6772bcuHEsWrSI1atX5/WYJbUxhT4AKW2maXLy5EkqKyvj/vzOO+8cdd/Xv/51gsEgjzzyCD/60Y+G7n/qqaeYMWMGPp+PCy64IGfHLCKFl63Ycf7557Nnzx7OOOOMoe2++c1vMm/ePP7hH/6B2267jfHjx+fmRYhraikRAG6++WYeeughAAzDGLrZIpEI69ev5/zzz6eiooKpU6eyZMkSjh49GvU8M2fO5Oqrr+af/umfmD17NpWVlTz66KOujmXKlCmMGzeODz74IOr++vp6fD59ZEW8xOux48wzz4xKSOzj/OIXv8ipU6d455133L5kySG1lAgAS5Ys4cCBA7zwwgs89dRTcX/+5JNP8tWvfpVly5axd+9efvjDH/LWW2/xyiuvEAgEhrb9t3/7NxYvXsySJUu45ZZbOOecc1Lu/4MPPiAUCvHee++xfv16ent7mTt3blZfo4hkX7HGjvfeew+A2tpaF69Wcs6UsvTEE0+YgPnGG28M3fetb33LjPeR6OzsNAFz48aNUfc///zzo+4/44wzTMB8/vnnXR3POeecYwImYE6YMMFctWqVGQ6HE25//vnnm5dffrmrfYhI5oo9dpimafb09JhTpkwxGxoaXO1Lck8tJZLS5s2bmTx5MvPnz6e7u3vo/gsvvJAJEybQ0dFBS0vL0P1nnnkmV155pat9PPHEE/T29vLOO+/wxBNP0NfXRzgcVneNSBHzYuyIRCLccMMNfPDBBzz44IPpvTDJGSUlktKePXs4duwYU6ZMifvz999/P+r7M8880/U+Pve5zw39f9GiRZx77rkA3Hfffa6fS0S8wYuxY+nSpTz//PP8z//5P/njP/5j1/uT3FJSIilFIhGmTJnCxo0b4/68rq4u6vtEo+Wdqqqq4oorrmDjxo1KSkSKmNdix9q1a3n44Yf53ve+x0033ZTRviQ3lJTIkJEj5kc666yz2LFjB5dccknGQcOpvr4+jh07lpd9iUhmiiF2PPTQQ6xZs4YVK1bw13/913k5FnFPHfYyxJ6rHzsVd+HChYTDYf7+7/9+1GMGBgZGbe9GbPMtwLvvvsuLL77I7Nmz035eEckfr8eOTZs2sWzZMm644QZ+8IMfpL1PyT21lMiQCy+8EIBly5Zx5ZVX4vf7WbRoEZdffjlLlixh3bp1/OY3v+Hzn/88gUCAPXv2sHnzZjZs2EBzc3Na+5w1axZz587lU5/6FFVVVezZs4fHH3+cUCjE9773vahtX3rpJV566SUADh8+zIkTJ7jrrrsAuOyyy7jssssyePUiki4vx45f/epXfOUrX6Gmpoa5c+eO6kq6+OKL+fjHP57+i5fsKvT0HymMeNP6BgYGzKVLl5p1dXWmYRijpvg99thj5oUXXmhWVlaaEydONGfNmmXedttt5oEDB4a2OeOMM8yrrrrK8XGsXr3anD17tllVVWWOGTPGnD59urlo0SJz165dcbdlcOpf7G316tXufwki4lqxxQ77eBPdnnjiifR+EZIThmmaZt4zIREREZEYGlMiIiIinqCkRERERDxBSYmIiIh4gpISERER8QQlJSIiIuIJSkpERETEE5SUiIiIiCcoKRERERFPUFIiIiIinqCkRERERDxBSYmIiIh4gpISERER8QQlJSIiIuIJSkpERETEE5SUiIiIiCcoKRERERFPUFIiIiIinqCkRERERDxBSYmIiIh4gpISERER8QQlJSIiIuIJSkpERETEE5SUiIiIiCco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E5SUiIiIiCcoKRERERFPUFIiIiIinqCkRERERDxBSYmIiIh4gpISERER8QQlJSIiIuIJSkpERETEE5SUiIiIiCcoKRERERFPUFIiIiIinqCkRERERDxBSUmZevLJJzEMgzfffHPovueee441a9bk9Th++tOfcuWVVzJ9+nROO+00gsEgzc3N7N69e9S2K1eu5E//9E+prq5m3LhxnHvuuaxZs4bjx4/n9ZhFykUxxolNmzZx4403cvbZZ2MYBo2NjUmf+9e//jXXXnvtUFy54IILeOCBB3L0SiSVMYU+APGO5557joceeiivAed3v/sdVVVVLF++nNraWt577z1+8pOf8JnPfIbXXnuNP/7jPx7a9o033qChoYGvfvWrVFRU8NZbb/G9732PHTt28NJLL+HzKccWyTWvx4lHHnmEf/mXf+HTn/40PT09SZ/3n//5n7nmmmv4kz/5E/72b/+WCRMm8B//8R/s378/1y9JElBSIjllmiYnT56ksrIy7s/vvPPOUfd9/etfJxgM8sgjj/CjH/1o6P6XX3551LZnnXUWf/VXf8WvfvUrPvvZz2bvwEUkb7IZJ5566ilmzJiBz+fjggsuSLjP3t5evvKVr3DVVVexZcsWXdR4hN4FAeDmm2/moYceAsAwjKGbLRKJsH79es4//3wqKiqYOnUqS5Ys4ejRo1HPM3PmTK6++mr+6Z/+idmzZ1NZWcmjjz7q6limTJnCuHHj+OCDD1JuO3PmTABH24pIZoohTtTX1ztKMFpbWzl06BB33303Pp+PEydOEIlEXB2DZJ9aSgSAJUuWcODAAV544QWeeuqpuD9/8skn+epXv8qyZcvYu3cvP/zhD3nrrbd45ZVXCAQCQ9v+27/9G4sXL2bJkiXccsstnHPOOSn3/8EHHxAKhXjvvfdYv349vb29zJ07d9R2AwMDfPDBB/T397N7925WrVrFxIkT+cxnPpPZL0BEUiqWOOHEjh07mDRpEl1dXXzxi1/kD3/4A+PHj+emm27i/vvvp6KiIq3nlQyZUpaeeOIJEzDfeOONofu+9a1vmfE+Ep2dnSZgbty4Mer+559/ftT9Z5xxhgmYzz//vKvjOeecc0zABMwJEyaYq1atMsPh8KjtXnvttaHtAPOcc84xOzo6XO1LRJwp1jhhO//8883LL7887s8++clPmuPGjTPHjRtnLl26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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "include(\"NtSolutions/ml_1_pca_nn/exo3.jl\");" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "# Insert your code here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the histogram of (true, i.e. according to $y$) class inside\n", "each estimated class (i.e. according to $\\bar y$)." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for l=1:k\n", " I = find(yb.==l)\n", " h = custom_hist(y[I]); h = h/sum(h)\n", " subplot(k,1,l)\n", " bar(1:k,h)\n", " axis([0.5, k+.5, 0, 1])\n", "# set(gca, 'FontSize', 10)\n", "end\n", "tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 4__\n", "\n", "Implement better initialization strategies such as farthest point sampling or\n", "." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "include(\"NtSolutions/ml_1_pca_nn/exo4.jl\");" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "# Insert your code here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 0.5.0", "language": "julia", "name": "julia-0.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.5.0" } }, "nbformat": 4, "nbformat_minor": 1 }