{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a93a8ea3",
   "metadata": {},
   "source": [
    "## General Mixture Models\n",
    "\n",
    "author: Jacob Schreiber <br>\n",
    "contact: jmschreiber91@gmail.com\n",
    "\n",
    "It is frequently the case that the data you have is not explained by a single underlying distribution. Typically this is because there are multiple phenomena occurring in the data set, each with their own underlying distribution. If we want to try to recover the underlying distributions, we need to have a model which has multiple components. An example could be sensor readings where the majority of the time a sensor shows no signal, but sometimes it detects some phenomena. Modeling both phenomena as a single distribution would be silly because the readings would come from two distinct phenomena.\n",
    "\n",
    "A solution to the problem of having more than one single underlying distribution is to use a mixture of distributions instead of a single distribution, commonly called a mixture model. This type of compositional model builds a more complex probability distribution from a set of simpler ones. A common type, called a Gaussian Mixture Model, is composed of Gaussian distributions, but mathematically there is no need for these distributions to all be Gaussian. In fact, there is no need for these distributions to be simple probability distributions.\n",
    "\n",
    "In this tutorial we'll explore how to do mixture modeling in pomegranate, compare against scikit-learn's implementation of Gaussian mixture models, and explore more complex types of mixture modeling that one can do with probabilistic modeling."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "199f725d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n",
      "numpy      : 1.23.4\n",
      "scipy      : 1.9.3\n",
      "torch      : 1.13.0\n",
      "pomegranate: 1.0.0\n",
      "\n",
      "Compiler    : GCC 11.2.0\n",
      "OS          : Linux\n",
      "Release     : 4.15.0-208-generic\n",
      "Machine     : x86_64\n",
      "Processor   : x86_64\n",
      "CPU cores   : 8\n",
      "Architecture: 64bit\n",
      "\n"
     ]
    }
   ],
   "source": [
    "%pylab inline\n",
    "import seaborn; seaborn.set_style('whitegrid')\n",
    "\n",
    "import torch\n",
    "\n",
    "from pomegranate.gmm import GeneralMixtureModel\n",
    "from pomegranate.distributions import *\n",
    "\n",
    "\n",
    "numpy.random.seed(0)\n",
    "numpy.set_printoptions(suppress=True)\n",
    "\n",
    "%load_ext watermark\n",
    "%watermark -m -n -p numpy,scipy,torch,pomegranate"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5f34383",
   "metadata": {},
   "source": [
    "### A simple example: Gaussian mixture models\n",
    "\n",
    "Let's start off with a simple example. Perhaps we have a data set like the one below, which is made up of not a single blob, but many blobs. It doesn't seem like any of the simple distributions that pomegranate has implemented can fully capture what's going on in the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "41e8c12a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "numpy.random.seed(0)\n",
    "\n",
    "X = numpy.concatenate([numpy.random.normal((7, 2), 1, size=(100, 2)),\n",
    "                       numpy.random.normal((2, 3), 1, size=(150, 2)),\n",
    "                       numpy.random.normal((7, 7), 1, size=(100, 2))]).astype('float32')\n",
    "\n",
    "plt.figure(figsize=(6, 5))\n",
    "plt.scatter(X[:,0], X[:,1])\n",
    "plt.axis(False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3de9d63e",
   "metadata": {},
   "source": [
    "It seems clear to us that this data is composed of three blobs. Accordingly, rather than trying to find some complex single distribution that can describe this data, we can describe it as a mixture of three Gaussian distributions. In the same way that we could initialize a basic distribution using the `fit` method, we can initialize a mixture model using it, additionally passing in the type(s) of distribution(s) to use and the number of components."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "535e27a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1] Improvement: 0.216064453125, Time: 0.001145s\n",
      "[2] Improvement: 0.0286865234375, Time: 0.0008411s\n"
     ]
    }
   ],
   "source": [
    "model = GeneralMixtureModel([Normal(), Normal(), Normal()], verbose=True).fit(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51197af4",
   "metadata": {},
   "source": [
    "Now we can look at the probability densities if we had used a single Gaussian distribution versus using this mixture of three Gaussian models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7c76bb0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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vdeBgQHcdtttuOmmm/CRj3wE//Vf/4UdO3YgHo/jrW99q/TvRRAEYYbp6Wns3r0by5cvRzweF35cb28vFi5ciDe96U2oq6vDwMAAHnzwQbz97W/HY489hsbGRqn3cfLkSdx8881Ys2YNvvSlL6G2thanT5/Gb3/7W5w/fx6VlZV47LHH8PnPfx7XX389/umf/gnhcBjHjh3Dq6++aut7/cxnPoNNmzZhx44dOHXqFL761a/itttuw3333Sf0uyxYsABr1qzBI488gte//vUAgEceeQRtbW3YsGGD4ePLy8vx7//+73jb296G22+/HTt37kQmk8Gtt96KbDaLHTt2IBKJ4EMf+hDOnTuHxx9/HD/84Q9zj4/H40gkEkLvVc327dtxzTXX4LrrrsO5c+cAAHfccQd+8pOf4Prrr8ett96KZDKJb37zm7juuuvw6KOPoqmpSfp1CP9BQqME+MQnPoEjR47g/vvvx/33349Zs2blMgbvec97EIvFDJ8jFovlTqaAmcXmHe94B/77v/8bb3rTm5DJZLBz506sXLkSX//613OPu+SSS3DllVcaBpmdO3cimUzisccew9y5cwHMpNUrKirwla98Be973/u4ZV2nTp0CgNzj1GizIeqszj//8z/n/j+TyWDNmjWor6/H7bffjk996lOoq6vTfc9a9u7diyVLluTVsyqBQH2fd7zjHXnZlS1bthg+t8x7HR4exne/+110d3cDADZu3Ig9e/bg5z//OQkNgiBc4+zZs5iYmGCuzdPT08hms7l/RyIRhEIhAMDVV1+Nq6++Ou++mzZtwute9zr84he/kO5hO3DgACYnJ/HJT34SXV1dudvf/OY35/5/7969qK2txWc+85ncbSIbd9n3+vrXvz7vNZLJJL761a9iYGAAzc3NQr/Ptm3b8NnPfhbDw8OoqanBT3/6U1x33XW5v58RHR0d+OIXv4iPfexj+N73vodkMok9e/bgrrvuysXq+fPn5zb6dpRevfWtb8Utt9yS+/cf//hH/OhHP8KnPvUp3HTTTbnb16xZg6uuugr33HNPQWk3EUxIaJQADQ0N+P73v4+XXnoJu3btwv79+7Fnzx7s2LEDP/jBD/Dwww8bnhBt2rQpJzIA5BZrJT189OhRDAwM4H3ve1/e4+bOnYtVq1YVpJG1PPPMM1i/fj3i8XieOHjDG96Ar3zlK9izZ490/8if/vSngo31rl27cr/ryy+/jK9//et44YUXCjIKPT09WLlypdTrrVixAs888ww+97nP4fLLL8eqVatQXV2dd5/u7m785Cc/QX19PTZu3Ihly5YJZZdk3mtzc3NOZCh0dnbiT3/6k9TvQxAE4RRve9vbcPDgwdy/P/nJT+bix/j4OL71rW/h17/+NXp7ezE9PZ2735///Gfp17r44osxa9Ys/Mu//Ave/e53Y82aNWhvb8+7z4oVK/B//s//wcc//nFcc801WL16tVDmRPa9ajPvSulXX1+fsNC4+uqr8cUvfhE///nP0dbWhsHBQfzN3/yN0GMVrrnmGuzZswdf/epXMT09jZtvvhmve93rpJ5DhiuvvDLv308//TRCoRDe8pa35MX8pqYmdHV1Yc+ePY69F8JdSGiUECtWrMCKFSsAAOfPn8edd96Je++9F3fddRc++clP6j62vr4+799Kre3k5CSAmZMrAJg9e3bBY5uamgyFxtDQEJ5++mksW7aM+XPl+Vkop2V9fX15ty9cuBAPP/wwgJnekR/96Ee5n/X19eE973kPFi5ciNtvvx1tbW0oLy/Hvn378IUvfAETExO675fFzTffjKqqKvzsZz/DD37wA0QiEaxZswa33npr7u/+ta99Dd/+9rfx8MMP4z/+4z9QVVWFK664IucGxkL2vWo/K2Dm81I+K4IgCDdoaGhARUVFwdoMADt27EAqlcLAwAA++MEP5v3sE5/4BH73u9/hQx/6EFasWIFYLIZQKIQPfOADptax+fPn52LdF77wBZw7dw7t7e24/vrr8d73vhfAzIn79PQ0HnroIdxyyy3IZDJYsWIFPvrRj+puwGXfKy+WysScqqoqXHPNNXjkkUcwd+5cbNy4EW1tbcKPV9i2bRsefPBBzJo1y3GnQ21Vw9DQELLZLDZu3Mi8v1YIEsGFhEaJMmvWLHzkIx/Bvffei1deecXy8zU0NACYWTy0DA4OCj2+s7OzwLJPQa/0at26dYhGo3jqqafwrne9K3d7RUVFboP/zDPP5D3miSeewLlz57Bz5868BVp9wqZQVlaGqampgtvPnj2b+72BmbKsm266CTfddBNGRkbw3HPP4Wtf+xre//7345lnnkFlZSUaGxvx6U9/Gp/+9KfR19eHp556Cjt27MDQ0BDuvvtu5u8n814JgiD8QiQS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",
      "text/plain": [
       "<Figure size 1000x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = numpy.arange(-1, 10.1, .1)\n",
    "y = numpy.arange(-1, 10.1, .1)\n",
    "\n",
    "xx, yy = numpy.meshgrid(x, y)\n",
    "x_ = numpy.array(list(zip(xx.flatten(), yy.flatten())))\n",
    "\n",
    "p1 = Normal().fit(X).probability(x_).reshape(len(x), len(y))\n",
    "p2 = model.probability(x_).reshape(len(x), len(y))\n",
    "\n",
    "\n",
    "plt.figure(figsize=(10, 4))\n",
    "plt.subplot(121)\n",
    "plt.title(\"Single Gaussian\", fontsize=12)\n",
    "plt.contourf(xx, yy, p1, cmap='Blues')\n",
    "plt.scatter(X[:,0], X[:,1], s=10)\n",
    "plt.axis(False)\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.title(\"Gaussian Mixture\", fontsize=12)\n",
    "plt.contourf(xx, yy, p2, cmap='Blues')\n",
    "plt.scatter(X[:,0], X[:,1], s=10)\n",
    "plt.axis(False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b121c05",
   "metadata": {},
   "source": [
    "It looks like, unsurprisingly, the mixture model is able to better capture the structure of the data. The single Gaussian is so bad that the region of highest density (the darkest blue ellipse) has very few real points in it. In contrast, the darkest regions in the mixture densities correspond to where there are the most points in the clusters."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0908c21",
   "metadata": {},
   "source": [
    "### Initialization and Fitting\n",
    "\n",
    "Initialization of mixture models is similar to that of probability distributions: you can either pass in initialized values, or not. If you already have probability distributions, and optionally already have prior values on which distribution generated the data, you can pass those into initialization and use the model directly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fd8c565f",
   "metadata": {},
   "outputs": [],
   "source": [
    "d1 = Exponential([1.3, 3.3])\n",
    "d2 = Exponential([2.2, 0.4])\n",
    "\n",
    "model = GeneralMixtureModel([d1, d2], priors=[0.2, 0.8])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2dcbe803",
   "metadata": {},
   "source": [
    "Alternatively, if you don't know the values, you can pass in uninitialized distributions and then fit it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "bed00021",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1] Improvement: 0.8422355651855469, Time: 0.0007176s\n",
      "[2] Improvement: 0.23958969116210938, Time: 0.0005503s\n",
      "[3] Improvement: 0.11565399169921875, Time: 0.0005138s\n",
      "[4] Improvement: 0.07136917114257812, Time: 0.0004883s\n"
     ]
    }
   ],
   "source": [
    "d1 = Exponential()\n",
    "d2 = Exponential()\n",
    "\n",
    "X2 = torch.abs(torch.randn(15, 3))\n",
    "\n",
    "model = GeneralMixtureModel([d1, d2], verbose=True).fit(X2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1bbc5d0",
   "metadata": {},
   "source": [
    "You can inspect the learned prior probabilities."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5ae58b98",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([0.8565, 0.1435])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.priors"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "011f5250",
   "metadata": {},
   "source": [
    "After training, you can inspect the distribution objects."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0991595a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Parameter containing:\n",
       " tensor([0.9047, 0.9780, 0.7445]),\n",
       " Parameter containing:\n",
       " tensor([0.7281, 0.3527, 0.9284]))"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1.scales, d2.scales"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d25758f7",
   "metadata": {},
   "source": [
    "### Probability and Log Probability\n",
    "\n",
    "Because mixture models themselves are technically probability distributions, it should be unsurprising that the calculation of probabilities and log probabilities are identical to that of probability distributions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d08b210b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([-1.9188, -3.7001, -2.8847, -3.1817, -1.6772, -1.8678, -3.8099, -2.6887,\n",
       "        -3.4597, -2.5457, -1.5600, -0.9176, -1.4670, -2.0735, -3.8544])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.log_probability(X2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "350c3068",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([-1.8586, -3.6041, -2.8660, -3.0401, -1.5696, -1.8315, -3.6627, -2.6193,\n",
       "         -3.3195, -2.6105, -1.8031, -1.0723, -1.7300, -2.1385, -3.7464]),\n",
       " tensor([-2.3815, -4.6215, -3.0040, -5.5725, -2.8109, -2.1167, -6.7331, -3.2486,\n",
       "         -5.7406, -2.2277, -0.7321, -0.2995, -0.5996, -1.7543, -4.9963]))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1.log_probability(X2), d2.log_probability(X2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a1b8107f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0.1468, 0.0247, 0.0559, 0.0415, 0.1869, 0.1545, 0.0222, 0.0680, 0.0314,\n",
       "        0.0784, 0.2101, 0.3995, 0.2306, 0.1257, 0.0212])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.probability(X2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "44495983",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([0.1559, 0.0272, 0.0569, 0.0478, 0.2081, 0.1602, 0.0257, 0.0729, 0.0362,\n",
       "         0.0735, 0.1648, 0.3422, 0.1773, 0.1178, 0.0236]),\n",
       " tensor([0.0924, 0.0098, 0.0496, 0.0038, 0.0602, 0.1204, 0.0012, 0.0388, 0.0032,\n",
       "         0.1078, 0.4809, 0.7412, 0.5490, 0.1730, 0.0068]))"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1.probability(X2), d2.probability(X2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d032028c",
   "metadata": {},
   "source": [
    "### Prediction\n",
    "\n",
    "A key utility of mixture models, as a clustering method, is that they can make predictions for which component better fits each data point. These methods mirror those of scikit-learn. Starting off, if you just want predictions of cluster label for each point you can use the `predict` method. Let's return to the Gaussian mixture model for an example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "07010715",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1] Improvement: 0.216064453125, Time: 0.0007911s\n",
      "[2] Improvement: 0.0286865234375, Time: 0.001209s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "        2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "        2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "        2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = GeneralMixtureModel([Normal(), Normal(), Normal()], verbose=True).fit(X)\n",
    "model.predict(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea3af78d",
   "metadata": {},
   "source": [
    "If you're interested in the underlying probabilities, which are the likelihoods under the probability distributions multiplied by the priors and then normalized (sometimes called the responsibility matrix), you can use `predict_proba` to get these probabilities."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7b3d7c41",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[3.2331e-10, 1.0000e+00, 5.0365e-06],\n",
       "        [1.3677e-06, 9.9998e-01, 2.1502e-05],\n",
       "        [5.2814e-05, 9.9995e-01, 1.1250e-06],\n",
       "        [3.7857e-05, 9.9834e-01, 1.6255e-03],\n",
       "        [1.1822e-07, 1.0000e+00, 1.1827e-08],\n",
       "        [8.1322e-06, 9.8747e-01, 1.2524e-02],\n",
       "        [3.6977e-06, 1.0000e+00, 5.8392e-09],\n",
       "        [9.9969e-01, 3.0660e-04, 1.0668e-06],\n",
       "        [1.0000e+00, 2.7696e-07, 2.4643e-11],\n",
       "        [9.9968e-01, 3.2161e-04, 1.4796e-12],\n",
       "        [1.0000e+00, 6.9959e-09, 8.9382e-10],\n",
       "        [9.9966e-01, 3.3986e-04, 1.9472e-09],\n",
       "        [9.9987e-01, 1.2673e-04, 1.1254e-07],\n",
       "        [9.9992e-01, 7.5676e-05, 2.5076e-08],\n",
       "        [9.9969e-01, 3.0740e-04, 3.1747e-06],\n",
       "        [1.0000e+00, 2.4480e-08, 1.8340e-10],\n",
       "        [9.9986e-01, 1.2941e-04, 7.4965e-06],\n",
       "        [4.5694e-15, 3.9609e-07, 1.0000e+00],\n",
       "        [2.0310e-08, 1.0201e-02, 9.8980e-01],\n",
       "        [9.1368e-08, 1.3950e-01, 8.6050e-01],\n",
       "        [9.5965e-08, 1.5413e-05, 9.9998e-01],\n",
       "        [1.2553e-08, 1.0525e-04, 9.9989e-01],\n",
       "        [6.6068e-06, 9.7937e-03, 9.9020e-01],\n",
       "        [5.7233e-13, 1.8398e-06, 1.0000e+00]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict_proba(X)[::15]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3d69298",
   "metadata": {},
   "source": [
    "If you'd like to go even deeper, you can get log probabilities -- which are the space where all the calculations are done for numeric stability -- using the `predict_log_proba` method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "7ac64b1a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-2.1852e+01, -4.7684e-06, -1.2199e+01],\n",
       "        [-1.3502e+01, -2.2650e-05, -1.0747e+01],\n",
       "        [-9.8487e+00, -5.3883e-05, -1.3698e+01],\n",
       "        [-1.0182e+01, -1.6646e-03, -6.4219e+00],\n",
       "        [-1.5951e+01,  0.0000e+00, -1.8253e+01],\n",
       "        [-1.1720e+01, -1.2612e-02, -4.3801e+00],\n",
       "        [-1.2508e+01, -3.8147e-06, -1.8959e+01],\n",
       "        [-3.0780e-04, -8.0900e+00, -1.3751e+01],\n",
       "        [-2.3842e-07, -1.5099e+01, -2.4427e+01],\n",
       "        [-3.2187e-04, -8.0422e+00, -2.7239e+01],\n",
       "        [ 0.0000e+00, -1.8778e+01, -2.0836e+01],\n",
       "        [-3.3998e-04, -7.9870e+00, -2.0057e+01],\n",
       "        [-1.2684e-04, -8.9735e+00, -1.6000e+01],\n",
       "        [-7.5579e-05, -9.4890e+00, -1.7501e+01],\n",
       "        [-3.1066e-04, -8.0874e+00, -1.2660e+01],\n",
       "        [ 0.0000e+00, -1.7525e+01, -2.2419e+01],\n",
       "        [-1.3685e-04, -8.9525e+00, -1.1801e+01],\n",
       "        [-3.3019e+01, -1.4742e+01, -4.7684e-07],\n",
       "        [-1.7712e+01, -4.5853e+00, -1.0253e-02],\n",
       "        [-1.6208e+01, -1.9697e+00, -1.5024e-01],\n",
       "        [-1.6159e+01, -1.1080e+01, -1.5259e-05],\n",
       "        [-1.8193e+01, -9.1592e+00, -1.0514e-04],\n",
       "        [-1.1927e+01, -4.6260e+00, -9.8486e-03],\n",
       "        [-2.8189e+01, -1.3206e+01, -1.6689e-06]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict_log_proba(X)[::15]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c3618610",
   "metadata": {},
   "source": [
    "### Zero-inflated Mixtures\n",
    "\n",
    "A common way to view zero-inflated distributions is as a mixture where one component is a dirac delta distribution with a probability mass entirely on zero and whatever the other distribution is. The zero-inflation is explicitly modeled because sometimes your data will have zeroes that do not come from the primary thing being modeled. Although zero-inflated distributions are explicitly implemented already, one could manually implement one like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "eaac089c",
   "metadata": {},
   "outputs": [],
   "source": [
    "p = numpy.array([30, 1, 3, 7, 8, 7, 4, 3, 2, 1, 2, 1, 1, 1])\n",
    "X = numpy.random.choice(len(p), size=(500, 1), p=p/p.sum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "c9bed3e0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([3.3220])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = Poisson().fit(X)\n",
    "d.lambdas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "79560b18",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1] Improvement: 1369.84814453125, Time: 0.0006914s\n",
      "[2] Improvement: 89.228271484375, Time: 0.0006466s\n",
      "[3] Improvement: 0.164306640625, Time: 0.000586s\n",
      "[4] Improvement: 0.0001220703125, Time: 0.0006366s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([5])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = GeneralMixtureModel([DiracDelta([1]), Poisson([1])], verbose=True).fit(X)\n",
    "model.distributions[1].lambdas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "12bbc00a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = numpy.arange(0, len(p)+0.1, 0.1)\n",
    "y1 = d.probability(x.reshape(-1, 1))\n",
    "y2 = model.distributions[1].probability(x.reshape(-1, 1))\n",
    "\n",
    "\n",
    "plt.figure(figsize=(6, 3))\n",
    "plt.hist(X[:,0], density=True, bins=numpy.arange(0, len(p), 1))\n",
    "plt.plot(x, y1, label=\"Poisson\")\n",
    "plt.plot(x, y2, label=\"Poisson in Mixture\")\n",
    "plt.legend(loc=(1.05, 0.4))\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56cffd0c",
   "metadata": {},
   "source": [
    "Alternatively, we can use the ZeroInflated wrapper to do this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "77784dff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "d0 = Poisson()\n",
    "d = ZeroInflated(d0).fit(X)\n",
    "\n",
    "y3 = d0.probability(x.reshape(-1, 1))\n",
    "\n",
    "plt.figure(figsize=(6, 3))\n",
    "plt.hist(X[:,0], density=True, bins=numpy.arange(0, len(p), 1))\n",
    "plt.plot(x, y1, label=\"Poisson\")\n",
    "plt.plot(x, y2, label=\"Poisson in Mixture\")\n",
    "plt.plot(x, y3, label=\"Poisson in ZIP\")\n",
    "plt.legend(loc=(1.05, 0.4))\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a85dfcfe",
   "metadata": {},
   "source": [
    "The ZeroInflated wrappers extends to multivariate distributions in a way that the mixture model implementation doesn't. Simply, using a DiracDelta by itself will give a zero probability to all examples that have one or more non-zero values. Because we want each feature to be scored independently, in that all zeroes in the matrix have some probability of belonging to the DiracDelta component, we need to modify the internals slightly. Here is the result of using that."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "f4e3a7d2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Parameter containing:\n",
       " tensor([3.3160, 3.1280, 3.1860]),\n",
       " Parameter containing:\n",
       " tensor([3.6519, 3.4448, 3.5087]),\n",
       " Parameter containing:\n",
       " tensor([5.7558, 5.3920, 5.3447]))"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p = numpy.array([30, 1, 3, 7, 8, 7, 4, 3, 2, 1, 2, 1, 1, 1])\n",
    "X = numpy.random.choice(len(p), size=(500, 3), p=p/p.sum())\n",
    "\n",
    "d = Poisson().fit(X)\n",
    "\n",
    "model = GeneralMixtureModel([DiracDelta([1, 1, 1]), Poisson([1.0, 1.0, 1.0])]).fit(X)\n",
    "model.distributions[1].lambdas\n",
    "\n",
    "ZIP = ZeroInflated(Poisson()).fit(X)\n",
    "\n",
    "d.lambdas, model.distributions[1].lambdas, ZIP.distribution.lambdas"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
