diff --git a/docs/source/examples.rst b/docs/source/examples.rst index 637dcf6c15..549303aedb 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -42,6 +42,7 @@ Mixture Models .. toctree:: notebooks/gaussian_mixture_model.ipynb + notebooks/marginalized_gaussian_mixture_model.ipynb notebooks/gaussian-mixture-model-advi.ipynb notebooks/dp_mix.ipynb diff --git a/docs/source/notebooks/marginalized_gaussian_mixture_model.ipynb b/docs/source/notebooks/marginalized_gaussian_mixture_model.ipynb new file mode 100644 index 0000000000..be05d758d0 --- /dev/null +++ b/docs/source/notebooks/marginalized_gaussian_mixture_model.ipynb @@ -0,0 +1,319 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Marginalized Gaussian Mixture Model\n", + "\n", + "Author: [Austin Rochford](http://austinrochford.com)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "import pymc3 as pm\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "SEED = 383561\n", + "\n", + "np.random.seed(SEED) # from random.org, for reproducibility" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gaussian mixtures are a flexible class of models for data that exhibits subpopulation heterogeneity. A toy example of such a data set is shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "N = 1000\n", + "\n", + "W = np.array([0.35, 0.4, 0.25])\n", + "\n", + "MU = np.array([0., 2., 5.])\n", + "SIGMA = np.array([0.5, 0.5, 1.])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "component = np.random.choice(MU.size, size=N, p=W)\n", + "x = np.random.normal(MU[component], SIGMA[component], size=N)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nf/lL9fX1WT5PSgZ81qxZCofD2rZtm3w+n5577rmxnlLKsHNtepzldDr18MMPa/v27XrppZe0efNm\n1uoCXnzxxaRLJOPcnnjiCf3gBz/Qa6+9pm3btrFm5xCNRrVx40Zt3bpVLS0t+vLLL7V9+/axnlbK\nqKqq0vr165Pua2xs1Pe//3399a9/1fTp0211LyUDfvPNNysj4+zUpk2bpp6enjGeUer4+rXpXS5X\n4tr0GMjtdmvy5MmSpKysLPn9/gGXAcZZPT092r17t2677baxnkpK+/TTT7V//34tWLBAkpSZmalv\nfetbYzyr1BSLxfTZZ5/pzJkz+vzzz21dxCtd3HjjjcrJyUm6LxKJqLKyUpJUWVmpnTt3Wj5PSgb8\n67Zs2aLi4uKxnkbKsHNtegx0+PBhffDBB1xI6DxWrFihhx56iOs0WDh8+LCuuOIKPfzww6qsrFRt\nba0+//zzsZ5WysnLy9OiRYv0wx/+UMXFxcrOztbNN9881tNKaceOHdPEiRMlnT34+M9//mO5zZgF\nfNGiRaqoqBjwX2vrf/8Vm2effVYulyvpfYJ0x9f2B+/kyZOqqanRI488oqysrLGeTsrZtWuXJk6c\nqMmTJ/P7ZeHMmTN677339JOf/ETNzc267LLL+BzKOZw4cUKRSERtbW168803derUKbW0tIz1tC45\nlldiGynPP//8BR9vbm7W7t27+eDRN9i5Nj3+68yZM6qpqdH8+fN1yy23jPV0UtLbb7+t1tZW7d69\nW1988YVOnjyphx56SKtWrRrrqaUcr9crr9erQCAg6ew/n7xu3boxnlXq2bt3r4qKijRhwgRJ0o9+\n9CP985//5GDsAr797W/r3//+tyZOnKijR4/qyiuvtNwmJU+ht7e3a926dXr22Wc1bty4sZ5OSrFz\nbXr81yOPPKJJkyZp4cKFYz2VlPWb3/xGu3btUiQSUX19vaZPn068z2PixInKz8/Xv/71L0nS3/72\nNz7Edg4FBQV655139MUXXygej7NO5/DNs12zZ8/W1q1bJZ09gLXz//WUvJRqWVmZTp8+nXj1NnXq\nVD322GNjO6kU0t7erieeeCJxbfq77rprrKeUkv7xj3/opz/9qa655ho5HA45HA7df//9fKbiAv7+\n979rw4YN+uMf/zjWU0lZH3zwgX7729/qzJkzKioq0pNPPqns7Iv/FxQvNWvWrFE4HFZmZqauu+46\n/f73v5fL5RrraaWEBx54QPv27dMnn3yiiRMn6r777tMtt9yiJUuW6MiRIyooKNAf/vCHAR90+6aU\nDDgAALiwlDyFDgAALoyAAwBgIAIOAICBCDgAAAYi4AAAGIiAAwBgIAIOAICBCDgAAAb6P48RssOW\nUg5fAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "\n", + "ax.hist(x, bins=30, normed=True, lw=0);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A natural parameterization of the Gaussian mixture model is as the [latent variable model](https://en.wikipedia.org/wiki/Latent_variable_model)\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "\\mu_1, \\ldots, \\mu_K\n", + " & \\sim N(0, \\sigma^2) \\\\\n", + "\\tau_1, \\ldots, \\tau_K\n", + " & \\sim \\textrm{Gamma}(a, b) \\\\\n", + "\\boldsymbol{w}\n", + " & \\sim \\textrm{Dir}(\\boldsymbol{\\alpha}) \\\\\n", + "z\\ |\\ \\boldsymbol{w}\n", + " & \\sim \\textrm{Cat}(\\boldsymbol{w}) \\\\\n", + "x\\ |\\ z\n", + " & \\sim N(\\mu_z, \\tau^{-1}_z).\n", + "\\end{align*}\n", + "$$\n", + "\n", + "An implementation of this parameterization in PyMC3 is available [here](http://pymc-devs.github.io/pymc3/notebooks/gaussian_mixture_model.html). A drawback of this parameterization is that is posterior relies on sampling the discrete latent variable $z$. This reliance can cause slow mixing and ineffective exploration of the tails of the distribution.\n", + "\n", + "An alternative, equivalent parameterization that addresses these problems is to marginalize over $z$. The marginalized model is\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "\\mu_1, \\ldots, \\mu_K\n", + " & \\sim N(0, \\sigma^2) \\\\\n", + "\\tau_1, \\ldots, \\tau_K\n", + " & \\sim \\textrm{Gamma}(a, b) \\\\\n", + "\\boldsymbol{w}\n", + " & \\sim \\textrm{Dir}(\\boldsymbol{\\alpha}) \\\\\n", + "f(x\\ |\\ \\boldsymbol{w})\n", + " & = \\sum_{i = 1}^K w_i\\ N(x\\ |\\ \\mu_i, \\tau^{-1}_z),\n", + "\\end{align*}\n", + "$$\n", + "\n", + "where\n", + "\n", + "$$N(x\\ |\\ \\mu, \\sigma^2) = \\frac{1}{\\sqrt{2 \\pi} \\sigma} \\exp\\left(-\\frac{1}{2 \\sigma^2} (x - \\mu)^2\\right)$$\n", + "\n", + "is the probability density function of the normal distribution.\n", + "\n", + "Marginalizing $z$ out of the model generally leads to faster mixing and better exploration of the tails of the posterior distribution. Marginalization over discrete parameters is a common trick in the [Stan](http://mc-stan.org/) community, since Stan does not support sampling from discrete distributions. For further details on marginalization and several worked examples, see the [_Stan User's Guide and Reference Manual_](http://www.uvm.edu/~bbeckage/Teaching/DataAnalysis/Manuals/stan-reference-2.8.0.pdf).\n", + "\n", + "PyMC3 supports marginalized Gaussian mixture models through its `NormalMixture` class. (It also supports marginalized general mixture models through its `Mixture` class.) Below we specify and fit a marginalized Gaussian mixture model to this data in PyMC3." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "with pm.Model() as model:\n", + " w = pm.Dirichlet('w', np.ones_like(W))\n", + " \n", + " mu = pm.Normal('mu', 0., 10., shape=W.size)\n", + " tau = pm.Gamma('tau', 1., 1., shape=W.size)\n", + " \n", + " x_obs = pm.NormalMixture('x_obs', w, mu, tau=tau, observed=x)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 20000/20000 [00:23<00:00, 835.32it/s]\n" + ] + } + ], + "source": [ + "with model:\n", + " step = pm.Metropolis()\n", + " trace_ = pm.sample(20000, step, random_seed=SEED)\n", + " \n", + "trace = trace_[10000::10]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see in the following plot that the posterior distribution on the weights and the component means has captured the true value quite well." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n77Ksubm59PnLy0bTNKLRKD09PdUJ/DQZqn3JZDKy/uB9thfaF70AAAUBSURBVJtuuonPf/7zXHbZ\nZUQiEZYsWUI0GpX1Z4Curq5R1ZdieQ3Vfp+sHk25jtRNN93E6tWrB/33wgsvVDu0CZuuI2mfJKlU\nio0bN7JlyxZCoVC1wxk3VVX5xS9+wa5du3j33Xf58MMPqx3SuOzcuZP6+noWL148Y74///qv/8oz\nzzzDo48+ys9+9jPefPPNaoc0LrZts2fPHv7sz/6Mbdu24ff7P7HzgcrNlHo6WQa2qcPdEBmq3GbK\nzZOBhmrXhBCDyqD4+Qe+LoSYsWVTNLB9CQQCPPLII7L+AH19fezYsYNf/epXvPTSS2QyGXbt2jVo\nu09y/TmZ4cpkPPVIn9TIJsGTTz5Z7RBOmebm5opJfm1tbTQ2NlYxIqmcbdts3LiRNWvWsHLlymqH\nMynC4TAXXXQRL730EvPnz692OGP29ttv88ILL/Diiy+Sy+VIpVJs3ryZH/zgB9UObdwaGhoAqK2t\n5Y//+I957733uPDCC6sc1dg1NzfT3NzM0qVLAS9l5LHHHqtyVNUn2/l+Q7WpdXV1dHR0UF9fz4kT\nJ6itrQW8O7+tra2l97a2ts7YchuqXbvvvvtIJBK4rouqqhWfv1g2TU1NOI5DMpkkFotV+VOcWgPb\nlyuuuIJHH31U1h/g5Zdf5owzziAejwOwcuVKfvvb39LX1yfrzwBjrS/Nzc289tprFa9fcsklIx5j\nyo1IjdZ0vOu3dOlSDh06xNGjR8nn82zfvp3LL7+82mFNyHQ8D8PZsmUL8+fP58Ybb6x2KBPS1dVV\nWpkmm83yyiuvcM4551Q5qvG588472blzJzt27ODBBx/k4osvntadqEwmQyqVAiCdTvPrX/+aBQsW\nVDmq8amvr6elpYUDBw4A3vyOefPmVTmq6puJ7fx4DdWmrlixgmeeeQbwVscqls3ll19eWiHrnXfe\nIRqNllJyZpqh2rUHHniAiy++mOeeew6oLJsVK1awbds2wFu9+GQXdjPBUO3L/PnzZf0BZs2axbvv\nvksul0MIwauvvsqCBQtk/WHwNelY68ull17Kyy+/TCKRoLe3l5dffplLL710xGMqYhpdCT///PNs\n3bqV7u5uotEoixYtmnZ3QHft2sX3v/99hBCsX7+eW265pdohjdtdd93Fa6+9Rk9PD/X19fzlX/5l\naWLodPPWW2/x53/+5yxcuBBFUVAUhU2bNnHZZZdVO7Qx++CDD7j77rtxXRfXdfnSl77EbbfdVu2w\nJuz111/niSee4OGHH652KON2+PBhbr/9dhRFwXEcVq9ePa3bgH379vGd73wH27Y544wzuP/++4lE\nItUOq+pmUjs/XsO1qeeffz533HEHx48fZ9asWfzoRz8qTRD/27/9W1566SUCgQD3338/5513XpU/\nxalX3q4dPnyYO++8k76+PhYvXswPf/hDDMMgn8/zV3/1V+zdu5d4PM6DDz7InDlzqh36KTdU++I4\njqw/wEMPPcT27dvRdZ0lS5bwve99j9bW1k90/RnqmnTlypV885vfHFN9eeaZZ3j44YdRFIXbbrut\ntCjFcKZVR0qSJEmSJEmSJGkqmLapfZIkSZIkSZIkSdUiO1KSJEmSJEmSJEljJDtSkiRJkiRJkiRJ\nYyQ7UpIkSZIkSZIkSWMkO1KSJEmSJEmSJEljJDtSkiRJkiRJkiRJYyQ7UpIkSZIkSZIkSWMkO1KS\nJEmSJEmSJElj9P8AAikcWENo0vgAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pm.traceplot(trace, varnames=['w', 'mu']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also sample from the model's posterior predictive distribution, as follows." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 5000/5000 [00:41<00:00, 120.43it/s]\n" + ] + } + ], + "source": [ + "with model:\n", + " ppc_trace = pm.sample_ppc(trace, 5000, random_seed=SEED)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that the posterior predictive samples have a distribution quite close to that of the observed data." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\nUfnjxw3GYAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "\n", + "ax.hist(x, bins=30, normed=True,\n", + " histtype='step', lw=2,\n", + " label='Observed data');\n", + "ax.hist(ppc_trace['x_obs'], bins=30, normed=True,\n", + " histtype='step', lw=2,\n", + " label='Posterior predictive distribution');\n", + "\n", + "ax.legend(loc=1);" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + }, + "widgets": { + "state": {}, + "version": "1.1.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/pymc3/distributions/__init__.py b/pymc3/distributions/__init__.py index 138cba2cdc..b445379bc2 100644 --- a/pymc3/distributions/__init__.py +++ b/pymc3/distributions/__init__.py @@ -45,6 +45,9 @@ from .distribution import TensorType from .distribution import draw_values +from .mixture import Mixture +from .mixture import NormalMixture + from .multivariate import MvNormal from .multivariate import MvStudentT from .multivariate import Dirichlet @@ -112,5 +115,7 @@ 'AR1', 'GaussianRandomWalk', 'GARCH11', - 'SkewNormal' + 'SkewNormal', + 'Mixture', + 'NormalMixture' ] diff --git a/pymc3/distributions/mixture.py b/pymc3/distributions/mixture.py new file mode 100644 index 0000000000..cc0689da70 --- /dev/null +++ b/pymc3/distributions/mixture.py @@ -0,0 +1,169 @@ +import numpy as np +import theano.tensor as tt + +from ..math import logsumexp +from .dist_math import bound +from .distribution import Discrete, Distribution, draw_values, generate_samples +from .continuous import get_tau_sd, Normal + + +def all_discrete(comp_dists): + """ + Determine if all distributions in comp_dists are discrete + """ + if isinstance(comp_dists, Distribution): + return isinstance(comp_dists, Discrete) + else: + return all(isinstance(comp_dist, Discrete) for comp_dist in comp_dists) + + +class Mixture(Distribution): + R""" + Mixture log-likelihood + + Often used to model subpopulation heterogeneity + + .. math:: f(x \mid w, \theta) = \sum_{i = 1}^n w_i f_i(x \mid \theta_i) + + ======== ============================================ + Support :math:`\cap_{i = 1}^n \textrm{support}(f_i)` + Mean :math:`\sum_{i = 1}^n w_i \mu_i` + ======== ============================================ + + Parameters + ---------- + w : array of floats + w >= 0 and w <= 1 + the mixutre weights + comp_dists : multidimensional PyMC3 distribution or iterable of one-dimensional PyMC3 distributions + the component distributions :math:`f_1, \ldots, f_n` + """ + def __init__(self, w, comp_dists, *args, **kwargs): + shape = kwargs.pop('shape', ()) + + self.w = w + self.comp_dists = comp_dists + + defaults = kwargs.pop('defaults', []) + + if all_discrete(comp_dists): + dtype = kwargs.pop('dtype', 'int64') + else: + dtype = kwargs.pop('dtype', 'float64') + + try: + self.mean = (w * self._comp_means()).sum(axis=-1) + + if 'mean' not in defaults: + defaults.append('mean') + except AttributeError: + pass + + try: + comp_modes = self._comp_modes() + comp_mode_logps = self.logp(comp_modes) + self.mode = comp_modes[tt.argmax(w * comp_mode_logps, axis=-1)] + + if 'mode' not in defaults: + defaults.append('mode') + except AttributeError: + pass + + super(Mixture, self).__init__(shape, dtype, defaults=defaults, + *args, **kwargs) + + def _comp_logp(self, value): + comp_dists = self.comp_dists + + try: + value_ = value if value.ndim > 1 else tt.shape_padright(value) + + return comp_dists.logp(value_) + except AttributeError: + return tt.stack([comp_dist.logp(value) for comp_dist in comp_dists], + axis=1) + + def _comp_means(self): + try: + return self.comp_dists.mean + except AttributeError: + return tt.stack([comp_dist.mean for comp_dist in self.comp_dists], + axis=1) + + def _comp_modes(self): + try: + return self.comp_dists.mode + except AttributeError: + return tt.stack([comp_dist.mode for comp_dist in self.comp_dists], + axis=1) + + def _comp_samples(self, point=None, size=None, repeat=None): + try: + samples = self.comp_dists.random(point=point, size=size, repeat=repeat) + except AttributeError: + samples = np.column_stack([comp_dist.random(point=point, size=size, repeat=repeat) + for comp_dist in self.comp_dists]) + + return np.squeeze(samples) + + def logp(self, value): + w = self.w + + return bound(logsumexp(tt.log(w) + self._comp_logp(value), axis=-1).sum(), + w >= 0, w <= 1, tt.allclose(w.sum(axis=-1), 1)) + + def random(self, point=None, size=None, repeat=None): + def random_choice(*args, **kwargs): + w = kwargs.pop('w') + w /= w.sum(axis=-1, keepdims=True) + k = w.shape[-1] + + if w.ndim > 1: + return np.row_stack([np.random.choice(k, p=w_) for w_ in w]) + else: + return np.random.choice(k, p=w, *args, **kwargs) + + w = draw_values([self.w], point=point) + + w_samples = generate_samples(random_choice, + w=w, + broadcast_shape=w.shape[:-1] or (1,), + dist_shape=self.shape, + size=size).squeeze() + comp_samples = self._comp_samples(point=point, size=size, repeat=repeat) + + if comp_samples.ndim > 1: + return np.squeeze(comp_samples[np.arange(w_samples.size), w_samples]) + else: + return np.squeeze(comp_samples[w_samples]) + + +class NormalMixture(Mixture): + R""" + Normal mixture log-likelihood + + .. math:: f(x \mid w, \mu, \sigma^2) = \sum_{i = 1}^n w_i N(x \mid \mu_i, \sigma^2_i + + ======== ======================================= + Support :math:`x \in \mathbb{R}` + Mean :math:`\sum_{i = 1}^n w_i \mu_i` + Variance :math:`\sum_{i = 1}^n w_i^2 \sigma^2_i` + ======== ======================================= + + Parameters + w : array of floats + w >= 0 and w <= 1 + the mixutre weights + mu : array of floats + the component means + sd : array of floats + the component standard deviations + tau : array of floats + the component precisions + """ + def __init__(self, w, mu, *args, **kwargs): + _, sd = get_tau_sd(tau=kwargs.pop('tau', None), + sd=kwargs.pop('sd', None)) + + super(NormalMixture, self).__init__(w, Normal.dist(mu, sd=sd), + *args, **kwargs) diff --git a/pymc3/tests/test_mixture.py b/pymc3/tests/test_mixture.py new file mode 100644 index 0000000000..99439f2fe9 --- /dev/null +++ b/pymc3/tests/test_mixture.py @@ -0,0 +1,114 @@ +import numpy as np +from numpy.testing import assert_allclose + +from .helpers import SeededTest +from pymc3 import Dirichlet, Gamma, Metropolis, Mixture, Model, Normal, NormalMixture, Poisson, sample + + +# Generate data +def generate_normal_mixture_data(w, mu, sd, size=1000): + component = np.random.choice(w.size, size=size, p=w) + x = np.random.normal(mu[component], sd[component], size=size) + + return x + + +def generate_poisson_mixture_data(w, mu, size=1000): + component = np.random.choice(w.size, size=size, p=w) + x = np.random.poisson(mu[component], size=size) + + return x + + +class TestMixture(SeededTest): + @classmethod + def setUpClass(cls): + super(TestMixture, cls).setUpClass() + + cls.norm_w = np.array([0.75, 0.25]) + cls.norm_mu = np.array([0., 5.]) + cls.norm_sd = np.ones_like(cls.norm_mu) + cls.norm_x = generate_normal_mixture_data(cls.norm_w, cls.norm_mu, cls.norm_sd, size=1000) + + cls.pois_w = np.array([0.4, 0.6]) + cls.pois_mu = np.array([5., 20.]) + cls.pois_x = generate_poisson_mixture_data(cls.pois_w, cls.pois_mu, size=1000) + + def test_mixture_list_of_normals(self): + with Model() as model: + w = Dirichlet('w', np.ones_like(self.norm_w)) + + mu = Normal('mu', 0., 10., shape=self.norm_w.size) + tau = Gamma('tau', 1., 1., shape=self.norm_w.size) + + x_obs = Mixture('x_obs', w, + [Normal.dist(mu[0], tau=tau[0]), + Normal.dist(mu[1], tau=tau[1])], + observed=self.norm_x) + + step = Metropolis() + trace = sample(5000, step, random_seed=self.random_seed, progressbar=False) + + assert_allclose(np.sort(trace['w'].mean(axis=0)), + np.sort(self.norm_w), + rtol=0.1, atol=0.1) + assert_allclose(np.sort(trace['mu'].mean(axis=0)), + np.sort(self.norm_mu), + rtol=0.1, atol=0.1) + + def test_normal_mixture(self): + with Model() as model: + w = Dirichlet('w', np.ones_like(self.norm_w)) + + mu = Normal('mu', 0., 10., shape=self.norm_w.size) + tau = Gamma('tau', 1., 1., shape=self.norm_w.size) + + x_obs = NormalMixture('x_obs', w, mu, tau=tau, observed=self.norm_x) + + step = Metropolis() + trace = sample(5000, step, random_seed=self.random_seed, progressbar=False) + + assert_allclose(np.sort(trace['w'].mean(axis=0)), + np.sort(self.norm_w), + rtol=0.1, atol=0.1) + assert_allclose(np.sort(trace['mu'].mean(axis=0)), + np.sort(self.norm_mu), + rtol=0.1, atol=0.1) + + def test_poisson_mixture(self): + with Model() as model: + w = Dirichlet('w', np.ones_like(self.pois_w)) + + mu = Gamma('mu', 1., 1., shape=self.pois_w.size) + + x_obs = Mixture('x_obs', w, Poisson.dist(mu), observed=self.pois_x) + + step = Metropolis() + trace = sample(5000, step, random_seed=self.random_seed, progressbar=False) + + assert_allclose(np.sort(trace['w'].mean(axis=0)), + np.sort(self.pois_w), + rtol=0.1, atol=0.1) + assert_allclose(np.sort(trace['mu'].mean(axis=0)), + np.sort(self.pois_mu), + rtol=0.1, atol=0.1) + + def test_mixture_list_of_poissons(self): + with Model() as model: + w = Dirichlet('w', np.ones_like(self.pois_w)) + + mu = Gamma('mu', 1., 1., shape=self.pois_w.size) + + x_obs = Mixture('x_obs', w, + [Poisson.dist(mu[0]), Poisson.dist(mu[1])], + observed=self.pois_x) + + step = Metropolis() + trace = sample(5000, step, random_seed=self.random_seed, progressbar=False) + + assert_allclose(np.sort(trace['w'].mean(axis=0)), + np.sort(self.pois_w), + rtol=0.1, atol=0.1) + assert_allclose(np.sort(trace['mu'].mean(axis=0)), + np.sort(self.pois_mu), + rtol=0.1, atol=0.1)