{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ECE 417 Lecture 15: Expectation Maximization\n", "## Mark Hasegawa-Johnson, October 17, 2017\n", "This file is distributed under a CC-BY license. You may freely re-use or re-distribute the whole or any part. If you re-distribute a non-trivial portion of it, give me credit." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Outline of Today's lecture\n", "* Preliminaries\n", "* Always initialize a GMM from a Gaussian\n", "* K-means clustering algorithm\n", "* Expectation Maximization (EM)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Preliminaries\n", "First let's load some libraries, and some data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import scipy.stats as stats\n", "import requests\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'],\n", " ['7.0', '3.2', '4.7', '1.4', 'Iris-versicolor'],\n", " ['6.3', '3.3', '6.0', '2.5', 'Iris-virginica'],\n", " ['']]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Download data from the UCI repository\n", "r=requests.get('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')\n", "# Split at every newline; split each line at commas\n", "dataset = [ x.split(',') for x in r.text.split('\\n') ]\n", "dataset[0::50]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a dictionary from labels t indices, and back again\n", "label2class = { 'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2 }\n", "class2label = { 0:'Iris-setosa', 1:'Iris-versicolor', 2:'Iris-virginica' }\n", "# Read out a list of the class labels, convert to integers\n", "Y = [ label2class[x[4]] for x in dataset if len(x)==5 ]\n", "Y[0::50]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 5.1, 3.5, 1.4, 0.2],\n", " [ 5.4, 3.4, 1.7, 0.2],\n", " [ 5. , 3.5, 1.3, 0.3],\n", " [ 5. , 2. , 3.5, 1. ],\n", " [ 5.5, 2.4, 3.8, 1.1],\n", " [ 6.3, 3.3, 6. , 2.5],\n", " [ 6.9, 3.2, 5.7, 2.3],\n", " [ 6.7, 3.1, 5.6, 2.4]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a numpy arrays for each data subset\n", "X = np.array([ x[0:4] for x in dataset if len(x)==5 ], dtype='float64')\n", "X[0::20]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\niDTs/wMS7nz8bFY0NAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot a scatter plot of the three classes, so we can see how well they separate in the first two dimensions\n", "plt.plot(X[1:50,0],X[1:50,1],'x',X[50:100,0],X[50:100,1],'o',\n", " X[100:150,0],X[100:150,1],'^')\n", "plt.title('Scatter plot of the three classes, in the first two dimensions')\n", "plt.xlabel('Dimension 0')\n", "plt.ylabel('Dimension 1')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Always Initialize a GMM from a Gaussian\n", "Remember from last time that the pdf for a GMM is\n", "$$p_{X|Y}(\\vec{x}|y)=\\sum_{k=1}^K c_{yk}{\\mathcal N}(\\vec{x};\\vec\\mu_{yk},\\Sigma_{yk})$$\n", "\n", "Finding the parameters $\\vec\\mu_{yk}$ and $\\Sigma_{yk}$ is a little tricky. You'll almost always get the best results if you first find the mean and covariance of each Gaussian." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Compute the mean of each class. axis=0 means to compute the average row vector \n", "mu=np.empty((3,2))\n", "for y in range(0,3):\n", " mu[y,:] = np.mean(X[50*y:50*(y+1),0:2],axis=0)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Compute the covariance of each class.\n", "Sigma = np.empty((3,2,2))\n", "for y in range(0,3):\n", " Sigma[y,:,:] = np.cov(X[50*y:50*(y+1),0:2],rowvar=False)\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create a coordinate system on which we can calculate the Gaussian pdf\n", "coords = np.mgrid[4:8:0.01,2:4.5:0.01].transpose((1,2,0))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdQAAAEICAYAAADm2wU4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXucHFWd9/8+3dMzPdOZeyZzyeRCEggYhURQkHVNNqAI\nAt7W3+q6qygrqyv7sI+4uCq662X3cb3rw7osK7+Hdb093kBhAUWUsIqghIRAIJiEXEjmkslkLpme\ne/d5/qiqnuru6u7q7uru6pnv+/Wa13RXnTr1rdNV51Pfc/kepbVGEARBEITiCFTaAEEQBEFYDIig\nCoIgCIIHiKAKgiAIggeIoAqCIAiCB4igCoIgCIIHiKAKgiAIggeIoNpQSv2DUuqbZTrXHyil9iul\nJpRSb3CRfq1SSiulasphn1copfYqpbZV2o58UUq9Tyk1aP4+7S7SX6OU+lU5bKsWzLJbV2k7cqGU\nulUp9bEs+8tWL/gVpdQ2pdSxStuRL/nYrZR6u1LqZ1n2P6SU+otsebgSVKXUnyqlHjcfkH6l1H1K\nqVe6OTZHvncopT5dbD6VQCl1WCl1aRFZfBK4RWu9TGt9Vwny9wVa601a64cqbUc+KKVCwBeB15i/\nz3DKft+93CilapVSH1dKPaeUiiqljpvP6WsqZZNZds9X6vxu0Vq/V2v9KfCncDjVk36uH6q1Xtda\nf0trXdTzklNQlVIfAL4M/BPQCawG/gW4upgTlxo/VXYZWAPsrbQRgiOdQJgS/T7KwOvWoR8Arwfe\nAbQCZwBfAV7n8XmEKqdE95/vqIgGaK0z/gHNwATwlixp6jAEt8/8+zJQZ+7bBhwDbgROAP3Au8x9\n1wFzwKx5jrvN7ecADwGjGBXa1bZzPQT8he37NcCvbN818H5gP3DIwda1ZprrTFv7gQ/a9v8D8E3b\n96tNG0bNc59jbv9PIA5MmbbflKFs3gMcAE4BPwF6zO0HU46vSzkuLX+b7e8EjgIngY/ajgkAf2fm\nPQx8D2jLYJf1u9xk+13eAFwB/N609yO29C8HfmOWQz9wC1Br7rvYtGWV+f08YAQ42/x+GLjUVr7f\nB74JnAaeAs4CPmza8QKGV0jqsam/j6083mUeNwK8F3gZsMe09ZZ871vTnqiZ9wTwC4djj9r2TwCv\nwLwXgc+bthwCLk+5d/8R+LX5u27AeL5uN8v0OPBpIGg75t3As2Z+PwXWZLiWS808e3M8z9b9cRp4\n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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Calculate the Gaussian pdfs at the same set of points\n", "pdf = np.empty((400,250,3))\n", "for y in range(0,3):\n", " pdf[:,:,y] = stats.multivariate_normal(mu[y,:],Sigma[y,:,:]).pdf(coords)\n", "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],np.amax(pdf,axis=2))\n", "ax.plot(X[0:50,0],X[0:50,1],'x',X[50:100,0],X[50:100,1],'o',X[100:150,0],X[100:150,1],'^')\n", "plt.title('Contour plot of the maximum of three Gaussians, with scatter plot overlaid')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEICAYAAAC6fYRZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt4ZHd95/n3t9VS62JdWmp1S2r1BWi7bTe03eAxjiHY\ng4EFw0BmMM8CIQE2G4cMyRMmZMgmy/IYJmF3sjssAwQ8ZMgEwiUXSJiEgDcOAUPGscF2txvabttt\nuy9qSX3RvUtSSy19949zqlRVOlV1SlVSlUqf1/P006pTp0796tSpT/3qe37nHHN3RESkNm2qdANE\nRGT1KORFRGqYQl5EpIYp5EVEaphCXkSkhinkRURqmEJ+FZjZPWb25TV6rleY2TNmdsnMfi7i/mNm\ndvtatKXamNl3zOzdlW7HSpjZz5rZU3nu32tmbmab17Jd1cbMTprZayrdjmIV0+7ws/3CHPe9x8z+\nKd/j1zTkzeydZvZI2Oih8EP4yjIs90/M7PfK0ca1VoaN9GPAZ9z9Knf/Zvad7n7A3b9fwvJjf2mZ\n2dvN7GEzS5jZ+fDvf2tmVsrzr5S7v8Hdv7gayw635VPha/2mmXWWc/nu/kN335/2fFUVZmZ2u5kN\nZE1bs85NsaLau16En+3nVvr4NQt5M/tN4JPAx4EdwG7gD4E3r1UbVmId9JT2AMcq3Qgz+yDwn4H/\nG+gheI/fB7wCaKhg08rOzA4A/wX4BYLXOQ18tqKNqgHr4LNWsoq8Rndf9X9AO3AJeFueebYQfAkM\nhv8+CWwJ77sdGAA+CJwHhoD3hvfdDcwDc+Fz/G04/Trg+8A4QQi+Oe25vg/8r2m33wP8U9ptB94P\nPAM8H9HWveE8d4dtHQJ+K+3+e4Avp91+c9iG8fC5rwun/ymwCMyEbf9QjnXzy8AJYBT4G6AvnP5s\n1uO3RDz2JPCa8O8/AX4v7b7bgYG0278NnAWmgKeAO4DXh+t2PnyOx3O8vwngrQW2gzcCh4FJ4Axw\nT662RLT9ZuCR8LHngE+E0xuBLwMj4fr9MbAj+30GXgT8YzjfReArQEfWc/0WcBSYAP4caMzxOj4O\nfDXt9ovCddQa47PwReCD4d87k9ta2nJGCTpfqfURtZ2wtA2+Gzgdvqb/Pc/z3gk8Eb63Z8ncXt8C\nHAnX7bPA68Pp7wWeDB/zHPAr4fSWsC2LYXsuAe+M2k7CbeMLBJ+Rs8DvAXVpn7v/Afy/4fvyexHt\nvgf4evh+TAGPATfk2EYiMyRHe/tybMdfAi4Ap4APh+/FFoJt68Vp83aHy9we3n5TuA7HgQeBg1lt\n/G2CbesysJnl2/Y/h48dAj4DNGTl0b7w7y6CDJgEfgT8B9KyK/K9jxPSpf4jCIorwOY883wMeAjY\nHq7AB4H/kBYAV8J56gk22Glga47wqicIxd8l6EW+OtxA9md/+NM2tuyQvx/oBJoi2ro3nOdr4Qb0\nknDDSL5p9xCGPHANQQC+NmzXh8K2NWRvpDnWy6sJPsAvDTe2TwM/iNrIczw+fWPKXk+3sxQk+wmC\nty/tNb4o+/Ws9P1Ne76XEHxwDhKE9c9ltyVH2/8Z+IXw76uAW8K/fwX4W6AZqANeBrRlv8/AvvA9\n2EKwff0A+GTWc/0I6Avf9yeB9+V4Hf8d+O2saVPAy2J8Fv4Xljoi7yQI1T9Pu++/R62P7PeZpW3w\nj4Am4AaCALkux/MOAT8b/r0VeGn4980EX2qvDd+XncC14X1vJPjiMeA2gs/cS6Pal2s7Af6a4FdP\nC8Fn+0csfVm8J9xufp0g+KI+a/cQfHHcRfD5+S3geaA+YhsplCEDUesm7bm+FL63reH6fRr4pfC+\nPwZ+P23e9wP3hX8fIuh8vpxgG3x32K4taW08AuxKvsasdr8MuCVcB3sJtr0PZOVRMuT/DPiLcH2+\nmOCLM2/Ir1W5pgu46O5X8szz88DH3P28u18APkrwczhpPrx/3t2/TfBtvD9iORCssKuA/8vd59z9\nH4FvAe8oos3/p7uPuvtMnnk+6u4Jd/8J8N9yLP9/Bv7O3e9393ng/yH4UN4asx0/D/yxuz/m7peB\n3wF+xsz2xn0hMS0QBOD1Zlbv7ifd/dmYj91G1vtrZg+a2biZzZjZqwDc/fvu/hN3X3T3owRfkrfF\nfI55YJ+ZbXP3S+7+UNr0LoIPwYK7P+ruk9kPdvcT4XtwOdy+PhHx3J9y90F3HyX44rgxR1uuIgjG\ndJME4VDIA8ArzWwT8CrgDwhKWoTteSDGMtJ91N1n3P1x4HGCsI8yT/Detrn7mLs/Fk7/JYLt6/7w\nfTnr7scB3P3v3P1ZDzwA/D3ws3EbZmY7CDpkHwg/J+cJeu1vT5tt0N0/7e5X8nzWHnX3r4efn08Q\n/Hq7JWK+QhmSr611Ybt+x92n3P0k8J/SHv/VrHa/M5wGwS/6/+LuD4fb4BcJvnDT2/gpdz8T9RrD\nbfahcB2cJPhSXPa5CNv4VuAj4fr8KcEvw7zWKuRHgG0F6lF9BD+Rkk6F01LLyPqSmCb4sOVa1hl3\nX8xa3s74TeZMkfNktze9LanXFbbpTBFtyX78JYL1WcxrKcjdTwAfIOg5nTezPzOzqNcTZdn76+63\nuntHeN8mADN7uZl9z8wumNkEQc1+W8zn+CWCX0XHzezHZvamcPqfAv8f8GdmNmhmf2Bm9dkPNrMd\n4Ws6a2aTBCWe7OceTvs73/Z1CWjLmtZO0JvPK/ziTBB8gfwsQedj0Mz2s7KQj9vmtxIE7ikze8DM\nfiacvovg18QyZvYGM3vIzEbNbDx8fNz3C4L9RfXAUPiFP04QYNvT5inqcxZ+fgaI8Vkj92cyyraw\nrdmPT37Ovgc0h9vwXoL376/D+/YAH0y+xvB17sp67pyv08yuMbNvmdlwuG1+nOj13E3Q28/OnbzW\nKuT/meCbbdkQvzSDBCsraXc4LQ6PWNausLeUvryz4d8Jgp/3ST0xlhllV9byo9qb8brCkSa70tpS\n6HmyH99C0HM9m/MRueV93e7+VXd/Zfh8DvzHmG1Mvr9vKTDfVwnqibvcvR24l6AUsKxtYa+lO61t\nz7j7OwgC4j8CXzezlvCX3Ufd/XqCX0dvAn4x4rk/Hr6Ol7h7G/CutOcu1jHSesxm9iKCsuDTMR//\nAEH5ocHdz4a3301QRjmS4zFxtsec3P3H7v4WgvX3TYKf/BAExouy5zezLcA3CH557gi/sL/N0jqL\nak/2tDME28U2d+8I/7W5+4E8j4mS+pyFn+l+YnzWyPxMFnqeiwS/drIffxbA3RcI1tk7wn/fcvfk\nl/oZglJOR9q/Znf/Wtqy8j3/54DjwNXhtvm7RG+bFwjKW9m5k9eahLy7TwAfAf7QzH7OzJrNrD7s\nKfxBONvXgA+bWbeZbQvnjzsc6xyQPo70YYJezYfC57kd+FcE9SwIPkj/JmzHPoJe4kr8H+EyDhDs\npPrziHn+Anijmd0R9jA/SLDhP5ij7dm+BrzXzG4MP3gfBx4Of9YV6whwp5l1mlkPQc8dADPbb2av\nDp9jlqUdVck27s360kxx93GCn8afNbO7zKzVzDaZ2Y0EtcOkVmDU3WfN7GaCn7xJTwONZvbGcD19\nmKB8lGzfu8ysO+zJjYeTF83sX5rZS8IvhUmCD2r6L7j0574ETJjZTuDfF15dOX0F+FcWjGVvIdj5\n9VfJD304lPD7eR7/APBrBPsFINh38GsEtdWFHI8ptJ3kZGYNZvbzZtYeljwmWVpHXyDYvu4I37Od\nZnYtwZfWFsJgMbM3AK/Lak+XmbVnTUttJ+4+RFDi+U9m1hYu/0VmFrdEl/QyM/s34S/FDxB8fh6K\nmC9fhkS1NyUtxH8/3H73AL9JZgZ9laD8+vMslWog2C/yvrCXb2bWEm7Hccp3EGybk8ClcN3/ap42\n/hVwT5g71xN0DvLLV7Av979w5TxC0GsbBv4OuDW8rxH4FMEOoqHw70aPt1Puapb2bH8znHaA4MM0\nQTCq4F+nPXYbwcY3RbB3/x6W73jdl+d17CVzdM0waSNjWD665l+HbZgI23Qg7b63EIyOGCdtxEPW\n872P4Cf1KMHP+/6o9ZDjsenrqZHgi2iSYE//v2Npx+tBgp1iU2nPk9wJ2wX8EzAGPFbg/f0RwRfs\nBYIv27tZ2sl8F8HPy6lw+Z/JWk/vCd/78wQ72NLb/uVw+iWCnnRyh+07CEYCJQg+yJ8i3AFM5o7X\nA8Cj4eOPEHzZ5tuxmfEeRrzWd4bvW4JgZ11n2n1fIG0nXcRj94fbz7vD2+0EPbTfTpvn9qz2ZWwn\nLG2Dm9PmSb3erOdrAO4L379JghFIr8zaPo+G78sJ4H/ypZ2L58Ln/FOCTlL6jvs/ZmlUU1/UdhK+\nts8RlFgmCEZXvT3t/c4/MmT56JrDhDt/c2zfkRkS1d6I59pKsJ1dIOidfwTYlDVPcpRbQ9b014fr\nNTlC5i8JR1tlb1sR7X4VQU/+EvBDgh3IkXlE8Ov2WxQxusbCB0oRwppccg9/vp3JFWdmp4F3ufsP\nCs4sZWFmR4A73H2k0m1Z78zsHoKAe1el27Je1fzBBxuZmXUTfPOfrHBTNhR3zzUqR2TN6dw1NcrM\n/gXBwVyfdvfTlW6PiFSGyjUiIjVMPXkRkRpWsZp8w6Ymb6qLO8JIREQAJq9cuOju3YXnDFQs5Jvq\nWrl129sq9fQiIuvSfcOfLXiUazqVa0REaphCXkSkhinkRURqmEJe1oWRAy8k0ZN5hb1ETycjB1Z0\nOheRDUMhL+tC48g4Z287lAr6RE8nZ287ROPIeIFHimxsOq2BrAstw6PsfOAwZ287xNanTjO2fzc7\nHzhMy/BopZsmUtXUk5d1o2V4lK1PnebiDVez9anTCniRGBTysm4kejoZ27+bbY8/w9j+3ctq9CKy\nnEJe1oVkDX7nA4fpPvJMqnSjoBfJTyEv68JsV0dGDT5Zo5/t6qhwy0Sqm3a8yrrQdey5ZdNahkdV\nlxcpQD15EZEappAXEalhCnkRkRqmkBcRqWEKeRGRGqaQFxGpYQp5EZEappAXEalhCnkRkRqmkBcR\nqWEKeVl1uqqTSOUo5GXV6apOIpWjE5TJqtNVnUQqRz15WRO6qpNIZSjkZU3oqk4ilaFyjayauWv7\nAZhpa2F43x56TpyiaXaGhucHGHj1TcHtycSyxzUcH1jrporULIW8lE0y1LPNtjRnBHrTZIKeE6eY\nbWmODPnkchT2IqVTyEtJcgV7uq1DF5ZNa5pMRAZ89rIV9CKlUU1+g1vpGPa5a/tjBXyp1up5RGqV\nQn6DK3YMu0JXZH1RuWaDizuGvdLBrtKNyMqoJy95x7BXU8+9Wtohsp6oJy/LxrA3D49Q39Fc6WaJ\nSBmoJ7/BJWvwOx84TPeRZ9gRjmGfaWupdNMiqTcvUhyF/AY329WRqsHPXdufMYZdRNY/lWs2uK5j\nzwV197TyTJwx7CKyPqgnv8Gp/CFS22KHvJnVmdlhM/tWxH1mZp8ysxNmdtTMXlreZkq5rdaomYkX\nbcn4t1Z0YRKRaMWUa34DeBJoi7jvDcDV4b+XA58L/5cqVI5wjxvg2fO1P3u55OeOGjOfPKgruX8h\nfYeyyEYWK+TNrB94I/D7wG9GzPIW4Evu7sBDZtZhZr3uPlS+pkqpSg33cvTMk8soR9in04VJRKLF\nLdd8EvgQsJjj/p3AmbTbA+G0DGZ2t5k9YmaPzC3OFNVQKU0pAb8apZfVKOXowiQiyxUMeTN7E3De\n3R8t9cnc/fPufpO739SwqanUxUlMKw341a6rl3vZujCJyHJxyjWvAN5sZncCjUCbmX3Z3d+VNs9Z\nYFfa7f5wmlRQKeG+3qTX4FuGR2keHsm4LbJRFezJu/vvuHu/u+8F3g78Y1bAA/wN8IvhKJtbgAnV\n4ytrJQG/1iNiks9ZDukHdcFSjX62q6MsyxdZr1Z8MJSZvQ/A3e8Fvg3cCZwApoH3lqV1siLFBvx6\n7Lln6zr23LJpLcOj6sXLhldUyLv794Hvh3/fmzbdgfeXs2FSvPUa7hMv2lL20TYiEtARrzWikgE/\n0baT6cbMssh0YwcTbcsGWJWFzisvEp/OXVMDign4lYb71B7Led/i3DTTDdu5vNXY3DBO3bl2plu2\n05w4v6LnEpHyUcivc6sZ8PmCPd3mhuBSgQvz3SwuXIVf1UTzpfM0z0ZfQlBE1o5Cfh2LG/DFhHvc\nYM+2uWE8CPjFZmzTNAs7JuDUihYlImWkmvw6Ve6An9pjKw54gCtzHfhiE7ZpGl9s4spcR0nLE5Hy\nUE9+HSpnwJcjiK/MdbAw301d/QU2N4ynbgfLH6f1lJf8HCKyMgr5daTawj1pcaE5FfCwVKNfXGgG\nyluX18gakeIo5NeJag14gIamwWXTgqDXjleRSlNNfh0oV8CXWndfKdXmRSpHPfkqV2rAj3bspX4+\nAdsupqbNz3azuNjMlubo4S+Xd8/Fes4tpxtizVcOY73dNCamSX/GRE8ns10dkac0EJGAevJVrCw9\n+C3TXG7ayvxssCN0frabxYUONm2azpjt8u651L+4ipm3VI2Jac69oD91+uDkWScbR1QSEslHPfkq\nFSfg45Rn6rnA/CwsLnRwOXEVsJlNdePUN14ASg/qy7vn1qRH3zSZ0JWfRFZAPfkqVK6ATwoC/QpQ\nD1yhvvFC0b32fNaqR68rP4kUTyFfZUoN+Kidq0GpZjMwD2zmcn1XaY0sszhnoGw4PqArP4msgEK+\nipQj4LMla/B0jMJ1TwX/j3fCUG9Jbc222r359Cs/dR95JlW6UdCL5KeQrxKrEfAAi4vNQbD3hhfq\n6h0KbieuWlE7K0VXfhJZGe14rQKrFfAAXPvM8mm9ua/MuLc/2CF7cqC7YJvWSsPxAaIKTLryk0hh\nCvkKW62AT5VPRrZB4wy0JJbuTLTAbBN0XUyFerbk9ImTuxm7vCnn4zOeg/nULIsLTSwuNLK5YSzv\na9MVoURWl8o1Va6kgIcgfM/uCoIZINHCpqGd7Ng1lDPg0zW0TQbzN8+nHs/ZXWGoZz7H4kITEAT8\n/Gwvm+pmAXSCMpEKUk++ggr14nMFfL7yzLIdoC0J2HkGzu6iffcAU0N9dB88RlNnvIOImjrH6T54\njAtHD0D7OIx1BstL79mHzzF/ehd19RMszLdT3zjEprqZ3AuOSSckEymNQr5Cyh3w+Ua37N1/krE6\nY+L5vbS/4GTsgE9q6hyntX+Qief3wrbzmQGf1JIIA76LuvqRWAGvUo3I6lO5pgLWNOD7LzAz2sHU\nQB/tLzjJ1EAfM6PFjUhJfzxjnUuln3SJFhbm26mrH2Fhvj1VuimFevEipVNPfo2tVcAn6+0zox1c\nOHogVaJp7BzLuF1I9uMnFjyoyaeXbMI6fbJEs6lumvnZXuobh2gfmM7/BCKyqtSTX0NrHfAAc5Nt\nGYGerLHPTbbFafKyx6dq/LNpPfXZJurrl2rwm+pmqG8cYnGhMedyC5Vq1IsXKQ/15NdIJQIeoH3v\n6WXzNHWOx67LRz2elkRmXb7rIpsSmScpC3r0pe94FZHSKOTXQKUCPspre45HTr9/+NqCjy1WrqGT\n2uEqsnYU8is0cuCFNI6MZxxxWc6LWMQK+PAgpL37T6YmzYx2MDfZtqwHnivcs+9fjbAvlko1IuWj\nmvwKNY6MZ5wgK9dFLFbai4+yrAffOMOmoZ2p0TLJnaQNbZOpWV7bc7xgwJdqLa8QJSLFUU9+hZIn\nyMp3EYtylmmiSjR7959kpnucC0cP0No/yNTA0oFOqx3shay0VKNevEh5qSdfgnwXsVj1gA/r7+kH\nKrX2D65qwFfTSctEJB6FfAlyXcRirQIeMg9Uujy4gwNMLpt/NUWVatSLF6keKtesUPpFLFqGR2ke\nHuHsbYfY8fwATZMRh/2Hyh3wyQOV3nz9QwwO9/HdH7yOO1719/T1DK7gVVWOAl5kdagnv0I5L2LR\n0lz0slYS8LB0oNKbr38IgL6eQe541d9zYWR70W0oJKpUU85evIisDvXkVyhqmGR9RzNbh3KPVY/q\nxa804CE4UCm7/t7XM6hevIikqCdfJuUaKhk34KHw2Pe1pl68SPUpGPJm1mhmPzKzx83smJl9NGKe\n281swsyOhP8+sjrNrU6rcV74pHwBf9937+ToEwczph994iD3fffO1O1C8zx+7EYGh/sy7p8Z7WDi\n5O7U7bilmlzGeruZacs8c+VMWwtjvd3qxYussjg9+cvAq939BuBG4PVmdkvEfD909xvDfx8rayvX\nsVJ3tEZJ9uD7egd4+NFbUyF+9ImDPPzorfT1LgVnoXm6u87z3R+8jsHhPu4fvjbygKo48vXiGxPT\nDO/bkwr6mbYWhvftoTGhM1SKrLaCNXl3d+BSeLM+/KfruYXiXKM1Wyl1+PQSzcHrjwLw8KO3curM\nCxg+38vLX/ZganqceZI7a7/7g9expe9cxgFVUFovPlmmaZpM0HPiFMP79tB+boSJHV30nDhF+4+e\nirUcEVm5WDV5M6szsyPAeeB+d384YrZbzeyomX3HzA7kWM7dZvaImT0yt7j+z1C4kjJNuQI+6eD1\nR+nZPsTw+T56tg9x8Pqj3NX2WOpfrnnS9fUMct01xzIOqMqlmBE16ZomE7SfG2Gsfwft50byDjMV\nkfKJFfLuvuDuNwL9wM1m9uKsWR4Ddrv7QeDTwDdzLOfz7n6Tu9/UsKn0KwdVs3LvaM21k/XoEwcZ\nPt9Lz/ZBzp3vwZ7tzLj/rrbHMuYZPt+7rEY/ONzH48cPLrtyVClHuGbvbJ1pa2FiRxdbB84xsaOL\n+XGVakTWQlFDKN193My+B7we+Gna9Mm0v79tZp81s23ufrF8Ta0u+Xrx5d7Rmi/gH370Vl7+sgf5\n2C1/wjcOv4Y/evBtALz10D8A8I3Dr0nNc/D6o6nHQNDDTx5AFXXlqGwr7cUna/A9J07RNJmg9djz\nGQeSicjqiTO6ptvMOsK/m4DXAsez5ukxMwv/vjlc7kj5m1sdVrMOX4zBof5UwEMQ7L98619yeOC6\n1DyHB67LqMEfvP4oL3/ZgwwOBa/hwsh22l98fNmVo86d6V1xu7J78bMtzamAh7QDx7qKu9asiBTP\ngv2qeWYwOwh8EagjCO+/cPePmdn7ANz9XjP7NeBXgSvADPCb7v5gvuW212/3W7e9rQwvYW2Va7hk\nqWWapGTdPZevT7407/25zh+fXaqJ24vX+WlEVtd9w5991N1vijt/nNE1R4FDEdPvTfv7M8Bn4j5p\nrVqrMk1SoYBfqTi1+DhlmmwKeJG1pyNei5Dei486wGeuvonppswdnznLNKf3wEhXxvSJU/2ce+zg\nsvmj3NX2GB/+21/nG4dfkzH9G4dfw4f/9teBoBcfdbDT4HAfjx+7kfuHr2Xi5O7UjlYIAz7RElx1\nKlRoyORE206mGzsyevHjPV0MXrM31msRkdWjkI8pu0yTfYDPhWs7mGrtY/OV/ENDU2WalktwvgdG\nutjbf4GJU/2MPb2Pxq5gR2ScUxYc6n+SP3rwbamgT+54PdT/ZGqe9IOdgKUdrV3nAWhom+TC0QNL\nQZ9ogbO7oDF4HXHKNPVzCaZbtjPeE3xpjfd0MbK7j+bJqdQ86sWLVIZOULZC6Qf4bJkfZ7axg9ap\nQRrml0I+b5mmK9wvfb6HoR83cXm8na3XnKB9z0DsMk1yBM0fPfg2Hnz+EMeG9vHLt/4lbz30D6la\nfPrBTtddc4wnnz7AHa/6e47RFryOcEfrhaMHWGwfh7FO2HkGWqLHsUeVaZpnx2kaucLI7j4SW9uZ\nbW2h6/QgHcPBa1TAi1SOevIx5NrZmjzAZ6Z5G42z4wUDftnO1q4RtnRMcHm8gy0dE7TvKT4M33ro\nHzjQe4KfDl3Dgd4TGQGflDzY6fBPbuK6a46lAj71OjrHg4C/uB22jqYCvpgjWzuGR2icSjDbdhWN\nU4lUwItIZSnkSzDT1sJ4XxdN0xeZbexgrj73AV5Ro2m2Lmzh8ng7WzrGuTzezsSp/qLPLPmNw6/h\n2NA+Xtz7NMeG9vGRh96zbJ7B4T6efPoAh17yCI8fP5hRg4fghGSMdcK288H/iZaiR9OM93Qx29pC\n4+QlZltbUqUb9eJFKkvlmgJy9eKTB/gkSzT189NMtfbROjXI5b7ZgsvdurCFsaf3pUo0yZr80dbz\ny047kEuyBp8s0XzkofdkHOgELLta1GBDXepgp6bOcWZGOzh35CVLJZrmBJzexWLjEJvqln6Z5BtN\nk6zBJ0s0ydt15yfoyvkoEVkL6snnkW9M/GxLM1dNL9XgG+ZnaJ0aJLFteW8+qhc/O9KZCniA9j0D\nGQcpxXF44LqMGnz2gU4QHOyUDPj7h69N1eDnJoOSzbkzvZk1+JYE9Y1DLC40ppZR6Dzx022tGTX4\njuERuk4PkujdFvk4EVk7BQ+GWi3r4WCocp26IDvkS70ISPr4+EIHOyVFHfRUyiX9dNCTSGWU/WCo\njWqtT11QTC0+GeyPH7uR7q7zGZf7Gxzu48LIdm44cCQ1zylrzDiz5MxoR9CD78o8tdBKz02TTQEv\nUj1UrlmBuGeYjJKrF78ShcbAA5yyxoxx8MmLgiTHwSeV66LcCniR6qKefIRqOQFZIbnGwCd79uk1\n+AtHD9DaP8jUQB+LvWdzjoNP0vVaRWqDevJZynVB7mKUckHu7DHw6QGf1NQ5Tmv/IBPP7w3Gw2cF\nfLFXespFvXiR6qOefBmUcrWnUqWPgX/y6QP09ZxddrDTzGgHUwN9S+PgmxN5D3jSjlaR2qGQT1OJ\nXnwpssfA9/Wc5Tvff0PGNVqTNfhUiaY5EZybZucZtozML1umdrSK1BaVa0pUyV58+hh4gGO0ZYyB\nB5ibbMuswbckYOcZ6oauWrY81eFFao968qH11osHUsMkYakG39Q5njFccmzzzLJ3ecvIPDSMZUxb\nacCrFy9S3RTyJYhzMZDVluvKTlDawU6ggBepBRuyXDNy4IUkepYu7jF3bT8zbS2M9UZfESmqFz/d\n1MniQuYpDBYXmrjcEpZKSrwoSBxff+h1kScbmzi5O3bA56KAF6kNGzLkG0fGOXvboVTQJ0821piY\njr2MzVfgU2RSAAAP3klEQVRmmJ/tTQX94kIT87O9SwcZFbgoSCnuH76W+4evXXbBj+RO1rHLy9/W\nXAGvHa0itW1DlmtahkfZ+cBhzt52iLaL40zs6KLnxCmaJpcfIJSrFn+5b5b6hSHmZ3upq59gYb6d\n+sYh5pM7OPNcFCTb/cPXxh4rnz3+Pc6BTsUGvHa0itSODRnyEAT91qdOc/GGq9k6cC4y4AvZVDcT\nBnwXdfUjzL9gInOGrhGYagsvCjKe96Ig+YI+X909/UAntp1f9YBXL15kfdmwIZ/o6WT0+hewdeAc\nEzu6aJq6tCzoC51pcnGhiYX5durqR1iYb4fEZGbIjnTBTHPGRUEKBX2xZkY7mDjdH/tAJ1DAi2wk\nGzLkEz2dnL3tUKpE0zR1ieF9e3KWbKIka/D14cU1NtVNMx8eZERLIgj48z2wfZjeG46navLAii7z\nFyXygh95DnQCBbzIRrMhd7zOdnWw4/mBVKAnL8o929IcexmLC42pgIegdMPOMzAbjrhJXAXbh1O1\n+fY9A2y95gSzI525Flm0qAt+5DrQCRTwIhvRhuzJdx17btnBT02TiYxefKGDnzZnHUwEBCGbDNzd\np5bd3b5noCy9+NTwyKzzwUP0gU6ggBfZqDZkT34lpxJOynUAVL7TCkeNWV+pfMtSDV5Esm3IkC+H\nK3Nblx0MRaIFRuJd13Ti5O6cBzIlDfyPm7n45NVAEO4nB7phqBdOXL1seRomKSJRFPIR4pynZlPd\nbMbBUCRagp2eWVdcSsrugec6kKmhbTI1T2PnGJcGdnLyx+FRskO9MN4ZHGgV2nK6YVUCXr14kdqw\n4WrypZRq0m2qmwkOfgoPhuJse+ZO0AgnB7pTZ6OMOpApeYrg1BdC6zh0NAXBfqkVrtRDxyj0DgH5\nT1OggBcR2IAhX4rsenz6wVBRByJFWVZTbx9PHch0broeprPu7x0KA74BNs8VDPh8pylQwItsPBuq\nXBOnF1/MKYXTD4biYmdQsilGoiU4gCl5IFPU44d6gx785jm4Us+mp3cq4EUktg0V8uWUfjDU5oYR\n6huHgpp83KBP1vB3noHu88H/2Y9P1uA7RuHqp9lUN87iQgfzs8tH2CjgRSSKQn6FCh4MVchsU+SB\nTBmPT1wFHaNsmR9hy+kG6hsvBEG/mHnQlgJeRHLZMDX5cu1wTSp4MFQhEQcyZT9+S8MpyDo7QX3j\n0mUEC50mWAEvIgV78mbWaGY/MrPHzeyYmX00Yh4zs0+Z2QkzO2pmL12d5haWfUEQCM5Vk35BkLHe\nbmbaMssqM20tDL24t6TnLuaiHFEXFWGkC07vSQ2LjBqLv7jQxJW5rbSecqabOpmrz7x/rr6J6aZO\nBbyIAPHKNZeBV7v7DcCNwOvN7Jased4AXB3+uxv4XFlbWYTsC4IkT0aWfkGQxsQ0w/v2pII+edGQ\nzVeix7gXI3bQp11UBEid0KxubqkN2WPxk/sBWi4G82y+MsNUa18q6Ofqm5hq7aPj9CSFKOBFNoaC\n5Rp3dyB59E19+C+7TvAW4EvhvA+ZWYeZ9br7UFlbG0P6BUG2PnWasf272fnAYeo7lurYyROSDe/b\nQ/u5kdRFQ+a6r5SlDcmgz3eqg/SLitjFdnyxibr6C2xuWLoId/ZY/MXL7bRNDdIwH4R8w/wMrVOD\nTLX20Tg7zuX6DnqfKnwmTQW8yMYRqyZvZnXAo8A+4A/d/eGsWXYCZ9JuD4TTMkLezO4m6OnTuCn6\nTInlkH5BkG2PP5MR8ElNkwnaz40w1r8jddGQue78wydbT3lRF+8u3KufYm5TO77YjG2azgj4pPSx\n+E2zF1MBn9QwP0Pj7DgzzdtiXfxEAS+yscQaXePuC+5+I9AP3GxmL17Jk7n75939Jne/qWFTzFEo\nK5Do6WRs/262Pf4MY/t3L6u/Q1CimdjRlbpoSNQ8q+3KXAe+2IRtmsYXm7gy17Fsni2DjSxebqdp\n+iKzjR2RNfjL9R2xXocCXmTjKWp0jbuPm9n3gNcDP0276yywK+12fzhtzSVr8DsfOEzL8CjNwyMM\nvPqmjAuCJGvw2RcNuWp6cFlPebVcmetgYb47VaJJ3gZSPfotg41MtfbRGpZo6uenM27P1Tdxqbkv\n1sVPFPAiG1Oc0TXdZtYR/t0EvBbIvhjp3wC/GI6yuQWYqEQ9HoILgiQDHoLSTfYFQWZbmjOCMFmj\nv7J59X5dZFtcaM6owW9uGKeu/gKLC820nnJaTzlXNjelAh2WavBXNjfR/uxlNk/UR76O7IufKOBF\nNq44Pfle4IthXX4T8Bfu/i0zex+Au98LfBu4EzgBTAPvXaX2FtR17LmM23PX9i+7IMjWoQvZDwtq\n8jOFd7wWW5fPpaFpcNm0rUNjwNL4++aZ0eWPm5+h+/h4OH/060h/rQp4kY0tzuiao8ChiOn3pv3t\nwPvL27TqVa6gT19eXHHPA69wFxHYQEe8phvr7aYxMZ3R451pa2G6qS2y9xyl1KAvJtihuIt8KOBF\nJGlDnrumXAdDJWvnxc6vgBeRtbIhe/LlPhiq2NCOq9hL9CngRSTbhuzJQ+bBUO3nRoLbVXTdUwW8\niJTDhuzJw/KDoZqmLhU8WnQtKNxFpJw2ZMjnOhiq58QpoDznrynWSn5FKOBFpJCaLtfkOod8roOh\nZluaK1KyUcCLyGrZkD35QgcRtT97uahrva7USr9QFPAiEldNh3zD8YEVXxFqtYK+lF8KCncRKVZN\nl2tKVc7STfuzlxXwIrLmaronXw6l9OjL9SWhgBeRlVLIxxAV1unBv1o7axXuIlIqhfwKrfYoHAW8\niJSDQr7KKNxFpJwU8lVC4S4iq6HmR9esh/BcD20UkfVJPfkKUriLyGqr+Z48VF+YNhwfqLo2iUht\nUk9+DSnYRWStbYiePFQ2YNVzF5FK2TAhD2sf9Ap3Eam0DRXysDZBr3AXkWqxIWvypZydMt8yRUSq\nzYYMecgM5ZUEvkJdRNaDDRvy6RTYIlKrNlxNXkRkI1HIi4jUMIW8iEgNU8iLiNQwhbyISA1TyIuI\n1DCFvIhIDVPIi4jUMIW8iEgNU8iLiNSwgiFvZrvM7Htm9oSZHTOz34iY53YzmzCzI+G/j6xOc0VE\npBhxzl1zBfiguz9mZq3Ao2Z2v7s/kTXfD939TeVvooiIrFTBnry7D7n7Y+HfU8CTwM7VbpiIiJSu\nqJq8me0FDgEPR9x9q5kdNbPvmNmBHI+/28weMbNH5hZnim6siIgUJ/aphs3sKuAbwAfcfTLr7seA\n3e5+yczuBL4JXJ29DHf/PPB5gPb67b7iVouISCyxevJmVk8Q8F9x97/Kvt/dJ939Uvj3t4F6M9tW\n1paKiEjR4oyuMeALwJPu/okc8/SE82FmN4fLHSlnQ0VEpHhxyjWvAH4B+ImZHQmn/S6wG8Dd7wXu\nAn7VzK4AM8Db3V3lGBGRCisY8u7+T4AVmOczwGfK1SgRESkPHfEqIlLDFPIiIjVMIS8iUsMU8iIi\nNUwhLyJSwxTyIiI1TCEvIlLDFPIiIjVMIS8iUsMU8hFGDryQRE9nxrRETycjB15YoRaJiKyMQj5C\n48g4Z287lAr6RE8nZ287ROPIeIVbJiJSnNjnk99IWoZH2fnAYc7edoitT51mbP9udj5wmJbh0Uo3\nTUSkKOrJ59AyPMrWp05z8Yar2frUaQW8iKxLCvkcEj2djO3fzbbHn2Fs/+5lNXoRkfVAIR8hWYPf\n+cBhuo88kyrdKOhFZL1RyEeY7erIqMEna/SzXR0VbpmISHG04zVC17Hnlk1rGR5VXV5E1h315EVE\naphCXkSkhinkRURqmEJeRKSGKeRFRGqYQl5EpIYp5EVEaphCXkSkhinkRURqmEJeRKSGKeRFRGqY\nQl5EpIYp5EVEaphCXkSkhinkRURqmEJeRKSGKeRFRGqYQl5EpIYVDHkz22Vm3zOzJ8zsmJn9RsQ8\nZmafMrMTZnbUzF66Os0VEZFixLnG6xXgg+7+mJm1Ao+a2f3u/kTaPG8Arg7/vRz4XPi/iIhUUMGe\nvLsPuftj4d9TwJPAzqzZ3gJ8yQMPAR1m1lv21oqISFHi9ORTzGwvcAh4OOuuncCZtNsD4bShrMff\nDdwd3rx83/Bnf1rM81fINuBipRsRg9pZXmpneamd5bOnmJljh7yZXQV8A/iAu08W2yoAd/888Plw\neY+4+00rWc5aUjvLS+0sL7WzvNZLO4sRa3SNmdUTBPxX3P2vImY5C+xKu90fThMRkQqKM7rGgC8A\nT7r7J3LM9jfAL4ajbG4BJtx9KMe8IiKyRuKUa14B/ALwEzM7Ek77XWA3gLvfC3wbuBM4AUwD742x\n3M8X3drKUDvLS+0sL7WzvNZLO2Mzd690G0REZJXoiFcRkRqmkBcRqWFrEvJmVmdmh83sWxH3Vc0p\nEQq083YzmzCzI+G/j1SojSfN7CdhGx6JuL8q1meMdlbL+uwws6+b2XEze9LMfibr/mpZn4XaWfH1\naWb7057/iJlNmtkHsuap+PqM2c6Kr89yKepgqBL8BsGRsm0R91XTKRHytRPgh+7+pjVsTy7/0t1z\nHbBRTeszXzuhOtbnfwbuc/e7zKwBaM66v1rWZ6F2QoXXp7s/BdwIQYeJYBj1X2fNVvH1GbOdUB3b\nZ8lWvSdvZv3AG4H/mmOWqjglQox2rhdVsT7XAzNrB15FMEQYd59z9/Gs2Sq+PmO2s9rcATzr7qey\npld8fWbJ1c6asRblmk8CHwIWc9yf65QIa61QOwFuDX9ifsfMDqxRu7I58A9m9mh4mohs1bI+C7UT\nKr8+XwBcAP5bWKb7r2bWkjVPNazPOO2Eyq/PdG8HvhYxvRrWZ7pc7YTqWp8rtqohb2ZvAs67+6Or\n+TylitnOx4Dd7n4Q+DTwzTVp3HKvdPcbCX72vt/MXlWhdhRSqJ3VsD43Ay8FPufuh4AE8L9VoB2F\nxGlnNaxPAMJy0puBv6xUG+Io0M6qWZ+lWu2e/CuAN5vZSeDPgFeb2Zez5qmGUyIUbKe7T7r7pfDv\nbwP1ZrZtjduJu58N/z9PUEe8OWuWalifBdtZJetzABhw9+QJ975OEKbpqmF9FmxnlazPpDcAj7n7\nuYj7qmF9JuVsZ5Wtz5Ksasi7+++4e7+77yX4WfSP7v6urNkqfkqEOO00sx4zs/DvmwnW3chattPM\nWiw4pz/hz/XXAdln8qz4+ozTzmpYn+4+DJwxs/3hpDuAJ7Jmq/j6jNPOalifad5B7hJIxddnmpzt\nrLL1WZK1Gl2TwczeByWdEmFNZLXzLuBXzewKMAO83df+cOEdwF+H295m4Kvufl8Vrs847ayG9Qnw\n68BXwp/uzwHvrcL1GaedVbE+wy/11wK/kjat6tZnjHZWxfosB53WQESkhumIVxGRGqaQFxGpYQp5\nEZEappAXEalhCnkRkRqmkBcRqWEKeRGRGvb/A9umHtUAwMsGAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],pdf[:,:,0])\n", "ax.plot(X[0:50,0],X[0:50,1],'x')\n", "plt.title('Contour plot of just Gaussian 0, with scatter plot overlaid')" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Principal Components\n", "It's going to be useful, in a few minutes, if we know the principal components of each of these three Gaussians. Remember that the PCA directions, $\\vec{v}_{yi}$, and variances, $\\lambda_{yi}$, are the eigenvectors and eigenvalues of the covariance matrix:\n", "$$\\lambda_{yi},\\vec{v}_{yi}=\\mbox{eig}(\\Sigma_y)$$\n", "\n", "which means that\n", "$$\\Sigma_y \\vec{v}_{yi}=\\lambda_{yi}\\vec{v}_{yi}$$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ndmPLmiZYE+oAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Find the principal component directions and variances of each Gaussia\n", "Lambda, V = np.linalg.eig(Sigma)\n", "\n", "# Let's show the mean vectors plus/minus each variance-scaled principal component direction\n", "ax=plt.gca()\n", "plt.xlim(4,8)\n", "plt.ylim(2,5)\n", "plt.title('Means +/- sqrt(PC variance)*(PC direction)')\n", "for y in range(0,3):\n", " for i in range(0,2):\n", " x0 = mu[y,0]+np.sqrt(Lambda[y,i])*np.array([-V[y,0,i],V[y,0,i]])\n", " x1 = mu[y,1]+np.sqrt(Lambda[y,i])*np.array([-V[y,1,i],V[y,1,i]])\n", " ax.plot(x0,x1)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Now initialize the GMM\n", "\n", "Now we're going to initialize the GMM. We'll create two Gaussians per class. Each of the two Gaussians will have exactly the same covariance matrix and exactly the same mixture weight, but they will have slightly different mean vectors, set at $$\\vec\\mu_{y0}=\\vec\\mu_y+0.1\\sqrt{\\lambda_{y0}}\\vec{v}_{y0}$$\n", "\n", "and at $$\\vec\\mu_{y1}=\\vec\\mu_y-0.1\\sqrt{\\lambda_{y0}}\\vec{v}_{y0}$$\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mu_gmm = np.empty((3,2,2))\n", "Sigma_gmm = np.empty((3,2,2,2))\n", "c_gmm = np.empty((3,2))\n", "ax = plt.gca()\n", "plt.title('Initial mean vectors for the three Gaussian mixture models')\n", "for y in range(0,3):\n", " # We need to find the maximum eigenvalue, because numpy doesn't sort them\n", " imax = np.argmax(Lambda[y,:])\n", " #imax=0\n", " for k in range(0,2):\n", " mu_gmm[y,k,:]=mu[y,:] + (-1)**k * 0.1*np.sqrt(Lambda[y,imax])*V[y,:,imax]\n", " Sigma_gmm[y,k,:,:]=Sigma[y,:,:]\n", " c_gmm[y,k] = 0.5\n", " ax.plot(mu_gmm[y,k,0],mu_gmm[y,k,1],'x')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Now let's calculate the GMM model of each of the three classes\n", "gmm_gaussians = np.empty((400,250,3,2))\n", "gmm_pdf = np.zeros((400,250,3))\n", "for y in range(0,3):\n", " for k in range(0,2):\n", " gmm_gaussians[:,:,y,k] = stats.multivariate_normal(mu_gmm[y,k,:],Sigma_gmm[y,k,:,:]).pdf(coords)\n", " gmm_pdf[:,:,y] = gmm_pdf[:,:,y] + c_gmm[y,k]*gmm_gaussians[:,:,y,k]\n", "\n", "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],gmm_pdf[:,:,0])\n", "ax.plot(X[0:50,0],X[0:50,1],'x')\n", "plt.title('Initial Gaussian Mixture Model of class 0, with scatter plot overlaid')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],np.amax(gmm_pdf,axis=2))\n", "ax.plot(X[0:50,0],X[0:50,1],'x',X[50:100,0],X[50:100,1],'o',X[100:150,0],X[100:150,1],'^')\n", "plt.title('Initial GMM of all three classes, with a scatter plot of the data overlaid')" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Re-training the GMMs: K-means clustering" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "K-means clustering is an algorithm that clusters some input data vectors, $\\vec{x}_n$, into $K$ different clusters.\n", "\n", "The algorithm alternates between two steps.\n", "1. Each datum is assigned to the cluster with the closest centroid:\n", "$$k(n) = \\arg\\min\\Vert \\vec{x}_n-\\vec\\mu_k\\Vert$$\n", "\n", "2. Each cluster centroid is re-estimated as the average of the data in its cluster:\n", "$$\\vec\\mu_k = \\frac{1}{N_k} \\sum_{n:k(n)=k}\\vec{x}_n$$\n", "\n", "We go back and forth betwen these two steps until the total cluster distance, $D$, stops decreasing, where\n", "$$D = \\sum_{n=1}^N \\Vert \\vec{x}_n-\\vec\\mu_{k(n)}\\Vert^2$$\n", "\n", "\n", "All of these steps have to be done separately for each of the three classes." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nzv8PhZdZx3gr+kYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for y in range(0,3):\n", " # Perform K-means clustering for the y'th class\n", " # Start out with the dummy assumption that all data are in the 0'th cluster\n", " Xy = X[50*y:50*(y+1),0:2]\n", " k_index = np.zeros((50),dtype='int')\n", " # Find the resulting value of D, then set Dprev to 100 times that\n", " D = np.zeros((2))\n", " for n in range(0,50):\n", " D[-1] = D[-1] + np.sum(np.square(Xy[n,:]-mu_gmm[y,k_index[n],:]))\n", " D[0] = 1.5*D[-1]\n", "\n", " # Now iterate until convergence\n", " while D[-2]-D[-1] > 0.05*D[-2]:\n", " # Assign each datum to the nearest cluster\n", " for n in range(0,50):\n", " d0 = np.linalg.norm(Xy[n,0:2]-mu_gmm[y,0,:])\n", " d1 = np.linalg.norm(Xy[n,0:2]-mu_gmm[y,1,:])\n", " k_index[n]= np.argmin([d0,d1])\n", " # Now re-compute the centers (and the variances), based on the data assigned to each one\n", " for k in range(0,2):\n", " c_gmm[y,k] = np.count_nonzero(k_index==k)/50\n", " mu_gmm[y,k,:]=np.mean(Xy[k_index==k,:],axis=0)\n", " Sigma_gmm[y,k,:,:]=np.cov(Xy[k_index==k,:],rowvar=False)\n", " # Re-calculate D\n", " D = np.append(D,[0])\n", " for n in range(0,50):\n", " D[-1] = D[-1] + np.sum(np.square(Xy[n,:]-mu_gmm[y,k_index[n],:]))\n", "\n", " # After convergence, plot D\n", " plt.subplot(3,1,y+1)\n", " plt.plot(D)\n", " plt.title('Convergence for class {}'.format(y))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The K-means algorithm is guaranteed to converge to a local minimum of D\n", "Notice that we can be certain that the K-means algorithm converges, because both of the steps reduce the value of D.\n", "* The first step assigns each datum to the nearest centroid. Either a particular datum stays in the cluster it's already in, or it moves to a centroid that is closer, thus reducing the total value of D:\n", "$$k(n)=\\arg\\min\\Vert\\vec{x}_n-\\vec\\mu_k\\Vert^2$$\n", "* The second step changes the mean, $\\vec\\mu_k$, to be the average of the data in the cluster. But that's exactly the value that minimizes $D$! In other words, the minimum-mean-squared error centroid, $\\vec\\mu_k$, is equal to the average of the data in the cluster:\n", "$$\\arg\\min \\sum_{n:k(n)=k}\\Vert\\vec{x}_n-\\vec\\mu_k\\Vert^2 = \\frac{1}{N_k}\\sum_{n:k(n)=k}\\vec{x}_n$$\n", "\n", "Since each of the two steps either leaves $D$ unchanged or reduces $D$, therefore the algorithm only continues while it's possible to reduce $D$.\n", "\n", "But this algorithm doesn't find the GLOBAL optimum, it only finds a LOCAL optimum. It's possible that if you started with some other initial values of $\\vec\\mu_k$, you might end with an even lower value of D." ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=plt.gca()\n", "for y in range(0,3):\n", " for k in range(0,2):\n", " ax.plot(mu_gmm[y,k,0],mu_gmm[y,k,1],'x')" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Now let's calculate the GMM model of each of the three classes\n", "gmm_gaussians = np.empty((400,250,3,2))\n", "gmm_pdf = np.zeros((400,250,3))\n", "for y in range(0,3):\n", " for k in range(0,2):\n", " gmm_gaussians[:,:,y,k] = stats.multivariate_normal(mu_gmm[y,k,:],Sigma_gmm[y,k,:,:]).pdf(coords)\n", " gmm_pdf[:,:,y] = gmm_pdf[:,:,y] + c_gmm[y,k]*gmm_gaussians[:,:,y,k]\n", "\n", "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],gmm_pdf[:,:,0])\n", "ax.plot(X[0:50,0],X[0:50,1],'x')\n", "plt.title('K-means GMM class 0, with scatter plot overlaid')" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nH9IAlElW5QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],np.amax(gmm_pdf,axis=2))\n", "ax.plot(X[0:50,0],X[0:50,1],'x',X[50:100,0],X[50:100,1],'o',X[100:150,0],X[100:150,1],'^')\n", "plt.title('K-means GMM of all three classes, scatter plot overlaid')" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=plt.gca()\n", "maxpdf = np.amax(gmm_pdf, axis=2)\n", "yhat_using_em = (maxpdf == gmm_pdf[:,:,1]) + 2*(maxpdf == gmm_pdf[:,:,2])\n", "ax.contourf(coords[:,:,0],coords[:,:,1],yhat_using_em)\n", "ax.plot(X[0:50,0],X[0:50,1],'x',X[50:100,0],X[50:100,1],'o',X[100:150,0],X[100:150,1],'^')\n", "plt.title('GMM classification function from K-means, scatter plot overlaid')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Expectation Maximization (EM)\n", "Did you notice: K-means can be used to calculate the mixture weights and covariance matrices, but it doesn't use them in the optimization? The total distance, $D$, only depends on the means.\n", "\n", "Expectation-Maximization (EM) uses a training criterion that uses all of the GMM parameters: Maximum Likelihood.\n", "\n", "The \"Log Likelihood of the Data given the Model\" is\n", "$${\\mathcal L} = \\ln p(X|Y,\\Lambda)$$\n", "\n", "where $$X=[\\vec{x}_1,\\vec{x}_2,\\ldots]$$\n", "$$Y=[y_1,y_2,\\ldots]$$\n", "and the parameters are $$\\Lambda=\\left\\{c_{00},\\ldots,\\Sigma_{21}\\right\\}$$\n", "\n", "If we assume that the observations are independent, given the parameters, then\n", "$${\\mathcal L}=\\ln \\prod_{n=0}^{N-1} p_{X|Y,\\Lambda}(\\vec{x}_n|y_n,\\Lambda)$$\n", "\n", "\n", "$${\\mathcal L} = \\ln \\prod_{n=0}^{N-1} p_{X|Y}(\\vec{x}_n|y_n)$$\n", "\n", "where $y_n$ is the true class of the n'th datum, and of course\n", "$${\\mathcal L} = \\sum_{n=0}^{N-1} \\ln p_{X|Y}(\\vec{x}_n|y_n)$$\n", "\n", "So in other words,\n", "$${\\mathcal L} = \\sum_{n=0}^{N-1} \\ln\\left(\\sum_{k=0}^{K-1}c_{yk}{\\mathcal N}(\\vec{x}_n;\\vec\\mu_{yk},\\Sigma_{yk})\\right)$$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The EM algorithm finds the maximum likelihood model parameters. Suppose we define the set of all model parameters to be\n", "$$\\Lambda = \\left\\{c_{00},\\ldots,c_{21},\\vec\\mu_{00},\\ldots,\\vec\\mu_{21},\\Sigma_{00},\\ldots,\\Sigma_{21}\\right\\}$$\n", "\n", "A \"maximum likelihood\" training algorithm is defined to be one that chooses the parameters in order to maximize the likelihood:\n", "$$\\Lambda^* = \\arg\\max {\\mathcal L}(\\Lambda)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Why is the log useful?\n", "The log is useful because it allows us to differentiate ${\\mathcal L}$ with respect to any particular parameter,\n", "and wind up with a derivative that has separate terms for each of the $N$ different data. \n", "\n", "Let me show you what I mean. Suppose we tried to differentiate like this:\n", "$$\\frac{\\partial}{\\partial\\vec\\mu_{00}}\\prod_{n=0}^{N-1}p_{X|Y}(\\vec{x}_n|y_n)$$\n", "\n", "... we would get a product form, with all of the terms for all different $\\vec{x}_n$ multiplied together. On the other hand, suppose we do this:\n", "$$\\frac{\\partial}{\\partial\\vec\\mu_{00}}\\sum_{n=0}^{N-1}\\ln p_{X|Y}(\\vec{x}_n|y_n)$$\n", "\n", "... we get the sum of individual derivatives, one for each $\\vec{x}_n$:\n", "$$\\frac{\\partial{\\mathcal L}}{\\partial\\vec\\mu_{00}} = \\sum_{n=0}^{N-1}\\frac{\\partial}{\\partial\\vec\\mu_{00}}\\ln p_{X|Y}(\\vec{x}_n|y_n)$$\n", "\n", "OK, sure, but that last derivative is zero, unless the token $n$ is one that comes from class $y_n=0$. So let's get rid of all of the other training tokens now, and focus only on the ones that come from class $y_n=0$. For example, in the iris dataset, this would be the first $N_0=50$ tokens. In general, let's say we're only summing the $N_0$ tokens for which $y_n=0$:\n", "$$\\frac{\\partial{\\mathcal L}}{\\partial\\vec\\mu_{00}}=\\sum_{n=0}^{N_0-1}\\frac{\\partial}{\\partial\\vec\\mu_{00}}\\ln p_{X|Y}(\\vec{x}_n|y_n=0)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's calculate that derivative\n", "Let's calculate the derivative of the log-likelihood with respect to $\\vec\\mu_{00}$. Continuing the equation above, we get\n", "$$\\frac{\\partial{\\mathcal L}}{\\partial\\vec\\mu_{00}}=\\sum_{n=0}^{N_0-1}\\frac{\\partial}{\\partial\\vec\\mu_{00}}\\ln\\left(\\sum_{k=0}^{K-1}c_{0k}\n", "{\\mathcal N}(\\vec{x}_n;\\vec\\mu_{0k},\\Sigma_{0k})\\right)$$\n", "\n", "The derivative of $\\ln(x)$ is $\\frac{1}{x}$!! So\n", "$$\\frac{\\partial{\\mathcal L}}{\\partial\\vec\\mu_{00}}=\\sum_{n=0}^{N_0-1}\\left(\\frac{1}\n", "{\\sum_{k=0}^{K-1}c_{0k}{\\mathcal N}(\\vec{x}_n;\\vec\\mu_{0k},\\Sigma_{0k})}\\right)\n", "c_{00}\\frac{\\partial \\mathcal N(\\vec{x}_n;\\vec\\mu_{00},\\Sigma_{00})}{\\partial\\vec\\mu_{00}}$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The derivative of a Gaussian is actually not too hard to calculate, if we just expand it out:\n", "$$\\frac{\\partial{\\mathcal N}(\\vec{x};\\vec\\mu,\\Sigma)}{\\partial\\vec\\mu}=\n", "\\frac{1}{(2\\pi)^{D/2}|\\Sigma|^{1/2}}\\frac{\\partial}{\\partial\\vec\\mu}e^{-\\frac{1}{2}d_\\Sigma^2(\\vec{x},\\vec\\mu)}$$\n", "\n", "The derivative of $e^x$ is $e^x$!! So\n", "$$\\frac{\\partial{\\mathcal N}(\\vec{x};\\vec\\mu,\\Sigma)}{\\partial\\vec\\mu}=\n", "\\frac{1}{(2\\pi)^{D/2}|\\Sigma|^{1/2}}e^{-\\frac{1}{2}d_\\Sigma^2(\\vec{x},\\vec\\mu)} \\frac{\\partial\\left(-\\frac{1}{2}d_\\Sigma^2(\\vec{x},\\vec\\mu)\\right)}{\\partial\\vec\\mu}={\\mathcal N}(\\vec{x};\\vec\\mu,\\Sigma) \\left(-\\frac{1}{2}\\frac{\\partial d_\\Sigma^2(\\vec{x},\\vec\\mu)}{\\partial\\vec\\mu_{00}}\\right)$$\n", "\n", "Remember that the Mahalanobis distance is\n", "$$d_\\Sigma^2(\\vec{x},\\vec\\mu)=(\\vec{x}-\\vec\\mu)^T\\Sigma^{-1}(\\vec{x}-\\vec\\mu)$$\n", "\n", "You might never have seen the derivative of something like this before, but you've certainly seen the scalar version:\n", "$$\\frac{\\partial}{\\partial\\mu_d}\\left(\\frac{(x_d-\\mu_d)^2}{\\sigma_d^2}\\right)=2\\frac{\\mu_d-x_d}{\\sigma_d^2}$$\n", "\n", "The vector derivative is just the same thing:\n", "$$\\frac{\\partial}{\\partial\\vec\\mu}(\\vec{x}-\\vec\\mu)^T\\Sigma^{-1}(\\vec{x}-\\vec\\mu)=\n", "2\\Sigma^{-1}(\\vec\\mu-\\vec{x}))$$\n", "\n", "So we get the very cool result that the derivative of a Gaussian is scaled by the Gaussian:\n", "$$\\frac{\\partial{\\mathcal N}(\\vec{x};\\vec\\mu,\\Sigma)}{\\partial\\vec\\mu}=\n", "{\\mathcal N}(\\vec{x};\\vec\\mu,\\Sigma)\\Sigma^{-1} (\\vec{x}-\\vec\\mu)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Putting that all together, we have\n", "$$\\frac{\\partial{\\mathcal L}}{\\partial\\vec\\mu_{00}}=\n", "2\\sum_{n=0}^{N_0-1}\\left(\\frac{c_{00}{\\mathcal N}(\\vec{x}_n;\\vec\\mu_{00},\\Sigma_{00})}\n", "{\\sum_{k=0}^{K-1}c_{0k}{\\mathcal N}(\\vec{x}_{n};\\vec\\mu_{0k},\\Sigma_{0k})}\\right) \\Sigma_{00}^{-1}\\left(\\vec{x}_n-\\vec\\mu_{00}\\right)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The gamma probability\n", "The part in parentheses, above, shows up over and over again in algorithms related to the EM algorithm. It is called the class-posterior, or more colloquially, the \"gamma probability\".\n", "\n", "Let's parse what it means. First, remember that the mixture weights sum to 1. So the mixture weight can be interpreted as the probability of choosing the 0'th Gaussian:\n", "$$c_0 = p_K(k=0)$$\n", "\n", "OK, then second, the normal distribution is the likelihood of $\\vec{x}$, given that we have chosen the 0'th Gaussian:\n", "$${\\mathcal N}(\\vec{x};\\vec\\mu_0,\\Sigma_0) = p_{X|K}(\\vec{x}|k=0)$$\n", "\n", "Then the summation in the denominator is kind of like a marginal pdf:\n", "$$\\sum_k c_k {\\mathcal N}(\\vec{x};\\vec\\mu_0,\\Sigma_0)=\\sum_k p_K(0)p_{X|K}(\\vec{x}|0) = p_X(\\vec{x})$$\n", "\n", "So the whole term in parentheses is like the posterior probability of choosing the 0'th Gaussian, given knowledge of the datum $\\vec{x}$:\n", "$$\\frac{c_0{\\mathcal N}(\\vec{x};\\vec\\mu_0,\\Sigma_0)}{\\sum_k c_k{\\mathcal N}(\\vec{x};\\vec\\mu_k,\\Sigma_k)}\n", "= \\frac{p_K(0)p_{X|K}(\\vec{x}|0)}{\\sum_k p_K(k)p_{X|K}(\\vec{x}|k)} = p_{K|X}(0|\\vec{x})$$\n", "\n", "This is called the \"gamma probability\" because most papers use the letter $\\gamma$ for it:\n", "$$\\gamma_0(n) = p_{K|X}(0|\\vec{x}_n) = \\frac{c_0{\\mathcal N}(\\vec{x}_n;\\vec\\mu_0,\\Sigma_0)}{\\sum_{\\ell=0}^{K-1}c_\\ell\n", "{\\mathcal N}(\\vec{x}_n;\\vec\\mu_{\\ell},\\Sigma_\\ell)}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The maximum likelihood estimate of mu\n", "OK, from above we have\n", "$$\\frac{\\partial{\\mathcal L}}{\\partial\\vec\\mu_{00}}=\\sum_{n=0}^{N-1}\\gamma_{0}(n)\\Sigma_{00}^{-1}\\left(\\vec{x}_n-\\vec\\mu_{00}\\right)$$\n", "\n", "The maximum value of $\\vec\\mu_{00}$ is achieved for \n", "$$\\frac{\\partial{\\mathcal L}}{\\partial\\vec\\mu_{00}}=0$$\n", "\n", "Solving, we find that\n", "$$\\vec\\mu_{00}\\left(\\sum_{n=0}^{N-1}\\gamma_{0}(n)\\right) = \\sum_{n=0}^{N-1}\\gamma_{0}(n)\\vec{x}_n$$\n", "\n", "or\n", "$$\\vec\\mu_{00}=\\frac{\\sum_{n=0}^{N-1}\\gamma_0(n)\\vec{x}_n}{\\sum_{n=0}^{N-1}\\gamma_0(n)}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### EM is just a soft-decision version of K-means\n", "Notice that EM turns out to be just a soft version of K-means. In K-means, we either assign a token to cluster $k(n)=0$, or we don't. Basically, that's like setting $\\gamma_0(n)\\in\\left\\{0,1\\right\\}$ --- a binary decision. Then the number of tokens in the 0'th cluster is\n", "$$N_{00} = \\sum_{n=0}^{N_0-1}\\gamma_0(n)$$\n", "\n", "and the average in the 0'th cluster is\n", "$$\\vec\\mu_{00}=\\frac{1}{N_{00}}\\sum_{n=0}^{N_0-1} \\gamma_0(n)\\vec{x}_n$$\n", "\n", "The only difference between K-means and EM is that, for EM, we have soft decisions instead of hard decisions. Because Gaussians are never exactly zero, the EM algorithm has\n", "$$0 < \\gamma_0(n)< 1$$\n", "\n", "... Each training token is not allocated to just one cluster. Instead, each training token is given a soft assignment to the different clusters, $\\gamma_k(n)$ is the degree to which token $n$ is allocated to cluster $k$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ... but EM is not closed form\n", "Notice that the EM re-estimation equation for $\\vec\\mu_{00}$ depends on $\\gamma_0(n)$. But $\\gamma_0(n)$, in turn, depends on $\\vec\\mu_{00}$. So we have an iterative two-step solution, very similar to K-means:\n", "* The E-step: calculate $\\gamma_k(n)$ for every training token $n$, and for every Gaussian cluster $k$\n", "* The M-step: re-estimate $\\vec\\mu_{yk}$, $\\Sigma_{yk}$, and $c_{yk}$ for every class $y$ and for every Gaussian cluster $k$\n", "\n", "The two steps, above, are iterated until the log-likelihood, ${\\mathcal L}$, stops changing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Formulas for the M-step\n", "I gave you, already, the formula for re-estimating $\\vec\\mu_{00}$. The formulas for $\\Sigma_{00}$ and $c_{00}$ are similar. They are:\n", "$$c_{yk} = \\frac{\\sum_{n=0}^{N_y-1} \\gamma_k(n)}{N_y}$$\n", "\n", "and\n", "$$\\vec\\mu_{yk} = \\frac{\\sum_{n=0}^{N_y-1}\\gamma_k(n)\\vec{x}_n}{\\sum_{n=0}^{N_y-1}\\gamma_k(n)}$$\n", "\n", "and\n", "$$\\Sigma_{yk} = \\frac{\\sum_{n=0}^{N_y-1}\\gamma_k(n)(\\vec{x}_n-\\vec\\mu_{yk})(\\vec{x}_n-\\vec\\mu_{yk})^T}{\\sum_{n=0}^{N_y-1}\\gamma_k(n)} = \\frac{\\sum_{n=0}^{N_y-1}\\gamma_k(n)\\vec{x}_n\\vec{x}_n^T}{\\sum_{n=0}^{N_y-1}\\gamma_k(n)}-\\vec\\mu_{yk}\\vec\\mu_{yk}^T$$\n", "\n", "all three are basically a kind of weighted average, where the weighting factor is the gamma-probability calculated in the E-step." ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[[[ 0.17157695, 0.10252259],\n", " [ 0.10252259, 0.1944561 ]],\n", "\n", " [[ 0.16757277, 0.08935756],\n", " [ 0.08935756, 0.1847485 ]]],\n", "\n", "\n", " [[[ 0.14479565, 0.06399387],\n", " [ 0.06399387, 0.10115007]],\n", "\n", " [[ 0.17324161, 0.0520788 ],\n", " [ 0.0520788 , 0.0775197 ]]],\n", "\n", "\n", " [[[ 0.0845022 , 0.02663473],\n", " [ 0.02663473, 0.1988129 ]],\n", "\n", " [[ 0.22511242, 0.07285071],\n", " [ 0.07285071, 0.08267768]]]])" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for y in range(0,3):\n", " # Perform Expectation Maximization for the y'th class\n", " # Start out with the parameters from k-means\n", " c_em = c_gmm\n", " mu_em = mu_gmm\n", " Sigma_em = Sigma_gmm\n", " Xy = X[50*y:50*(y+1),0:2]\n", " data_loglikelihood = []\n", " \n", " # Now iterate ten times (we won't check convergence, but we'll check how the data log likelihood evolves)\n", " for iteration_count in range(0,10):\n", " # Create an array of the random variables\n", " rvs = [ stats.multivariate_normal(mu_em[y,0,:],Sigma_em[y,0,:,:]),\n", " stats.multivariate_normal(mu_em[y,1,:], Sigma_em[y,1,:,:]) ]\n", "\n", " # Accumulate sufficient statistics for the numerator of each parameter's M-step\n", " c_numerator = np.zeros(2)\n", " mu_numerator = np.zeros((2,2))\n", " Sigma_numerator = np.zeros((2,2,2))\n", " \n", " # E-step: calculate the gamma probability, and the sufficient statistics\n", " gamma_denom = np.zeros(50)\n", " for n in range(0,50):\n", " gamma_denom[n] = np.inner(c_em[y,:], [rvs[0].pdf(Xy[n,:]), rvs[1].pdf(Xy[n,:]) ] )\n", " for k in range(0,2):\n", " gamma = c_em[y,k]*rvs[k].pdf(Xy[n,:])/gamma_denom[n]\n", " c_numerator[k] = c_numerator[k] + gamma\n", " mu_numerator[k,:] = mu_numerator[k,:] + gamma*Xy[n,:]\n", " Sigma_numerator[k,:,:] = Sigma_numerator[k,:,:] + gamma*np.outer(Xy[n,:],Xy[n,:])\n", "\n", " # M-step: re-compute the parameters\n", " for k in range(0,2):\n", " c_em[y,k] = c_numerator[k] / 50\n", " mu_em[y,k,:] = mu_numerator[k,:] / c_numerator[k]\n", " Sigma_em[y,k,:,:] = Sigma_numerator[k,:,:] / c_numerator[k] - np.outer(mu_em[y,k,:],mu_em[y,k,:])\n", " # Make sure sigma is positive definite\n", " d = np.linalg.det(Sigma_em[y,k,:,:])\n", " if d < 0.01:\n", " sqrtd = np.sqrt(0.01-d)\n", " Sigma_em[y,k,:,:] = Sigma_em[y,k,:,:] + sqrtd*np.eye(2)\n", " \n", " # Re-calculate log likelihood\n", " data_loglikelihood.append( np.sum(np.log(gamma_denom)) )\n", "\n", " # After convergence, plot data_loglikelihood\n", " plt.subplot(3,1,y+1)\n", " plt.plot(data_loglikelihood)\n", " plt.title('Data Log Likelihood vs. iteration number for class {}'.format(y))\n", "\n", "Sigma_em\n" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Now let's calculate the GMM model of each of the three classes\n", "em_gaussians = np.empty((400,250,3,2))\n", "em_pdf = np.zeros((400,250,3))\n", "for y in range(0,3):\n", " for k in range(0,2):\n", " em_gaussians[:,:,y,k] = stats.multivariate_normal(mu_em[y,k,:],Sigma_em[y,k,:,:]).pdf(coords)\n", " em_pdf[:,:,y] = em_pdf[:,:,y] + c_em[y,k]*em_gaussians[:,:,y,k]\n", "\n", "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],em_pdf[:,:,2])\n", "ax.plot(X[100:150,0],X[100:150,1],'^')\n", "plt.title('K-means GMM class 2, with scatter plot overlaid')" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nhvz/GSbaEPbDW2EAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=plt.gca()\n", "ax.contourf(coords[:,:,0],coords[:,:,1],np.amax(em_pdf,axis=2))\n", "ax.plot(X[0:50,0],X[0:50,1],'x',X[50:100,0],X[50:100,1],'o',X[100:150,0],X[100:150,1],'^')\n", "plt.title('K-means GMM of all three classes, scatter plot overlaid')" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nNme9f5Xha+lEgZedAPPc281ficixEdmVjwK/EZGn3SUl8klKf3rZCfH3518AXcBP3Cm7H4tIS16d\nJPSnHzsh/v7M5nzg5wXKk9Cf2RSzE5LVn4GoqtCLyCJgm6omdd0VwLedK4B2VT0OuB64NxLjhvNO\nVT0e5xb40yJyakx2eOFlZxL6swk4Efihqp4A9ABfisEOL/zYmYT+BMCdWjoHuCsuG/zgYWdi+jMM\nqj2ifwdwjohsBO4A5ovIrXl1krB8gqedqvq6qu51Xz8INIvIpIjtRFW3uP+34cwrnpRXJQn96Wln\nQvrzVeBVVX3KfX83jqBmk4T+9LQzIf2Z4SxghapuLbAtCf2ZoaidCevPwFRV6FX1y6rapqozcG6R\nlqnqR/Kqxb58gh87RWSqiIj7+iScvuuO0k4RaREnJwDurft7GL4CaOz96cfOJPSnqnYCm0Vkllu0\nAFiTVy32/vRjZxL6M4sPUnw6JPb+zKKonQnrz8BE5XWTg4hcDIGWT4iEPDvPAz4lIgeBXuB8jT6s\neArwS/f6awJuV9X/TGB/+rEzCf0J8L+B29zb+A3AxxLYn37sTER/uj/sZwCfzCpLXH/6sDMR/RkW\ntgSCYRhGjWORsYZhGDWOCb1hGEaNY0JvGIZR45jQG4Zh1Dgm9IZhGDWOCb1hGEaNY0JvGIZR4/w3\nJ28TQCqtIbwAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=plt.gca()\n", "maxpdf = np.amax(em_pdf, axis=2)\n", "yhat_using_em = (maxpdf == em_pdf[:,:,1]) + 2*(maxpdf == em_pdf[:,:,2])\n", "ax.contourf(coords[:,:,0],coords[:,:,1],yhat_using_em)\n", "ax.plot(X[0:50,0],X[0:50,1],'x',X[50:100,0],X[50:100,1],'o',X[100:150,0],X[100:150,1],'^')\n", "plt.title('GMM classification function from EM, scatter plot overlaid')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }