├── README.md └── intro_to_gmm_&_em.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Gaussian_Mixture_Models 2 | This is the code for "Gaussian Mixture Models - The Math of Intelligence (Week 7)" By Siraj Raval on Youtube 3 | 4 | ## Overview 5 | 6 | This is the code for [this](https://youtu.be/JNlEIEwe-Cg) video on Youtube by Siraj Raval as part of The Math of Intelligence series. 7 | This is a lesson on Gaussian Mixture Models, they are probability distributions that consist of multiple Gaussian distributions. 8 | This is useful for modeling more complex data, that has multiple peaks. Sometimes one bell curve isn't enough. We can optimize 9 | this model for clustering so that we can classify the data into the discovered classes using the Expectation Maximization 10 | algorithm. 11 | 12 | ## Dependencies 13 | 14 | * numpy 15 | * matplotlib 16 | * scipy 17 | * seaborn 18 | 19 | Install missing dependencies with [pip](https://pip.pypa.io/en/stable/) 20 | 21 | ## Usage 22 | 23 | Just run `jupyter notebook` in terminal and the code will pop up in your browser 24 | 25 | Install jupyter [here](http://jupyter.readthedocs.io/en/latest/install.html). 26 | 27 | ## Credits 28 | 29 | The credits for this code go to [bspiering](https://github.com/brianspiering). Ive merely created a wrapper to get people started 30 | 31 | -------------------------------------------------------------------------------- /intro_to_gmm_&_em.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Gaussian Mixture Models\n", 8 | "\n", 9 | "## Demo - Predicting Customer Churn\n", 10 | "\n", 11 | "For a set of given customers, if we know how much money they withdraw or deposit into it this month, let's see if we can predict if they will continue using the app next month or not. \n", 12 | "\n", 13 | "![alt text](https://qph.ec.quoracdn.net/main-qimg-e662c860801e26c6d1a41a7de35a7884-c \"Logo Title Text 1\")\n", 14 | "\n", 15 | "An universally used generative unsupervised clustering is Gaussains Mixture Model (GMM) which is also known as \"EM Clustering\". The idea of GMM is very simple: for a given dataset, each point is generated by linearly combining multiple multivariate Gaussians.\n", 16 | "\n", 17 | "\n", 18 | "## First -- What is a Gaussian?\n", 19 | "\n", 20 | "## A Distribution is a listing of outcomes of an experiment and the probability associated with each outcome\n", 21 | "\n", 22 | "![alt text](http://www.amathsdictionaryforkids.com/qr/fimages/frequencyDistributionTable.gif \"Logo Title Text 1\")\n", 23 | "\n", 24 | "![alt text](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Empirical_Rule.PNG/450px-Empirical_Rule.PNG \"Logo Title Text 1\")\n", 25 | "\n", 26 | "![alt text](https://thecuriousastronomer.files.wordpress.com/2014/06/1000px-normal_distribution_pdf-svg.png \"Logo Title Text 1\")\n", 27 | "\n", 28 | "![alt text](http://i.imgur.com/iDNiL13.jpg \"Logo Title Text 1\")\n", 29 | "\n", 30 | "The formula for a gaussian distribution - This is also called the probability density function. It's a function of a continuous random variable, whose integral across an interval gives the probability that the value of the variable lies within the same interval.\n", 31 | "\n", 32 | "## What is a Gaussian Mixture Model?\n", 33 | "\n", 34 | "It's a probability distribution that consists of multiple probability distributions.\n", 35 | "\n", 36 | "![alt text](http://i.imgur.com/F8Df1m3.png \"Logo Title Text 1\")\n", 37 | "\n", 38 | "Covariance is a measure of how changes in one variable are associated with changes in a second variable. Specifically, covariance measures the degree to which two variables are linearly associated. However, it is also often used informally as a general measure of how monotonically related two variables are.\n", 39 | "\n", 40 | "![alt text](http://i.imgur.com/tBtZ0W4.png \"Logo Title Text 1\")\n", 41 | "\n", 42 | "![alt text](http://i.imgur.com/750NscW.png \"Logo Title Text 1\")\n", 43 | "\n", 44 | "![alt text](http://4.bp.blogspot.com/-zuCQBrN8990/VGt45PZHXhI/AAAAAAAAA1E/jtQQaAj-PMc/s1600/gmm2.png \"Logo Title Text 1\")\n", 45 | "\n", 46 | "![alt text](http://dirichletprocess.weebly.com/uploads/1/9/8/4/19847957/3346416.png?1367446693 \"Logo Title Text 1\")\n", 47 | "\n", 48 | "![alt text](http://i.imgur.com/0vZg6NX.png \"Logo Title Text 1\")\n", 49 | "\n", 50 | "![alt text](http://recognize-speech.com/images/robert/gmm_intro/mvg1.png \"Logo Title Text 1\")\n", 51 | "\n", 52 | "It's similar to K means in that\n", 53 | "\n", 54 | "![alt text](http://i.imgur.com/y5PeNL0.png \"Logo Title Text 1\")\n", 55 | "Hard vs Soft Assignment. Hard might lead to mis grouping.\n", 56 | "\n", 57 | "Guassian Mixture:\n", 58 | "\n", 59 | "Instead of Hard assgning data points to a cluster, if we are uncertain about the data points where they belong or to which group, we use this method. It uses probability of a sample to determine the feasibility of it belonging to a cluster.\n", 60 | "\n", 61 | "## How is it Optimized?\n", 62 | "\n", 63 | "The Expecation Maximization Algorithm!\n", 64 | "\n", 65 | "![alt text](http://i.imgur.com/B5HgxrH.png \"Logo Title Text 1\")\n", 66 | "\n", 67 | "#### Comparing to Gradient Descent \n", 68 | "You can obtain maximum likelihood estimates using different methods and using an optimization algorithm is one of them. On another hand, gradient descent can be also used to maximize functions other than likelihood function.\n", 69 | "\n", 70 | "## When Should I Use it?\n", 71 | "\n", 72 | "Anytime you have unlabeled data and want to classify it. If data is normally distributed. \n", 73 | "\n", 74 | "Predicting Customer Churn\n", 75 | "Anomaly Detection\n", 76 | "Object Tracking\n", 77 | "![alt text](http://i.imgur.com/cm0UxfF.png \"Logo Title Text 1\")\n", 78 | "\n", 79 | "## Related repositories\n", 80 | "\n", 81 | "https://github.com/benathi/word2gm Uses tensorflow + GMM to classify song lyrics by genre\n", 82 | "https://github.com/GaborLengyel/Finite-Gaussian-Mixture-models/blob/master/Finite%20Gaussian%20Mixture%20models.ipynb \n", 83 | "great general purpose tutorial\n" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "Import Dependencies and test out a distribution graph\n", 91 | "------\n" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 1, 97 | "metadata": { 98 | "collapsed": true 99 | }, 100 | "outputs": [], 101 | "source": [ 102 | "reset -fs" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 2, 108 | "metadata": { 109 | "collapsed": true 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "#For plotting\n", 114 | "import matplotlib.pyplot as plt\n", 115 | "#for matrix math\n", 116 | "import numpy as np\n", 117 | "#for normalization + probability density function computation\n", 118 | "from scipy import stats\n", 119 | "#for plotting\n", 120 | "import seaborn as sns\n", 121 | "sns.set_style(\"white\")\n", 122 | "%matplotlib inline" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 23, 128 | "metadata": { 129 | "collapsed": false 130 | }, 131 | "outputs": [ 132 | { 133 | "data": { 134 | "text/plain": [ 135 | "[]" 136 | ] 137 | }, 138 | "execution_count": 23, 139 | "metadata": {}, 140 | "output_type": "execute_result" 141 | }, 142 | { 143 | "data": { 144 | "image/png": "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\nRU5ErkJggg==\n", 145 | "text/plain": [ 146 | "" 147 | ] 148 | }, 149 | "metadata": {}, 150 | "output_type": "display_data" 151 | } 152 | ], 153 | "source": [ 154 | "#Return evenly spaced numbers over a specified interval.\n", 155 | "x = np.linspace(start=-10, stop=10, num=1000)\n", 156 | "#A normal continuous random variable.\n", 157 | "#The location (loc) keyword specifies the mean. The scale (scale) keyword specifies the standard deviation.\n", 158 | "y = stats.norm.pdf(x, loc=0, scale=1.5) \n", 159 | "#plot it!\n", 160 | "plt.plot(x, y)" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 4, 166 | "metadata": { 167 | "collapsed": true 168 | }, 169 | "outputs": [], 170 | "source": [ 171 | "#for data preprocessing\n", 172 | "import pandas as pd" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 24, 178 | "metadata": { 179 | "collapsed": false 180 | }, 181 | "outputs": [ 182 | { 183 | "data": { 184 | "text/html": [ 185 | "
\n", 186 | "\n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | "
x
00.252851
1-1.034562
23.319558
34.552363
4-0.775995
\n", 216 | "
" 217 | ], 218 | "text/plain": [ 219 | " x\n", 220 | "0 0.252851\n", 221 | "1 -1.034562\n", 222 | "2 3.319558\n", 223 | "3 4.552363\n", 224 | "4 -0.775995" 225 | ] 226 | }, 227 | "execution_count": 24, 228 | "metadata": {}, 229 | "output_type": "execute_result" 230 | } 231 | ], 232 | "source": [ 233 | "#read our dataset\n", 234 | "df = pd.read_csv(\"bimodal_example.csv\")\n", 235 | "#show first 5 examples (in BTC)\n", 236 | "df.head(n=5)" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": 25, 242 | "metadata": { 243 | "collapsed": true 244 | }, 245 | "outputs": [], 246 | "source": [ 247 | "#show the distribution of the data as a histogram\n", 248 | "data = df.x" 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "execution_count": 28, 254 | "metadata": { 255 | "collapsed": false 256 | }, 257 | "outputs": [ 258 | { 259 | "data": { 260 | "text/plain": [ 261 | "" 262 | ] 263 | }, 264 | "execution_count": 28, 265 | "metadata": {}, 266 | "output_type": "execute_result" 267 | }, 268 | { 269 | "data": { 270 | "image/png": "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\nIoYzc09n7FjgRwXnUGVGRtcwtna8SK1tM1tZOXxIsXpSPxoZWe1zXItScq3nRmAb8OGI+OWIeDHw\ndsALCkmS1KdKnjWwG3gBMAF8E7gKuDQzP1xqDkmSVFbRSwxn5t3Avy9ZU5IkLR8PA5UkqWIGAUmS\nKmYQkCSpYgYBSZIqZhCQJKliBgFJkipmEJAkqWIGAUmSKmYQkCSpYgYBSZIqZhCQJKliBgFJkipm\nEJAkqWIGAUmSKmYQkCSpYgYBSZIqZhCQJKliBgFJkipmEJAkqWIGAUmSKmYQkCSpYgYBSZIqZhCQ\nJKliBgFJkipmEJAkqWIGAUmSKmYQkCSpYgYBSZIqZhCQJKliBgFJkipmEJAkqWIGAUmSKmYQkCSp\nYgYBSZIqZhCQJKliBgFJkipmEJAkqWIGAUmSKmYQkCSpYgYBSZIqNlyyWEQcClwNnAk8DHwkMy8s\nOYckSSqn9IrA1cALgNNowsC5EXFe4TkkSVIhxYJARIwB5wHnZua3MvPLwJXAiaXmkCRJZZXcNfBc\nYCYzb5kbyMwrCtaXJEmFlQwCTwbujojfAS4EDgU+ClyWmbMF55EkSYWUDAKjwK8ArwPOAtYDHwR+\nBvxJwXkk9Vi73abVahWtBzA0VO6wpenpaZh1G0R6LCWDwB6aMHBmZm4GiIgnAb+PQUA6qLRaLW7Y\ndCcjo2uK1Jvacg9Dw4cwOXlUkXpzNVePjTN25LpiNaWDUckgMAXsmgsBHQn8YsE5JPWJkdE1jK0d\nL1Jr28xWVg4fUqzeXE1Jj63k6YO3AodFxFPnjR0H3F1wDkmSVFCxIJCZ3we+AFwXEU+LiBcCbwM+\nUGoOSZJUVtErCwKvAa4BvgbsBN6bme8vPIckSSqkaBDIzO00ZwycVbKuJElaHr7pkCRJFTMISJJU\nMYOAJEkVMwhIklQxg4AkSRUzCEiSVDGDgCRJFTMISJJUMYOAJEkVMwhIklQxg4AkSRUzCEiSVDGD\ngCRJFTMISJJUMYOAJEkVMwhIklQxg4AkSRUzCEiSVDGDgCRJFRvudQPqjXa7TavVKlpzfHycoSGz\npSQNEoNApVqtFjdsupOR0TVF6u3YPsPGDcczMTFRpJ4k6cAwCFRsZHQNY2vHe92GJKmHXMeVJKli\nBgFJkipmEJAkqWIGAUmSKmYQkCSpYgYBSZIqZhCQJKliBgFJkipmEJAkqWIGAUmSKmYQkCSpYgYB\n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\n", 271 | "text/plain": [ 272 | "" 273 | ] 274 | }, 275 | "metadata": {}, 276 | "output_type": "display_data" 277 | } 278 | ], 279 | "source": [ 280 | "#plot histogram\n", 281 | "sns.distplot(data, bins=20, kde=False)" 282 | ] 283 | }, 284 | { 285 | "cell_type": "markdown", 286 | "metadata": {}, 287 | "source": [ 288 | "Is the normal distribution a useful model for the data?" 289 | ] 290 | }, 291 | { 292 | "cell_type": "code", 293 | "execution_count": 30, 294 | "metadata": { 295 | "collapsed": false 296 | }, 297 | "outputs": [ 298 | { 299 | "data": { 300 | "text/plain": [ 301 | "" 302 | ] 303 | }, 304 | "execution_count": 30, 305 | "metadata": {}, 306 | "output_type": "execute_result" 307 | }, 308 | { 309 | "data": { 310 | "image/png": "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\n", 311 | "text/plain": [ 312 | "" 313 | ] 314 | }, 315 | "metadata": {}, 316 | "output_type": "display_data" 317 | } 318 | ], 319 | "source": [ 320 | "#try to fit a normal distribution to this data\n", 321 | "sns.distplot(data, fit=stats.norm, bins=20, kde=False,)" 322 | ] 323 | }, 324 | { 325 | "cell_type": "markdown", 326 | "metadata": {}, 327 | "source": [ 328 | "
\n", 329 | "
\n", 330 | "
\n", 331 | "\n", 332 | "----\n", 333 | "Define The Model\n", 334 | "-----\n", 335 | "\n", 336 | "Two Normal distributions $N(\\mu_1, \\sigma_1^2)$ and $N(\\mu_2, \\sigma_2^2)$. \n", 337 | "\n", 338 | "There are 5 paramaters: 4 of the them are Normal distributions and 1 more for the probability of choosing one of them.\n", 339 | "\n", 340 | "Let $w$ be the probability that the data comes from the first Normal, the parameter in this model is $\\theta = (w, \\mu_1, \\sigma_1^2, \\mu_2, \\sigma_2^2)$.\n", 341 | "\n", 342 | "The probability density function (PDF) is:\n", 343 | "\n", 344 | "$$f(x | \\theta) = w \\ f_1(x \\ | \\ \\mu_1, \\sigma_1^2) + (1 - w) \\ f_2 (x \\ | \\ \\mu_2, \\sigma_2^2) $$ " 345 | ] 346 | }, 347 | { 348 | "cell_type": "markdown", 349 | "metadata": {}, 350 | "source": [ 351 | "Fit The Model\n", 352 | "-----" 353 | ] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": { 358 | "slideshow": { 359 | "slide_type": "slide" 360 | } 361 | }, 362 | "source": [ 363 | "Expectation–Maximization (EM) Algorithm \n", 364 | "-----\n", 365 | "
\n", 366 | "
" 367 | ] 368 | }, 369 | { 370 | "cell_type": "markdown", 371 | "metadata": { 372 | "slideshow": { 373 | "slide_type": "slide" 374 | } 375 | }, 376 | "source": [ 377 | "What is Expectation–Maximization (EM) algorithm?\n", 378 | "------\n", 379 | "\n", 380 | "An iterative method for finding maximum likelihood (MLE) or maximum a posteriori (MAP) estimates of parameters in statistical models,when the model depends on unobserved latent variables" 381 | ] 382 | }, 383 | { 384 | "cell_type": "markdown", 385 | "metadata": { 386 | "slideshow": { 387 | "slide_type": "slide" 388 | } 389 | }, 390 | "source": [ 391 | "Expectation–Maximization (EM) Workflow\n", 392 | "------\n", 393 | "
\n", 394 | "
" 395 | ] 396 | }, 397 | { 398 | "cell_type": "markdown", 399 | "metadata": { 400 | "slideshow": { 401 | "slide_type": "slide" 402 | } 403 | }, 404 | "source": [ 405 | "Alternates between performing:\n", 406 | "\n", 407 | "- __Expectation (E)__ step: Given the current parameters of the model, estimate a probability distribution.\n", 408 | "\n", 409 | "- __Maximization (M)__ step: Given the current data, estimate the parameters to update the model." 410 | ] 411 | }, 412 | { 413 | "cell_type": "markdown", 414 | "metadata": { 415 | "slideshow": { 416 | "slide_type": "slide" 417 | } 418 | }, 419 | "source": [ 420 | "EM, more formally\n", 421 | "-----\n", 422 | "\n", 423 | "Alternates between performing:\n", 424 | "\n", 425 | "- __Expectation (E)__ step: Using the current estimate for the parameters, create function for the expectation of the log-likelihood. \n", 426 | "\n", 427 | "- __Maximization (M)__ step: Computes parameters maximizing the expected log-likelihood found on the E step. " 428 | ] 429 | }, 430 | { 431 | "cell_type": "markdown", 432 | "metadata": { 433 | "slideshow": { 434 | "slide_type": "skip" 435 | } 436 | }, 437 | "source": [ 438 | "The M parameter-estimates are then used to determine the distribution of the latent variables in the next E step." 439 | ] 440 | }, 441 | { 442 | "cell_type": "markdown", 443 | "metadata": { 444 | "slideshow": { 445 | "slide_type": "slide" 446 | } 447 | }, 448 | "source": [ 449 | "EM is trying to maximize the following function:\n", 450 | "------\n", 451 | " \n", 452 | "
\n", 453 | "\n", 454 | "- X is directly observed variable\n", 455 | "- θ parameters of model\n", 456 | "- Z is not directly observed / latent variable\n", 457 | " - Z is a joint (related) distribution on x." 458 | ] 459 | }, 460 | { 461 | "cell_type": "markdown", 462 | "metadata": { 463 | "slideshow": { 464 | "slide_type": "slide" 465 | } 466 | }, 467 | "source": [ 468 | "EM Steps\n", 469 | "-----\n", 470 | "\n", 471 | "1. Initialize the parameters θ\n", 472 | "2. Compute the best values for Z given θ \n", 473 | "3. Use the computed values of Z to compute a better estimate for the θ \n", 474 | "4. Iterate steps 2 and 3 until convergence" 475 | ] 476 | }, 477 | { 478 | "cell_type": "markdown", 479 | "metadata": { 480 | "slideshow": { 481 | "slide_type": "slide" 482 | } 483 | }, 484 | "source": [ 485 | "EM steps, stated another way\n", 486 | "-----\n", 487 | "\n", 488 | "1. Initialize the parameters of the models, either randomly or doing a \"smart seeding\"\n", 489 | "\n", 490 | "2. E Step: Find the posterior probabilities of the latent variable given current parameter values.\n", 491 | "\n", 492 | "3. M Step: Reestimate the parameter values given the current posterior probabilities.\n", 493 | "\n", 494 | "4. Repeat 2-3 monitoring the likelihood function likelihood. Hope for convergence.\n", 495 | "\n", 496 | "![alt text](http://i.imgur.com/0cTmOja.png \"Logo Title Text 1\")\n", 497 | "\n", 498 | "![alt text](http://i.imgur.com/8kQ9aa6.png \"Logo Title Text 1\")\n", 499 | "\n", 500 | "![alt text](http://i.imgur.com/A1j3lqB.png \"Logo Title Text 1\")" 501 | ] 502 | }, 503 | { 504 | "cell_type": "markdown", 505 | "metadata": {}, 506 | "source": [ 507 | "Back to our data\n", 508 | "-----\n", 509 | "\n" 510 | ] 511 | }, 512 | { 513 | "cell_type": "code", 514 | "execution_count": 9, 515 | "metadata": { 516 | "collapsed": true 517 | }, 518 | "outputs": [], 519 | "source": [ 520 | "class Gaussian:\n", 521 | " \"Model univariate Gaussian\"\n", 522 | " def __init__(self, mu, sigma):\n", 523 | " #mean and standard deviation\n", 524 | " self.mu = mu\n", 525 | " self.sigma = sigma\n", 526 | "\n", 527 | " #probability density function\n", 528 | " def pdf(self, datum):\n", 529 | " \"Probability of a data point given the current parameters\"\n", 530 | " u = (datum - self.mu) / abs(self.sigma)\n", 531 | " y = (1 / (sqrt(2 * pi) * abs(self.sigma))) * exp(-u * u / 2)\n", 532 | " return y\n", 533 | " #printing model values\n", 534 | " def __repr__(self):\n", 535 | " return 'Gaussian({0:4.6}, {1:4.6})'.format(self.mu, self.sigma)" 536 | ] 537 | }, 538 | { 539 | "cell_type": "code", 540 | "execution_count": 31, 541 | "metadata": { 542 | "collapsed": false 543 | }, 544 | "outputs": [ 545 | { 546 | "name": "stdout", 547 | "output_type": "stream", 548 | "text": [ 549 | "Best single Gaussian: μ = 1.9, σ = 1.8\n" 550 | ] 551 | } 552 | ], 553 | "source": [ 554 | "#gaussian of best fit\n", 555 | "best_single = Gaussian(np.mean(data), np.std(data))\n", 556 | "print('Best single Gaussian: μ = {:.2}, σ = {:.2}'.format(best_single.mu, best_single.sigma))" 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "execution_count": 32, 562 | "metadata": { 563 | "collapsed": false 564 | }, 565 | "outputs": [ 566 | { 567 | "data": { 568 | "image/png": "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\nABUVFdx4441cfvnlAPTq1YszzjijPteR7NmzhxEjRpCRkUHfvn35y1/+QlJSUv2/zfTp08nIyKBX\nr168+OKL9OnT55BzTJw4kauuuopBgwYBcPnllzN37lzy8/NJT08H4IorrmDChAkAXHzxxbz66qsh\n5WspKhpERNqBuC6B3/qzi/e22Wv2TuwZUi8DwMknn8yQIUM455xzGD58ONOmTWP27Nl4vYdeBfd4\nPPTr16/+eUJCAjU1NQB899139cVEnTFjxlBYWHjIebZs2cIHH3zAnDlz6rfV1NQwefLkQ9pu3bqV\nmpqag849ZswY/H4/AN26dWPWrFm8+OKLbNiwgc2bN2OtZezYsSG9/6uvvpq77rqLBQsWMGXKFGbM\nmMH06dMBuP7663n00UeZM2cOU6dOZdasWU2O8Zg1axYLFy5kzpw5bNu2jfXr1wPUX+YADvvv1lZU\nNIiItBNxXWIZnNbf7RhNiomJYe7cuXz11VcsWrSIN998kzlz5vDvf/+7yfZRUVEHPa/78I6IiDik\nbd2+xmpra7nmmmsOuXQRHR19SNu67v3DnSs3N5cLLriAkSNHctJJJzF79mwWL15MVlYW0PSliYYf\n5ueeey6TJk1i4cKFLFq0iFtvvZVrrrmGX/7yl1x99dXMmDGDBQsWsGjRIi6//HLuu+8+LrzwwoPO\n9+tf/5qsrCxmzZrFxRdfTPfu3bnooosOanO4f7e2ooGQIiJy1JYtW8YzzzzDhAkTuOOOO3j//fep\nrKysHwwZqkGDBtX/hl3nm2++abJt//792b17N3379q1//Otf/+Kzzz47pO0xxxxDVFTUQedat25d\nfTGwcOFCUlNTefbZZ7nssssYN24cO3furP9QjoqKorS09KBz7t69Gwh8cD/44IPs27ePn/70pzz7\n7LPccsstfPTRR5SUlHD//fcTGRnJ5ZdfzksvvcRPfvITPvroo4POVVJSwrvvvsvjjz/OTTfdxPTp\n0ykoKKg/f7hQ0SAiIkctKiqKJ598krlz55Kdnc27775LeXl5k5M6/dCH4E9/+lOysrL4y1/+wvbt\n23n22WdZuXJlk7/pX3755bz77ru88sor7Nq1i1deeYUXXniBY4899pC2cXFxnHfeeTzwwAOsXbuW\nNWvW8Ic//AEI9CIkJyezZ88eli1bxq5du3juuedYvHgx1dXVAIwcOZLCwkL+/ve/s2vXLv7whz/U\n3/Hh8XjYsGEDDzzwANZaNm3axGeffcbIkSNJSEhgyZIl/P73v2fbtm2sW7eOlStXHnIJJjo6mtjY\nWD788EOys7P5/PPPefDBBwGoqqoK7YvQBlQ0iIjIURs/fjz33nsvzz//PDNmzOD555/n0UcfbfID\n/IfuQujVqxf/+7//y+uvv86PfvQj1qxZw/Tp0w/plgcYPXo0Dz30EK+99hozZ87kn//8J4899hjj\nx49v8tx33HEHQ4cO5fLLL+eXv/wl5557LhAoeM4++2xmzpzJrbfeyoUXXsju3bt59NFH2bJlC9XV\n1fTr14877riDZ599lvPPPx+Px8OZZ55Zf+4HH3yQpKQkLrvsMi655BIyMjLq77p46qmnKCws5MIL\nL+Taa6/lhBNO4Prrrz/o3yIqKoqHHnqIDz74gLPPPpunn36aP/7xj/Ts2ZMNGzYc8d+trXjCqdvD\nCWPM1j59+vT/+OOP3Y4iIiItZNOmTdTU1BzUQ3HdddeRmZnJTTfddFTnXrhwISeddBKxsYHBnWvX\nruXSSy9lzZo1TY6l6MhOO+00du/evc1aO8DJceppEBGRsLFz504uv/xyli5dyp49e5g7dy7Lly/n\njDPOOOpzP/XUU/z+979n586dfPvttzz88MNMnz690xUMR0N3T4iISNg47bTTuPLKK7n77rvZv38/\n/fv35/HHH2fIkCFHfe5HHnmEBx54gPPOO4+oqCimT5/OnXfe2QKpOw9dnhAREelkdHlCREREWpWK\nBhEREQmJigYREREJiYoGERERCYmKBhEREQmJigYREREJiYoGERERCYmKBhEREQmJigYREREJieNp\npI0x0cDTwPlAGfCotfaxw7S9FPhvoC/wNfAra+2KBvsvBu4HMoAPgWustflOM4mIiEjra05PwyPA\nWGAqcANwrzHm/MaNjDEnA88D/wMMB5YB7xtj4oL7JwT33wtMBFKBF5uRR0RERNqAo6Ih+IF/FXCL\ntTbLWjsPeAhoar3SnsB91tp/WGu3A/cBXQkUEAA3Av+01r5qrV0PXAacbYzp17y3IiIiIq3JaU/D\naAKXNJY12LaEQE/BQay1r1tr/whgjIkBbgNygW+DTU4APmvQfjewM7hdREREwozTMQ0ZQJ61tqbB\ntlwgxhiT1tR4BGPMNOCj4NNLrbVlDc61p1HzXKCPw0wiIq7w+Xzk5zdvGFZaWhper8aiS/vitGiI\nAyobbat7Hn2YY9YRGANxDvCSMWabtfarHzjX4c4jIhJW8vPzmffJOhISkx0dV1JcyKxpmXTv3r2V\nkom0DqdFQwWHfqjXPS+jCdbafcA+YK0x5kTgeuCrHzhXk+cREQlHCYnJpKSmuR1DpE047RvLBroZ\nYxoe1xMot9YWNGxojBlvjDmu0fHfAt0anKtno/09gRyHmURERKQNOC0a1gDVHDxYcTKwoom2VwF/\nbLRtHP83EHI5cHLdDmNMXwLjGZY7zCQiIiJtwNHlCWttuTHmZeBZY8yVBD7kbwd+DmCMSQcKrbUV\nwHPAcmPMzcD7BG6pPD74J8AzwCJjzHJgJfA48La1dsfRvy0RERFpac0ZunsbsAr4BHgCuCc4XwME\nLi3MBrDWrgbOA64GsoCzgDOttTnB/cuB6whM7rQEyAeubPY7ERERkVbleBppa205cEXw0Xift9Hz\n94D3fuBcLwMvO80gIiIibU83CYuIiEhIVDSIiIhISFQ0iIiISEhUNIiIiEhIVDSIiIhISFQ0iIiI\nSEhUNIiIiEhIVDSIiIhISFQ0iIiISEhUNIiIiEhIVDSIiIhISFQ0iIiISEhUNIiIiEhIVDSIiIhI\nSFQ0iIiISEgi3Q4gIhIOfD4f+fn5jo7Jy8sDv7+VEomEHxUNIiJAfn4+8z5ZR0JicsjH5GTvICkl\njZSu3VoxmUj4UNEgIhKUkJhMSmpayO2LCg+0YhqR8KMxDSIiIhISFQ0iIiISEhUNIiIiEhIVDSIi\nIhISFQ0iIiISEhUNIiIiEhIVDSIiIhISFQ0iIiISEhUNIiIiEhIVDSIiIhISFQ0iIiISEhUNIiIi\nEhIVDSIiIhISFQ0iIiISEhUNIiIiEpJIpwcYY6KBp4HzgTLgUWvtY4dpOxN4ABgEbAHusda+3WB/\nAZAIeIKb/ECitbbMaS4RERFpXc3paXgEGAtMBW4A7jXGnN+4kTFmFPAG8DwwGngOeN0Ykxnc34tA\nwTAA6Bl8ZKhgEBERCU+OehqMMXHAVcCZ1tosIMsY8xBwE/DvRs0vBj621j4VfP60MeZHwGxgHTAM\nyLHW7jiaNyAiIiJtw+nlidHBY5Y12LYE+E0TbV8EujSxPTn453DgO4evLyIiIi5xWjRkAHnW2poG\n23KBGGNMmrU2v26jtdY2PNAYMwI4jcB4CAj0NMQbYxYBBlgN3Gqt3eQwk4hIu+Lz+cjLy3N8XFpa\n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\n", 569 | "text/plain": [ 570 | "" 571 | ] 572 | }, 573 | "metadata": {}, 574 | "output_type": "display_data" 575 | } 576 | ], 577 | "source": [ 578 | "#fit a single gaussian curve to the data\n", 579 | "x = np.linspace(-6, 8, 200)\n", 580 | "g_single = stats.norm(best_single.mu, best_single.sigma).pdf(x)\n", 581 | "sns.distplot(data, bins=20, kde=False, norm_hist=True)\n", 582 | "plt.plot(x, g_single, label='single gaussian')\n", 583 | "plt.legend();" 584 | ] 585 | }, 586 | { 587 | "cell_type": "code", 588 | "execution_count": 12, 589 | "metadata": { 590 | "collapsed": true 591 | }, 592 | "outputs": [], 593 | "source": [ 594 | "from math import sqrt, log, exp, pi\n", 595 | "from random import uniform" 596 | ] 597 | }, 598 | { 599 | "cell_type": "markdown", 600 | "metadata": {}, 601 | "source": [ 602 | "![alt text](http://i.imgur.com/kbD23Cv.jpg \"Logo Title Text 1\")\n" 603 | ] 604 | }, 605 | { 606 | "cell_type": "code", 607 | "execution_count": 13, 608 | "metadata": { 609 | "collapsed": true 610 | }, 611 | "outputs": [], 612 | "source": [ 613 | "class GaussianMixture:\n", 614 | " \"Model mixture of two univariate Gaussians and their EM estimation\"\n", 615 | "\n", 616 | " def __init__(self, data, mu_min=min(data), mu_max=max(data), sigma_min=.1, sigma_max=1, mix=.5):\n", 617 | " self.data = data\n", 618 | " #init with multiple gaussians\n", 619 | " self.one = Gaussian(uniform(mu_min, mu_max), \n", 620 | " uniform(sigma_min, sigma_max))\n", 621 | " self.two = Gaussian(uniform(mu_min, mu_max), \n", 622 | " uniform(sigma_min, sigma_max))\n", 623 | " \n", 624 | " #as well as how much to mix them\n", 625 | " self.mix = mix\n", 626 | "\n", 627 | " def Estep(self):\n", 628 | " \"Perform an E(stimation)-step, freshening up self.loglike in the process\"\n", 629 | " # compute weights\n", 630 | " self.loglike = 0. # = log(p = 1)\n", 631 | " for datum in self.data:\n", 632 | " # unnormalized weights\n", 633 | " wp1 = self.one.pdf(datum) * self.mix\n", 634 | " wp2 = self.two.pdf(datum) * (1. - self.mix)\n", 635 | " # compute denominator\n", 636 | " den = wp1 + wp2\n", 637 | " # normalize\n", 638 | " wp1 /= den\n", 639 | " wp2 /= den\n", 640 | " # add into loglike\n", 641 | " self.loglike += log(wp1 + wp2)\n", 642 | " # yield weight tuple\n", 643 | " yield (wp1, wp2)\n", 644 | "\n", 645 | " def Mstep(self, weights):\n", 646 | " \"Perform an M(aximization)-step\"\n", 647 | " # compute denominators\n", 648 | " (left, rigt) = zip(*weights)\n", 649 | " one_den = sum(left)\n", 650 | " two_den = sum(rigt)\n", 651 | " # compute new means\n", 652 | " self.one.mu = sum(w * d / one_den for (w, d) in zip(left, data))\n", 653 | " self.two.mu = sum(w * d / two_den for (w, d) in zip(rigt, data))\n", 654 | " # compute new sigmas\n", 655 | " self.one.sigma = sqrt(sum(w * ((d - self.one.mu) ** 2)\n", 656 | " for (w, d) in zip(left, data)) / one_den)\n", 657 | " self.two.sigma = sqrt(sum(w * ((d - self.two.mu) ** 2)\n", 658 | " for (w, d) in zip(rigt, data)) / two_den)\n", 659 | " # compute new mix\n", 660 | " self.mix = one_den / len(data)\n", 661 | "\n", 662 | " def iterate(self, N=1, verbose=False):\n", 663 | " \"Perform N iterations, then compute log-likelihood\"\n", 664 | "\n", 665 | " def pdf(self, x):\n", 666 | " return (self.mix)*self.one.pdf(x) + (1-self.mix)*self.two.pdf(x)\n", 667 | " \n", 668 | " def __repr__(self):\n", 669 | " return 'GaussianMixture({0}, {1}, mix={2.03})'.format(self.one, \n", 670 | " self.two, \n", 671 | " self.mix)\n", 672 | "\n", 673 | " def __str__(self):\n", 674 | " return 'Mixture: {0}, {1}, mix={2:.03})'.format(self.one, \n", 675 | " self.two, \n", 676 | " self.mix)" 677 | ] 678 | }, 679 | { 680 | "cell_type": "code", 681 | "execution_count": 33, 682 | "metadata": { 683 | "collapsed": false 684 | }, 685 | "outputs": [ 686 | { 687 | "name": "stdout", 688 | "output_type": "stream", 689 | "text": [ 690 | " 1 Mixture: Gaussian(2.40998, 1.35942), Gaussian(-0.905388, 0.678715), mix=0.835)\n", 691 | " 1 Mixture: Gaussian(2.43321, 1.38043), Gaussian(-0.712884, 0.759059), mix=0.819)\n", 692 | " 1 Mixture: Gaussian(2.49146, 1.35132), Gaussian(-0.607693, 0.784943), mix=0.797)\n", 693 | " 1 Mixture: Gaussian(2.56115, 1.30027), Gaussian(-0.543666, 0.796719), mix=0.775)\n", 694 | " 1 Mixture: Gaussian(2.63461, 1.23859), Gaussian(-0.493884, 0.803241), mix=0.753)\n" 695 | ] 696 | } 697 | ], 698 | "source": [ 699 | "# Check out the fitting process\n", 700 | "n_iterations = 5\n", 701 | "best_mix = None\n", 702 | "best_loglike = float('-inf')\n", 703 | "mix = GaussianMixture(data)\n", 704 | "for _ in range(n_iterations):\n", 705 | " try:\n", 706 | " #train!\n", 707 | " mix.iterate(verbose=True)\n", 708 | " if mix.loglike > best_loglike:\n", 709 | " best_loglike = mix.loglike\n", 710 | " best_mix = mix\n", 711 | " \n", 712 | " except (ZeroDivisionError, ValueError, RuntimeWarning): # Catch division errors from bad starts, and just throw them out...\n", 713 | " pass" 714 | ] 715 | }, 716 | { 717 | "cell_type": "code", 718 | "execution_count": 34, 719 | "metadata": { 720 | "collapsed": false 721 | }, 722 | "outputs": [ 723 | { 724 | "name": "stdout", 725 | "output_type": "stream", 726 | "text": [ 727 | "Computing best model with random restarts...\n", 728 | "\n", 729 | "\n", 730 | "\n", 731 | "Done. 🙂\n" 732 | ] 733 | } 734 | ], 735 | "source": [ 736 | "# Find best Mixture Gaussian model\n", 737 | "n_iterations = 20\n", 738 | "n_random_restarts = 500\n", 739 | "best_mix = None\n", 740 | "best_loglike = float('-inf')\n", 741 | "print('Computing best model with random restarts...\\n')\n", 742 | "for _ in range(n_random_restarts):\n", 743 | " mix = GaussianMixture(data)\n", 744 | " for _ in range(n_iterations):\n", 745 | " try:\n", 746 | " mix.iterate()\n", 747 | " if mix.loglike > best_loglike:\n", 748 | " best_loglike = mix.loglike\n", 749 | " best_mix = mix\n", 750 | " except (ZeroDivisionError, ValueError, RuntimeWarning): # Catch division errors from bad starts, and just throw them out...\n", 751 | " pass\n", 752 | "print('\\n\\nDone. 🙂')" 753 | ] 754 | }, 755 | { 756 | "cell_type": "code", 757 | "execution_count": 35, 758 | "metadata": { 759 | "collapsed": false 760 | }, 761 | "outputs": [ 762 | { 763 | "data": { 764 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAF9CAYAAACH0lvIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8VdW99/HPOcnJROaBJMxhcIECKkXFAUG0aq8411pr\nra30Vq322mrr8KhV26vXp7W1fbyir95qK9bbeq16rUOtFZwBAUUGgcUcyAiZEzKd6fnjnMQQAskJ\nJ9kZvu/XKy/O2XvtfX6HBM43a629tisYDCIiIiLSHbfTBYiIiMjgoNAgIiIiPaLQICIiIj2i0CAi\nIiI9otAgIiIiPaLQICIiIj2i0CAiIiI9otAgIiIiPaLQICIiIj0SG+kBxph4YDFwGdAI/Mpa++vD\ntL0a+CkwFvgU+JG1dnWH/TVACuAKbwoCKdbaxkjrEhERkb7Vm56GR4BZwHzg+8B9xpjLOjcyxpwB\n/B64HzgWWAH83RiTFN4/ilBgmAjkhb/yFRhEREQGpoh6GsIf+IuA86y164B1xphfADcDL3Vqngf8\nzFr75/CxPwNuIxQg1gDTgFJrbeHRvQURERHpD5EOTxwfPmZFh20fAv+nc0Nr7V/bHhtjEoBbgXJg\nU3jzscDWCF9fREREHBJpaMgHKqy1vg7byoEEY0yWtbay8wHGmAXAW+GnV3cYfpgGjDDGvAMYYC3w\nQ2vttghrEhERkX4QaWhIAlo6bWt7Hn+YYzYQmgOxEHjGGLPLWrsKmApkAHcC9eE/lxpjpllrD3RX\nSHgSZTxQGuF7EBERGe7ygRZrbXokB0UaGpo5NBy0Pe9yAqO1dj+wH1hvjDkVuAFYBZwLxFprm6H9\nSou9wIXAX3pQS3xMTExCfn5+QYTvQUREZFgrLS3F7/dHfFykoaEYyDbGuK21gfC2PKDJWlvTsaEx\nZjbgt9au7bB5E6FhCcJDHO3DHNbaFmPMLmB0D2spzc/PL1i6dGmEb0FERGR4O/vssykqKoq4pz7S\nSy4/A7zAnA7b5gKru2i7CPiPTtu+RHgipDFmhzHmW207jDEjgCnAlghrEhERkX4QUU+DtbbJGLME\neNIYcx0whtBllNcCGGNygdrwkMPvgJXGmB8AfweuAU4Cvhk+3avAA8aYQqAC+DmwB3jjqN+ViIiI\nRF1vFne6FfgEWAY8BtxrrX0lvK8U+BpAeFjiUuC7wDrgfELrO5SF294OvAg8B6wktCrkBdbaYO/e\nioiIiPQlVzA4OD+jjTE7x4wZozkNIiIiEQrPadhlrZ0YyXG6YZWIiIj0iEKDiIiI9IhCg4iIiPSI\nQoOIiIj0iEKDiIiI9IhCg4iIiPSIQoOIiIj0iEKDiIiI9IhCg4iIDDrFxcVMnTqVkpKSQVPH3r17\nef/99/uhqr6j0CAiIoPOqFGj+Oijj8jPzx80ddx9992sX7++H6rqO5HeGltERMRxLpeLrKwsp8uI\nqI7BetuGjtTTICLisMbWJrZV7urXr8bWpohq3Lt3L9/+9rc54YQTuOiii3j66adZsGBB+/4XXniB\nr3zlK0yfPp05c+bws5/9rP1D8q677uKuu+466HxTp05l9erVAKxYsYJLLrmEmTNn8uUvf5nnn3++\nvd0bb7zB+eefz8yZM1m4cCFvv/02cOiwwPbt21m0aBGzZs1i5syZXH311ezcuROAVatWsWDBAv78\n5z9z5plncuKJJ3L77bfj9Xq7fK933XUXjzzyCD/60Y844YQTWLhwIZs3b+bRRx/lpJNOYt68ebz5\n5puH1LFixQqmTZvGmjVrAKiqqmLOnDk8++yz3HXXXaxevZrHH3+cb33rW10Oa/znf/4n11xzDQAv\nv/wyV111FTfffDMnnXQSr732GgCPP/44c+fO5aSTTuLGG2+ktLQ0ou/j0VJPg4iIgxpbm7jptbs5\n4I3sQ/xojfAk8vjCB0mKS+y2rd/v54YbbmDKlCm8+OKLbNmyhXvvvZeMjAwAVq9ezUMPPcQvf/lL\njj32WDZu3MiPf/xjTjvtNM4555wjnjsQCPDDH/6QRYsWceGFF/LJJ59wxx13MHv2bDIyMrj99tv5\n93//d0455RT+/ve/8+Mf/7h9XoDL5QJCv8HfeOONnHHGGTzwwAPU19fzwAMP8Mgjj7B48WIA9u3b\nx1tvvcXTTz9NeXk5N910EyeddBJXXHFFl3UtWbKEu+++m1tvvZU777yTa6+9lvPPP5//+Z//YcmS\nJdx3332cf/75B9Vx6qmncskll/Dggw/y4osv8tBDDzF58mSuueYaGhoa2LVrF7NmzeKGG26gvr6+\n/biOOm5bu3Yt3//+97n11lvJzMzk2Wef5fXXX+fRRx8lKyuLp59+mkWLFvHqq68SExPT7fcxGtTT\nICIiR7RixQrKysp46KGHmDRpEhdccAHf/OY32/cnJSXx4IMPcs455zBq1CjOPfdcjj32WLZt29bt\nuevr66mtrSUzM5P8/HwWLlzIH/7wB0aOHEl5eTl+v5/c3Fzy8/O57rrrWLx4MfHx8Qedo7m5mauu\nuoo77riDMWPGMG3aNC699FK2b9/e3sbv93PPPfcwefJkTj/9dObOncuGDRsOW9dxxx3HlVdeydix\nY1m4cCHNzc3cc889FBQU8M1vfpO6ujoqKioOOe6OO+5g37593H777SxdupSHHnoIgOTkZDweD0lJ\nSaSmpnb79wLgdru54YYbmDhxIunp6Tz11FPcfvvtzJ49m4KCAu6//35qamr44IMPenS+aFBPg4iI\ng5LiQr/xF9eX9evrjk7J61EvA8DWrVuZMGECSUlJ7dtOOOEEXn/9dSD0AZuQkMBjjz3Gtm3b2Lp1\nK3v27OGMM87o9txpaWl84xvf4J577mHx4sWcddZZXH755aSkpDBt2jTmzZvHd77zHQoKCjj77LO5\n4oorDgkNiYmJfP3rX+fll19m48aN7Ny5k02bNpGdnX1Qu/Hjx7c/Tk5OxufzHbausWPHtj9OSEgg\nOzubuLi49ucAra2thxyXnp7OT37yE+68805uueUWxo0b1+3fweFkZma2v2ZjYyNlZWX86Ec/OqhN\na2sru3fv7vVrREqhQUTEYUlxiUzJKnC6jMOKiYk5ZBJfx+cffPABN998M5dccgnz5s3jBz/4Afff\nf/9hz+f3+w96/tOf/pSrr76at99+m7fffpvnn3+eJ554grlz5/Lkk0+yYcMGli1bxj//+U/+/Oc/\n89xzz5GSktJeQ2NjI5dffjlZWVksWLCAhQsXsnPnTp5++umDXic29uCPvCNNTOzc3d/VUMLhbN68\nmdjYWD7++GNuvPHGLtt0db7OIaZjOGr7O/vtb39LQcHBPytpaWk9ru1oaXhCRESOaMqUKRQWFtLY\n2Ni+bePGje2PX3jhBb761a/ywAMPcPnll1NQUMCePXva93s8Hg4cOND+vOO+4uJi7r//fsaNG8f1\n11/PCy+8wJw5c1i2bBmbN2/m4YcfZsaMGdxyyy289tpr5OXl8eGHHwJffPCuWrWKiooKnn32Wa67\n7jpOPfVUiouLHblaYePGjfz3f/83jz/+OJ9//jkvv/xy+76OQcHj8RAMBg/6e9m7d+9hz5uSkkJW\nVhb79+9n7NixjB07lvz8fH75y1+ya9euvnkzXVBoEBGRIzr11FPJz8/nnnvuYceOHbz55ps8++yz\n7R+C6enprF27lq1bt7Jt2zbuuusuamtr27vvZ8yYwfLly1mxYgVbt27l5z//eXu3e3p6Om+88QYP\nPfQQe/fuZfXq1WzZsoXp06eTnJzMc889xxNPPEFRURHvvPMOJSUlTJ8+HfiipyAtLY3Gxkbeeust\niouLeeGFF3jhhRe6HD6Ilo6BpO1xIBDg3nvv5fLLL2fevHnccsstPPzww1RVVQGhuR+FhYVUVVWR\nnZ1Nfn4+Tz31FHv37uWll17ivffeO+Jrfvvb3+bRRx/lnXfeYffu3dx77718+umnTJw4sc/eZ2cK\nDSIickQul4vHHnuMffv2cemll/Lkk09y+eWX4/F4ALj55pvJyMjgyiuv5Prrr2fq1KksWrSITZs2\nAXDxxRdz7rnnctNNN/G9732PCy+8kJycHABGjBjBE088wcaNG7nooou47bbbuPLKK7n88ssZO3Ys\njz76KG+88QYXXHABDz74ID/5yU+YM2dOe10AJ554IjfccAM/+9nPuPDCC1m+fDlPPvkkVVVV7Nu3\nr8/+Tjo/fuaZZygtLW2fd/CNb3yD/Pz89smQX/3qV3n//ff57ne/i8vl4sEHH2T9+vUsXLiQt956\n67BDGW0WLVrEFVdcwU9/+lMuvfRSioqKeOqpp0hJSemT99gV12BdbMIYs3PMmDEFS5cudboUEZEh\nraqqik2bNh00sfGpp57ivffeY8mSJQ5WJr119tlnU1RUtMtaG1E3hXoaRESkWzfeeCN//vOfKSkp\nYfny5TzzzDN85Stfcbos6We6ekJERI4oMzOT3/72t/zmN7/h4YcfJisri2uuuYarrrrK6dKknyk0\niIhItxYsWHDQstEyPGl4QkRERHpEoUFERER6RKFBREREekShQURERHpEoUFERER6RKFBREREekSh\nQURERHpEoUFERER6RKFBREREeiTiFSGNMfHAYuAyoBH4lbX214dpezXwU2As8CnwI2vt6g77rwJ+\nDuQD/wD+1VpbGWlNIiIi0vd609PwCDALmA98H7jPGHNZ50bGmDOA3wP3A8cCK4C/G2OSwvtPDu+/\nDzgFyAD+2It6REREpB9EFBrCH/iLgH+z1q6z1r4C/AK4uYvmecDPrLV/ttbuBn4GZBIKEAA3Ac9b\na5+z1m4ErgH+xRgzvndvRURERPpSpD0NxxMa0ljRYduHhHoKDmKt/au19j8AjDEJwK1AObAp3GQO\n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\nRCQp/w/6WpxQ4GuClwAAAABJRU5ErkJggg==\n", 765 | "text/plain": [ 766 | "" 767 | ] 768 | }, 769 | "metadata": {}, 770 | "output_type": "display_data" 771 | } 772 | ], 773 | "source": [ 774 | "#mixture\n", 775 | "sns.distplot(data, bins=20, kde=False, norm_hist=True)\n", 776 | "g_both = [best_mix.pdf(e) for e in x]\n", 777 | "plt.plot(x, g_both, label='gaussian mixture');\n", 778 | "plt.legend();" 779 | ] 780 | }, 781 | { 782 | "cell_type": "markdown", 783 | "metadata": {}, 784 | "source": [ 785 | "![alt text](http://www.astroml.org/_images/fig_GMM_1D_1.png \"Logo Title Text 1\")" 786 | ] 787 | }, 788 | { 789 | "cell_type": "markdown", 790 | "metadata": { 791 | "slideshow": { 792 | "slide_type": "slide" 793 | } 794 | }, 795 | "source": [ 796 | "Summary\n", 797 | "----\n", 798 | "\n", 799 | "- Gaussian Mixture Models (GMM) take our old friend the Gaussian and add another Gaussian(s).\n", 800 | "- This allows us to model more complex data.\n", 801 | "- We fit a GMM with the Expectation–Maximization (EM) Algorithm.\n", 802 | "- Expectation–Maximization (EM) Algorithm is a series of steps to find good parameter estimates when there are latent variables.\n", 803 | "- EM steps:\n", 804 | " 1. Initialize the parameter estimates\n", 805 | " 2. Given the current parameter estimates, find the min log likelihood for Z (data+latent variables)\n", 806 | " 3. Given the current data, find better parameter estimates\n", 807 | " 3. Repeat steps 2 & 3\n", 808 | "- EM can be used beyond GMM\n", 809 | "- GMM work well but you have to guess the number of Gaussians. Kernel Density Estimation (KDE) does __not__ require that kind of guessing " 810 | ] 811 | }, 812 | { 813 | "cell_type": "markdown", 814 | "metadata": { 815 | "slideshow": { 816 | "slide_type": "slide" 817 | } 818 | }, 819 | "source": [ 820 | "
\n", 821 | "
\n", 822 | "
\n", 823 | "\n", 824 | "----" 825 | ] 826 | } 827 | ], 828 | "metadata": { 829 | "anaconda-cloud": {}, 830 | "kernelspec": { 831 | "display_name": "Python 2", 832 | "language": "python", 833 | "name": "python2" 834 | }, 835 | "language_info": { 836 | "codemirror_mode": { 837 | "name": "ipython", 838 | "version": 2 839 | }, 840 | "file_extension": ".py", 841 | "mimetype": "text/x-python", 842 | "name": "python", 843 | "nbconvert_exporter": "python", 844 | "pygments_lexer": "ipython2", 845 | "version": "2.7.12" 846 | } 847 | }, 848 | "nbformat": 4, 849 | "nbformat_minor": 1 850 | } 851 | --------------------------------------------------------------------------------