{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "PCA, Nearest-Neighbors Classification and Clustering\n", "====================================================\n", "\n", "*Important:* Please read the [installation page](http://gpeyre.github.io/numerical-tours/installation_python/) 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": { "deletable": true, "editable": true }, "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": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Usefull function to convert to a column vector." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "def MakeCol(y): return y.reshape(-1,1)\n", "def MakeRow(y): return y.reshape(1,-1)\n", "def find(x): return np.nonzero(x)[0]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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.\n", "\n", "\n", "Helpers." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Load the dataset." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "from scipy import io\n", "name = 'iris'\n", "U = io.loadmat('nt_toolbox/data/ml-' + name)\n", "A = U['A']" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Randomly permute it." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "A = A[np.random.permutation(A.shape[0]),:]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "X = A[:,0:-1]\n", "y = MakeCol( A[:,-1] )\n", "y = y-y.min()+1" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "150 4 3\n" ] } ], "source": [ "[n,p] = X.shape\n", "k = int( y.max() )\n", "print(n,p,k)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pmax = min(p,8)\n", "kdisp = 0\n", "plt.clf\n", "for i in np.arange(0,pmax):\n", " for j in np.arange(0,pmax):\n", " kdisp = kdisp + 1\n", " plt.subplot(pmax,pmax,kdisp)\n", " if i==j:\n", " plt.hist(X[:,i],6)\n", " plt.axis('tight')\n", " else:\n", " for m in np.arange(1,k+1):\n", " I = np.nonzero(y==m)[0]\n", " plt.plot(X[I,j],X[I,i], '.')\n", " plt.axis('tight')\n", " plt.tick_params(axis='x', labelbottom='off')\n", " plt.tick_params(axis='y', labelleft='off')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Dimenionality 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": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def Xm(X): return X-X.mean(axis=0)\n", "def Cov(X): return Xm(X).transpose().dot( Xm(X) )" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Display the covariance matrix." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "plt.imshow(Cov(X));" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "U, D, V = np.linalg.svd(X)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "Z = Xm(X).dot( V.transpose())" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "plt.plot(D, '.-')\n", "plt.axis('tight');" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "for i in np.arange(1,k+1):\n", " I = np.nonzero(y==i)[0]\n", " plt.plot(Z[I,0], Z[I,1], '.', label=str(i))\n", "plt.axis('tight') \n", "plt.axis('equal')\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Similar display in 3-D." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from mpl_toolkits.mplot3d import Axes3D\n", "fig = plt.figure()\n", "ax = Axes3D(fig)\n", "plt.clf\n", "for i in np.arange(1,k+1):\n", " I = np.where(y==i)\n", " ax.scatter(Z[I,0], Z[I,1], Z[I,2], '.', label=str(i))\n", "plt.axis('tight') \n", "plt.axis('equal')\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "n0 = round(.5*n)\n", "n1 = n-n0\n", "X0 = X[0:n0,:] \n", "y0 = y[0:n0]\n", "X1 = X[n0:,:] \n", "y1 = y[n0:]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Macro to compute pairwise squared Euclidean distance matrix." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "from sklearn.metrics.pairwise import pairwise_distances\n", "def DistPoint(X,x): return pairwise_distances(X,MakeRow(x))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Compute Euclidean distance between some $x$\n", "and all other $x_{1,j}$ in the training set." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "i = 0 \n", "x = X1[i,:] # could be any point\n", "D = DistPoint(X0,x)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 18, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "I = np.argsort(D.flatten())\n", "ys = y[I]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Function to compute the histogram of classes." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def myhist(u): \n", " q = u.shape[1]\n", " h = np.zeros((k,q))\n", " for i in np.arange(0,k):\n", " for j in np.arange(0,q):\n", " h[i,j] = sum(u[:,j]==i+1)\n", " return h" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 20, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c(x)=3, true class=3\n" ] } ], "source": [ "R = 5\n", "h = myhist(ys[0:R,:]) / R\n", "c = np.argmax(h)+1\n", "print( 'c(x)=' + str(c) + ', true class=' + str(int(y1[i])) )" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Display the histigram $(h_\\ell)_\\ell$ of reparttion of class indexes as $R$ grows." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Rlist = ( np.array([.05, .1, .5, 1])*n0 ).round()\n", "plt.clf\n", "for i in np.arange(0,Rlist.size):\n", " R = int( Rlist[i] )\n", " h = myhist(ys[0:R,:]) / R\n", " plt.subplot(Rlist.size,1,i+1)\n", " plt.bar(np.arange(1,k+1), h)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 22, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_1_pca_nn/exo1" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "## Insert your code here." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "## Insert your code here." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 25, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "I = np.random.permutation(n)\n", "I = I[0:k]\n", "C = X[I,:]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 26, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "D = pairwise_distances(X,C)\n", "yb = np.argmin(D, axis=1)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Display the centroids and the classes using colors.\n", "This correspodns to a Voronoi diagram segmentation in the high\n", "dimensional space, but here the display is done in 2D." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n+n7vlSY3z36jpNd+Kiny79vw/3214OOUnaPK+YGZCHashNQCo8cqDuZY5XPcncqDs/T9/nyPNemV\nf9P/6kLq30neeyueY1b7gUoIdrSmNxhe7w2G9xrctdBpEsyXlQnmCj37WCXBWWEBU/r8kaTf1vQ4\n1amk7xW8d+Y5Ar6ZAKWosaMVbdSL/c2qP0o99V7NOrZTjcHVnFr/XUl/r8kOkJ9K+oaSMkzt+fPU\n2jEveuxoi1Pz9eKrmmzDe6IadewqNf0oit6NougoiqJT//Pd8Xs13dvek/SOpG/5f99QeamoqsL2\nA1Uw3RFtiTXnnOyc3nXVY9Y+tw/xPUmf8099QdJeFEUajUZPs/Pz049Dd48sUbv9IbravgDdoxSD\n1jRU9pgqR9TZGjfk3FEUHSkJ86wfj0ajXsU2z72/etu3zMtsX3Aq6c7h9uG5shZWE8GOpZSZL34s\n6UEX29tGUTSeupg1Go1GM0uXq3IP0/5+P/33lZIL0e/Sc7eBUgyWVazF7GXyUvk99pdV3rzAPWpC\nxUp66uNgvyA2AjODwVMspZb3Ti9zX9Inmec+8c+b4Xvmd5RcNE+UXETjRbYJzaEUA2T4AdSHkq4p\n6anfH41GTxfbqnYwgGoTwQ4AxlBjBzq0KoOrWG302IGOsKIUXaHHDnTHKWcBE714NI0eO9CRvAVM\n/lf04tEopjsCHSmYwunEvjBoGKUYoEM5C5hicVNpNIxSDLBgi6ixU9e3jWAH1gyzc+yjxg6sHyfq\n+qYR7MD6icW9VU2jFAOsIWrsthHsAGAMpRgAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZg\nBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBj\nCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYA\nMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMIZgBwBjCHYAMObiohsAAF3oDYbXJTlJ8dHu1sGC\nm9OqaDQaLboNANAqH+rPJV2W9JmkTcvhTikGwDpwSkJ9Q9Il/9gsgh3AOoiV9NSPJb3xj82iFANg\nLVBjBwCsLEoxAGAMwQ4AxhDsAGAMwQ4AxhDsAGAMWwoAMGOdpjSWYbojgMYtImDXbduAMpRiADQq\nFbAfSHruH3fBaY22DShDKQZA05zOB+yBlN+Tn9W7D+j9x0p66pe0BtsGlKEUA2Au2eBN9djHAbuZ\nef6sVOIPMX7uVNKdo92tvcyxK5dXqLEn6LEDqC0bvL3BcBzimzofsE75pZLxcxuSPuwNhi9Sr7+W\n8561DeyqCHYA83DKCV4f5tkAjpVfKjn175eScb+bkrb9cY/9v5FmlFeKLjL1P9rqYvAUwDxiVdwO\n14fspqQH8iUV/9wd/94TJSH/y5ruxX+cfk9JW5wYPJVEjx3AHFJll5tVX69UT743GD6SdEPS9yR9\nRUln8w+UXCikpKf+k4rNicXgqSQGTwHMKWeA866kq8oZwEwPbkr6I0mD1K9PlQT7saR/kvSHSnrf\nF5T05nMHTzPHlBg8pccO4LzA2SVOkxLIZUkfKgnjqTp3zgXgVeY4kSYlnf/zxxiXi3MHTwtmzTxq\n6HOtLGrsAKbUWGAUa1JnH/e68+rcTtM18P/OHOcf5Wvpkv7VH+vU/+5E+eWV7DGdCixw4VTnCHYA\nWU4Bg5CZQdE7Kh5MjTO/uydpV9KPJO0e7W5tp3rbj5Xk06mkH0jaU/7gafaYsYoFfa5VRikGQFas\nySDkiaRrvcHwelnpIj0o6uehO2XKHQXz2w+UBHya0ySAJel3JH1Z0pO88xbMmZ/1uUwPrjJ4CuAc\nX6a4KemWkg5grU216tS0UyWTtzSpKhxLelBWP2+rPauIYAeQqzcY3lNSj95QjWAt2ULAaUawZi4s\nG0ptTRD+SdYPwQ4gV86eL4XTGHPe55RsB3BbkwvDtzVZUVrpG8C69LCbRrADKJQK1ldKBjRLQznT\nSx8vMhr3uPc1HfRzl1aQj8FTAIXGA5y+LFNlMy6Xet1ISS/9pSYDldtag8HLRaPHDmCmvK14/a+c\nkt78VU2C+vup172T7tnX2Y8d4Qh2AJXkLN0fl1w2NFny/1jSXymZzXIu2AuOye3sGkYpBlhToT3l\nVFnmuqS/1fRc8/F2An+tyRTFS0pmthyUnMuJ/dYbx8pTYA3VXV6fet9XNOmpS5Mtd9MuSPq638Gx\n6Fyxqq8cRUUEO7CenOotr0+/70TJfi+7kv5GyXYCnyoZNB27KOn9onPl7dFe69NgCqUYwLiCMkis\nwOX1/jjXND2N8deUzG8f3xLvhZLyy9c1nS+nKrgLUsHdljAHBk8Bw8oGJ6vU2AvmsR9L+ndJb6tg\nTnpvMLyt1Pa9qri4Cc2gxw7Y5lQwODmrp5y5KKS34x1J+jdJv6mCHv/R7tZe0WZgaB/BDtgWq/6O\nhk7TM1/S5ZQn/p9TQXBTYlkcgh0wLHBb26xY0xeFu5K+lD62OgxuFjJVR40dQKGSRUmdLiZiIVMY\neuwACmVuoFF1v5g2uAWee+Uwjx1AVbEWt5hokedeOZRiAFS2yDo3NfbqCHYAhfx89BuSnh3tbu0t\nuj2ohmAHkMuH+kepp94j3FcDNXYARW7MeIwlRbADKPJsxmMsKUoxAApRY19NBDsAGEMpBgCMYeUp\nsKaYF24XpRjAiJCgZu8V2yjFAAbUuIepU71b42EFEOyADU5hQR2LvVfMItgBG2IFBDU3kbaNGjtg\nRI0ae6XXYvUQ7MCaYeDUPkoxwPpxYuDUNIIdWD+xGDg1jVIMsIaosdtGsAOAMZRiAMAYgh0AjCHY\nAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAY\ngh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0AjCHYAcAYgh0A\njCHYAcAYgh0AjPkZ0oy5HWDiAv0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "for i in np.arange(0,k):\n", " I = np.nonzero(yb==i)[0]\n", " plt.plot(Z[I,0], Z[I,1], '.')\n", "CV = (C-np.mean(X,axis=0)).dot( V.transpose() )\n", "for i in np.arange(0,k):\n", " plt.plot(CV[i,0], CV[i,1], 'ok')\n", "plt.axis('tight')\n", "plt.axis('equal')\n", "plt.axis('off');" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "for l in np.arange(0,k):\n", " C[l,:] = np.mean( X[yb==l,:], axis=0 )" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "__Exercise 3__\n", "\n", "Peform several step of the $k$-means algorithm.\n", "nit" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_1_pca_nn/exo3" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "## Insert your code here." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "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": 31, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEvpJREFUeJzt3V+onfWd7/H3Z2LSHrBUMBlO0NRtqeciLbaNIU05UIRS\njrUHc2EH0oszzVAJTMfT9jKeC2fqVXtzymkrSLCCLcPowQ5l20ZEqNCrptmR6PFPlVQ6GBGM2tHK\nnFFSvnOxn9rF6orrWTsra+3n5/sFC55nPT/3+n75xc9+1vOs9dupKiRJbfmLZRcgSZo/w12SGmS4\nS1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUoEuW9cLbt2+vlZWVZb28JA3SyZMnX6mqHdPG\nLS3cV1ZWWFtbW9bLS9IgJfmXPuO8LCNJDVrambukzW3lyM+WXUKzfvutL1z01/DMXZIaZLhLUoMM\nd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCX\npAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1KBe4Z7khiTPJjmd5MiE\n44eSnE1yqnvcMv9SJUl9XTJtQJItwJ3A54AzwIkkq1X19NjQ+6vq1otQoyRpRn3O3PcBp6vq+ap6\nG7gPOHBxy5IkXYg+4X4F8MLI/pnuuXE3J3kiyQNJdk36QUkOJ1lLsnb27NkNlCtJ6mNeN1QfBFaq\n6lrgEeDeSYOq6mhV7a2qvTt27JjTS0uSxvUJ9xeB0TPxK7vn3lFVr1bVW93u3cB18ylPkrQRfcL9\nBHBNkquTbAMOAqujA5LsHNm9CXhmfiVKkmY19dMyVXUuya3Aw8AW4J6qeirJHcBaVa0CX0tyE3AO\neA04dBFrliRNMTXcAarqGHBs7LnbR7ZvA26bb2mSpI3yG6qS1CDDXZIaZLhLUoMMd0lqkOEuSQ0y\n3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNd\nkhpkuEtSgwx3SWqQ4S5JDTLcJalBlyy7AL03rBz52bJLaNZvv/WFZZegTcgzd0lqUK9wT3JDkmeT\nnE5yZMLx9yW5vzt+PMnKvAuVJPU3NdyTbAHuBD4P7Aa+lGT32LCvAL+rqo8A3wG+Pe9CJUn99Tlz\n3wecrqrnq+pt4D7gwNiYA8C93fYDwGeTZH5lSpJm0eeG6hXACyP7Z4BPnW9MVZ1L8jpwOfDK6KAk\nh4HD3e6bSZ4dObx9fHxDWu3NvjaBzPY+eVC9zWBQfV3gnF3V5z9a6KdlquoocHTSsSRrVbV3kfUs\nSqu92dfwtNpbq33Bxnvrc1nmRWDXyP6V3XMTxyS5BPgg8OqsxUiS5qNPuJ8ArklydZJtwEFgdWzM\nKvDlbvuLwM+rquZXpiRpFlMvy3TX0G8FHga2APdU1VNJ7gDWqmoV+AHwoySngddY/wUwq4mXaxrR\nam/2NTyt9tZqX7DB3uIJtiS1x2+oSlKDDHdJatDCw73HUgaHkpxNcqp73LLoGjciyT1JXk7y5HmO\nJ8l3u76fSLJn0TVuRI++rk/y+sh83b7oGjciya4kjyZ5OslTSb4+YcxQ56xPb4ObtyTvT/KrJI93\nfX1zwpjBLYXSs6/Zc7GqFvZg/Ybsb4APA9uAx4HdY2MOAd9fZF1z6u0zwB7gyfMcvxF4CAiwHzi+\n7Jrn1Nf1wE+XXecG+toJ7Om2PwA8N+Hf4lDnrE9vg5u3bh4u7ba3AseB/WNjvgrc1W0fBO5fdt1z\n6mvmXFz0mXufpQwGqap+wfonhc7nAPDDWvdL4LIkOxdT3cb16GuQquqlqnqs2/498Azr37QeNdQ5\n69Pb4HTz8Ga3u7V7jH8iZHBLofTsa2aLDvdJSxlM+kd3c/c2+IEkuyYcH6K+vQ/Rp7u3lA8l+eiy\ni5lV99b9k6yfMY0a/Jy9S28wwHlLsiXJKeBl4JGqOu+cVdU54I9LoWxqPfqCGXNxM95QfRBYqapr\ngUf4029hbU6PAVdV1ceB7wE/WXI9M0lyKfBj4BtV9cay65mnKb0Nct6q6g9V9QnWvym/L8nHll3T\nPPToa+ZcXOjn3JN8GviHqvpv27dvr5WVlYW9tiS14OTJk68A26rqg+82btF/Zu+dpQyuu+461tbW\nFvzykjRs3aq7U1fAXPSqkKNLGUiSZveXwH+fNmjhfyC7qo4Bx/bu3eu6B+8h/oHsi8c/kP2e81xV\n/XraoM14Q1WSdIEMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkN\nMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSg3qFe5Ibkjyb5HSSIxOOH0pyNsmp7nHL/EuVJPU1\n9c/sJdkC3Al8DjgDnEiyWlVPjw29v6puvQg1SpJm1OfMfR9wuqqer6q3gfuAAxe3LEnShegT7lcA\nL4zsn+meG3dzkieSPJBk11yqkyRtyLxuqD4IrFTVtcAjwL2TBiU5nGQtydrZs2fn9NKSpHF9wv1F\nYPRM/MruuXdU1atV9Va3ezdw3aQfVFVHq2pvVe3dsWPHRuqVJPXQJ9xPANckuTrJNuAgsDo6IMnO\nkd2bgGfmV6IkaVZTPy1TVeeS3Ao8DGwB7qmqp5LcAaxV1SrwtSQ3AeeA14BDF7FmSdIUU8MdoKqO\nAcfGnrt9ZPs24Lb5liZJ2ii/oSpJDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEu\nSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJalCvP9Yh6b1n5cjPll1Cs377rS9c9Nfw\nzF2SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLc\nJalBvcI9yQ1Jnk1yOsmRCcffl+T+7vjxJCvzLlSS1N/UcE+yBbgT+DywG/hSkt1jw74C/K6qPgJ8\nB/j2vAuVJPXX58x9H3C6qp6vqreB+4ADY2MOAPd22w8An02S+ZUpSZpFn3C/AnhhZP9M99zEMVV1\nDngduHweBUqSZrfQv8SU5DBwuNt9M8mzI4e3A68ssp4FarU3+9oEMttF0EH1NoNB9XWBc3ZVn/+o\nT7i/COwa2b+ye27SmDNJLgE+CLw6/oOq6ihwdNKLJFmrqr19ih6aVnuzr+FptbdW+4KN99bnsswJ\n4JokVyfZBhwEVsfGrAJf7ra/CPy8qmrWYiRJ8zH1zL2qziW5FXgY2ALcU1VPJbkDWKuqVeAHwI+S\nnAZeY/0XgCRpSXpdc6+qY8CxseduH9n+d+CvLrCWiZdrGtFqb/Y1PK321mpfsMHe4tUTSWqPyw9I\nUoMWHu49ljI4lORsklPd45ZF17gRSe5J8nKSJ89zPEm+2/X9RJI9i65xI3r0dX2S10fm6/ZJ4zab\nJLuSPJrk6SRPJfn6hDFDnbM+vQ1u3pK8P8mvkjze9fXNCWMGtxRKz75mz8WqWtiD9RuyvwE+DGwD\nHgd2j405BHx/kXXNqbfPAHuAJ89z/EbgISDAfuD4smueU1/XAz9ddp0b6GsnsKfb/gDw3IR/i0Od\nsz69DW7eunm4tNveChwH9o+N+SpwV7d9ELh/2XXPqa+Zc3HRZ+59ljIYpKr6BeufFDqfA8APa90v\ngcuS7FxMdRvXo69BqqqXquqxbvv3wDP8+TevhzpnfXobnG4e3ux2t3aP8ZuGg1sKpWdfM1t0uPdZ\nygDg5u5t8ANJdk04PkR9ex+iT3dvKR9K8tFlFzOr7q37J1k/Yxo1+Dl7l95ggPOWZEuSU8DLwCNV\ndd45qwEthdKjL5gxFzfjDdUHgZWquhZ4hD/9Ftbm9BhwVVV9HPge8JMl1zOTJJcCPwa+UVVvLLue\neZrS2yDnrar+UFWfYP2b8vuSfGzZNc1Dj75mzsU+S/7O80bh1KUMqurVqnqr270buG5ajQPRZxmH\nwamqN/74lrLWvw+xNcn2JZfVS5KtrIffP1bVP08YMtg5m9bbkOcNoKr+FXgUuGHs0Dtz9m5LoWxW\n5+trI7k49XPuST4DvMn6tcc/+y2Z5Ebgf7J+8+lTwP+pqk+d52ddwvrNnc9efvnlz6+srEyrT5I0\n4uTJk28Az1TV/ncb12f5gV9M+TjROzedgF8muSzJzqp6acLPemcpg5WVFdbW1qa9vCRpRHeD+NC0\ncfO45j7TTaeqOlZV/2UOrytJ70XPVdWvpw1a2nruH/rQhzb8c1aO/GxeJWnMb7/1hWWXIGkO5nHm\n3vumU1Udraq9VbV3x44dc3hpSdIk8wj3VeCvu0/N7Aden3S9XZK0OFMvyyT5J9a/qrw9yRng71n/\nBhVVdRfrSwHfCJwG/g34m4tVrCSpnz6flvnSlOMF/N3cKpIkXbDN+A1VSdIFMtwlqUGGuyQ1yHCX\npAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lq\nkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGtQr3JPckOTZJKeTHJlw/FCSs0lOdY9b5l+qJKmv\nS6YNSLIFuBP4HHAGOJFktaqeHht6f1XdehFqlCTNqM+Z+z7gdFU9X1VvA/cBBy5uWZKkC9En3K8A\nXhjZP9M9N+7mJE8keSDJrkk/KMnhJGtJ1s6ePbuBciVJfczrhuqDwEpVXQs8Atw7aVBVHa2qvVW1\nd8eOHXN6aUnSuD7h/iIweiZ+ZffcO6rq1ap6q9u9G7huPuVJkjaiT7ifAK5JcnWSbcBBYHV0QJKd\nI7s3Ac/Mr0RJ0qymflqmqs4luRV4GNgC3FNVTyW5A1irqlXga0luAs4BrwGHLmLNkqQppoY7QFUd\nA46NPXf7yPZtwG3zLU2StFF+Q1WSGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNd\nkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWp\nQb3CPckNSZ5NcjrJkQnH35fk/u748SQr8y5UktTf1HBPsgW4E/g8sBv4UpLdY8O+Avyuqj4CfAf4\n9rwLlST11+fMfR9wuqqer6q3gfuAA2NjDgD3dtsPAJ9NkvmVKUmaRZ9wvwJ4YWT/TPfcxDFVdQ54\nHbh8HgVKkmZ3ySJfLMlh4HC3+2aSZ0cObwdeWWQ9CzSY3jLbBbXB9DWjVvuCdntrtS/4896u6vMf\n9Qn3F4FdI/tXds9NGnMmySXAB4FXx39QVR0Fjk56kSRrVbW3T9FD02pv9jU8rfbWal+w8d76XJY5\nAVyT5Ook24CDwOrYmFXgy932F4GfV1XNWowkaT6mnrlX1bkktwIPA1uAe6rqqSR3AGtVtQr8APhR\nktPAa6z/ApAkLUmva+5VdQw4Nvbc7SPb/w781QXWMvFyTSNa7c2+hqfV3lrtCzbYW7x6IkntcfkB\nSWrQwsO9x1IGh5KcTXKqe9yy6Bo3Isk9SV5O8uR5jifJd7u+n0iyZ9E1bkSPvq5P8vrIfN0+adxm\nk2RXkkeTPJ3kqSRfnzBmqHPWp7fBzVuS9yf5VZLHu76+OWHM4JZC6dnX7LlYVQt7sH5D9jfAh4Ft\nwOPA7rExh4DvL7KuOfX2GWAP8OR5jt8IPAQE2A8cX3bNc+rreuCny65zA33tBPZ02x8Anpvwb3Go\nc9ant8HNWzcPl3bbW4HjwP6xMV8F7uq2DwL3L7vuOfU1cy4u+sy9z1IGg1RVv2D9k0LncwD4Ya37\nJXBZkp2LqW7jevQ1SFX1UlU91m3/HniGP//m9VDnrE9vg9PNw5vd7tbuMX7TcHBLofTsa2aLDvc+\nSxkA3Ny9DX4gya4Jx4eob+9D9OnuLeVDST667GJm1b11/yTrZ0yjBj9n79IbDHDekmxJcgp4GXik\nqs47ZzWgpVB69AUz5uJmvKH6ILBSVdcCj/Cn38LanB4DrqqqjwPfA36y5HpmkuRS4MfAN6rqjWXX\nM09TehvkvFXVH6rqE6x/U35fko8tu6Z56NHXzLm46HCfupRBVb1aVW91u3cD1y2otoutzzIOg1NV\nb/zxLWWtfx9ia5LtSy6rlyRbWQ+/f6yqf54wZLBzNq23Ic8bQFX9K/AocMPYoXfm7N2WQtmsztfX\nRnJx0eE+dSmDsWuaN7F+vbAFq8Bfd5/A2A+8XlUvLbuoC5XkP//xmmaSfaz/m9r0/zN1Nf8AeKaq\n/vd5hg1yzvr0NsR5S7IjyWXd9n8CPgf8emzY4JZC6dPXRnJxoatCVr+lDL6W5CbgHOs38g4tssaN\nSvJPrH8CYXuSM8Dfs35jhKq6i/Vv+N4InAb+Dfib5VQ6mx59fRH42yTngP8PHNzs/zN1/ivwP4D/\n113rBPhfwIdg2HNGv96GOG87gXuz/geE/gL4v1X10wx/KZQ+fc2ci35DVZIatBlvqEqSLpDhLkkN\nMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSg/4D4G8Yx/5Bd1kAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "for l in np.arange(1,k+1):\n", " I = np.nonzero(yb==l-1)[0]\n", " h = myhist(y[I])\n", " h = h/h.sum()\n", " plt.subplot(k,1,l)\n", " plt.bar(np.arange(1,k+1),h)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "__Exercise 4__\n", "\n", "Implement better initialization strategies such as farthest point sampling or\n", "[$k$-means++](https://en.wikipedia.org/wiki/K-means%2B%2B)." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "run -i nt_solutions/ml_1_pca_nn/exo4" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "## Insert your code here." ] }, { "cell_type": "raw", "metadata": { "deletable": true, "editable": true }, "source": [ "" ] } ], "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.4.5" } }, "nbformat": 4, "nbformat_minor": 0 }