{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Mixture Model Fitting: an Expectation Maximization approach" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Author: **Antonino Ingargiola** ([github page](https://github.com/tritemio))
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Abstract\n", "*In this notebook I describe the fitting of a 2-component mixture sample (i.e. two Gaussians) \n", "using the [Expectation Maximization](http://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm)\n", "approach.*\n", "\n", "*I start showing that the direct minimization of the log-likelihood function is not\n", "very roboust and poses convergence problems. Then I introduce the Expectation Maximization method\n", "and apply it to the fitting of two gaussians. Finally I consider the heteroscetastic case\n", "(samples with different variance). Drawing an analogy with the \n", "[Weights Least Squares]() method (for a 1-compontent population), \n", "I propose a \"Weighted Expectation Maximization\" method\n", "that improves the fitting accuracy of a 2-component mixture population.*" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When a sample is drawn from a number $k$ of different distributions we talk of a\n", "**[Mixture Model](http://en.wikipedia.org/wiki/Mixture_model)**.\n", "\n", "In the common case in which the $k$ distributions are Gaussian we talk of \n", "[Gaussian Mixture Model (GMM)](http://en.wikipedia.org/wiki/Mixture_model#Gaussian_mixture_model).\n", "\n", "Fitting a Mixure model, if the number $k$ of ditributions is known, can be done by:\n", "\n", "- [K-mean](http://en.wikipedia.org/wiki/K-means_clustering) or [K-medians](http://en.wikipedia.org/wiki/K-medians_clustering) algorithm. These are clustering algorithms and return only \n", "the centroids and the boundaries of the different componets (although variance can be of course computed empirically after clustering).\n", "- [Expectation Maximization (EM)](http://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm): \n", "finds the [Maximum Likelihood (ML)](http://en.wikipedia.org/wiki/Maximum_likelihood) estimated of the model parameters.\n", "\n", "In case the number of components $k$ is unknown can be esitmated with the [BIC Criterion](http://scikit-learn.org/stable/modules/mixture.html#selecting-the-number-of-components-in-a-classical-gmm). \n", "\n", "Another alternative is using the [Dirichlet Process GMM](http://scikit-learn.org/stable/modules/mixture.html#dpgmm).\n", "\n", "In this notebook we describe the EM method for a GMM distribution with only 2 components.\n", "\n" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* [Estimating Gaussian Mixture Densities with EM \u2013 A Tutorial](https://www.cs.duke.edu/courses/spring04/cps196.1/handouts/EM/tomasiEM.pdf) *(PDF)*\n", "* [EM for Gaussian Mixtures](http://www.slideshare.net/petitegeek/expectation-maximization-and-gaussian-mixture-models) *(slides)*\n", "* [What is the expectation maximization algorithm?](http://www.nature.com/nbt/journal/v26/n8/full/nbt1406.html?pagewanted=all)\n", "\n", "* [Data Mining Algorithms In R/Expectation Maximization (EM)](http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/Expectation_Maximization_%28EM%29)" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Existing Python implementations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python packages implementing EM for GMM:\n", "\n", "* [scikit-learn](http://scikit-learn.org/stable/modules/mixture.html)\n", "* [PyMix](http://www.pymix.org/pymix/index.php?n=PyMix.Tutorial)\n", "* [PyPR](http://pypr.sourceforge.net/mog.html)\n", "* [PyMC](http://pymc-devs.github.io/pymc/README.html)\n", "\n", "Short examples/scripts implementing EM:\n", "\n", "* [577735-expectation-maximization](http://code.activestate.com/recipes/577735-expectation-maximization/)" ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ " Simple Mixture Model" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Problem introduction" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "from numpy import random\n", "from scipy.optimize import minimize, show_options" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a didactical example we want to fit a mixture of two univariate Gaussian distributions.\n", "Let call $s = \\{s_i\\}$ a sample of $N$ elements extracted form the mixture distribution,\n", "and $s_{1} = \\{s_{1i}\\}$ and $s_{2} = \\{s_{2i}\\}$ the samples extracted from\n", "each single Gaussian distribution. In the following we will assume that $s_1$ and $s_2$\n", "are not known." ] }, { "cell_type": "code", "collapsed": false, "input": [ "N = 1000\n", "a = 0.3\n", "s1 = normal(0, 0.08, size=N*a)\n", "s2 = normal(0.6,0.12, size=N*(1-a))\n", "s = concatenate([s1,s2])\n", "hist(s, bins=20);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The model for this sample is the linear combination of two Gaussian PDF:\n", "\n", "$$f(x|p) = \\frac{\\pi_1}{\\sigma_1\\sqrt{2\\pi}} {\\rm exp} \\left\\{ -\\frac{(x-\\mu_1)^2}{2\\sigma_1^2} \\right\\} +\n", "\\frac{\\pi_2}{\\sigma_2\\sqrt{2\\pi}} {\\rm exp} \\left\\{ -\\frac{(x-\\mu_2)^2}{2\\sigma_2^2} \\right\\}$$\n", "\n", "where $p = [\\mu_1, \\sigma_1, \\mu_2, \\sigma_2, \\pi_1]$. \n", "Note that $\\pi_2$ is not included in $p$ since $\\pi_2 = 1-\\pi_1$.\n", "\n", "\n", "\n", "In python we can define $f(x|p)$ using `normpdf()` implemented by *Numpy*: " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def pdf_model(x, p):\n", " mu1, sig1, mu2, sig2, pi_1 = p\n", " return pi_1*normpdf(x, mu1, sig1) + (1-pi_1)*normpdf(x, mu2, sig2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function will be used in the following sections." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Maximum Likelihood: direct maximization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ">**NOTE**\n", ">\n", ">*This section illustrate the direct Maximum Likelihood method (i.e. direct minimization\n", ">of the -log-likelihood function). \n", ">The purpose is to show that a direct minimization is much more complex and \n", ">less robust than the EM algorithm. You can skip this section if you are already conviced\n", ">and you want to read about the EM algorithm.*\n", "\n", "If we try to apply the the **Maximum Likelihood (ML)** method directly, we find that \n", "the log-likelihood function is quite difficult to minimize numerically.\n", "\n", "Given a sample $s = \\{s_i\\}$ of size $N$ extracted from the mixture distribution, the likelihood function is\n", "\n", "$$\\mathcal{L(p,s)} = \\prod_i f(s_i|p)$$\n", "\n", "and the log-likelihood function is:\n", "\n", "$$\\ln \\mathcal{L(p,s)} = \\sum_i \\ln f(s_i|p)$$\n", "\n", "Now, since $f(\\cdot)$ is the sum of two terms, the term $\\log f(s_i|p)$ can't be simplified (it's the log of a sum). \n", "So for each $s_i$ we must compute the log of the sum of two exponetial. \n", "It's clear that not only the computation will be slow but also the numerical errors will be amplified.\n", "Moreover, often the likelihood function has local maxima other than the global one\n", "(in other terms the function is not convex).\n", "\n", "In python the log-likelihood function can be defined as:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def log_likelihood_two_1d_gauss(p, sample):\n", " return -log(pdf_model(sample, p)).sum()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we try to minimize it starting with a close-to-real intial guess $p_0 = [-0.2,0.2,0.8,0.2,0.5]$ we fail with the most common methods.\n", "\n", ">**Python NOTES:**\n", ">\n", "> - Here we use the function `minimize()` from `scipy.optimization`. This function allows\n", "> to choose several minimization methods. The list of (currently) available\n", "> minimization methods is\n", "> `'Nelder-Mead'` *(simplex)*, `'Powell'`, `'CG'`, `'BFGS'`, `'Newton-CG'`,>\n", "> `'Anneal'`, `'L-BFGS-B'` *(like BFGS but bounded)*, `'TNC'`, `'COBYLA'`, `'SLSQPG'`.\n", "> \n", "> The documetation can be found \n", "> [here](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Initial guess\n", "p0 = array([-0.2,0.2,0.8,0.2,0.5])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "# Minimization 1\n", "res = minimize(log_likelihood_two_1d_gauss, x0=p0, args=(s,), method='BFGS')\n", "#res # NOT CONVERGED" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "# Minimization 2\n", "res = minimize(log_likelihood_two_1d_gauss, x0=p0, args=(s,), method='powell',\n", " options=dict(maxiter=10e3, maxfev=2e4))\n", "#res # NOT CONVERGED" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# Minimization 3\n", "res = minimize(log_likelihood_two_1d_gauss, x0=p0, args=(s,), method='Nelder-Mead',\n", " options=dict(maxiter=10e3, maxfev=2e4))\n", "res" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ " status: 0\n", " nfev: 428\n", " success: True\n", " fun: -191.90433284079629\n", " x: array([ 0.00650312, 0.08413543, 0.59445438, 0.12201147, 0.30045492])\n", " message: 'Optimization terminated successfully.'\n", " nit: 262" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "res.x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "array([ 0.00650312, 0.08413543, 0.59445438, 0.12201147, 0.30045492])" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "# Minimization 4\n", "res = minimize(log_likelihood_two_1d_gauss, x0=p0, args=(s,), method='L-BFGS-B',\n", " bounds=[(-0.5,2),(0.01,0.5),(-0.5,2),(0.01,0.5),(0.01,0.99)])\n", "res" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ " status: 0\n", " success: True\n", " nfev: 54\n", " fun: -191.90437529910372\n", " x: array([ 0.59445438, 0.12199155, 0.00648396, 0.08411654, 0.69951773])\n", " message: 'CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH'\n", " jac: array([ 0.00275406, 0.00739533, -0.00014779, -0.00086118, 0.00196962])\n", " nit: 31" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "# Finds additional options for the different solvers:\n", "#show_options('minimize', 'powell')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Executing the minimizations we see that we have convergence only using the `'Nelder-Mead'` (simplex) and the `'L-BFGS-B'`. \n", "methods.\n", "The latter is much ~10x faster as requires only 28 iteration and 40 function evaluation \n", "(instead of 256 iterations and 413 function evaluations).\n", "Refer to the **Scipy** documentation for a \n", "[description of the methods](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize)." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Expectation Maximization" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The EM method allows to fit a statistical model in the case where the experimental data\n", "has unknown (latent) variables. In the context of a mixture-model fitting\n", "we can assume that the latent variables \"tell\" which component has generated each sample.\n", "\n", "With the EM method, we first \"assign\" each sample to each components of the distribution.\n", "After that, we can compute MLE estimators of parameters\n", "of each component of the mixture. For Gaussian components the MLE will be basically\n", "the empirical mean and variance.\n", "\n", "It is possible to do the assigment choosing, for each sample, the component that has \n", "the highest probability to generate the sample (**hard assignment**). \n", "\n", "Alternatively it's possible to compute, for each sample $s_i$, the \"fraction\" \n", "of $s_i$ generated by each component (**soft assignment**). \n", "\n", "In our example, for each sample $s_i$ we have two coefficients\n", "$\\gamma(i,1)$ and $\\gamma(i,2)$ that represent the fraction of $s_i$ that\n", "belongs to (respectively) component 1 and 2. The sum $\\gamma(i,1)+\\gamma(i,2) = 1$. \n", "$\\gamma()$ is called in litterature **responsibility fuction**.\n", "This soft assignment method is the one commonly used in the context of \n", "EM algorithms for mixture model fitting.\n", "\n", "Only the **soft assignment** scheme will be used is the following sections." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Starting from the PDF $f_1()$ and $f_2()$ of the single components:\n", "\n", "$$f_1(x|p) = \\frac{1}{\\sigma_1\\sqrt{2\\pi}} {\\rm exp} \\left\\{ -\\frac{(x-\\mu_1)^2}{2\\sigma_1^2} \\right\\}\n", "\\qquad\n", "f_2(x|p) = \\frac{1}{\\sigma_2\\sqrt{2\\pi}} {\\rm exp} \\left\\{ -\\frac{(x-\\mu_2)^2}{2\\sigma_2^2} \\right\\}\n", "$$\n", "\n", "the mixture PDF is:\n", "\n", "$$ f(x|p) = \\pi_1 f_1(x|p) + \\pi_2 f_2(x|p) $$\n", "\n", "If we know (or guess initially) the parameters $p$, we can compute for each sample \n", "and each component the **responsibility function** defined as:\n", " \n", "$$\\gamma(i, k) = \\frac{\\pi_kf_k(s_i|p)}{f(s_i|p)}$$\n", "\n", "and starting from the \"effective\" number of samples for each category ($N_k$) we can compute the \n", "\"new\" estimation of parameters:\n", " \n", "$$N_k = \\sum_{i=1}^N \\gamma(i, k)\n", "\\qquad\\qquad\n", "k=1,2\n", "\\quad\n", "({\\rm note\\;that} \\quad N_1 + N_2 = N)\n", "$$\n", "\n", "$$\\mu_k^{new} = \\frac{1}{N_k}\\sum_{i=1}^N \\gamma(i, k) \\cdot s_i$$\n", "\n", "$$\\sigma_k^{2\\,new} = \\frac{1}{N_k}\\sum_{i=1}^N \\gamma(i, k) \\cdot (s_i - \\mu_k^{new})^2$$\n", "\n", "$$\\pi_k^{new} = \\frac{N_k}{N}$$\n", "\n", "Now we just loop \n", "\n", " 1. recompute $\\gamma(i, k)$\n", " 2. estimate updated parameters\n", "\n", "until convergence.\n", "\n", "**REMARKS**\n", "\n", "- There is no minimization! It's just an iterative algorithm that theory \n", " guarantee to converge to a (local) minimum.\n", " \n", "- We don't even write the likelihood function but we obtain a ML estimation.\n", " \n", "- Even if the components of the mixture are not Gaussian, the method works as far as it's possible\n", " to determine the distribution parameters from empirical moments. For example:\n", " \n", " - Poisson distribution, MLE: $$\\hat{\\mu} = \\frac{1}{N}\\sum s_i$$\n", " - Binomial distribution, MLE: $$\\hat{p} = \\frac{N_{success}}{N} $$" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let implement this EM algorithm in python. For simplicity the iteration is stopped only after a fixed number of iteration:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "max_iter = 100\n", "\n", "# Initial guess of parameters and initializations\n", "p0 = array([-0.2,0.2,0.8,0.2,0.5])\n", "mu1, sig1, mu2, sig2, pi_1 = p0\n", "mu = array([mu1, mu2])\n", "sig = array([sig1, sig2])\n", "pi_ = array([pi_1, 1-pi_1])\n", "\n", "gamma = zeros((2, s.size))\n", "N_ = zeros(2)\n", "p_new = p0\n", "\n", "# EM loop\n", "counter = 0\n", "converged = False\n", "while not converged:\n", " # Compute the responsibility func. and new parameters\n", " for k in [0,1]:\n", " gamma[k,:] = pi_[k]*normpdf(s, mu[k], sig[k])/pdf_model(s, p_new)\n", " N_[k] = 1.*gamma[k].sum()\n", " mu[k] = sum(gamma[k]*s)/N_[k]\n", " sig[k] = sqrt( sum(gamma[k]*(s-mu[k])**2)/N_[k] )\n", " pi_[k] = N_[k]/s.size\n", " p_new = [mu[0], sig[0], mu[1], sig[1], pi_[0]]\n", " assert abs(N_.sum() - N)/float(N) < 1e-6 \n", " assert abs(pi_.sum() - 1) < 1e-6\n", " \n", " # Convergence check\n", " counter += 1\n", " converged = counter >= max_iter" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "print \"Means: %6.3f %6.3f\" % (p_new[0], p_new[2])\n", "print \"Std dev: %6.3f %6.3f\" % (p_new[1], p_new[3])\n", "print \"Mix (1): %6.3f \" % p_new[4]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Means: 0.006 0.594\n", "Std dev: 0.084 0.122\n", "Mix (1): 0.300 \n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "print pi_.sum(), N_.sum()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1.0 1000.0\n" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "res.x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "array([ 0.59445438, 0.12199155, 0.00648396, 0.08411654, 0.69951773])" ] } ], "prompt_number": 18 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Heteroscetastic Mixture Model" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the first examples the samples are extracted from a mixture of two gaussians. \n", "The samples of each gaussian component are \n", "[i.i.d.](http://en.wikipedia.org/wiki/Independent_and_identically_distributed_random_variables) or, \n", "in other words each component is [homoscedastic](http://en.wikipedia.org/wiki/Homoscedasticity).\n", "\n", "In some cases, the components of the mixture are not **homoscedastic** but [**heteroscedastic**](http://en.wikipedia.org/wiki/Heteroscedasticity). This means that within a single component/population\n", "of the mixture each sample has a different variance. The variance is assumed to be known." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Non-mixture case: Weighted Least Squares" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let consider first the case of a single population $s = \\{s_i\\}$ (no mixture), \n", "in which all the samples have same mean $\\mu$ but different variances $\\sigma^2_i$. \n", "Assuming that the mean square error is **normally distributed** with variance $\\sigma_i$, than the \n", "[**Weighted Least Square**](http://en.wikipedia.org/wiki/Weighted_least_squares#Weighted_least_squares)\n", "method allows to obtain a **MLE** of the mean:\n", "\n", "$$ \\hat{\\mu}_{ML} = \\frac{\\sum_i w_i \\cdot s_i}{\\sum_i w_i} \n", "\\quad\\quad{\\rm and}\\quad\\quad\n", "w_i = \\frac{1}{\\sigma^2_i}\n", "$$\n", "\n", "We can still compute the **mean square error** of the samples:\n", "\n", "$$ \\sigma_m^2 = \\frac{1}{N}\\sum_i (s_i - \\hat{\\mu}_{ML})^2 $$\n", "\n", "but it will now have the meaning of \"distribution parameter\" (i.e. the variance) like \n", "in the case of i.i.d. gaussian samples. Nonetheless $\\sigma_m^2$\n", "provides [descriptive](https://en.wikipedia.org/wiki/Descriptive_statistics) \n", "information about the sample variability (or dispersion). \n", "\n", "We may also introduce other measures of variability by weighting the\n", "errors in different ways:\n", "\n", "$$ \\sigma_w^2 = \\frac{\\sum_i w_i (s_i - \\hat{\\mu}_{ML})^2 }{\\sum_i w_i} $$\n", "\n", "For example let say we want to compare the variability of the two population.\n", "An higher variability will mean necessary higher error in the estimator $\\hat{\\mu}$.\n", "\n", "But if we compute $\\hat{\\mu}_{ML}$ weighting each sample, then samples with high variance\n", "will affect less the average than samples with small variance. Therefore\n", "if we want to estimate the \"accuracy\" (or simply the variance) \n", "of $\\hat{\\mu}_{ML}$ then we need to weight **less** the **mean square errors** of\n", "samples with high variance. In this context seems natural to use\n", "$w_i = 1/\\sigma_i^2$ also to compute $\\sigma_w^2$.\n", "\n", "> **NOTE**\n", "> A practical consideration is due here. If the sample population is large enough then\n", "> a small variation in the sample dispersion will not significantly affect $\\hat{\\mu}$. \n", "> In fact, \n", "> the fitting error it's already small (due to the high # samples). \n", "> If the theorethical fitting error \n", "> is below a (application-specific) \"significativity threshold\" then \n", "> the effect of a \"small\" variance difference beween two population becomes\n", "> completely negligible. In this case other effects (for example model mismatch)\n", "> will dominate the fitting error.\n" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Mixture case: Weighted Expectation Maximization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To generalize the EM method in case of samples with different variance we can apply different schemes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***SCHEME 1***\n", "\n", "$$\\gamma(i, k) = \\frac{\\pi_kf_k(s_i|p)}{f(s_i|p)} \\color{red}{w_i}$$\n", "\n", "\n", "$N_k$, $\\mu_k^{new}$, $\\sigma_k^{2\\,new}$, $\\pi_k^{new}$ computed as the no-weight case \n", "(but using the new definition of $\\gamma$).\n", "\n", "*Requirement:* $\\sum_i w_i = N$\n", "\n", "> **NOTE**\n", "> In this scheme we **weight more** samples with lower variance. They contribute more \n", "> to $N_k = \\sum_i \\gamma(k,i)$ (thus $\\pi_k = N_k/N$). \n", "> Also $\\mu_k^{new}$ and to $\\sigma_k^{2\\,new}$ are \"weighted means\": we simply redistribute the weights\n", "> including also the information on the variance. \n", "> The effect on $\\sigma_k^{2\\,new}$ is that the contribution of high variance samples is less, \n", "> so the extimated variance is smaller. This helps to resolve better the sub-populations.\n", "> The reduction in the estimated variance is \"consistent\" (not too big) because it is a\n", "> weighted mean: a sample with high variance \"weights\" less in the sum, but also contribute\n", "> less to the sum of weights (i.e. the normalization of the weighted mean).\n", "\n", "* **Question**: $N_1 + N_2 = N$ ?\n", " * YES: \n", " 1. We set as requirement:$\\quad\\sum_i w_i = N$. \n", " 2. From the $N_k$ definition: $\\quad N_1+N_2 = \\sum_{i,k} \\gamma(i,k)$.\n", " 3. For each $i$: $\\quad\\gamma(i,1) + \\gamma(i,2) = w_i\\quad$ \n", " *(this sum is 1 in the no-weight case)*\n", " 4. $\\Rightarrow \\quad N_1+N_2 =\\sum_{i,k} \\gamma(i,k) = \\sum_i w_i = N$\n", "* **Question**: $\\pi_1 + \\pi_2 = 1$? \n", " * YES: Since $\\pi_k = N_k/N$ and $N_1+N_2=N$, \n", " $\\quad\\Rightarrow\\quad \\pi_1 + \\pi_2 = N_1/N+N_2/N = 1$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***SCHEME 2***\n", "\n", "Here we compute the mean $\\mu_k^{new}$ exactly as in SCHEME1, \"reweighting\" the weights with $w_i$ (here \n", "the equation is explicit, in SCHEME1 we included $w_i$ in $\\gamma$):\n", "\n", "$$\\mu_k^{new} = \\frac{\\sum_{i=1}^N w_i\\gamma(i, k) \\cdot s_i}{N_k \\sum_i w_i}$$\n", "\n", "No other modification is done compared to the no-weight case\n", "\n", "> **NOTES**\n", ">\n", "> This approach is less \"invasive\" and has the advantage to give real empirical variance\n", "> (or mean square error) of each sub-population. In contrast with the no-weight case\n", "> this apprach gives better estimate of the mean. However (like the no-weight) is less\n", "> [efficient](http://en.wikipedia.org/wiki/Efficiency_(statistics). \n", "> In ohter words it uses \"less\" information than SCHEME1 \n", "> (and requires more iterations to converge).\n", "\n", "> **WARNING**\n", "> This method has serious converge problems if initial guess is not very close\n", "> to the real value." ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "The code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we define a functions to generate the sample populations:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.stats import expon\n", "\n", "def sim_single_population(mu, N=1000, max_sigma=0.5, mean_sigma=0.08):\n", " \"\"\"Extract samples from a normal distribution \n", " with variance distributed as an exponetial distribution\n", " \"\"\"\n", " exp_min_size = 1./max_sigma**2\n", " exp_mean_size = 1./mean_sigma**2\n", " sigma = 1/sqrt(expon.rvs(loc=exp_min_size, scale=exp_mean_size, size=N))\n", " return normal(mu, scale=sigma, size=N), sigma" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "N = 1000\n", "a = 0.3\n", "s1, sig1 = sim_single_population(0, N=N*a)\n", "s2, sig2 = sim_single_population(0.5, N=N*(1-a))\n", "s = concatenate([s1, s2])\n", "sigma_tot = concatenate([sig1, sig2])\n", "hist(s, bins=r_[-1:2:0.025], alpha=0.3, color='g', histtype='stepfilled');\n", "ax = twinx(); ax.grid(False)\n", "ax.plot(s, 0.1/sigma_tot, 'o', mew=0, ms=2, alpha=0.6, color='b')\n", "xlim(-0.5, 1.5); title('Simulated sample (to be fitted)')\n", "print \"Means: %6.3f %6.3f\" % (s1.mean(), s2.mean())\n", "print \"Std dev: %6.3f %6.3f\" % (sqrt((sig1**2).mean()), sqrt((sig2**2).mean()))\n", "print \"Mix (1): %6.3f \" % a" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Means: -0.007 0.496\n", "Std dev: 0.144 0.146\n", "Mix (1): 0.300 \n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we use again the EM algoritm (with optional addition of weights) and print/plot the results:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "max_iter = 300\n", "weights = 1./sigma_tot**2\n", "\n", "# Renormalizing the weights so they sum to N\n", "weights *= 1.*weights.size/weights.sum()\n", "\n", "# No weights case\n", "#weights = ones(s.size)\n", "\n", "# Initial guess of parameters and initializations\n", "p0 = array([-0.05,0.1,0.6,0.1,0.5])\n", "mu1, sig1, mu2, sig2, pi_1 = p0\n", "mu = array([mu1, mu2])\n", "sig = array([sig1, sig2])\n", "pi_ = array([pi_1, 1-pi_1])\n", "\n", "gamma = zeros((2, s.size))\n", "N_ = zeros(2)\n", "p_new = p0\n", "\n", "# EM loop\n", "counter = 0\n", "converged = False\n", "while not converged:\n", " # Compute the responsibility func. and new parameters\n", " for k in [0,1]:\n", " gamma[k,:] = weights*pi_[k]*normpdf(s, mu[k], sig[k])/pdf_model(s, p_new) # SCHEME1\n", " #gamma[k,:] = pi_[k]*normpdf(s, mu[k], sig[k])/pdf_model(s, p_new) # SCHEME2\n", " N_[k] = gamma[k,:].sum()\n", " mu[k] = sum(gamma[k]*s)/N_[k] # SCHEME1\n", " #mu[k] = sum(weights*gamma[k]*s)/sum(weights*gamma[k]) # SCHEME2\n", " sig[k] = sqrt( sum(gamma[k]*(s-mu[k])**2)/N_[k] )\n", " pi_[k] = 1.*N_[k]/N\n", " p_new = [mu[0], sig[0], mu[1], sig[1], pi_[0]]\n", " assert abs(N_.sum() - N)/float(N) < 1e-6 \n", " assert abs(pi_.sum() - 1) < 1e-6\n", " \n", " # Convergence check\n", " counter += 1\n", " converged = counter >= max_iter" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "print \">> NO WEIGHTS\"\n", "print \"Means: %6.3f %6.3f\" % (p_new[0], p_new[2])\n", "print \"Std dev: %6.3f %6.3f\" % (p_new[1], p_new[3])\n", "print \"Mix (1): %6.3f \" % p_new[4]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ ">> NO WEIGHTS\n", "Means: -0.010 0.509\n", "Std dev: 0.126 0.113\n", "Mix (1): 0.315 \n" ] } ], "prompt_number": 55 }, { "cell_type": "code", "collapsed": false, "input": [ "print \">> WEIGHTED SCHEME1\"\n", "print \"Means: %7.4f %7.4f\" % (p_new[0], p_new[2])\n", "print \"Std dev: %7.4f %7.4f\" % (p_new[1], p_new[3])\n", "print \"Mix (1): %7.4f \" % p_new[4]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ ">> WEIGHTED SCHEME1\n", "Means: -0.0105 0.5035\n", "Std dev: 0.0748 0.0724\n", "Mix (1): 0.2850 \n" ] } ], "prompt_number": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "print \">> WEIGHTED SCHEME2\"\n", "print \"Means: %6.3f %6.3f\" % (p_new[0], p_new[2])\n", "print \"Std dev: %6.3f %6.3f\" % (p_new[1], p_new[3])\n", "print \"Mix (1): %6.3f \" % p_new[4]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ ">> WEIGHTED SCHEME2\n", "Means: -0.009 0.503\n", "Std dev: 0.125 0.113\n", "Mix (1): 0.314 \n" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "title('NO WEIGHTS')\n", "#hist(s, bins=r_[-1:2:0.05], normed=True);\n", "x = r_[-1:2:0.01]\n", "plot(x, pdf_model(x, p_new), color='k', lw=2); grid(True)\n", "plot(s, 0.1/sigma_tot, 'o', mew=0, ms=2, alpha=0.5);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nThAEIUP+P9lKwyBnogTWAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "title('WEIGHTED SCHEME1')\n", "#hist(s, bins=r_[-1:2:0.05], normed=True);\n", "x = r_[-1:2:0.01]\n", "plot(x, pdf_model(x, p_new), color='k', lw=2); grid(True)\n", "plot(s, 0.1/sigma_tot, 'o', mew=0, ms=2, alpha=0.5);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nA0vHcfssJ8yoAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "title('WEIGHTED SCHEME2')\n", "#hist(s, bins=r_[-1:2:0.05], normed=True);\n", "x = r_[-1:2:0.01]\n", "plot(x, pdf_model(x, p_new), color='k', lw=2); grid(True)\n", "plot(s, 0.1/sigma_tot, 'o', mew=0, ms=2, alpha=0.5);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nQRAS5P8BGnypsyexzGgAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 60 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Compare EM to other methods" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "from scipy.stats import poisson, expon, binom\n", "from scipy.optimize import minimize, leastsq\n", "from scipy.special import erf" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "WARNING: pylab import has clobbered these variables: ['poisson']\n", "`%pylab --no-import-all` prevents importing * from pylab and numpy\n" ] } ], "prompt_number": 63 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It seems natural to empirically bechmark the performance of the EM algorithm\n", "compared to other common fitting methods. The most simple method is the histogram\n", "fitting. Another method is curve-fitting the empirical CDF\n", "([ECDF](http://en.wikipedia.org/wiki/Empirical_distribution_function)) which \n", "does not require binning.\n", "\n", "Let define the fitting function we want to compare:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def fit_two_peaks_EM(sample, sigma, weights=False, p0=array([0.1,0.2,0.6,0.2,0.5]), \n", " max_iter=300, tollerance=1e-3):\n", " \n", " if not weights: w = ones(sample.size)\n", " else: w = 1./(sigma**2)\n", " w *= 1.*w.size/w.sum() # renormalization so they sum to N\n", " \n", " # Initial guess of parameters and initializations\n", " mu = array([p0[0], p0[2]])\n", " sig = array([p0[1], p0[3]])\n", " pi_ = array([p0[4], 1-p0[4]])\n", " \n", " gamma, N_ = zeros((2, sample.size)), zeros(2)\n", " p_new = array(p0)\n", " N = sample.size\n", " \n", " # EM loop\n", " counter = 0\n", " converged, stop_iteration = False, False\n", " while not stop_iteration:\n", " p_old = p_new\n", " # Compute the responsibility func. and new parameters\n", " for k in [0,1]:\n", " gamma[k,:] = w*pi_[k]*normpdf(sample, mu[k], sig[k])/pdf_model(sample, p_new) # SCHEME1\n", " #gamma[k,:] = pi_[k]*normpdf(sample, mu[k], sig[k])/pdf_model(sample, p_new) # SCHEME2\n", " N_[k] = gamma[k,:].sum()\n", " mu[k] = sum(gamma[k]*sample)/N_[k] # SCHEME1\n", " #mu[k] = sum(w*gamma[k]*sample)/sum(w*gamma[k]) # SCHEME2\n", " sig[k] = sqrt( sum(gamma[k]*(sample-mu[k])**2)/N_[k] )\n", " pi_[k] = 1.*N_[k]/N\n", " p_new = array([mu[0], sig[0], mu[1], sig[1], pi_[0]])\n", " assert abs(N_.sum() - N)/float(N) < 1e-6 \n", " assert abs(pi_.sum() - 1) < 1e-6\n", " \n", " # Convergence check\n", " counter += 1\n", " max_variation = max((p_new-p_old)/p_old)\n", " converged = True if max_variation < tollerance else False\n", " stop_iteration = converged or (counter >= max_iter)\n", " #print \"Iterations:\", counter\n", " if not converged: print \"WARNING: Not converged\"\n", " return p_new" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "def fit_two_gauss_mix_hist(s, bins=r_[-0.5:1.5:0.001], weights=None, \n", " p0=[0,0.1,0.5,0.1,0.5]):\n", " \"\"\"Fit the (optionally weighted) histogram with a 2-Gaussian mix PDF.\n", " \"\"\"\n", " H = histogram(s, bins=bins, weights=weights, normed=True)\n", " x = .5*(H[1][1:]+H[1][:-1])\n", " y = H[0]\n", " assert x.size == y.size\n", " \n", " err_func = lambda p, x_, y_: (y_ - pdf_model(x_, p))\n", " res = leastsq(err_func, x0=p0, args=(x,y), full_output=1)\n", " #print res\n", " return array(res[0])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "def fit_two_gauss_mix_cdf(s, p0=[0.2,1,0.8,1,0.3], weights=None):\n", " \"\"\"Fit the sample s with two gaussians.\n", " \"\"\"\n", " ## Empirical CDF\n", " ecdf = [sort(s), arange(0.5,s.size+0.5)*1./s.size]\n", " \n", " ## CDF for a Gaussian distribution, and for a 2-Gaussian mix\n", " gauss_cdf = lambda x, mu, sigma: 0.5*(1+erf((x-mu)/(sqrt(2)*sigma)))\n", " two_gauss_cdf = lambda x, m1, s1, m2, s2, a:\\\n", " a*gauss_cdf(x,m1,s1)+(1-a)*gauss_cdf(x,m2,s2)\n", "\n", " ## Fitting the empirical CDF\n", " fit_func = lambda p, x: two_gauss_cdf(x, *p)\n", " err_func = lambda p, x, y: fit_func(p, x) - y\n", " p,v = leastsq(err_func, x0=p0, args=(ecdf[0],ecdf[1]))\n", " return array(p)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 66 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A simple function to draw samples from a mixture of 2 Gaussians:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def sim_two_gauss_mix(p, N=1000): \n", " s1 = normal(p[0], p[1], size=N*p[4])\n", " s2 = normal(p[2], p[3], size=N*(1-p[4]))\n", " s = concatenate([s1,s2])\n", " return s" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 67 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now define a function perform the fitting an **high number** populations:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def test_accuracy(N_test=200, **kwargs):\n", " \n", " fit_kwargs = dict()\n", " if 'p0' in kwargs: \n", " fit_kwargs.update(p0=kwargs.pop('p0'))\n", " if 'max_iter' in kwargs: \n", " fit_kwargs.update(max_iter=kwargs.pop('max_iter'))\n", " \n", " pop_kwargs = dict()\n", " pop_kwargs.update(kwargs)\n", " \n", " P_em = zeros((N_test, 5))\n", " P_h = zeros((N_test, 5))\n", " P_cdf = zeros((N_test, 5))\n", " for i_test in xrange(N_test):\n", " s = sim_two_gauss_mix(**pop_kwargs)\n", " \n", " P_em[i_test,:] = fit_two_peaks_EM(s, sigma=None, weights=False, **fit_kwargs)\n", " if 'max_iter' in fit_kwargs: fit_kwargs.pop('max_iter')\n", " P_h[i_test,:] = fit_two_gauss_mix_hist(s, bins=r_[-0.5:1.5:0.01], weights=None, **fit_kwargs)\n", " P_cdf[i_test,:] = fit_two_gauss_mix_cdf(s)\n", " \n", " return P_em, P_h, P_cdf" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "def plot_accuracy(P_LIST, labels, name=\"Fit comparison\", ip=0, \n", " bins=(r_[0.2:0.5:0.004]+0.002)):\n", " print \"METHOD\\t MEAN STD.DEV.\"\n", " for P, label in zip(P_LIST, labels):\n", " hist(P[:,ip], bins=bins, histtype='stepfilled', alpha=0.5, label=label);\n", " print \"%s:\\t %6.2f %6.2f\" % (label, P[:,ip].mean()*100, P[:,ip].std()*100)\n", " legend(); grid(True); title(name);" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 72 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Study of different populations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**CASE 1**: Half-mixed populations" ] }, { "cell_type": "code", "collapsed": false, "input": [ "s = sim_two_gauss_mix(N=1000, p=[0,0.15,0.5,0.15,0.3])\n", "hist(s, bins=r_[-0.4:1:0.05]);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEACAYAAABWLgY0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHkNJREFUeJzt3X9QVNfdBvBnDbT1HVOiiSwR7JIoqIgu5DWhjsW4JUsa\nG4wTraNWQyXSmaadRtsYGeNM0o6RzdhOa7ROZqg2BFKj03SUSZUqKGIx/hh11BdUYoIUEHY0iD9i\n/AXn/QOlWlDvuXeXc8/1+cxknF3Oro83d78sD/fedQkhBIiIyJH6qA5AREThwyFPRORgHPJERA7G\nIU9E5GAc8kREDsYhT0TkYHcd8jk5OXC73Rg1alTXfQsWLMCIESPg9Xrx4osv4ty5c11fy8/PR0JC\nAoYPH44tW7aELzURERly1yE/Z84clJaW3nZfZmYmqqurcejQISQmJiI/Px8AUFNTg3Xr1qGmpgal\npaV45ZVX0NHREb7kRER0T3cd8unp6ejfv/9t9/n9fvTp0/mwtLQ0NDY2AgA2btyIGTNmIDIyEvHx\n8Rg6dCj27t0bpthERGSEpU5+zZo1mDhxIgDg1KlTiIuL6/paXFwcmpqarKUjIiJLTA/5t99+G9/4\nxjcwc+bMO65xuVxmn56IiEIgwsyD3n//fWzatAnl5eVd98XGxqKhoaHrdmNjI2JjY7s9du3atYiO\njjbz1xIR3bcuXryIF154Qfpx0kO+tLQUy5Ytw44dO/Ctb32r6/5JkyZh5syZ+NWvfoWmpiZ89tln\neOqpp7o9Pjo6GuPGjZMOahdLlizB4sWLVccwjfnVYn51dM4OAFVVVaYed9chP2PGDOzYsQNnzpzB\n4MGD8Zvf/Ab5+fm4evUq/H4/AGDs2LFYtWoVkpKSMG3aNCQlJSEiIgKrVq1yZF1TX1+vOoIlzK8W\n86ujc3Yr7jrk165d2+2+nJycO65ftGgRFi1aZD0VERGFBM94lTR79mzVESxhfrWYXx2ds1vh6u0P\nDSkvL9e6kyciUqGqqgoZGRnSj+M7eUmVlZWqI1jC/Goxvzo6Z7eCQ56IyMFY1xARaYB1DRERdcMh\nL0n3Xo/51WJ+dXTObgWHPBGRg7GTJyLSADt5IiLqhkNeku69HvOrxfzq6JzdCg55IiIHYydPRKQB\ndvJERNQNh7wk3Xs95leL+dXRObsVHPJERA7GTp6ISAPs5ImIqBsOeUm693rMrxbzq6Nzdis45ImI\nHIydPBGRBtjJExFRNxzyknTv9ZhfLeZXR+fsVnDIExE5GDt5IiINmO3kI8KQhYgU2bmzCfX1xt+3\neTwupKfHhjERqcYhL6myshLjx49XHcM05lcr3Pnr6wVyc4caXl9QcALp6cafX+ftr3N2K9jJExE5\n2F2HfE5ODtxuN0aNGtV1X2trK/x+PxITE5GZmYm2traur+Xn5yMhIQHDhw/Hli1bwpdaId3fCTC/\nWsyvjs7ZrbjrkJ8zZw5KS0tvuy8QCMDv96O2thYZGRkIBAIAgJqaGqxbtw41NTUoLS3FK6+8go6O\njvAlJyKie7rrkE9PT0f//v1vu6+kpATZ2dkAgOzsbGzYsAEAsHHjRsyYMQORkZGIj4/H0KFDsXfv\n3jDFVkf3Y22ZXy3mV0fn7FZId/LBYBButxsA4Ha7EQwGAQCnTp1CXFxc17q4uDg0NTWFKCYREZlh\n6RevLpcLLpfrrl93Gt17PeZXi/nV0Tm7FdKHULrdbrS0tCAmJgbNzc2Ijo4GAMTGxqKhoaFrXWNj\nI2Jjez7+Njc3Fx6PBwAQFRUFr9fb9T/g5o9UvM3bvC1/+/jxPQAaAUxAp4obf/Z8+/jxPais/MI2\n+Xn7P7crKytRVFQEAPB4PPD5fDDjnme8njx5EllZWThy5AgA4PXXX8fDDz+MhQsXIhAIoK2tDYFA\nADU1NZg5cyb27t2LpqYmPPPMMzhx4kS3d/O6n/Gq+7G2zK9WuPMXFzdKHyc/a1bcvRfeoPP21zk7\nEKYzXmfMmIEdO3bgzJkzGDx4MH77298iLy8P06ZNw+rVqxEfH4/169cDAJKSkjBt2jQkJSUhIiIC\nq1atcmRdQ0SkE167hshBwv1OntTh9eSJiKgbXrtGku69HvOrtXLlx3jooTTD6+12ATGdt7/O2a3g\nkCfqRcEgsGBB+C4gRvTfWNdI0v2dAPOrNWyY8XfxdqTz9tc5uxUc8kREDsYhL0n3618wv1qdJyvp\nS+ftr3N2KzjkiYgcjENeku69HvOrxU5eHZ2zW8EhT0TkYBzyknTv9ZhfLXby6uic3QoOeSIiB+OQ\nl6R7r8f8arGTV0fn7FZwyBMRORiHvCTdez3mV4udvDo6Z7eCQ56IyME45CXp3usxv1rs5NXRObsV\nHPJERA7GIS9J916P+dViJ6+Oztmt4JAnInIwDnlJuvd6zK8WO3l1dM5uBT8ZisjGrl69hOLiRsPr\nz527EsY0pCMOeUm6f04k86vV2ckb//i/s2cfwOLFxtcvWVJtIpVxOm9/nbNbwbqGiMjBOOQl6f5O\ngPnVYievjs7ZreCQJyJyMA55Sbofa8v8avE4eXV0zm4FhzwRkYNxyEvSvddjfrXYyaujc3YrOOSJ\niBzM9JDPz8/HyJEjMWrUKMycORNXrlxBa2sr/H4/EhMTkZmZiba2tlBmtQXdez3mV4udvDo6Z7fC\n1JA/efIkCgoKcODAARw5cgTt7e346KOPEAgE4Pf7UVtbi4yMDAQCgVDnJSIiCabOeP32t7+NyMhI\nXLp0CQ888AAuXbqEQYMGIT8/Hzt27AAAZGdnY8KECY4b9Lr3eswfWjt3NqG+XhheHxOTEsY04We3\n7S9D5+xWmBryAwYMwK9//Wt85zvfQd++ffHss8/C7/cjGAzC7XYDANxuN4LBYEjDEtlNfb1Abq59\nLjtA9N9MDfnPP/8cf/zjH3Hy5ElERUXhRz/6EYqLi29b43K54HK5enx8bm4uPB4PACAqKgper7fr\nu+zN3syut1esWKFVXuYP7+3Ojr0RwAR0qrjxZ8+3q6o+APCc4fVffLEXwOmwrT9+fA8qK7/QdvvL\n3L61k7dDHiN5i4qKAAAejwc+nw9muIQQxn/WvGHdunXYunUr/vznPwMAioqKsHv3bmzbtg3bt29H\nTEwMmpub4fP5cOzYsdseW15ejnHjxpkKawe6X+SI+UOruLhR6p18Ts5fsGbNHMPrlyypxuLFI8O2\nvqDgBGbNijO83m7bX4bO2QGgqqoKGRkZ0o8z9YvX4cOHY/fu3fj6668hhEBZWRmSkpKQlZWFwsJC\nAEBhYSEmT55s5ultTeedBGB+1R5//CnVESzRefvrnN0KU3WN1+vFSy+9hDFjxqBPnz544okn8NOf\n/hQXLlzAtGnTsHr1asTHx2P9+vWhzktERBJMHyf/+uuvo7q6GkeOHEFhYSEiIyMxYMAAlJWVoba2\nFlu2bMFDDz0Uyqy2oPuxtsyvVmdnri+dt7/O2a3gGa9ERA7GIS9J916P+dViJ6+Oztmt4JAnInIw\nDnlJuvd6zK8WO3l1dM5uBYc8EZGDcchL0r3XY3612Mmro3N2KzjkiYgcjENeku69HvOrxU5eHZ2z\nW2HqjFcicoarVy+huLjR8Pq2ttO4T1sPbXHIS9K912N+tezWyZ89+wAWLzZ+gbWCgjCGCTPd9x2z\nWNcQETkYh7wk3Xs95ldL905e58+o1X3fMYtDnojIwTjkJene6zG/Wnbr5GUNG5amOoJpuu87ZnHI\nExE5GIe8JN17PeZXi528OrrvO2ZxyBMRORiHvCTdez3mV4udvDq67ztmccgTETkYh7wk3Xs95leL\nnbw6uu87ZnHIExE5GIe8JN17PeZXi528OrrvO2ZxyBMRORiHvCTdez3mV4udvDq67ztmccgTETkY\nh7wk3Xs95leLnbw6uu87ZnHIExE5GIe8JN17PeZXi528OrrvO2aZHvJtbW2YOnUqRowYgaSkJOzZ\nswetra3w+/1ITExEZmYm2traQpmViIgkmR7yr776KiZOnIijR4/i8OHDGD58OAKBAPx+P2pra5GR\nkYFAIBDKrLage6/H/Gqxk1dH933HLFND/ty5c9i5cydycnIAABEREYiKikJJSQmys7MBANnZ2diw\nYUPokhIRkTRTQ76urg4DBw7EnDlz8MQTTyA3NxdfffUVgsEg3G43AMDtdiMYDIY0rB3o3usxv1rs\n5NXRfd8xK8LMg65fv44DBw5g5cqVePLJJzFv3rxu1YzL5YLL5erx8bm5ufB4PACAqKgoeL3erh+l\nbv6PsOvtQ4cO2SoP86vN0zn0GgFMQKeKG3/2fLu5+diN+4yt7/ymcNo26//97xpUVg60zfZ38u3K\nykoUFRUBADweD3w+H8xwCSGE7INaWlowduxY1NXVAQD+9a9/IT8/H1988QW2b9+OmJgYNDc3w+fz\n4dixY7c9try8HOPGjTMVlshuiosbkZs71PD6JUuqsXjxSG3XFxScwKxZcYbXU+hUVVUhIyND+nGm\n6pqYmBgMHjwYtbW1AICysjKMHDkSWVlZKCwsBAAUFhZi8uTJZp6eiIhCxPTRNStWrMCPf/xjeL1e\nHD58GG+88Qby8vKwdetWJCYmYtu2bcjLywtlVlvQvddjfrXYyauj+75jlqlOHgC8Xi/27dvX7f6y\nsjJLgYiIKHR4xqsk3Y+1ZX61eJy8OrrvO2ZxyBMRORiHvCTdez3mV4udvDq67ztmme7kiej+c+3a\nZRQXNxpe7/G4kJ4eG8ZEdC8c8pJ07/WYXy3dO/mBA78rdV5AQcEJpKeHMZAE3fcds1jXEBE5GIe8\nJN17PeZXS/dOXuf8uu87ZnHIExE5GIe8JN17PeZXS/dOXuf8uu87ZnHIExE5GIe8JN17PeZXS+dO\nG9A7v+77jlkc8kREDsYhL0n3Xo/51dK50wb0zq/7vmMWhzwRkYNxyEvSvddjfrV07rQBvfPrvu+Y\nxSFPRORgHPKSdO/1mF8tnTttQO/8uu87ZnHIExE5GIe8JN17PeZXS+dOG9A7v+77jlkc8kREDsYh\nL0n3Xo/51dK50wb0zq/7vmMWhzwRkYNxyEvSvddjfrV07rQBvfPrvu+YxY//I7rFzp1NqK8Xhtef\nO3cljGmIrOOQl6R7r8f8d1dfL6Q+w3TJkmqp59e50wb0zq/7vm8W6xoiIgfjkJeke6/H/Grp3GkD\neufXfd8xi0OeiMjBLA359vZ2pKamIisrCwDQ2toKv9+PxMREZGZmoq2tLSQh7UT3Xo/51dK50wb0\nzq/7vmOWpSG/fPlyJCUlweVyAQACgQD8fj9qa2uRkZGBQCAQkpBERGSO6SHf2NiITZs2Ye7cuRCi\n85CzkpISZGdnAwCys7OxYcOG0KS0Ed17PeZXS+dOG9A7v+77jlmmD6GcP38+li1bhvPnz3fdFwwG\n4Xa7AQButxvBYNB6Qgqpw4dP49//bjS83uNxIT09NoyJyMmuXr2E4mLubyqZGvKffPIJoqOjkZqa\nioqKih7XuFyurhrnv+Xm5sLj8QAAoqKi4PV6u/qym99t7Xr75n12ybNy5ccIBoFhw9IAAMeP7wFw\n59uff34V773XCGDCjX9NxY0/e7792msfQoiBtvn33rwvXM/fub2Mb5/Od7anDa//z33hef5wr5fN\nv3//fqxZ85jh9eHc38aPH698/5W5XVlZiaKiIgCAx+OBz+eDGS5xs2uRsGjRIhQVFSEiIgKXL1/G\n+fPn8eKLL2Lfvn2oqKhATEwMmpub4fP5cOzYsdseW15ejnHjxpkKS90VFzdKn7yzePFIw+sLCk5g\n1qw4M9G0FO7tyfV3d7/tbzKqqqqQkZEh/ThTnfzSpUvR0NCAuro6fPTRR/j+97+PoqIiTJo0CYWF\nhQCAwsJCTJ482czT25ruvZ7OnSrA7a+azvl133fMCslx8jdrmby8PGzduhWJiYnYtm0b8vLyQvH0\nRERkkuVr1zz99NN4+umnAQADBgxAWVmZ5VB2pvuxtjof5wxw+6umc37d9x2zeMYrEZGDcchL0r3X\n07lTBbj9VdM5v+77jlkc8kREDsbryUvSvdfTuVMFAJdriNYn1+i+/XXOr/tr1ywOedKK7Id6FBSc\nQHp6GAMR2RyHvKRbz7bUUWenavzkFLvpPCPV+JCXPa0+3B/np/v21zm/7q9dszjkydHOnn0AixeH\n7+P8iOyOQ16S7u8Ewt2pyn4QtmxnfvMaPLrSudMG9M6v+2vXLA55uiszdcdrr8ldq4SdOVH4cMhL\n0r3Xk+1U7VZ3yHbydqNzpw3onV/3165ZHPI2I1t3hPsXhUSkNw55SeF+JyB7iKDsO2edO1WAnbxq\nOue/H9/FAzzjlYjI0TjkJel+/Qudrz0C/OeTrnSl+/bXOb/ur12zWNeQUrJH71y8eDWMaYich0Ne\nku69nt06Vfmjd/T+RbPdtr8snfPr/to1i3UNEZGDcchL0r3X07lTBZhfNZ3z6/7aNYtDnojIwTjk\nJene6+ncqQLMr5rO+XV/7ZrFX7xKkj0j9ZvfvIQrV/7H8HqewUpEocQhL2nLlt343e9+bHj9kiXV\ntrr2i87XHgGYXzWd89+v165hXUNE5GB8Jy+J105Ri/nVCnd+mZPjZD+L4H58Fw9wyBORjcicHMfP\nIjCGdY0kXjtFLeZXS+f8PE6eiIgch0NeEjt5tZhfLZ3z36+dvKkh39DQAJ/Ph5EjRyI5ORnvvvsu\nAKC1tRV+vx+JiYnIzMxEW1tbSMMSEZEcU0M+MjISf/jDH1BdXY3du3fjT3/6E44ePYpAIAC/34/a\n2lpkZGQgEAiEOq9y7OTVYn61dM7PTl5CTEwMUlJSAAD9+vXDiBEj0NTUhJKSEmRnZwMAsrOzsWHD\nhtAlJSIiaZY7+ZMnT+LgwYNIS0tDMBiE2+0GALjdbgSDQcsB7YadvFrMr5bO+dnJm3Dx4kVMmTIF\ny5cvx4MPPnjb11wuF1wul6VwRERkjemToa5du4YpU6Zg9uzZmDx5MoDOd+8tLS2IiYlBc3MzoqOj\ne3xsbm4uPB4PACAqKgper7fru+zN3syut7du/QsAP4AJN/41FTf+7Pl2Z4d52jbrq6o+APCcbfIw\nP/NbWS/z+r21k7fLPLlX3qKiIgCAx+OBz+eDKcKEjo4OMXv2bDFv3rzb7l+wYIEIBAJCCCHy8/PF\nwoULuz22rKxMfP3119r+99prxQIQhv9bsuT/bLU+J2eNrfIwP/ObXV9Q8JnUa/ef//yn8vlh5b+y\nsjIz41qYeidfVVWF4uJijB49GqmpqQCA/Px85OXlYdq0aVi9ejXi4+Oxfv16c995bIydvFrMr5bO\n+e/XTt7UkP/e976Hjo6OHr9WVlZmKRAREYUOz3iVxOPk1WJ+tXTOz+PkiYjIcTjkJbGTV4v51dI5\n//3ayXPIExE5GIe8JHbyajG/WjrnZydPRESOwyEviZ28Wsyvls7579dOnp/xSkRakvnQb0D+g7+d\ngkNeUmcnb+yDhu2os1MdqTqGacyvlp3yy3zoNwC89tqHSE+fEsZE9sS6hojIwTjkJbGTV4v51dI5\nv+6vXbM45ImIHIxDXhKPk1eL+dXSOb/ur12zOOSJiBzsvj+6ZufOJtTXC8PrY2JSwpgm/HTuVAHm\nV03n/I89Nuq+POTyvh/y9fUCubnGD8NasqQ6jGmIKFxkD7ksKDiB9PQwBuoljhvysu/Mz527IvX8\ndjpO2AzmV4v51dE5uxWOG/J8Z05E9B/8xasknTtJgPlVY351dM5uBYc8EZGDcchL0vk4YYD5VWN+\ndXTObgWHPBGRg3HIS9K912N+tZhfHZ2zW8EhT0TkYI47hDLcdD/WlvnVYn51ZLM75UNJOOSJiHrg\nlDNklQz5jo4Ow2tdLhdcLlcY08jRvddjfrWYXx2ds1uhZMi/+WbQ8Nqnn76CZ56JD18YIqIQsGu9\nE/IhX1painnz5qG9vR1z587FwoULu6353e8eM/x8//u/n4UynmU6d5IA86vG/OqEO7td652QHl3T\n3t6OX/ziFygtLUVNTQ3Wrl2Lo0ePhvKvUK65+ZjqCJYwv1rMr47O2a0I6ZDfu3cvhg4divj4eERG\nRmL69OnYuHFjKP8K5S5fvqA6giXMrxbzq6NzditCWtc0NTVh8ODBXbfj4uKwZ4+1j9y6cEGu55K9\ndDARkZOFdMgbPQrm1VdPGn7OtrYH8Prr9rl08NmzTWF9/nBjfrWYXx2ds1vhEkIY/4SNe9i9ezfe\neustlJaWAgDy8/PRp0+f2375unHjRvTr1y9UfyUR0X3h4sWLeOGFF6QfF9Ihf/36dQwbNgzl5eUY\nNGgQnnrqKaxduxYjRowI1V9BREQSQlrXREREYOXKlXj22WfR3t6Ol19+mQOeiEihkL6TJyIiewn7\nVShbW1vh9/uRmJiIzMxMtLW13XFte3s7UlNTkZWVFe5YhhnJ39DQAJ/Ph5EjRyI5ORnvvvuugqS3\nKy0txfDhw5GQkIB33nmnxzW//OUvkZCQAK/Xi4MHD/Zywru7V/4PP/wQXq8Xo0ePxrhx43D48GEF\nKXtmZNsDwL59+xAREYG///3vvZju3ozkr6ioQGpqKpKTkzFhwoTeDXgP98p/5swZ/OAHP0BKSgqS\nk5Px/vvv937IO8jJyYHb7caoUaPuuEb6dSvCbMGCBeKdd94RQggRCATEwoUL77j297//vZg5c6bI\nysoKdyzDjORvbm4WBw8eFEIIceHCBZGYmChqamp6Neetrl+/LoYMGSLq6urE1atXhdfr7ZbnH//4\nh3juueeEEELs3r1bpKWlqYjaIyP5d+3aJdra2oQQQmzevNk2+Y1kv7nO5/OJH/7wh+Jvf/ubgqQ9\nM5L/7NmzIikpSTQ0NAghhDh9+rSKqD0ykv/NN98UeXl5QojO7AMGDBDXrl1TEbebyspKceDAAZGc\nnNzj1828bsP+Tr6kpATZ2dkAgOzsbGzYsKHHdY2Njdi0aRPmzp0LYaMGyUj+mJgYpKSkAAD69euH\nESNG4NSpU72a81ZGTkq79d+VlpaGtrY2BIPGrykUTkbyjx07FlFRUQA68zc2Gj+XIpyMnhC4YsUK\nTJ06FQMHDlSQ8s6M5P/rX/+KKVOmIC4uDgDwyCOPqIjaIyP5H330UZw/fx4AcP78eTz88MOIiLDH\nBXnT09PRv3//O37dzOs27EM+GAzC7XYDANxu9x0DzZ8/H8uWLUOfPvb6HBOj+W86efIkDh48iLS0\ntN6I16OeTkpramq65xq7DEoj+W+1evVqTJw4sTei3ZPRbb9x40b87Gc/A2D8/JLeYCT/Z599htbW\nVvh8PowZMwZFRUW9HfOOjOTPzc1FdXU1Bg0aBK/Xi+XLl/d2TNPMvG5D8u3L7/ejpaWl2/1vv/32\nbbfvdNngTz75BNHR0UhNTUVFRUUoIkmxmv+mixcvYurUqVi+fLnScwGMDo3//onJLsNGJsf27dux\nZs0aVFVVhTGRcUayz5s3D4FAAC6XC0IIW/3kaiT/tWvXcODAAZSXl+PSpUsYO3Ysvvvd7yIhIaEX\nEt6dkfxLly5FSkoKKioq8Pnnn8Pv9+PQoUN48MEHeyGhdbKv25AM+a1bt97xa263Gy0tLYiJiUFz\nczOio6O7rdm1axdKSkqwadMmXL58GefPn8dLL72EDz74IBTx7slqfqBzx58yZQpmzZqFyZMnhyuq\nIbGxsWhoaOi63dDQ0PWj9Z3WNDY2IjbWHp9qYyQ/ABw+fBi5ubkoLS2964+4vclI9v3792P69OkA\nOn8JuHnzZkRGRmLSpEm9mrUnRvIPHjwYjzzyCPr27Yu+ffti/PjxOHTokC2GvJH8u3btwhtvvAEA\nGDJkCB577DEcP34cY8aM6dWsZph63YbqFwZ3smDBAhEIBIQQQuTn59/1F69CCFFRUSGef/75cMcy\nzEj+jo4OMXv2bDFv3rzejteja9euiccff1zU1dWJK1eu3PMXr59++qltfnEphLH89fX1YsiQIeLT\nTz9VlLJnRrLf6ic/+Yn4+OOPezHh3RnJf/ToUZGRkSGuX78uvvrqK5GcnCyqq6sVJb6dkfzz588X\nb731lhBCiJaWFhEbGyu+/PJLFXF7VFdXZ+gXr0Zft2Ef8l9++aXIyMgQCQkJwu/3i7NnzwohhGhq\nahITJ07str6iosJWR9cYyb9z507hcrmE1+sVKSkpIiUlRWzevFllbLFp0yaRmJgohgwZIpYuXSqE\nEOK9994T7733Xtean//852LIkCFi9OjRYv/+/aqi9uhe+V9++WUxYMCAru395JNPqox7GyPb/ia7\nDXkhjOVftmyZSEpKEsnJyWL58uWqovboXvlPnz4tnn/+eTF69GiRnJwsPvzwQ5VxbzN9+nTx6KOP\nisjISBEXFydWr15t+XXLk6GIiBzMXoeyEBFRSHHIExE5GIc8EZGDccgTETkYhzwRkYNxyBMRORiH\nPBGRg3HIExE52P8Ds+aKddS0JxgAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "P_em, P_h, P_cdf = test_accuracy(N_test=2000, N=200, p=[0,0.15,0.5,0.15,0.3],\n", " p0=[0,0.1,0.6,0.1,0.5])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "-c:37: RuntimeWarning: divide by zero encountered in divide\n", "/home/anto/.local/lib/python2.7/site-packages/scipy/optimize/minpack.py:402: RuntimeWarning: Number of calls to function has reached maxfev = 1200.\n", " warnings.warn(errors[info][0], RuntimeWarning)\n" ] } ], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "plot_accuracy([P_em, P_h, P_cdf], labels=['EM', 'hist', 'CDF'], ip=0,\n", " bins=(r_[-.2:.2:0.01]))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "METHOD\t MEAN STD.DEV.\n", "EM:\t 0.64 4.17" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "hist:\t 1.79 6.78\n", "CDF:\t 10.04 14.28\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "plot_accuracy([P_em, P_h, P_cdf], labels=['EM', 'hist', 'CDF'], ip=2,\n", " bins=(r_[.4:.6:0.005]))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "METHOD\t MEAN STD.DEV.\n", "EM:\t 50.20 2.00" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "hist:\t 50.24 2.31\n", "CDF:\t 48.48 10.96\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 74 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**EM** is better both for bias and accuracy (CDF is worst)\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**CASE 2**: Separated populations" ] }, { "cell_type": "code", "collapsed": false, "input": [ "sample_parameters = dict(N=200, p=[0,0.15,0.8,0.15,0.7])\n", "s = sim_two_gauss_mix(**sample_parameters)\n", "hist(s, bins=r_[-0.4:1.4:0.05]);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nx7x95MhRXHtT5fjb692+TWv7vr7DVz/m9vGu3U7k++nsfAvR6BHt9UyV/TvW7Y6OjpTKI309P/zw\nEPSOzwzf8nZ0dKTMel1/OxqNYsuWLQCAzMxMlJaWwomQUkrF2+jYsWOorKzEe++9BwCYN28eWltb\nkZ6ejr6+PpSWluLw4cOf+pqWlhYUFxc7CuWlxsYe1Nbqvat4ff1B1NUtNLadpPvcuPEDLF+eobUt\n2Uf3POJxFF9bWxvKysoS/jpHNcuSJUuwefNmAMDmzZuxdOlSJ3dDRESGxB3mjzzyCO699150dnZi\n1qxZeOWVV7BmzRrs3r0bOTk5+Otf/4o1a9Z4kTUpJHR9ADtz05jTLAnnkZS1dCpuZ97U1DTqx/fs\n2WM8DBEROWP9FaASnh8L8HnmpjGnWRLOIylr6ZT1w5yIKAisH+YSuj6AnblpzGmWhPNIylo6Zf0w\nJyIKAuuHuYSuD2BnbhpzmiXhPJKylk5ZP8yJiILA+jd0vtL16V0B6qcrnbne1Zp+ikajIn4CYs74\n9u7tRVdX3AvEAQAHDuxFqp9HUva5U9YPcyIaXVeX0n6pi5qavUlOQ/FYX7NI6PoAduamMadZEo5P\nKWvplPXDnIgoCKwf5hKeHwvweeamMadZEo5PKWvplPXDnIgoCKwf5uzMzZLSSzKnWRKOTylr6ZT1\nw5yIKAisH+bszM2S0ksyp1kSjk8pa+mU9cOciCgIrB/m7MzNktJLMqdZEo5PKWvplPXDnIgoCKy/\nnJ+vzaLn/PmzaGzsibvd4OBbePzxKg8SuSPldTqSkVP3NVdOnTqnfZ9+H586pOxzp6wf5qQnFpuA\nurr4/+g9/bSMPyjbTPc1V+rrD3qQhkyxvmZhZ26WlPWU8hOalJwSjk8pa+mU9cOciCgIrB/mfJ65\nWVLWU8pzjqXklHB8SllLp6wf5kREQWD9MJfS8UroJAE56ymlP5WSU8LxKWUtnbJ+mBMRBYH1w1xK\nxyuhkwTkrKeU/lRKTgnHp5S1dMr6YU5EFATWD3MpHa+EThKQs55S+lMpOSUcn1LW0inrhzkRURBY\nP8yldLwSOklAznpK6U+l5JRwfEpZS6esH+ZEREFg/TCX0vFK6CQBOesppT+VklPC8SllLZ2yfpgT\nEQWB9cNcSscroZME5KynlP5USk4Jx6eUtXTK+mFORBQE1g9zKR2vhE4SkLOeUvpTKTklHJ9S1tIp\n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\ns0ycOBEvvvgivv71r+PSpUtYuXIlBzkRkY8c/WRORESpxdgVoCdPnkR5eTlycnJQUVGBwcHBMbe9\ndOkSCgsLUVlZaerhtenk7O7uRmlpKRYuXIjc3Fw8//zznuXTuRjriSeewJw5cxCJRNDe3u5ZtuvF\ny7l161ZEIhHk5+ejuLgY7777bsplHPb3v/8dEydOxJ/+9CcP012jk7O1tRWFhYXIzc3F/fff723A\nq+LlPHHiBB544AEUFBQgNzcXv/3tbz3PWFNTg3A4jLy8vDG3SYXzJ15OR+ePMuSZZ55R69evV0op\n1dDQoFavXj3mtr/+9a/Vt7/9bVVZWWnq4bXp5Ozr61Pt7e1KKaXOnDmjcnJy1KFDh5Ke7eLFiyo7\nO1sdPXpUnT9/XkUikRse9y9/+Yv6xje+oZRSav/+/aqoqCjpuZzk3LdvnxocHFRKKbVr1y7Pc+pk\nHN6utLRUffOb31R/+MMfPM2omzMWi6kFCxao7u5upZRSx48fT8mcP//5z9WaNWtGMk6dOlVduHDB\n05zRaFS98847Kjc3d9TPp8L5o1T8nE7OH2M/me/YsQPV1dUAgOrqamzbtm3U7Xp6erBz5058//vf\nh/Kh4dHJmZ6ejoKCAgDApEmTMH/+fPz3v/9Nejadi7Guz19UVITBwUEMDAwkPVuiOe+55x5Mnjx5\nJGdPj7dPBdS9sO2FF17Aww8/jNtuu83TfMN0cv7+979HVVUVMjIyAADTpk1LyZwzZszA6dOnAQCn\nT5/GF77wBUyc6O1bJpSUlGDKlCljfj4Vzh8gfk4n54+xYT4wMIBwOAwACIfDYy7Qk08+ieeeew43\n3eTPa3zp5hx27NgxtLe3o6go+a+yp3Mx1mjbeD0oE71obNOmTXjwwQe9iDZCdy23b9+Oxx57DID+\n9RMm6eT897//jZMnT6K0tBSLFi3Cli1bvI6plbO2thYHDx7E7bffjkgkgg0bNngdM65UOH8SpXv+\nJPTPZnl5Ofr7+2/4+C9/+ctP3Q6FQqOeGH/+858xffp0FBYWorW1NZGHTojbnMOGhobw8MMPY8OG\nDZ48Z153mHz2Nxqvh1Aij/e3v/0NL7/8Mtra2pKY6EY6GVetWoWGhgaEQiEopXz5TVEn54ULF/DO\nO++gpaUFZ8+exT333IO7774bc+bEf1tGU3RyPvvssygoKEBrayv+85//oLy8HB0dHbj11ls9SKjP\n7/MnEYmcPwkN8927d4/5uXA4jP7+fqSnp6Ovrw/Tp0+/YZt9+/Zhx44d2LlzJz755BOcPn0a3/3u\nd/G73/0ukRhJzwlcOYGqqqqwfPlyLF261Gi+scycORPd3dfeBLu7u3vkV+uxtunp6cHMmTM9yTdW\nhtFyAsC7776L2tpaNDc3j/srZTLoZDxw4ACWLVsG4Mof73bt2oW0tDQsWbIkpXLOmjUL06ZNwy23\n3IJbbrkF9913Hzo6Ojwd5jo59+3bh5/85CcAgOzsbGRlZaGzsxOLFi3yLGc8qXD+6Er4/DFV6D/z\nzDOqoaFBKaXUunXrxv0DqFJKtba2qsWLF5t6eG06OS9fvqxWrFihVq1a5Wm2CxcuqDvuuEMdPXpU\nnTt3Lu4fQN98801f/oCjk7Orq0tlZ2erN9980/N8uhmv973vfU/98Y9/9DDhFTo533//fVVWVqYu\nXryoPv74Y5Wbm6sOHjyYcjmffPJJtXbtWqWUUv39/WrmzJnqo48+8jSnUkodPXpU6w+gfp0/w8bL\n6eT8MTbMP/roI1VWVqbmzJmjysvLVSwWU0op1dvbqx588MEbtm9tbfXl2Sw6Offu3atCoZCKRCKq\noKBAFRQUqF27dnmSb+fOnSonJ0dlZ2erZ599Viml1EsvvaReeumlkW1+8IMfqOzsbJWfn68OHDjg\nSa5Ec65cuVJNnTp1ZP2+/OUvp1zG6/k1zJXSy/ncc8+pBQsWqNzcXLVhw4aUzHn8+HG1ePFilZ+f\nr3Jzc9XWrVs9z7hs2TI1Y8YMlZaWpjIyMtSmTZtS8vyJl9PJ+cOLhoiIAoBvG0dEFAAc5kREAcBh\nTkQUABzmREQBwGFORBQAHOZERAHAYU5EFAAc5kREAfD/AVp2LByUnHYAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "P_em, P_h, P_cdf = test_accuracy(N_test=2000, p0=[0,0.1,0.6,0.1,0.5],\n", " **sample_parameters)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 77 }, { "cell_type": "code", "collapsed": false, "input": [ "plot_accuracy([P_em, P_h, P_cdf], labels=['EM', 'hist', 'CDF'], ip=0,\n", " bins=(r_[-.1:.1:0.005]))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "METHOD\t MEAN STD.DEV.\n", "EM:\t -0.06 1.31" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "hist:\t -0.04 1.60\n", "CDF:\t -0.08 1.53\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "plot_accuracy([P_em, P_h, P_cdf], labels=['EM', 'hist', 'CDF'], ip=2,\n", " bins=(r_[.7:.9:0.005]))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "METHOD\t MEAN STD.DEV.\n", "EM:\t 80.04 2.04" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "hist:\t 80.03 2.58\n", "CDF:\t 79.02 6.03\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEKCAYAAAD+XoUoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt0VNW9wPHvZBISIDwSHnlCwitgioSg8pCHYIBq67P0\nolEqVURXvWoVb9WFdoEWhWrXtUjrqvYqKgqiXVTg1iI1NQTi1dQKKAQMzxBCXpCEvJPJzL5/ICOH\nmZDXOZmZnd/HNaudPWfO7B975pc9v7PnHJtSSiGEEKJbCPJ1B4QQQnQdSfpCCNGNSNIXQohuRJK+\nEEJ0I5L0hRCiG5GkL4QQ3YgkfeFTffr04fjx477uhqXeffddfvjDH/q6G0IAYJN1+qIrJCYmUlpa\nit1uB8Bms5GXl0d0dLR7m5///OcMGTKE3/zmN77qphDak5m+6BI2m43//d//pbq6murqaqqqqgwJ\nX1dOp9PXXRDCQJK+8KmgoCCOHDnCa6+9xvr163nhhRfo06cPN998s9ft9+/fz5w5cxgwYADR0dGs\nXLkSgMbGRh555BHi4uKIi4vj0UcfpampCYDMzEzi4+N58cUXGTx4MLGxsXz44Yd89NFHJCUlMWDA\nAFatWuV+jeXLl/PTn/6U22+/nb59+3LFFVfw9ddfux9ftWoVI0eOpG/fvvzgBz/gww8/dD/25ptv\nMnXqVJYsWcLAgQNZvnw5b775JtOnTwdAKcWjjz5KVFQU/fr1Y9y4cezfvx+As2fPctdddzF48GAS\nExN57rnnOP9F/M0332TatGn86le/IjIykuHDh7Nt2zYTR0J0F5L0RZdpqZJos9m47777uPPOO3ni\niSeorq5m8+bNHttVV1cze/ZsfvSjH1FUVMThw4dJS0sD4LnnniMnJ4e9e/eyd+9ecnJyWLFihfu5\nJSUlNDY2UlRUxLPPPsu9997Lu+++y+7du9m5cyfPPvss+fn57u23bNnC/Pnzqaio4I477uCWW25x\nz9pHjhzJrl27qKqqYtmyZSxYsICSkhL3c3NychgxYgSlpaU89dRThhi2b9/Ozp07OXToEGfPnuWD\nDz5gwIABADz00ENUV1dz7NgxduzYwdtvv83atWsN+x0zZgxnzpzh8ccfZ9GiRe0dAiFACdEFEhIS\nVHh4uOrfv7/q37+/uvXWW5VSStlsNnXkyBGllFI///nP1dNPP93iPtavX68mTJjg9bERI0aov//9\n7+77H3/8sUpMTFRKKfXpp5+qnj17KpfLpZRSqqqqStlsNpWTk+Pe/oorrlCbN29WSim1bNkyNWXK\nFPdjLpdLxcTEqJ07d3p97fHjx7ufu3btWjV06FDD42vXrlXTpk1TSimVkZGhkpKS1Oeff66cTqd7\nm+bmZtWjRw914MABd9urr76qZs6c6d7HyJEj3Y/V1tYqm82mSkpKvPZJiJbITF90CZvNxubNm6mo\nqKCiooJNmza1ex8FBQUMHz7c62OnTp0iISHBfX/o0KGcOnXKfX/AgAHYbDYAevbsCUBUVJT78Z49\ne1JTU+O+Hx8fb+h7fHw8RUVFALz99tukpqYSERFBREQE+/bt48yZM+7thwwZ0mIM1157LQ8++CD/\n+Z//SVRUFPfffz/V1dWcPn0ah8PhEUNhYaH7/oXHQHr16gVg6LMQbSFJX/iN80m5JUOHDuXo0aNe\nH4uNjTUs/Txx4gSxsbEd7ktBQYH7/7tcLk6ePElsbCz5+fncd999/PGPf6S8vJyKigrGjh1rKF21\nFsdDDz3El19+SW5uLnl5ebz44osMGjSIkJAQjxgu/OMjhBkk6Qu/ERUV1WJSB7jhhhsoKipi9erV\nNDY2Ul1dTU5ODgDp6emsWLGC06dPc/r0aZ599ll+9rOfdbgv//73v/nrX/9Kc3Mzv//97wkLC2Py\n5MnU1tZis9kYOHAgLpeLtWvXsm/fvjbv98svv+SLL77A4XDQq1cvwsLCsNvtBAUFMX/+fJ566ilq\namrIz8/npZdeYsGCBR2OQQhvJOkLn7pwVrxo0SJyc3OJiIjgJz/5ice24eHh/OMf/2Dr1q3ExMSQ\nlJREZmYmAE8//TRXXnkl48aNY9y4cVx55ZU8/fTTXl/H2/2LH7v55pvZuHEjkZGRvPvuu2zatAm7\n3U5ycjKPPfYYU6ZMITo6mn379jFt2jTDc7291vm2qqoq7rvvPiIjI0lMTGTgwIH86le/AmDNmjX0\n7t2b4cOHM336dO68807uvvvuS+5XiPa65I+zCgoKuOuuuygtLXWvsHj44YdZvnw5//M//8OgQYMA\neP7557n++usBWLlyJW+88QZ2u52XX36ZuXPndk0kQpjkmWee4fDhw6xbt87XXRHCdMGXejAkJISX\nXnqJ8ePHU1NTwxVXXMGcOXOw2WwsWbKEJUuWGLbPzc1l48aN5ObmUlhYyOzZs8nLyyMoSL5QiMBx\niXmQEAHvktk4Ojqa8ePHA+e+Wl922WXu1QTePhibN28mPT2dkJAQEhMTGTlypLvmKkSg8FZKEUIX\nbZ6CHz9+nN27dzN58mTgXP0xJSWFRYsWUVlZCZxbNnfhaoP4+HjDkjMhAsGyZct4++23fd0NISzR\npqRfU1PDT3/6U1avXk14eDi/+MUvOHbsGHv27CEmJobHHnusxefKjEkIIfzHJWv6AA6Hg3nz5rFg\nwQJuueUWAAYPHux+/N577+XGG28EIC4uzrC++eTJk8TFxXnsc8OGDYZ9CCGEaF1NTU2L56Vqq0sm\nfaUUixYtIjk5mUceecTdXlRURExMDAB//etfufzyywG46aabuOOOO1iyZAmFhYUcOnSIiRMneux3\n8ODBTJ06tVMd92crVqwwLBfUic6xgcQX6HSPLzs7u9P7uGTSz87O5p133mHcuHGkpqYC55Znbtiw\ngT179mCz2Rg2bBivvvoqAMnJycyfP5/k5GSCg4N55ZVXumV558ITd+lG59hA4gt0usdnhksm/WnT\npuFyuTzaz6/J92bp0qUsXbq08z0TQghhOllAb4HO/Pzf3+kcG0h8gU73+Mzgk8slZmRkaF3TF0II\nK2RnZ7uvIdFRra7eEe2XlZXFjBkzfN0NS+gcG0h8vlZVVUVFRUWHjwVWVlbSv39/k3vVdZRSRERE\n0LdvX8teQ5K+EMIvnL/62NChQzuc9IcOHWpml7qcUorS0lLq6+sN13swk9T0LeDPM6nO0jk2kPh8\nqaGhgaioqG654u88m81GVFQUDQ0Nlr2GJH0hhF/ozsn+Ylb+W0jSt0BWVpavu2AZnWMDiU/oT5K+\nEEJ0I3Ig1wL+XDftLJ1jA4nP3+TlVVFcbN3+o6MhKan1lTKjR4+mrKwMu93ubluwYAETJkzg/vvv\n58EHH+SFF15wP7Z161Zuu+02FixYwGuvvWZJ3ztKkr4Qwm8VF0NWVqRl+58xo5ykpNa3s9lsbNq0\niZkzZxra33nnHYYPH86mTZtYuXKl+4/CO++8w6hRo/zyOIWUdyygc91U59hA4hPtFxUVxdixY/nH\nP/4BQHl5OTk5Ofz4xz/2y6uwSdIXQog28JbAz7elp6fz7rvvAvDBBx9www03EBoa2qX9aytJ+hYI\ntLppe+gcG0h8wjulFPPnzycmJsZ9W7t2rbt8c/PNN7Nz506qqqpYv349d955p4973DJJ+kII0Qqb\nzcYHH3xAUVGR+3b33Xe7Z/phYWFcd911rFy5koqKCiZPnuyXpR2QpG8JneumOscGEp/ouDvvvJOX\nX36Z9PR0X3flkmT1jhBCtEFrM/fp06fz0UcfkZKS0kU96hhJ+hbQuW6qc2wg8fmb6Ohzyyqt3H9b\nzZs3z7BO/9prr+XGG280LMu85ppr3P/fZrP55ZJNSfpCCL+VlNS3TevorXbw4MEWH1uwYIHX9mXL\nllnVnU6Rmr4FdK6b6hwbSHxCf5L0hRCiG5Gkb4FAq5u2h86xgcQn9CdJXwghuhFJ+hbQuW6qc2wg\n8Qn9SdIXQohuRJK+BXSum+ocG0h8Qn+S9IUQohuRpG8BneumOscGEp/wbvTo0Xz66ace7bt27fL7\n0y5cTH6RK4TwW3mn8iiuse56idHh0STFtv6T35ZOqTBt2jT27t3b6vNXrFjB0aNHeeONNzrUTzNJ\n0reAznVTnWMDic/fFNcUk1Vq3beTGcwgCT84z0MXkvKOEN9RSvHVVxXs2nXWcPvyywq/PTe66Dp7\n9uxh4sSJREdH87Of/YzGxkaysrIYOXKke5vf/e53jBgxgsGDB5OSkkJmZibbt2/nxRdf5C9/+QuD\nBg1i8uTJPoxCZvqWyMrKCrgZVVvpHBvAli05BAf/2NA2bNhZJkxQfnnGxPbSffysopRi06ZNbNmy\nhdDQUK699lrWrVvH6NGj3dvk5eXx6quvkp2dTXR0NCdOnMDpdDJs2DAef/xxjh49yuuvv+7DKM6R\nmb4QQrTCZrPxwAMPEB0dTUREBD/60Y/4+uuvDdvY7Xaampo4cOAADoeDoUOHMmzYMODcHw1/+bYo\nSd8COs+kdI4NYMyYqb7ugqV0Hz8rRV9w8v1evXpRU1NjeHzEiBG88MILrFixgoSEBO666y6Kioq6\nuputkqQvhBAmue2228jIyODbb7/FZrPx9NNPA/hVaVCSvgV0Xgutc2wABw9m+7oLltJ9/LqKt1LN\noUOHyMzMpLGxkdDQUMLCwtxX2oqKiiI/P98vSjxyIFcI4beiw6OZgXUlqejwdlwv8QIXrts//7+N\njY38+te/5ttvvyUkJIQpU6bwhz/8AYCf/OQnbNiwgbi4OIYNG0Z2tu8mFzZ1iT89BQUF3HXXXZSW\nlmKz2bjvvvt4+OGHKS8v57bbbiM/P5/ExETef/99+vfvD8DKlSt54403sNvtvPzyy8ydO9djvxkZ\nGUydqnftVAQepRQbN9Zy+HB/Q/uwYWdJT+9JUJB8MbbSiRMnGDp0qK+74Rda+rfIzs4mLS2tU/u+\n5Ls4JCSEl156if379/P555/zxz/+kQMHDrBq1SrmzJlDXl4eaWlprFq1CoDc3Fw2btxIbm4u27Zt\n44EHHsDlcnWqg0IIIcxzyaQfHR3N+PHjAQgPD+eyyy6jsLCQLVu2sHDhQgAWLlzIhx9+CMDmzZtJ\nT08nJCSExMRERo4cSU5OjsUh+B+d66Y6xwZS0xf6a/P31ePHj7N7924mTZpESUkJUVFRwLkDFCUl\nJQCcOnWK+Ph493Pi4+MpLCw0uctCCCE6qk0Hcmtqapg3bx6rV6+mT58+hsdaOhHRhY97s3jxYhIS\nEgDo168fKSkp7jXE52cjgXr/fJu/9MfM+zNmzPCr/ph5f/r06YwZM5WMjB0AJCRcA8DBg7vIygpl\n5syZftVf3cYvMTERcU5lZSVDhw4lKyuLdevWAZCQkMCsWbM6ve9LHsgFcDgc3HDDDVx//fU88sgj\nAIwZM4bMzEyio6MpKipi1qxZHDx40F3bf/LJJwG47rrreOaZZ5g0aZJhn3IgV/gjOZDrW3Ig93s+\nO5CrlGLRokUkJye7Ez7ATTfdxFtvvQXAW2+9xS233OJuf++992hqauLYsWMcOnSIiRMndqqDgUjn\nuqnOsYHU9IX+Llneyc7O5p133mHcuHGkpqYC55ZkPvnkk8yfP5/XX3/dvWQTIDk5mfnz55OcnExw\ncDCvvPKKX/0STQghurtWyztWkPKO8EdS3vEtKe98z8ryjvwiV2jN6XSye3c1LpfxG2ffvjbGjOnr\no14J4TuS9C2g8znLAy02p9PJ55/3pLKyt6F9/Phyxozx3P7gwWyP8+nrJNDGryovD4qtu1wi0dH0\nTWr7lbPee+891qxZQ15eHuHh4aSkpPD444/zz3/+k9/+9rf07Nnzu91Gk5aWxhNPPOE+O2dWVhbX\nXXcdvXt//16cOXMmH3zwgbkxtUKSvhDCfxUXE2nhwefyGTOgjUl/9erV/Pd//zdr1qxhzpw59OjR\ng+3bt/O3v/2NXr16uY9zOp1O8vLy+M1vfsPVV1/NZ5995k78sbGxHD582LJ42kKKlBYIpJlUe+kc\nG8j59IV3Z8+eZcWKFfz+97/npptuomfPntjtdq6//nqee+45w0VS7HY7l112Ge+88w6DBg1i9erV\nPu69kSR9IYRoxRdffEFDQwM333xzm58TFBTEDTfc4NMzanojSd8COq+F1jk2kHX6wrszZ84wcODA\ndq/gio6OpqKiwn2/qKiImJgY923Tpk1md7VVUtMXQohWDBgwgNOnT+NyudqV+E+dOkVkZKT7fkxM\njNT0daRz3VTn2EBq+sK7SZMmERoayubNm70+7u1HqC6Xi48++sjvfpMkM30hhGhFv379+PWvf82j\njz5KcHAwaWlphISE8M9//pOsrCx69erl3ra5uZnDhw+zYsUKSktLefjhh33Yc0+S9C0QaGuh20Pn\n2EDW6fud6Ohzyyot3H9b/fKXvyQqKopVq1Zx991306dPHyZMmMDjjz/OJ598wl/+8he2bt2KUoqY\nmBjS0tIMyzXBPy6QLklfaK25uZnq8GxqLvqwnXH1BPzra7fw1Dcpqc3r6LvC7bffzu233+7RPmnS\nJJ566qlLPnfGjBkcOnTIqq61mSR9CwTUTKqdAi02pRRH6nI5cbbW0D44erTX7ceMmcrFx9lOnw5l\ny5Yaj21Hj1Zcdlk/0/raFQJt/IT5JOkL0Yrq6jD27QvzaI+PP+OD3gjRObJ6xwI6r4XWOTaQdfpC\nf5L0hRCiG5GkbwGd66Y6xwayTt+XfHBpD79l5b+FJH0hhF8ICwujpKSkWyd/pRQlJSWEhXkeQzKL\nHMi1QMCthW4HnWMDWafvS1FRUVRVVXHixIkOr2evrKykf//+rW/op5RSRERE0LevdRf4kaQvhPAb\nffv27VTCO378OOPGjTOxR/qR8o4F/HUmZQadYwOp6Qc63eMzgyR9IYToRiTpW0DntdA6xwayTj/Q\n6R6fGSTpCyFENyIHci2gc13Rn2MrK6ujpqbZ0OZwNLZrH97OvaMTfx4/M+genxkk6Qtt5OY2k51t\nXK4XEtJEY4i8zYU4T8o7FtC5rujvsblcQYabUkFA29d8S00/sOkenxlkCiS6pbr6IHbsqLqoVdGz\n4igj+3xqaHX2DOMQk1HK+MejoABqa437sNlcTJnSm5CQECu6LUSnSdK3gM51RV1iqzobys7jkRe1\nKiYygPCcnYbW2lGJEDuJi78x7N8/wGO/4eF1TJrkMrezJtJl/Fqie3xmkKQvNKcIDgoiJMhYyQzy\n/VXrhPAJqelbQOe6YqDFFhLSzPUlhfxHfr7hNqG20Ov2+4tysdubL7r578y9vQJt/NpL9/jMIDN9\noTlFj6JinIUnDK32QUnQw3Pbph4nKQkqNW4b6sRmc313UFiIwCZJ3wI61xV1jg1gdGw8tWUFhrae\nzuYWtg48uo+f7vGZQaYuQgjRjUjSt4DOdUWdYwPIPXmi9Y0CmO7jp3t8ZpCkL4QQ3UirSf+ee+4h\nKiqKyy+/3N22fPly4uPjSU1NJTU1lb///e/ux1auXMmoUaMYM2YM27dvt6bXfk7nuqIusdW7aqiJ\n2HbRbTvDYwe3eR8jgv7N2Jpthtvomk9xOBwW9rxzdBm/lugenxlaPZB7991389BDD3HXXXe522w2\nG0uWLGHJkiWGbXNzc9m4cSO5ubkUFhYye/Zs8vLyCAqSLxTCv5x11PDV2RxDmw0Y5ainVxv30fts\nMQN3/9vQZo8JQ6mrzemkEBZoNRtPnz6diIgIj3ZvFy/evHkz6enphISEkJiYyMiRI8nJyfHYTnc6\n1xV1jg0g79QpX3fBUrqPn+7xmaHDU/A1a9aQkpLCokWLqKysBODUqVPEx8e7t4mPj6ew0PuPYIQQ\nQnS9DiX9X/ziFxw7dow9e/YQExPDY4891uK2Hb2qfSDTua6oc2wASbGxHm0KFyHhxYSEFxluQfYm\nH/Swc3QfP93jM0OHfpw1ePD3B7vuvfdebrzxRgDi4uIoKPj+hy0nT54kLi7O6z4WL15MQkICAP36\n9SMlJcU9YOe/osl9ud+e+zAegPz8HQAkJFwDQG5JMY2VlYzpf+5c+wcrK6k6eRL69QOg8vhxACIS\nE92PA+7tc/LzyG54lv7fPV5+7Ni5x6OuAmBP5bnnj+9/7vHs7Gx69erl838PuR/497Oysli3bh0A\nCQkJzJo1i86yKW/F+YscP36cG2+8kW+++QaAoqIiYmJiAHjppZf417/+xfr168nNzeWOO+4gJyfH\nfSD38OHDHrP9jIwMpk6d2unO+6usrCxtZxz+HNuOHVXs3Gk8c2bv3jUM++Yh6i86DUP5+PFs/i7p\nn2cDxu/ezfgq4+mS60eN4oO4OJwXfVQeaIxm8P8VG9rsMWEk/2Exffr06WQ01vDn8TOD7vFlZ2eT\nlpbWqX20OtNPT09nx44dnD59miFDhvDMM8+QmZnJnj17sNlsDBs2jFdffRWA5ORk5s+fT3JyMsHB\nwbzyyivdsrwjhBD+qtWkv2HDBo+2e+65p8Xtly5dytKlSzvXqwCn80xD59jgu5p+1cUXV9GH7uOn\ne3xmkBOuiYDThopkq8JLS7nZy35Cy8o6vW8h/JkkfQvoXFf0h9gqKurJyHDgchkXn1VWepwruUU9\nTp0i0sua/IMXHPC9UGhwME6X8bz6gVi59Ifxs5Lu8ZlBkr4IOE6n4ujRvjgcXXMd2rCTJ5nX2OjR\n3r+hAujbJX0QwiyS9C2g80xD59gAr7N8W309wSc8z75pD+1BoCV93cdP9/jMIElfiA6yBTkICq0w\nNob0xnVRGUgIfyJnQrOAzuf/0Dk2+P6HWW1RUJ/P8aavDbcy51Gam/33Slu6j5/u8ZlBZvpCdJC3\nNUQmLCwSwlIy07eAznVFnWMD7zV9neg+frrHZwZJ+kII0Y1IeccCOq8V9ofYlFIEBTk9Ls4z3PZv\n+pflG9qCzjppqK5u875bWqffVi4Fu3Y5aG42/qp36NBmrroqsoVndR1/GD8r6R6fGSTpi4BTVVdB\nYZ9PabjoqoSjq4Pou8+4tNJud9Jgr++6zqkgjh/vS3W1cSlnRER51/VBiEuQpG8BnWca/hCbQpFf\ne4raRuPSSBfR2IMbDG1Bdpf3I64tkJp+YNM9PjNI0hfaONlwnCC+NDY6weF0+qZDQvghOZBrAZ3X\nCvtzbM1K0eR0etzas4qyPev0A5E/j58ZdI/PDDLTF8JETuXC0fsALrvd0F7VHAL8wDedEuICkvQt\noHNdUefYoPM1/ab6Olyn/kaPi0pKKnIM/pD0dR8/3eMzgyR9IUykqqsZkp3t0R5+wXWlhfAlqelb\nQOe6os6xgdT0A53u8ZlBkr4QQnQjkvQtoHNdUefYQNbpBzrd4zODJH0hhOhGJOlbQOe6os6xgdT0\nA53u8ZlBkr4QQnQjkvQtoHNdUefYQGr6gU73+MwgSV8IIboRSfoW0LmuqHNsIDX9QKd7fGaQpC+E\nEN2IJH0L6FxX1Dk2kJp+oNM9PjNI0hdCiG5Ekr4FdK4r6hwbSE0/0OkenxnkLJsi4LiaGpnggoaL\n2sObm33SHyECiSR9C+hcV/SH2FRDA8mff0FTTZ3p+5aafmDTPT4zSHlHCCG6EUn6FtC5rqhzbCA1\n/UCne3xmkKQvhBDdiNT0LaBzXVHn2MDKmr6NpqYmj9bg4GCCgrpu7qX7+OkenxlaTfr33HMPf/vb\n3xg8eDDffPMNAOXl5dx2223k5+eTmJjI+++/T//vPiwrV67kjTfewG638/LLLzN37lxrIxAiABQ3\nFPLql68a2uzYuXXMrcRExvioV6I7anWKcffdd7Nt2zZD26pVq5gzZw55eXmkpaWxatUqAHJzc9m4\ncSO5ubls27aNBx54AJfLZU3P/ZjOdUWdYwPravpNrmbOus4ablWuKkte61J0Hz/d4zNDq0l/+vTp\nREREGNq2bNnCwoULAVi4cCEffvghAJs3byY9PZ2QkBASExMZOXIkOTk5FnRbCCFER3Sopl9SUkJU\nVBQAUVFRlJSUAHDq1CkmT57s3i4+Pp7CwkITuhlYdK4rdnVs3xZ+S01TjaGturocUJa8nqzTD2y6\nx2eGTh/Itdls2Gy2Sz4uREcV7fmC06cPGdpcTQrV5PBRj4QIbB1K+lFRURQXFxMdHU1RURGDBw8G\nIC4ujoKCAvd2J0+eJC4uzus+Fi9eTEJCAgD9+vUjJSXF/Vf6fF0uUO+vWbNGq3guvH9hzbQrXq/3\nqWJyt34MwPjoc7PwL0+WU15uY3S/SOD7Ovz5WXpn7l9Y0zdjf+fvV317ksrBwwEo+fYEAEMuG0Z1\nfBOH9uk7fl19X7f4srKyWLduHQAJCQnMmjWLzrIppVr9nnz8+HFuvPFG9+qdxx9/nAEDBvDEE0+w\natUqKisrWbVqFbm5udxxxx3k5ORQWFjI7NmzOXz4sMdsPyMjg6lTp3a68/4qKytL26+ZXR3bv/78\nAo5/fWJoa2pyUlwchFLmL3U8WFlpSYmn6Kqr+Efv3oa2niFBPHvTTxmbNML012uJzu9N0D++7Oxs\n0tLSOrWPVmf66enp7Nixg9OnTzNkyBCeffZZnnzySebPn8/rr7/uXrIJkJyczPz580lOTiY4OJhX\nXnmlW5Z3dH7T6RwbWFfTH5Sfz/x+/QxtIaEhqJpqS16vJbqPn+7xmaHVpL9hwwav7Z988onX9qVL\nl7J06dLO9UoIzQSXlhJcWmpoC+kZhs3p9FGPRHclp2GwgM5rhXWODeTcO4FO9/jMIElfCCG6EUn6\nFtC5rqhzbCDr9AOd7vGZQU64JoQPlZY6+b//O2to691bMW6c3n98hO/ITN8COtcVdY4NuramrxQc\nOtKHjIwBhtuRI9Z9LHUfP93jM4MkfSGE6EYk6VtA57qizrGB1PQDne7xmUFq+kL4UEiwi9DQBkNb\nUJCcV0hYR2b6FtC5rmhVbI7GRmrLyjxuQS5rzqbZkq6s6TuVIteRwb/tfzDcjjj+adlr6vzeBP3j\nM4PM9IVfqDt+nD7fXZfhQn2LcinzQX+6SnVTI+UO48y+ySW/0hXWkaRvAZ3rilbG1sPhWdbo6tMU\nSE0/sOnI+pSfAAASCklEQVQenxkk6QvhKy4Xoxsbib/okqJDaut81CHRHUhN3wI61xV1jg26eJ2+\nw0HMzp2MzM423AYWnbLsNXUfP93jM4MkfSGE6EakvGMBneuKlsWmFK6Lyhy+IDX9wKZ7fGaQpC+6\nlFIKh5cDtkXlRRQUfe3RXues8/LHoGuXcQqhE0n6FtD5km2djc3lcrHp602UNRkXYg4+7WSIs8pj\n+zNnHNTX2y9qDUIpa67IZtXlEv2Fzu9N0D8+M0jSF12ukUbOuoxnluyrvL8VlbLhdF6c9IUQHSVJ\n3wI6zzSsiq3J4aSurtmjvavL/DrP8kHv9yboH58ZJOkLv9DQ4KKsLMTX3RBCe7Jk0wI6rxXWOTbw\nj2vk9jhbxdlduzxutac6v35f9/HTPT4zyExfCD/T88QJBmRmerSfiYyE2Niu75DQiiR9C+hcV9Q5\nNvCPmn51czUHiw96PlBZSj+SO7Vv3cdP9/jMIElfCD9T11xPaZPnbxn6O+U8+6LzpKZvAZ3rijrH\nBv5R07eS7uOne3xmkJm+6FJKKepqHVTXNRnaw2UtvhBdQpK+BXSuK3Y2NqfTSfNhJ5T3MrS7bP7x\npdMfavpW0vm9CfrHZwZJ+qJLuVwuRhw8xMBv9hkfUHI+HSG6gn9MrzSjc13RjNiUUueS/IU3PyE1\n/cCme3xmkKQvhBDdiCR9C+hcV9Q5NpCafqDTPT4zSNIXQohuRJK+BXSuK7YntubmZhobGw03bxdQ\n8SdS0w9susdnBlm9IyxT89VX9Nq1y9AW4nLRs6AAz8uliAs1NTk92pxOzzYh2kuSvgV0riu2JzYb\n0KuuztDmdDqh2fO8+f7CH2r6dXXB1Nd7rmgKqer8v5vO703QPz4zSNIXwu/YLLscpBCdquknJiYy\nbtw4UlNTmThxIgDl5eXMmTOHpKQk5s6dS6XmNVJvdK4r6hwbSE0/0Okenxk6lfRtNhuZmZns3r2b\nnJwcAFatWsWcOXPIy8sjLS2NVatWmdJRIYQQndfp8o666NeUW7ZsYceOHQAsXLiQmTNndrvEr3Nd\nUefYwD9q+i0payjio30fGdrCgsK4ZvQ12O1tO2Gd7uOne3xm6FTSt9lszJ49G7vdzv3338/ixYsp\nKSkhKioKgKioKEpKSkzpqBDdXWH9KSoqjZ+nmB4xzFCS6ETbdSrpZ2dnExMTQ1lZGXPmzGHMmDGG\nx202Gzab9wNSixcvJiEhAYB+/fqRkpLi/it9vi4XqPfXrFmjVTwX3r+wZtra9ilhYQDsyM8H4Jrv\nxvvrM2eoqG9wz6rP19H94f6FNX1/6M+F9wd/16/8vef+PRNSzv177ty5E7vdbvr4BeJ93eLLyspi\n3bp1ACQkJDBr1iw6y6Yurs900DPPPEN4eDh//vOfyczMJDo6mqKiImbNmsXBg8ZLv2VkZDB16lQz\nXtYvZWVlafs1sz2xnc3JYcD27YY2p9NJxtd7KamptaJ7nXawstJvSzw1C66hNt44TxsYMpDbJv2M\nkJCQNu1D5/cm6B9fdnY2aWlpndpHh2f6dXV1OJ1O+vTpQ21tLdu3b2fZsmXcdNNNvPXWWzzxxBO8\n9dZb3HLLLZ3qYCDS+U2nc2zg3zX9xMzP6BXew9AWHDcS55XONid93cdP9/jM0OGkX1JSwq233gqc\n+7n9nXfeydy5c7nyyiuZP38+r7/+OomJibz//vumdVaIbq2hDpvdeMUxHE3etxWiBR1O+sOGDWPP\nnj0e7ZGRkXzyySed6lSg0/krps6xgX+Xd8yg+/jpHp8Z5Be5wjJnqk5Te+aEoU0pRZNLZqdC+Iok\nfQvoPNNoT2zVTTUU1x43tCmlqHO68Ne3ns6zfND7vQn6x2cGObWyEEJ0I5L0LaDz+T90jg3k3DuB\nTvf4zOCf37GFEG1W31CP02U8135wcDChPUJ91CPhzyTpW0DnuqLOsUHg1fTrnHWs3bcWJ8akPy16\nGlNGTvHYXvfx0z0+M0jSFyKA2ZodRFY2o5TL0B7Uq66FZ4juTmr6FtC5rqhzbBB4Nf2Q4kJGbfmE\npK3/NNxCT3o/0aHu46d7fGaQmb7otLq6Or795ENsGE/j1Fxa5KMedR9yfS3RXpL0LaBzXdFbbA6H\ng6bMrThrzvigR+by55p+fT00NRmvkxsUpOjbN7jFs9leTOf3Jugfnxkk6QsRIGprPU+q1qNHM337\n+qAzImBJTd8COtcV2xObUsrrzZ8FWk2/vXR+b4L+8ZlBZvrCMjU1TmpqPMsODofMNYTwFUn6FtC5\nrtie2JSCpqbAeov5c03fDDq/N0H/+MwgUy4hhOhGJOlbQOe6os6xgdT0A53u8ZkhsL57C7/kdDqp\nrXXSVGVcTtgkp80Xwu9I0reAznXFyMRIMr/NNLQ5G51UV9uor2jbdVr9mS41/bONlR7jhILJkyb7\npD9dRefPnlkk6Yt2Kaop4ovyLwxtwc3BjFTOFp4hfKGksYS8snJDWyihXDX0Kh/1SPgLqelbQOe6\n4jdffuPrLlhK95r+rl27fN0FS+n82TOLJH0hhOhGJOlbQOe64uVXXu7rLlhKl5q+HTvhjh6GW29H\nCFdP8TzHvk50/uyZRWr6QgQwpaCx0fN4ysCdOUSH9TC02cP6UBN9EsL7XNQeRq9Bgyztp/AfkvQt\nkJWVpe2M48Cn/2JInN3YqGzgdHl/QoA5WFkZULN9h8NOiZdT5/fpU0toqPFCKiG2Gva/8CJzRo0y\ntFdOmADXXWdlN7uMzp89s0jSF+3Ss/g0o/buM7S5XC4KqwHsXp8jrOT9lMrV1T2orja2hQXb6BPZ\njN1l/AMt5+TvXiTpW0CHmUZ9RQVN+/d7tE8ZPJAq7xdl0kIgzfI7YvqQIb7ugqV0+OxZTZK+8Kq5\ntpb+O3didxrrxZVlR6jyUZ+EEJ0nSd8COtcVPz10iojQZo92l9LjrRRoNf322nmigB+OTjK0lZ4t\nJWPvXz22nTRkErGRsV3VNVPo/Nkzix6fVNFlnE6oqwv80y10Rw6Xi5M1J/mmqNHQXhQN+6uNlf0g\ngkh1pHZl90QXkaRvgUCbadQ31OO66OBeY0MDTY4mj/LOhMGDOVha2pXd61I6z/JdSjFiQBCVzcZf\nHde66ujpjDS0BWHD5Qy8U2sE2mfPFyTpC/5+4O8cqT1iaIussfOD4n9ja3YY2ssbHMgqHb303/0N\nE/Ya1/Tb7ME0LZwGsSN81CthFflFrgUC7fwfyqZovOi/Zhw4vfz39ekKX3fXUrqfe2dvyVmPtrrK\nOkqO1hhupcdrqKkJvHNjB9pnzxdkpi+8amo6d458HMaDtgH4jV9coKHBRU2NcUybmxVKGWv6yqkI\nKT/D2T17jDsIC6Pv6NHYbLK6P1BJ0reAv9YVC8sLyS/P92gPO15CUo2xjKPqXJw5bYNm40HbYT0H\nWtpHX9O5pq9UEHH2QZw504aNXS6iPs1kQK7xtxoVo0bB6NHWdNAE/vrZ8yeS9LuR8qOHKd3zsUd7\nvxOniCg+ZWhrbGym2BmM/F5TCL1YkvS3bdvGI488gtPp5N577+WJJ56w4mX8VleuFf46/2vyqy6a\nvSuYmjCViL4RhuagmloG53zZqdfTfR27xHeOUoqy+mJqS4wXYmmMDGOMUh7lHaWU1/10dRlI1um3\nzvSk73Q6efDBB/nkk0+Ii4vjqquu4qabbuKyyy4z+6X81t69e7vsjVfVVMXes3sNbaGEMv7jWkIu\nOgda79ICKjv54TxRU6N1UpT4zlFAWVMZYUHGFBHSXENzczNBQcY1IJ8d+oxT9cZvi2G2MH489seE\nhHTd7zq68rMXqExP+jk5OYwcOZLExEQAbr/9djZv3tytkv7Zs54rJCzjOpfkLxRKKL2Ki4ioqjW0\nnyk4SVGR59kw+/dX9OrVtrdCXbPnr3F1IvFd2llHNW999ZZH1a+6uZo6ZTyrZ4Q9wus3AIfD4fG7\nEICQkBCPPybt7l9XfvYClOlJv7CwkCEXnNQpPj6eL7744hLP0J9SivryctRFb3SH00lTaJDHLDu4\n0UmPoLathe+9/yhXZxtLNjaC6NlrGIT2MvYDcDi8DbnDS5sQnpw0U9Lseca98KYQ+ruMa/17222U\nV5VjDza+l/ed2sfuit2GtmCCuWPsHQzsZ1woUNdQR22DcfIC0LdnX0JDQz3aRetMT/rdfSnXsWPH\n+Oqrr/jqq68M7aFHjtDz9GlDW/WACI5Fh6EwzoaGnHESWVzWptfr0VhN3cChF7XaKAobSNlFfzjq\nRwyn/wDPr/YhvZpRduO42Z2K/nGeb4+qsjL6X6Hvz/Mlvu/ZvbwvegxOYIwr2mPbiNMVhJ08YWhz\nhdv5wv4FLoyTHRcuhmJ8z9qxc+zQMU4EGfdR76intNHzF+DRYdGEBhuTvs1m49ixY60H1s3ZVEtH\nYDro888/Z/ny5Wzbtg2AlStXEhQUZDiYu3nzZsLDw818WSGE0F5NTQ0333xzp/ZhetJvbm5m9OjR\nZGRkEBsby8SJE9mwYUO3qukLIYS/Mr28ExwczB/+8Ad++MMf4nQ6WbRokSR8IYTwE6bP9IUQQvgv\nU0+4tm3bNsaMGcOoUaP47W9/63WbzMxMUlNTGTt2LDNnznS3JyYmMm7cOFJTU5k4caKZ3TJNa/H9\n7ne/IzU1ldTUVC6//HKCg4Op/O4EXm35t/G1zsSnw/idPn2a6667jvHjxzN27FjefPPNNj/XH3Qm\nPn8fv9Ziq6io4NZbbyUlJYVJkyax/4JLfeowdpeKr91jp0zS3NysRowYoY4dO6aamppUSkqKys3N\nNWxTUVGhkpOTVUFBgVJKqbKyMvdjiYmJ6syZM2Z1x3Rtie9CW7duVWlpaR16ri90Jj6l9Bi/ZcuW\nqSeffFIpde69GRkZqRwOhzbj11J8Svn3+LUltv/6r/9Szz77rFJKqYMHD2r32WspPqXaP3amzfQv\n/FFWSEiI+0dZF1q/fj3z5s0jPj4egIEDjWtylR9XmtoS34XWr19Penp6h57rC52J77xAH7+YmBiq\nqs5dAbiqqooBAwYQHByszfi1FN95/jp+bYntwIEDzJo1C4DRo0dz/PhxSktLtRk7b/GVlX2/rLs9\nY2da0vf2o6zCwkLDNocOHaK8vJxZs2Zx5ZVXsm7dOvdjNpuN2bNnc+WVV/LnP//ZrG6Zpi3xnVdX\nV8fHH3/MvHnz2v1cX+lMfKDH+C1evJj9+/cTGxtLSkoKq1evbvNzfa0z8YF/j19bYktJSWHTpk3A\nuSSan5/PyZMntRm7luKD9o+daat32vKjLIfDwVdffUVGRgZ1dXVMmTKFyZMnM2rUKHbt2kVsbCxl\nZWXMmTOHMWPGMH36dLO612nt+dHZ1q1bmTZtGv2/O8dJIPxgrTPxAWRnZxMTExPQ4/f8888zfvx4\nMjMzOXLkCHPmzGHv3r2tPs8fdCa+Pn36+PX4tSW2J598kl/+8pfu402pqanY7XZtPnstxQe0O3ea\nNtOPi4ujoKDAfb+goMBdxjlvyJAhzJ07l549ezJgwABmzJjh/lDFxsYCMGjQIG699VZycnLM6pop\n2hLfee+9956h9NGe5/pKZ+KDc6UDCOzx++yzz/iP//gPAEaMGMGwYcP49ttviY+P12L8WooP/Hv8\n2hJbnz59eOONN9i9ezdvv/02ZWVljBgxQpvPnrf4hg8fDnQgd3b+MMQ5DodDDR8+XB07dkw1NjZ6\nPRhx4MABlZaWppqbm1Vtba0aO3as2r9/v6qtrVVVVVVKKaVqamrU1VdfrT7++GOzumaKtsSnlFKV\nlZUqMjJS1dXVtfu5vtSZ+HQZv0cffVQtX75cKaVUcXGxiouLU2fOnNFm/FqKz9/Hry2xVVZWqsbG\nRqWUUq+99ppauHBhm5/ra52JryNjZ1rSV0qpjz76SCUlJakRI0ao559/Ximl1J/+9Cf1pz/9yb3N\niy++qJKTk9XYsWPV6tWrlVJKHTlyRKWkpKiUlBT1gx/8wP1cf9OW+N58802Vnp7epuf6m47Gd/To\nUS3Gr6ysTN1www1q3LhxauzYserdd9+95HP9TUfjC4TPX2uxffbZZyopKUmNHj1azZs3T1VWVl7y\nuf6mo/F15LMnP84SQohuxNQfZwkhhPBvkvSFEKIbkaQvhBDdiCR9IYToRiTpCyFENyJJXwghuhFJ\n+kII0Y1I0hdCiG7k/wGBes4eiH02/QAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 79 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**EM** is better both for bias and accuracy (CDF is worst)\n", "
" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open(\"./styles/custom.css\", \"r\").read()\n", " return HTML(styles)\n", "css_styling()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n" ], "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "" ] } ], "prompt_number": 82 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }