{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Interpolated Conditional KDE\n", "The usage case of the interpolated conditional KDE, with respect to the ordinary\n", "one is when the data has some of its dimensions inherently conditional.\n", "\n", "Instead of having samples from a full distribution $P(x, y, z, w)$,\n", "we might have samples of $P(x, y | z, w)$ for different values of $z$ and $w$.\n", "Values of $(z, w)$ are in the most common scenario given on a grid. \n", "In the case we have information about $P(z, w)$, we might be able to use\n", "`ConditionalGaussianKernelDensity`, however this is not always the case.\n", "\n", "`InterpolatedConditionalKernelDensity` comes into play if one would like to \n", "sample / calculate $P(x, y | z, w)$ for some parameters not available on the grid, \n", "or additionally condition on $y$ for instance, and get $P(x | y, z, w)$.\n", "\n", "For this particular example, the code then implements:\n", "\n", "- `linear` or `nearest` interpolation for grid $(z, w)$,\n", "- fitting of a conditional KDE for $P(x, y | z, w)$, for every point on the grid.\n", "\n", "Thus when calculating $P(x | y, z, w)$, point $(z, w)$ is interpolated from the grid,\n", "and conditional on $y$ is calculated by slicing through $P(x, y | z, w)$. \n", "At the moment, extrapolation is not supported." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "plt.rc('text', usetex=True)\n", "plt.rc('font', family='serif')\n", "\n", "from conditional_kde import InterpolatedConditionalKernelDensity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we will investigate the following model:\n", "$$ P(x, \\mu | \\sigma) = P(\\mu) \\cdot P(x | \\mu, \\sigma)$$\n", "$$ P(x, \\mu | \\sigma) = \\frac{1}{5 \\sqrt{2\\pi}} \\exp\\left(-\\frac{1}{2} \\frac{(\\mu - 5)^2}{5^2}\\right) \\cdot \\frac{1}{\\sigma\\sqrt{2\\pi}} \\exp\\left(-\\frac{1}{2} \\frac{(x - \\mu)^2}{\\sigma}\\right) \\, .$$\n", "\n", "Thus, for parameter $\\sigma$ no prior is given, and it will be defined on a grid $\\sigma \\in [0.5, 1.0, 2.0, 5.0]$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "sigma = [0.5, 1.0, 2.0, 5.0]\n", "N = 100000\n", "data = []\n", "for s in sigma:\n", " samples = np.empty((N, 2))\n", " for i in range(N):\n", " mu = np.random.normal(5., 5., 1).squeeze()\n", " x = np.random.normal(mu, s, 1).squeeze()\n", " samples[i, :] = [x, mu]\n", " data.append(samples)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-10.0, 20.0)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVgAAAFXCAYAAADnOlaVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAATKUlEQVR4nO3d+29cd1rH8c/jya3ZJnGc9LLdliaTinYlkCBxVH5A/EATLhL9AeF0AS0CJNZBQkIgoYb+Baum/QUhsarLD11xbetFAmlbLQ4gIRbENvGKu3bZuElaWHpLJkkvSWzPww8+3kwm9nPGzjyec+z3S7LimefMmW+P3I+//p5nzjF3FwCg/4YGPQAAWK8IWABIQsACQBICFgCSELAAkISABYAkBCwAJCFggT4xs1fN7OCgx4Hq2DToAQB1ZmZNSScktSQdkfTCQAeESjE+yQX0h5mdlXTc3U8NeiyoBpYIACAJAYvaMbOmmU2ZmS/xdXbQ4wMWEbCoFTM7ImlKC2uduyUdK0qHJO129wODGhvQjZNcqA0zG9ZCuB5y9+ni6UkzOyXpiLuf7GEfr0oaXsHbHnf3mZWOFZAIWNTLi5ImOsJ1UUvSnl524O7HyrcC+oOARZ2MaWEpoNtBSS+v8ViAUgQsaqHoN1X37LV4vimpp9aoYolgJU6wRIDVImBRdycknXT3Vi8bs0SAtUTAohbcfcbMps2suTijNLMxSU13Pzrg4QFL4pNcqI2ii+AZSWe10AnQcveJioxpWNK4pGktLFdM8YkuELAAkIQPGgBAkkquwRZ/di2eHT7s7ieK58e00PPYHPSfhgBQpqoz2Kckjbr7pCSZ2XgRrlpc1yo+MgkAlVXJgHX3iY4ZalPSjKTDxb8q/uXCxgAqrZJLBIuKJvKL7n7KzLr7F2/7aKSZjWvhTK4aahzarp1rMEoA64ZZXHfXVV16393v6WV3lQ5YSWPufrz4viVpJNq4mPVOSNJOG/HH7Ync0QGoFov/KLehkgAteb28ram5l8/3OpxKLhFICye0Fq+OVNzn6A3dvApSUwtXVQKAyqpkwBYnsJ41szNmdkbSSHHCq1nUhmniBlB1lVwiKMLztgsnd1zvk3AFUHmVnMECwHpAwAJAkkouEQDAksq6BBqNuL65JPLa8bVZ2jfm49d3YQYLAEkIWABIQsACQBICFgCSELAAkISABYAkBCwAJKEPFkBllPaxbtlyR68v0569Hm/g7RXtjxksACQhYAEgCQELAEkIWABIQsACQBICFgCSELAAkIQ+WABrpqxPdejuu+PXb9sav8FcfL3W9tWrYd3nZuP9rxAzWABIQsACQBICFgCSELAAkISABYAkBCwAJCFgASAJfbAA+mKo5FqtkjS0Y0e8QVmfq3tYbl+J+1zbs3Px/vuMGSwAJCFgASAJAQsASQhYAEhCwAJAEgIWAJLQpgWgJ0Nbt8X1+/aW7sN3bA/r9lF822y/ciWu37hRMoCV3Xb7TjGDBYAkBCwAJCFgASAJAQsASSobsGY2ZmZTXc9dMrMpM3t6UOMCgF5VtovA3SfN7HjX08fc/dRABgQAK1TZGewyhs2sOehBAEAvKjuDXcaIpItm9oK7d89uZWbjksYlaZvifjtgw7F4PtW4+1Pxy++/N6zP7YlvuS1JQ7PxbbXtvUthvX25pA92Pt7/WqvVDNbdJ9y9JallZmPL1EfdfXSzSq4rCQDJahOwZjZuZgcHPQ4A6FVlA9bMjkga7ZipvlI8PyYtnAQb1NgAoBeVXYMtugV2dzxuSZouvghXAJVX2RksANQdAQsASQhYAEhS2TVYACtU1ue6a2f8+ofuD8sf7Ytfv+nD8h7UTW+/H9bbl+Pbbns7vm131TCDBYAkBCwAJCFgASAJAQsASQhYAEhCwAJAEgIWAJLQBwvUhDUaYX1ox46wPvcD+8L6lf13hfXGjbgHdfu5+FqtktS+WHK91xs34h14u/Q9qoQZLAAkIWABIAkBCwBJCFgASELAAkASAhYAktCmBVREWRtWY2R3WP/o8WZYf/8H4//dt5R0Wd37zx/GG7z5dlyX1P7kWrxBzdqwyjCDBYAkBCwAJCFgASAJAQsASQhYAEhCwAJAEgIWAJLQBwusAdu0uXSbxj17wnrrx/aF9XcPW1jfXNLnOvKf18P60HfeCuvzH5b0yW5AzGABIAkBCwBJCFgASELAAkASAhYAkhCwAJCEgAWAJPTBAn1Q1ufaeOC+0n28e/T7wvqlH/8krLdbW8L6/f8Yv//W/7gQ1ucul9+WG7diBgsASQhYAEhS2YA1szEzm1riuSNmNj6ocQFAryobsO4+2fnYzMaK508Vj48MYlwA0KvKBuwSDkuaKb6fkXRwgGMBgFJ16iIY7np826WHiqWDcUnapu1rMCQAWF6dArYlaSTawN0nJE1I0k4b8TUYEzaI0jashx8M6//z5KdL32P7T74b1vd6fDlCe31vWN/5jbgNa/6Di2F9vd1Sey3UaYngDd2cxTYlTS2/KQAMXmUDtjiJNdpxcmtSUrN4fnjxZBcAVFVllwiKAN3d9dzJ4lvCFUDlVXYGCwB1R8ACQBICFgCSELAAkKSyJ7mAtVTa53rg4bB+7ti9Yf1HnvzX0jFsHZoL61//0/jDiw/+03fD+vz/xX22Pj8f1rFyzGABIAkBCwBJCFgASELAAkASAhYAkhCwAJCEgAWAJPTBYkMo7XPdH98yu6zP9Xd/6dUVj6nbs18+FtYffi3uY50//3ZY97nZFY8Jd4YZLAAkIWABIAkBCwBJCFgASELAAkASAhYAkhCwAJCEPlisC9ZohPWhR/eH9Zmn9ob1P/7l3wvre4auh/Wf+vLTYV2Smn/1QVhvv3khrNPnWj3MYAEgCQELAEkIWABIQsACQBICFgCSELAAkIQ2LdRC6eUGH9kX1s/+fNyG9fe/8lxYv7dxd1j//j/6zbD+yJ+/H9Ylqf2tN8M6bVj1wwwWAJIQsACQhIAFgCQELAAkIWABIAkBCwBJCFgASEIfLAZuaOu20m2sGd9W++wvxn2uX//V58P6nqG4z/XAq8fD+qN/0grrZT2uEn2u69GKA9bMdrr7lSWe/4KkXZIm3f1cH8YGALW2miWCaTObN7OvmdnvmNkPSZK7v+juz0sa6+sIO5jZJTObMrPyqxcDwICtZongkKSjko5I+nVJJ83MJU1LOi1ppH/Du80xdz+VuH8A6JsVB6y7X5Y0WXzJzHZJOizpmKRRSU/0c4Bdhs2s6e4zie8BAH1xx10E7n7Z3U+5+3FJ41oI2Swjki6a2QtLFc1s3MxOm9npWcX3SAKAbH1t03L3b0pq9nOfXfufcPeWpJaZ3bbWW9RH3X10s7ZmDQMAerLigDWzV8zsS2b2s2a2M2NQy7zvuJkdXKv3A4A7tZqTXC9LOi7pK5LczGYknZJ0RtIBLcxg/7BvI7zpFUnNxZmru08mvAcSDG3ZEtbLelwlaeYX4j7Xlz7/+ysaU7f9r/1aWH/spds6E2/hXMsVS1jNSa6vaCFcVcwon9BCV8FiJ/ZZM/uipL9297/r10CLpYHp4otwBVB5d7QG6+7T7v6cu/+Euw9poYVrovj3b4p+2Zf7MVAAqJu+flS2OMn1TUnPSd+b4e7v53sAQF2kXovA3Rf/pAeADYeraQFAEgIWAJIQsACQhOvB4o5ZoxHWhx76TFh/81jc4ypJL37+S2F9x9CNsH74L387rD82cTUewLfjPtf29Wvx67EhMYMFgCQELAAkIWABIAkBCwBJCFgASELAAkAS2rRQqqwNq/HQg2H9wtinw/rxz71eOoZrHv+oPvnV3wrrj/3BpbDu/30urLdvxG1gwFKYwQJAEgIWAJIQsACQhIAFgCQELAAkIWABIAkBCwBJ6IOFbNPmsN64756w/s7R+HKE+346vtTfrsbHYV2SfuPVL4T1R/+sFdb9OxfCOn2uyMAMFgCSELAAkISABYAkBCwAJCFgASAJAQsASQhYAEhCH+wGUHo91927wvr7Rx8O63M/E19rtS0L68+/9HNhXZIe+erFsO7fPhePgdtqYwCYwQJAEgIWAJIQsACQhIAFgCQELAAkIWABIAkBCwBJ6INdDyz+PdkYHg7rV3/0QFh/7/F2WN82G/8YXXh9X1h/+C/eCeuS1D7/Vlzneq6ooFoFrJmNSWpJarr7xICHAwCh2iwRFOEqdz9VPD4y2BEBQKw2ASvpsKSZ4vsZSQcHOBYAKFWnJYLhrsd7ujcws3FJ45K0TdvXYEgAsLw6zWBbkkaiDdx9wt1H3X10s7auzagAYBl1Ctg3dHMW25Q0NbihAEC52iwRuPukmT1dnNwaXjzZte6VtGBJUmPnjrB+7Yf3h/V3D8WXM/RNs2F9+9fi97/vb78b1ufPvx3WJcnn4jEAVVSbgJUkdz9ZfLsxwhVArdVpiQAAaoWABYAkBCwAJCFgASAJAQsASQhYAEhSqzatjajxqfKP/M5/dl9Yv/jZLWF9qKTF9KHX4t/DO75xLqzPv/NeWKfHFesVM1gASELAAkASAhYAkhCwAJCEgAWAJAQsACQhYAEgCX2wAzZ0113xBg89ULqPD/fF+yjrc33gH66H9a3/diGsz39wMaz7/Hw8AGCdYgYLAEkIWABIQsACQBICFgCSELAAkISABYAkBCwAJKEPNtnQlpJrsd6zJ6xf+8zO8vco6XPd+y8fhfXGf50P63OXr8Rv4O24DmxQzGABIAkBCwBJCFgASELAAkASAhYAkhCwAJCENq07ZI1GWB/aFbdZzd+7O379bHkL1I5vXYo3OP+/Ybn98cfx62nDAlaFGSwAJCFgASAJAQsASQhYAEhCwAJAEgIWAJIQsACQpFZ9sGZ2SdJpSVPufnJN3rOsz7Xstts7d8T7dw/rW85/EO9fUvvd9+L6J9fiHdDnCqSoVcBKOubupwY9CADoRd2WCIbNrDnoQQBAL+oWsCOSLprZC0sVzWzczE6b2elZXV/joQHArSq1RGBmY1oI0U4zi8sC7j5RbNcyszF3n+zcsKhPSNJOG4kXNwEgWaUCtjswO5nZuKTT7j69hkMCgFWr0xLBK9L3ZrlhGANAFVRqBhtx95ak6eKLcAVQebUJ2DQWT+Jt69a4vr2kD7bE0FvvhPX21Q9L99G+VnJCjz5XYCDqtEQAALVCwAJAEgIWAJIQsACQhIAFgCQELAAkIWABIMmG74Md2rIlrNu2uA9WmzfH9StXw3L78pW4fuNGvH8AlcUMFgCSELAAkISABYAkBCwAJCFgASAJAQsASdZ1m1bZLbclyTaXHIL5+FJ/7UutsO7X40sJ+vx8/P4AaosZLAAkIWABIAkBCwBJCFgASELAAkASAhYAkhCwAJBkw/fBlvFPPgnr7dm5kh1wy2xgo2IGCwBJCFgASELAAkASAhYAkhCwAJCEgAWAJAQsACRZ132wsvLfH+2SPleu1wpgtZjBAkASAhYAkhCwAJCEgAWAJAQsACSpbMCa2ZiZTS3x3BEzGx/UuACgV5UNWHef7HxsZmPF86eKx0dK9zE3W/41Px9+AcBqVTZgl3BY0kzx/YykgwMcCwCUqtMHDYa7Hu/p3qBYOlhcPrg+Nffyv2cPKsFeSe8PehCrVNex13XcUn3HXtdxS9KjvW44sIAt/uQf6Xp6ZnEJYAmtJba/hbtPSJoo9n/a3UfvdJxrra7jluo79rqOW6rv2Os6bmlh7L1uO7CA7V5j7cEbujmLbUqaWn5TABi8yq7BFiexRjtObk1KahbPDwczXQCohMquwRYBurvruZPFt72E60TfB7U26jpuqb5jr+u4pfqOva7jllYwdnP3zIEAwIZV2SUCAKg7AhYAkqzbgF0PH7U1s0tmNmVmTw96LJG6HddOdTnGi+r6c73MuCt/7M1s2MwOFuN/tuP5no75ug3YfnzUtgKOufvRjpN7lVPT49qp8se4U11/rpdpy6zDsX9K0uji+M1sfCXHfN0G7BLq+FHbYTNrDnoQJep4XDvV4RhH6nz8K3/s3X2i+ACTtNB/P6MVHPONFLDDXY9v+6htBY1IumhmLwx6IIHhrsd1OK6d6nCMI8Ndj+t0/Gtz7ItfBBeLWetwV3nZY17ZPtgyGR+1XWtl/w2LvznNrGVmY6v49NtaaKlix3UlanKMIy3V9PjX7NiPufvx4vuWejzmtQ3Y9fBR2+i/oVg8P+3u02s4pNWo3HHtVY2OcaSWx79Ox74I/5PF9we1gmO+bpcI1sFHbV+RbjmJUcnf7jU8rp1qcYw71fXnunvcqsmxL8b9rJmdMbMzkkZWcsz5JBcAJFm3M1gAGDQCFgCSELAAkISABYAkBCwAJCFgASAJAQsASQhYAEhCwAJAEgIWAJLU9mIvwJ0oLj93RMVFO9z9ZMfV6Q91XDkJWDWuRYANx8yGJT3j7ieKx2cknZZ0QgtXRzoj6YC7zyy7E6AHLBFgIxqX9MWOxxe1cJWklhau9XmCcEU/MIPFhmNmzc4ANTPXwv2hKnnJPNQXAYsNrbim55S726DHgvWHJQJsdEcl3XLB5KrfiA/1QcBiwzGzpzsejkma7qgd1MKJLuCOEbDYUIpblDxjZsPF8kD3PaE+V9XbrqB+WIPFhrLYoiXprIo7+Ba3jT4j3bzTKdAPBCwAJGGJAACSELAAkISABYAkBCwAJCFgASAJAQsASQhYAEhCwAJAEgIWAJL8P7ShKcYmcSXiAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize = (5, 5))\n", "plt.hist2d(data[1][:, 0], data[1][:, 1], bins = 50)\n", "plt.xlabel(\"$x$\", fontsize = 20)\n", "plt.ylabel(\"$\\mu$\", fontsize = 20)\n", "plt.title(\"$\\sigma = 1$\", fontsize = 20);\n", "plt.xlim([-10, 20])\n", "plt.ylim([-10, 20])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpolation\n", "Here we are investigating interpolation for the inherently conditional dimensions, in our case $\\sigma$.\n", "We firstly deal with `interpolation_method = \"linear\"`, and later show an example for the `\"nearest\"` case." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "kde = InterpolatedConditionalKernelDensity().fit(\n", " data, \n", " inherent_features = [\"sigma\"], \n", " features = [\"x\", \"mu\"], \n", " interpolation_points = {\"sigma\": sigma}, \n", " interpolation_method = \"linear\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's firstly interpolate for different $\\sigma$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "samples = kde.sample(\n", " inherent_conditionals = {\"sigma\": 1.5},\n", " conditionals = None, # no other conditionals\n", " n_samples = 100000,\n", ")\n", "\n", "fig, axes = plt.subplots(1, 3, sharey = True, figsize = (15, 5))\n", "for ax, s, d in zip(axes, [1.0, 1.5, 2.0], [data[1], samples, data[2]]):\n", " ax.hist2d(d[:, 0], d[:, 1], bins = 50)\n", " ax.set_xlabel(\"$x$\", fontsize = 20)\n", " ax.set_ylabel(\"$\\mu$\", fontsize = 20)\n", " ax.set_title(f\"$\\sigma = {s}$\", fontsize = 20)\n", " ax.set_xlim([-10, 20])\n", " ax.set_ylim([-10, 20])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On the left and the right are two close distributions from the data, and in the middle the interpolated and sampled distribution for the value of $\\sigma$ between the two. Let's repeat the procedure for another choice of $\\sigma$:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "samples = kde.sample(\n", " inherent_conditionals = {\"sigma\": 4.0},\n", " conditionals = None, # no other conditionals\n", " n_samples = 100000,\n", ")\n", "\n", "fig, axes = plt.subplots(1, 3, sharey = True, figsize = (15, 5))\n", "for ax, s, d in zip(axes, [2.0, 4.0, 5.0], [data[2], samples, data[3]]):\n", " ax.hist2d(d[:, 0], d[:, 1], bins = 50)\n", " ax.set_xlabel(\"$x$\", fontsize = 20)\n", " ax.set_ylabel(\"$\\mu$\", fontsize = 20)\n", " ax.set_title(f\"$\\sigma = {s}$\", fontsize = 20)\n", " ax.set_xlim([-10, 20])\n", " ax.set_ylim([-10, 20])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the same example, if the `interpolation_method = \"nearest\"`:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "kde = InterpolatedConditionalKernelDensity().fit(\n", " data, \n", " inherent_features = [\"sigma\"], \n", " features = [\"x\", \"mu\"], \n", " interpolation_points = {\"sigma\": sigma}, \n", " interpolation_method = \"nearest\",\n", ")\n", "\n", "samples = kde.sample(\n", " inherent_conditionals = {\"sigma\": 4.0},\n", " conditionals = None, # no other conditionals\n", " n_samples = 100000,\n", ")\n", "\n", "fig, axes = plt.subplots(1, 3, sharey = True, figsize = (15, 5))\n", "for ax, s, d in zip(axes, [2.0, 4.0, 5.0], [data[2], samples, data[3]]):\n", " ax.hist2d(d[:, 0], d[:, 1], bins = 50)\n", " ax.set_xlabel(\"$x$\", fontsize = 20)\n", " ax.set_ylabel(\"$\\mu$\", fontsize = 20)\n", " ax.set_title(f\"$\\sigma = {s}$\", fontsize = 20)\n", " ax.set_xlim([-10, 20])\n", " ax.set_ylim([-10, 20])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As expected, in this case the code picked the (linearly) nearest distribution and sampled from it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpolation + slicing\n", "Now let's also consider the case where we would like to additionally condition on $\\mu$. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "kde = InterpolatedConditionalKernelDensity().fit(\n", " data, \n", " inherent_features = [\"sigma\"], \n", " features = [\"x\", \"mu\"], \n", " interpolation_points = {\"sigma\": sigma}, \n", " interpolation_method = \"linear\",\n", ")\n", "\n", "plt.figure(figsize = (8, 5))\n", "mu_s = [-5., 5., 15.]\n", "colors = [\"blue\", \"orange\", \"green\"]\n", "mini, maxi = -20, 30\n", "x = np.linspace(mini, maxi, 100)\n", "for i, (mu, c) in enumerate(zip(mu_s, colors)):\n", " # plotting actual values of probabilities\n", " log_probs = kde.score_samples(\n", " np.stack([x, np.ones(len(x)) * mu], axis = -1),\n", " inherent_conditionals = {\"sigma\": 4.0},\n", " conditional_features = [\"mu\"],\n", " )\n", " label = \"intp cKDE prob\" if i == 0 else None\n", " plt.plot(x, np.exp(log_probs), color = c, alpha = 0.5, label = label)\n", "\n", " # plotting analytical probabilities\n", " probs = 1 / (np.sqrt(2 * np.pi) * 4.0) * np.exp(-0.5 / 16.0 * (x - mu)**2)\n", " label = \"analytic prob\" if i == 0 else None\n", " plt.plot(x, probs, color = c, linestyle = \"--\", alpha = 0.5, label = label)\n", "\n", " # plotting samples\n", " samples = kde.sample(\n", " inherent_conditionals = {\"sigma\": 4.0},\n", " conditionals = {\"mu\": mu},\n", " n_samples = 1000, \n", " keep_dims = False,\n", " )\n", " plt.hist(\n", " samples, \n", " bins = 100,\n", " density = True, \n", " histtype = \"step\",\n", " color = c,\n", " label = f\"$\\mu = {mu}$\", \n", " range = (mini, maxi)\n", " )\n", "plt.yticks([])\n", "plt.xlabel(\"$x$\", fontsize = 20)\n", "plt.title(\"$\\sigma = 4.0$\", fontsize = 20)\n", "\n", "plt.legend()\n", "ax = plt.gca()\n", "leg = ax.get_legend()\n", "leg.legendHandles[0].set_color(\"black\")\n", "leg.legendHandles[1].set_color(\"black\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here interpolated conditional probabilities are shown with continuos lines, analytic probabilities with dashed lines, together with histograms of samples. One can see that continuos lines follow the histograms, however they both slightly differ from the actual analytic probabilities. This is expected, as the analytic function is not a simple linear interpolation between two values of $\\sigma$." ] } ], "metadata": { "interpreter": { "hash": "58ae7b3716633041a01a40c36e0d7b7460b562af78f6efaf769f0d9c360a3f13" }, "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.8.13" } }, "nbformat": 4, "nbformat_minor": 4 }