{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Gaussian Mixture ##" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from scipy.stats import multivariate_normal as Nd" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from mpl_toolkits.mplot3d import Axes3D\n", "from matplotlib import cm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Gaussian mixture is a [mixture distribution](https://en.wikipedia.org/wiki/Mixture_distribution) of $d$ normal distributions. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A multivariate normal distribution is defined in scipy.stats as : V=Nd(mean=m, cov=Sigma), where $m=(m[0,], m[1], \\ldots m[d-1])^T$ is the vector of means, and $\\Sigma\\in\\mathbb{R}^{d\\times d}$, the covariance matrix." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We define a mixture of 4 bivariate normal distributions. For each bivariate distribution we set the mean vector, \n", "the standard deviation vector and the correlation coefficient of the corresponding random variables associated to that bivariate distribution:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pr=[0.2, 0.4, 0.15, 0.25]# the list of probabilities defining the Gaussian mixture\n", "means=np.array([[0.5, 1.], [0.9, 2.7], [2., 3.],[2.5, 2]])\n", "sigmas=np.array([[0.7, 0.6], [0.7, 0.9], [0.41, 0.23 ],[0.53, 0.35]]) # pairs of standard deviations\n", "rho=np.array([0.0, -0.67,-0.76,0.5])# coefficients of correlation" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def Covariance(m, sigma, r):# defines the covariance matrix matrix for a a normal bivariate (X,Y)~N(m,Sigma)\n", " covar= r*sigma[0]*sigma[1]\n", " return np.array([[sigma[0]**2, covar], [covar, sigma[1]**2]]) \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The four covariance matrices are stored in a 3D numpy.array, Sigma:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Sigma=np.zeros((2,2,4), float)\n", "#Sigma[:,:, k] is the covariance matrix of the (k+1)^{th} bivariate normal distribution of the mixture\n", "\n", "for k in range(4):\n", " Sigma[:,:,k]=Covariance(means[k, :], sigmas[k,:], rho[k])\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "mixtureDensity defines the probability density function of the Gaussian mixture:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def mixtureDensity(x,y, pr, means, Sigma):\n", " pos=np.empty(x.shape + (2,))# if x.shape is (m,n) then pos.shape is (m,n,2)\n", " pos[:, :, 0] = x; pos[:, :, 1] = y \n", " z=np.zeros(x.shape)\n", " for k in range(4) :\n", " z=z+pr[k]*Nd.pdf(pos, mean=means[k,:], cov=Sigma[:,:, k])\n", " return z " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 3D numpy.array, pos, is defined in concordance to the definition in scipy.stats of a \n", "[multivariate normal distribution](http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.stats.multivariate_normal.html). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matplotlib plot of the Gaussian mixture probability density function ###" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plt.rcParams['figure.figsize'] = (10.0, 6.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We define a custom colormap to plot the mixture's pdf:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nOKYBeDCXbLlKc0OSz28m7G/QleICaSwouvGqsSZxPqaxWSqLns4ipBtvgkkQctJ54T7xuGnbCNNr\nkNWoeaxbty5oFdEo4+PjWL16NTKZDF588UV4nodVq1Y1aYVEsyDBQwiwFhK84MnlcsaiJ+0XuXBj\n0X6p6399M3QtKfQZWPFiLCpslEuY8zmtoKS4G6reFxP3nXyuafG/pDgf03FJN/ZofE78eHn+tJ7D\neOtNuvMWgmhZCGtoNwMDA/jlL38ZO+b222/Hv/3bv+H8+fNYt24dvva1rwXxQPfccw/279+Pxx57\nDLlcDt3d3di3b998LJ1ICQkeQkBuHOo4TqLYSUo3lsfExdKoxienM8fPmZSBxVt1kuJr5Jt7M0TN\nXNxeJvE5cddNG/OibuAZHWeaPp4uzVwthPSfOfXf1UTkpAkoNhF3ceebnku0hoGBATz11FOxY5I6\nmO/Zswd79uxp5rKIFkCChxCQiw3OpXGoyQ1UJrgZaa03/M0gOThZNyYpEyicK1iQbskR0gQ3z1Uw\n6aoP88g3UNMgZvM1qMVIXDo4v640aeZp6ufwwsYkWLFRkdJoynpaSCy1BtPig8TlDwkeQkCusqxP\nRU+2qCTdzCPiJGWsUJL4mesYE2uV+He4PFwEOpEUZ7FRj9cLFnYdk8yvNGnmjYoLXUaVau40IrRZ\nc5FQaR/Lli3DzMxMu5dBzAMkeAiBfD6PXC4nBCunbSuh3p8sPOLnZeerBYmpaEmah0dnBTK9iZlY\nSZoZ55MktszXLc/rTxzXbdxUsDQrzVxs5Qphv26N4eP4v0WyRcdcnKSN6yHaR1LxQeLyhwQPEYG5\nstjjJBpxXSXOxc8TCXZNFi2qMTq3lEmBQd05umDppPPbQWgd4feJi457/9LG/DQqhOQ5TFqVqNak\nu5Y/TrlbO0/SfCZzxs07n3MSIplMBt3d3Ziensby5cvbvRyihVAdHiICq8XDaPRXT1JtkaQaKmyM\nrm6POE4/j2o9JrVldOPTxbdEa9mI8zZvS/v61K852lQzbc0e3fsuX0NVDyduvKopJzue9HrMPovJ\nfytVplnca5WvYYLJnETj3N8TrYA8MDBglJqe1EQUAO69915cd9112LRpE44cOTKntRLNhQQPEYFZ\neBrtDdNosbQk0aISP0lF3JJuNrobb9L644r5sdiVhVB0EIhfa5qbK3tdSSKCRy9uTcYni93oefL7\n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\nqSFmv/1r/QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xx=np.linspace(-1, 4, 100)\n", "yy=np.linspace(0, 4.5, 100)\n", "x,y=np.meshgrid(xx,yy)\n", "z=mixtureDensity(x, y, pr, means, Sigma)\n", "\n", "fig=plt.figure()\n", "ax = fig.add_subplot(111, projection='3d')\n", "ax.set_xlabel('x')\n", "ax.set_ylabel('y')\n", "ax.set_title('Probability density function of the Gaussian Mixture')\n", "ax.view_init(elev=35, azim=-90)\n", "ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=cm.RdBu,\n", " linewidth=0, antialiased=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotly plot of the probability density function of the Gaussian mixture ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To see this surface from different points of view we generate an interactive \n", " Plotly plot:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mountain_cs=[[0.0, '#32924c'], # a custom colorscale \n", " [0.1, '#52a157'],\n", " [0.2, '#74b162'],\n", " [0.3, '#94c06d'],\n", " [0.4, '#b6d079'],\n", " [0.5, '#d7de84'],\n", " [0.6, '#c9c370'],\n", " [0.7, '#bba65b'],\n", " [0.8, '#ad8a47'],\n", " [0.9, '#9f6d32'],\n", " [1.0, '#91511e']]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import plotly.plotly as py\n", "from plotly.graph_objs import *" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "trace1= Surface(\n", " z=z,\n", " x=x,\n", " y=y, \n", " colorscale=mountain_cs\n", " )" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u'https://plot.ly/~empet/4133'" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "axis = dict(\n", "showbackground=True, \n", "backgroundcolor=\"rgb(230, 230,230)\",\n", "gridcolor=\"rgb(255, 255, 255)\", \n", "zerolinecolor=\"rgb(255, 255, 255)\", \n", " )\n", "\n", "layout = Layout(\n", " title=\"\" , \n", " autosize=False,\n", " width=600,\n", " height=500,\n", " scene=Scene( \n", " xaxis=XAxis(axis),\n", " yaxis=YAxis(axis),\n", " zaxis=ZAxis(axis), \n", " )\n", " )\n", "\n", "fig = Figure(data=[trace1], layout=layout)\n", "py.sign_in('empet', 'my_api_key')\n", "py.plot(fig, filename='Gaussian-Mixture-P-Distrib', world_readable=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Contour plot and a cloud of points as a sample from the Gaussian mixture ###" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "trace2 =Contour(\n", " z=z,\n", " x=xx,\n", " y=yy,\n", " colorscale='Greens',\n", " reversescale=True,\n", " showlegend=False,\n", " showscale=False,\n", " contours=Contours(\n", " showlines=False) \n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sampling from the Gaussian mixture ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pseudocod to simulate a mixture distribution of pdf $f=p_0f_0+p_1f_1+\\cdots+p_{d-1}f_{d-1}$, $\\sum_{k=0}^{d-1}p_k=1$, is as follows:\n", " \n", "for n in range(N): \n", "- do generate a value from the discrete distribution of mass function $p_X(k)=p_k$, $k=0,1, \\ldots d-1$. Let j be the returned value;\n", "- simulate the probability distribution of pdf $f_j$; let $pt$ be the returned point;\n", "- append $pt$ to the list of points;" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def GaussianMixture2D(N, pr, means, Sigma):\n", " dis=np.random.choice([0, 1, 2, 3], size=N, p=pr)#generates N values from the discrete distribution\n", "\n", " pts=np.empty((N,2), dtype=float)\n", " n=len(pr)\n", " for k in range(n):\n", " I=[j for j in range(N) if dis[j] == k]# list of elements indexes equal to k (k=0, 1, ..., n-1) \n", " d=len(I)\n", " ptsk=Nd.rvs(size=d, mean=means[k], cov=Sigma[:,:,k])# sampling from $k^{th$} bivariate distribution \n", " pts[I,:]=ptsk # insert these values in positions stored by I \n", " return zip(dis,pts)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "N=4000\n", "pts=GaussianMixture2D(N, pr, means, Sigma)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In a subplot of two rows and one column we plot the contour of the mixture density function and the cloud of points resulted from mixture simulation." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import plotly.plotly as py\n", "from plotly.graph_objs import *\n" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ "cols=['#e6b3d1', '#b3e6b8', '#d0d025', '#c27070']# color of points generated from each mixture's \n", " # component distribution" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "color=[]\n", "X=[]\n", "Y=[]\n", "for idx, pt in pts:\n", " color.append(cols[idx])\n", " X.append(pt[0])\n", " Y.append(pt[1])" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "trace3 = Scatter(\n", " x=X,\n", " y=Y,\n", " mode='markers',\n", " name='',\n", " marker=Marker(\n", " color=color,\n", " size=4,\n", " symbol='dot',\n", " line=Line(\n", " color='#000000',\n", " width=0.5\n", " ),\n", " opacity=0.8 \n", " ),\n", "\n", ")" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from plotly import tools" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is the format of your plot grid:\n", "[ (1,1) x1,y1 ]\n", "[ (2,1) x2,y2 ]\n", "\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig = tools.make_subplots(rows=2, cols=1,\n", " subplot_titles=('Contour plot of a Gaussian mixture', 'Sampling from the above Gaussian mixture'),\n", " vertical_spacing=0.075) \n", "\n", "set_axis1=dict(showgrid=False, ticks='', autotick=False, showticklabels=False)\n", "set_axis2=dict(showgrid=False,\n", " zeroline=False,\n", " showline=True,\n", " mirror=True, \n", " ticks='outside')\n", "\n", "fig.append_trace(trace2, 1, 1)\n", "fig.append_trace(trace3, 2, 1)\n", "fig['layout']['xaxis1'].update(set_axis1)\n", "fig['layout']['yaxis1'].update(set_axis1)\n", "fig['layout']['xaxis2'].update(set_axis2, title='x')\n", "fig['layout']['yaxis2'].update(set_axis2, title='y' )\n", "fig['layout'].update(width=500,\n", " height=800,\n", " showlegend=False,\n", " hovermode='closest',)\n", "\n", "py.iplot(fig, filename='Gaussian-mixture-sbplts')" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open(\"./custom.css\", \"r\").read()\n", " return HTML(styles)\n", "css_styling()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }