diff --git a/Slice Sampling Multimodal.ipynb b/Slice Sampling Multimodal.ipynb new file mode 100644 index 0000000..45ec196 --- /dev/null +++ b/Slice Sampling Multimodal.ipynb @@ -0,0 +1,551 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Multimodal Slice Sampling Example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import scipy.stats as stats\n", + "import matplotlib.pyplot as plt\n", + "import math\n", + "from sklearn.preprocessing import normalize\n", + "%matplotlib inline " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate Unimodal Gaussian" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Parameters used for Gaussian\n", + "x_low = -15\n", + "x_high = 15\n", + "x_step = 0.1\n", + "\n", + "# Generate pdf \n", + "X = np.arange(x_low, x_high, x_step)\n", + "Y = 1.75*stats.norm.pdf(X,-3,1.75) + .6*stats.norm.pdf(X,.75,.5) + stats.norm.pdf(X,3,1)\n", + "Y = normalize(Y[:,np.newaxis], axis=0).ravel()\n", + "\n", + "plt.plot(X, Y)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for initial sample for x_0" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.8744936037223994\n" + ] + } + ], + "source": [ + "low = X[0] \n", + "high = X[-1]\n", + "\n", + "def sample_x(low=low, high=high):\n", + " x0 = np.random.uniform(low=low, high=high)\n", + " return x0\n", + "\n", + "x0 = sample_x(low, high)\n", + "\n", + "print(x0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for calculating f(x_0)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def f_x(x):\n", + " ind = np.argmin(np.abs(X - x))\n", + " f_x0 = Y[ind]\n", + " return f_x0\n", + "\n", + "f_x0 = f_x(x0)\n", + "\n", + "plt.plot(X, Y)\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for sampling in the interval (0, f(x_0)), calculate y" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0600864205327611\n" + ] + } + ], + "source": [ + "def sample_y(x0, f_x0):\n", + " y = np.random.uniform(low=0, high=f_x0)\n", + " return y\n", + "\n", + "y = sample_y(x0, f_x0)\n", + " \n", + "plt.plot(X, Y)\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.show()\n", + "print(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define horizontal slice using y" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def slice_y(y):\n", + " _x = np.linspace(-5, 5, 50)\n", + " horizontal_line = np.array([y for i in range(len(_x))]) \n", + " return _x, horizontal_line\n", + "\n", + "line = slice_y(y)\n", + "\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for estimating the sampling interval using doubling update" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAD8CAYAAAB3u9PLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XmYW+V96PHvT9Ls++plFo9tbIzB2MTGEHJZAoEQsji0kEC5CbRJIQu9bZPeG3LTJL1kadPePGl6S5qQhISQEKC0NE5CIGHJyuYx3peBmfEyY489+75Keu8fOho0Gml0pJFGRzO/z/PoGemc9xy9Z7T89O5ijEEppZRypTsDSimlnEEDglJKKUADglJKKYsGBKWUUoAGBKWUUhYNCEoppQANCEoppSwaEJRSSgEaEJRSSlk86c5APCorK01DQ0O6s6GUUhll9+7d3caYqljpMiogNDQ00NjYmO5sKKVURhGRE3bSaZWRUkopQAOCUkopiwYEpZRSgAYEpZRSFg0ISimlAA0ISimlLBoQlFJKARoQlEo5Ywy/PHSG5s7hdGdFqTlpQFAqxb7wsyPc+dBuPvPEgXRnRak5aUBQKoX8fsOPXg4MEj3RM5rm3Cg1Nw0ISqVQx+A4E14/DRX5nBkcp3dkMt1ZUioqDQhKpdDx7hEA3r15JQCHTg+kMztKzUkDglIp1GoFhHdeuAKAg6cG05kdpeakAUGpFDrWNUJelptzlxVRU5pH0xkNCMq5NCAolULHe0ZoqCxARFhRksvZwYl0Z0mpqDQgKJVCx7pHWFNZAEB1cQ6dQ+NpzpFS0WlAUCqFzgyMs7I0F4Dqolw6h7SEoJxLA4JSKTI66WVsykd5QQ4AVUU5DI17GZ/ypTlnSkWmAUGpFOkZDow5qCjIBgIBAaBT2xGUQ2lAUCpFgoPQKgoDAaHaCghdw9qOoJxJA4JSKRIMCOUFwYAQaEvQEoJyKg0ISqVI93Dgi78ipA0B0IZl5VgaEJRKkekSglVlVFGQjdsl2vVUOZatgCAi14tIk4g0i8g9EfZfISKviohXRG4K2+cTkb3WbWfI9tUi8rKIvC4ij4pI9vwvRynn6B2ZJNvjoiDbDYDLJVQWZmuVkXKsmAFBRNzAfcA7gI3ArSKyMSzZSeAO4OEIpxgzxmyxbu8J2f4V4GvGmHVAH/ChBPKvlGN1D09SWZCNiExvqyjI0RlPlWPZKSFsB5qNMa3GmEngEWBHaAJjzHFjzH7Ab+dJJfAJuRp43Nr0IPBe27lWKgP0jkxMVxcFleZn0T82laYcKTU3OwGhBmgLedxubbMrV0QaReQlEQl+6VcA/cYYb4LnVMrxekcmpwelBZXlZ9M/qiUE5UweG2kkwjYTx3PUG2NOi8ga4DkROQBEmvIx4jlF5E7gToD6+vo4nlap9OoZmWRNVeGMbSX5WQxoCUE5lJ0SQjtQF/K4Fjht9wmMMaetv63Ar4GLgG6gVESCASnqOY0x9xtjthljtlVVVdl9WqXSrn90irL8sCqjvCz6R6cwJp7fVEotDDsBYRewzuoVlA3cAuyMcQwAIlImIjnW/UrgLcBhE/g0PA8EeyTdDvwk3swr5VQ+v2F4wktR7sxCeGl+Fl5rn1JOEzMgWPX8dwNPA0eAx4wxh0TkXhF5D4CIXCwi7cDNwLdE5JB1+HlAo4jsIxAA/sEYc9ja9yngEyLSTKBN4bvJvDCl0mlkMvCFPzsgBEoM/aNabaScx04bAsaYJ4Enw7Z9LuT+LgLVPuHHvQBsinLOVgI9mJRadIbGowSEvCwABsamZtTDKuUEOlJZqRQYGg+UAApzsmZsD5YQ+rSnkXIgDQhKpcBwtBJCfiBAaJWRciINCEqlQNQqo2BA0K6nyoE0ICiVAkMTkQNCSbANQauMlANpQFAqBYJtCEW5M9sQcjxu8rPdWmWkHEkDglIpEGxDKMyZ3ZGvLD+bPg0IyoE0ICiVAkPjXlwC+dbU16GK87IYGNMqI+U8GhCUSoHhCS+FOZ4ZU18HleR5GBzTkcrKeTQgKJUCg+NTs9oPgopzsxgc1yoj5TwaEJRKgeHx2fMYBZXk6Yynypk0ICiVAkNzBITivCwGNSAoB9KAoFQKBNsQIinJy2Jk0seUz9YCg0otGA0ISqXA0JxtCB4rjTYsK2fRgKBUCgxPeCmco8oI0Goj5TgaEJRKgcEYjcqANiwrx9GAoFSSTXh9THr9FEVpQ5guIWjXU+UwGhCUSrI3pr6O3IagJQTlVBoQlEqyaFNfBxXnBtsQtFFZOYsGBKWSbHgi+sR2AMV5ge1aZaScRgOCUkk2GGXq66C8LDdZbtEqI+U4GhCUSrJoy2cGiUhgPiMNCMphbAUEEbleRJpEpFlE7omw/woReVVEvCJyU8j2LSLyoogcEpH9IvL+kH3fF5FjIrLXum1JziUplV6x2hBA5zNSzhT9HWsRETdwH3At0A7sEpGdxpjDIclOAncAfxN2+CjwQWPM6yKyEtgtIk8bY/qt/f/TGPP4fC9CKSeJ1YYAUJSXxaCOVFYOEzMgANuBZmNMK4CIPALsAKYDgjHmuLVvxuQsxpjXQu6fFpFOoAroR6lFKrh8ZrSRyhCYvkJLCMpp7FQZ1QBtIY/brW1xEZHtQDbQErL5S1ZV0tdEJCfecyrlREMTXrI9LnI8s1dLCyrJy2JIA4JyGDsBYfaST2DieRIRWQE8BPypMSZYivg0sAG4GCgHPhXl2DtFpFFEGru6uuJ5WqXSYmjcOz2BXTTFebpIjnIeOwGhHagLeVwLnLb7BCJSDPwc+FtjzEvB7caYDhMwAXyPQNXULMaY+40x24wx26qqquw+rVJpMzweferroGCjsjFx/bZSKqXsBIRdwDoRWS0i2cAtwE47J7fSPwH8wBjz72H7Vlh/BXgvcDCejCvlVHNNfR1UnJvFlM8wPqVrIijniBkQjDFe4G7gaeAI8Jgx5pCI3Csi7wEQkYtFpB24GfiWiByyDn8fcAVwR4TupT8SkQPAAaAS+GJSr0ypNJlrcZyg4GhlbVhWTmKnlxHGmCeBJ8O2fS7k/i4CVUnhx/0Q+GGUc14dV06VmoPfbzhyZpD+0SkurC2J+Qs9lYbGvdSX58+ZpiRkxtPlJbkJPY/fb3issY3GE3186voNVBVpvww1P7YCglJO1tY7yl8+sodXTwZ6MxflePjCey/gvRfF3RkuKQLrKceuMoL5LZLz9Wdf5+vPvo4IvNjSwy//+goKYpRMlJqLTl2hMlrn0Di33P8SzZ3DfOG9F/Dgn23nvBXF/NWje3liT3ta8hRoQ4jdqAyJVxn1DE/w7d+1csOm5fzow5dwqn+MR3a1xT5QqTloQFAZyxjDXz+6l96RSX744Uv4wKWruHJ9FT/88CW8eU0Fn3r8AM2dwwuep+GJ6KulBc13kZyHXjrB2JSPT1y7nsvWVnLJ6nK+87tWvD5tpFaJ04CgMtZ/vnqKPzT38Jl3nseFtaXT27M9Lv7l1ovIy3bzv584sKBdO0cnffjN3NNWANPjFAZGEwsITx08w8UN5ZxTXQTAB9/cQMfAOHvbdBIAlTgNCCojTXr9fPWXTWyuK+VPttfP2l9VlMP/uv5cXjnWy/NNnQuWr6EYq6UFvVFCiH8+o7beUY6eGeK6jcumt12+vhK3S3ju6MJdq1p8NCCojPTvu9s4PTDOJ69dj8sVaTA9vG9bHbVlefzzM68vWClheCL2PEYAWW4X+dnuhBqVf3X4LABvO++NgFCcm8W2VWU836Sj+VXiNCCojOP3G777u2Nsri3h8nWVUdNluV189Kq17G8fYNfxvgXJ26CNqa+DEp0C++VjPdSX59NQWTBj+1XnVnOkY5CuoYm4z6kUaEBQGeiFlh5au0e4/bIGAgPdo7vxohqKcj089NKJBcnb9OI4Nrp/FufGP5+RMYbdJ/rYtqps1r5tDYFt2o6gEqUBQWWch185QVl+FjdsWhEzbX62h5u31vGLAx30DKf+l7PdNgRIrIRwsneU7uFJtjbMDggXrCzB7RL2aUBQCdKAoDLKwNgUzxzpZMeWGnKzok8vHep9F9fi9Rt+fqAjxbmz34YAgekrBsfia1TefSJQ9bU1QgkhL9vNhuVFWkJQCdOAoDLKUwc7mPT6uTGOUcgblhezYXkR/7XnVApzFmBn+cyg4tz4Swh7TvZTmONhndXdNNyWulL2tfXj9+ssqip+GhBURvnZ/g5WVxZwYW1JXMft2FLDqyf7ae8bTVHOAoIBoSDbTgkh/jaEwx2DbFxRjDtKz6rNtaUMTXg50Zva61SLkwYElTGGxqd4qbWH685fFrMxOdzbzw900Xz2SGr76Q9ZayFE+8IOVZyXxfCE1/aveb/fcLRjkPNWRC4dAJy7PLCv6cyQvQwrFUIDgsoYv32tmymfmdH/3q41VYWsqSzgmSNnU5CzNwxPTMUcpRxUkpeFMW+UKmI52TvKyKSPjSuLo6ZZt6wQEQ0IKjEaEFTGePbIWcrys3hT/ewGVTuuOa+al1t7GZ6If3SwXYGZTu0FhOD0FXarjQ53DAKwcUX06rL8bA/15fm8dlYDgoqfBgSVEbw+P881dfLWc6ttVcdEcs15y5j0+fnda6kbzRtXQIhzxtPDpwdxu4R1ywrnTLd+WRFNGhBUAjQgqIzw6sl++kenuCaB6qKgbavKKMnL4pkUtiMMTXgptLk4z/QiOTYDwuudQ6yqyI/Z3XbD8iKOdY8w4fXZOq9SQRoQVEZ49shZstzCFeujT1URi8ft4qpzq3ju6Fl8KeqWaWcthKDpRXJsVhk1dw5zTtXcpQOAc6oL8fkNx7pHbJ1XqSANCCoj/Oa1Li5uKJ/30phXb6imb3SKg6cGkpSzmYbHvbamrQAoybdfZTTl83OiZ5S11bEDwloraBzXgKDipAFBOV7P8ARHzwzxlnMSLx0EvXltBQAvtvbM+1yRJNSobGO08omeUbx+Y6uEEJz0rqVLA4KKjwYE5XgvtfYCb3yZz0d1US7rqgt5oSX5AcHr8zM25aMwx14ppiDbg0vslRBaugIrv9kpIRTmeKguytEqIxU3WwFBRK4XkSYRaRaReyLsv0JEXhURr4jcFLbvdhF53brdHrJ9q4gcsM75LxLvSCO1ZLzY2k1BtptNNfGNTo7msrUV7DrWy6Q3uctNBruz2i0huFxie7RycCnQtVUFMVIGrKkq0ICg4hYzIIiIG7gPeAewEbhVRDaGJTsJ3AE8HHZsOfB54BJgO/B5EQl2Iv834E5gnXW7PuGrUIvaCy09bF9dTpY7OQXaN6+tYGzKx/725E4CFxxgZmdiu6Di3CxbvYxauoZZXpxruw1ldWWhBgQVNzufsO1AszGm1RgzCTwC7AhNYIw5bozZD4T/5Ho78CtjTK8xpg/4FXC9iKwAio0xL5rAUlY/AN4734tRi8/ZwXFau0a4bO382w+CLlldgQhJrzYKBoTiOAKC3SmwWzqHWVttr3QAsKaygN6RSfpHJ20fo5SdgFADtIU8bre22RHt2BrrfiLnVEvIi9aXdjLaD4LKCrLZuKJ4+tzJEqwystuGAFCan0Xf6NwBwRhDS9eIrQbloFUV+UCgMVopu+wEhEh1+3Y7cUc71vY5ReROEWkUkcauLl0vdql5oaWbkrwszlsRff6eRLx5TQW7T/YxPpW8wVtDVluA3TYEgIqCbHpG5l645+zgBMMTXlsNykF15YGA0Jbi2V3V4mInILQDdSGPa4HTNs8f7dh2637Mcxpj7jfGbDPGbKuqqrL5tGqxaDzRx8UNZQlPVxHNpWsqmPT6k7q62HQJIY6AUF6QQ+/w3NU6wR5G8ZQQpgNC75jtY5SyExB2AetEZLWIZAO3ADttnv9p4DoRKbMak68DnjbGdABDInKp1bvog8BPEsi/WsQGRqdo7RrhogQns5tLcMWxRmsFsmQYjGNxnKCKwmxGJn1zllSCPYzOiaOEUJjjobwgW0sIKi4xA4IxxgvcTeDL/QjwmDHmkIjcKyLvARCRi0WkHbgZ+JaIHLKO7QW+QCCo7ALutbYBfBT4DtAMtAC/SOqVqYy3/1Tg1/vm2tKkn7usIJu1VQW8msSAMDzdqGy/DaGiIBuAnpHopYSWrmGKcjxUFeXElZ+6sjzadKEcFQdbP2WMMU8CT4Zt+1zI/V3MrAIKTfcA8ECE7Y3ABfFkVi0tweqcTXGujmbXtlXlPH34DH6/wZWEKqmh8Sk8LiHHY797bLkVEHqHJ6kpzYuYpqVrmLXVhXEvClRbns+hFE3RoRYnHamsHGtvWz9rqwqmZwVNtq2ryugfnaK1ezgp5wtOWxHPF3dFYbCEEL1hublzeHp+onjUleVzqn8sZRP5qcVHA4JyJGMMe9sG2FyX/OqioK0NVjvC8eRUGw1PeONqUAaoKAhUA/VEaVgeGp/i7OBEXGMQgurL85nyGc4Ojsd9rFqaNCAoRzo9ME738AQXpTAgrKksoCw/i91JakcYGp+iKI4xCADlVgmhN0obQqs1QV08PYyC6soDVVAntR1B2aQBQTnS3pNWg3IKA4KIsHVVWRIDQvwlhKIcD9luV9RG5ek5jOLoYRRUVxbseqoBQdmjAUE50r72frI9LjYsT+6AtHBbV5XT2j1Cz/Dcg8PsGBr3xjVtBQSCUnlBdtTnb+kaxuMS6q1xBfFYWZqHCLT16VgEZY8GBOVIe0/2c/7KYrLj6LGTiDfVB0og+5Iw0d3whJdCm4vjhCovyI5aZdTcOUxDZUFCE/tle1ysKM6lXUsIyiYNCMpxvD4/B04NpGT8QbhNtSW45I0qqvkILJ8Zf4+oqqIcOoeilxDsTnkdSV15vrYhKNs0ICjHeb1zmLEpHxfVpz4g5Gd7WL+siL3t8+uvb4xJqJcRBKp2OgZmV+tML5uZQINyUF15vo5WVrZpQFCOs7ctdSOUI7movpR9bf0EZmJPzPiUnymfiWuUclBNaS7dw5Ozpq+YXjYzgQbloLqyfM4OTiR1Ej+1eGlAUI6zr62f0vys6SmcU21zbSkDY1Mcn8dU0cE1DRIZRLeiJNA9tGNg5niB6WUz51VCCJz7VL82LKvYNCAox9nb1s/m2tK4p2pIVLBr63xmPp1PQFhpTVnREfalHQwIa+bRhlBrdT09pT2NlA0aEJSjjEx4ee3sUErHH4Rbv6yI/Gz3dFVVIuYTEIJzGIX/im8+O8yy4pyEGqqnz12mJQRlnwYE5SgHTw3gN6R0hHI4t0u4oKYkKQGhOC/+RuVlJTmIwOn+mVVGhzsG2TjPhYGWFeXgdomWEJQtGhCUowS/lC9M0Qyn0WypK+Xw6UEmveHLgtsznxJCjsdNZWHOjJ5G41M+Xu8c5vyV8/s/eNwulhfnaglB2aIBQTnKvvZ+6srzqCiMb+7/+dpSV8qkz8/RM4MJHT+fgACBdoTQL+2mM0P4/IYLauY/UrumLE9LCMoWDQjKUfa1DbClLvkrpMUy34blwbHgesqJBYS1lQU0nRmafnzwdGBcxHxLCAC1pXm061gEZYMGBOUYnUPjnOofY/MCVxcBrCzJpbIwhz0JBoSBsSmKcj0Jr/18QU0JnUMTdFpTVR88NUBxrofassiL5sSjpiyPM4PjTPkSqw5TS4cGBOUY+9oCv4q3LGCDcpCIsKWudF4lhPks5BNcFa7rWw9AQwNf+uMtPPevdyAPP5zwOYNqSvPwGzgzoOsiqLlpQFCOsbetb7rHTzpsqSuhpWuEwfGpuI8dGJtKaJRy0MYVxew4/DzrP/tJOHECF4bKnjNw553wox8lfF7QrqfKPg0IyjH2tQ2wYXkRuVnutDx/sO1if1v88xoNzLOEUJDj4dO/+yFZE2G/4kdH4TOfSfi8EDLOQRuWVQwaEJQj+P2Gfe39aakuCgpW2yQyFfZ8AwLAsoHOyDtOnpzXeVdGGfimVDhbAUFErheRJhFpFpF7IuzPEZFHrf0vi0iDtf02EdkbcvOLyBZr36+tcwb3VSfzwlRmae0eYWjcu6AjlMOV5GWxprIgoXaEZAQEU1sXeUd9/bzOm5sVGOegJQQVS8yAICJu4D7gHcBG4FYR2RiW7ENAnzHmHOBrwFcAjDE/MsZsMcZsAT4AHDfG7A057rbgfmNMlJ9HaikIfgmns4QAge6nCZcQ8ucXEFx//2X8eWG9ivLz4Utfmtd5wRqLoCUEFYOdEsJ2oNkY02qMmQQeAXaEpdkBPGjdfxy4RmbPTHYr8OP5ZFYtXnvb+inM8cxrZs9k2FxbwtnBibh65IxP+Zjw+uddQuC223B9+9uwahWIBP7efz/cdtv8zktgLIIGBBWLnYBQA7SFPG63tkVMY4zxAgNARVia9zM7IHzPqi76bIQAAoCI3CkijSLS2NXVZSO7KhPta+9nU01Jwv34k+XCuviX1Awuf1lekD3/DNx2Gxw/Dn5/4G8SggG8UULw+xNf80EtfnYCQqRPaPi7as40InIJMGqMORiy/zZjzCbgcuv2gUhPboy53xizzRizraqqykZ2VaYZn/JxpGOQLQuwQlosG1cU43FJXO0ISQ0IKVJTmsek10/3SOSlOpUCewGhHQht7aoFTkdLIyIeoAToDdl/C2GlA2PMKevvEPAwgaoptQQd7hhkymcWbIW0ueRmuTlvRXFcJYQeKyBUODwggHY9VXOzExB2AetEZLWIZBP4ct8ZlmYncLt1/ybgOWOtRygiLuBmAm0PWNs8IlJp3c8C3gUcRC1JTmlQDtpcV8L+9gHb1Su91q9uR5cQdHCasiFmQLDaBO4GngaOAI8ZYw6JyL0i8h4r2XeBChFpBj4BhHZNvQJoN8a0hmzLAZ4Wkf3AXuAU8O15X43KSPva+llenMvyktx0ZwWAC2tLGRr3cqxnxFb6nuFgCWFhZ2iNx3RA0BKCmoOt1TyMMU8CT4Zt+1zI/XECpYBIx/4auDRs2wiwNc68qkVqb1s/m+vSM11FJFtCZj610+upd2QSj0sSWhxnoRTnZlGU69ESgpqTjlRWadU/OsnxntG0THkdzdqqQgqy3bYblntHJikryF6wNaATVVOq6yKouWlAUGkVXCHNSSUEt0vYVFvCvnZ7cxr1jEw6ukE5qFYHp6kYNCCotNrXNoAIbErTDKfRbK61v6Rm78ikoxuUg7SEoGLRgKDSal97P+uqCxNeaSxVNsexpGbGBISyPIYmvNPLfSoVTgOCShtjTKBB2QHjD8LFs6Rmz/BERlQZ1ZTmA9rTSEWnAUGlTXvfGL0jk2md4TSa4JKasdoRpnx+Bse9lDu4y2mQjkVQsWhAUGmz12ED0kKJCJtrS2KWEM5aayAvK86AgDA9Wnk0zTlRTqUBQaXN3rZ+cjwuzl1elO6sRLS5rpTmrmGG5lhSs8OaFXVFaV7UNE5RWZhNjselJQQVlQYElTb72gIznGa5nfk23FxXijFwYI5qo9PWl+tKh4yynouIBHoaaUBQUTjzk6imLV8emBo//LZ8ebpzNj9TPj8HTg04sv0gaEtdKSLQeKIvapqPfTJQQji3Ptf26xPtNZ2+FXUgf3olUnRmepvbnZz3QU3Z3F1PF9v7bbFdT6ppQHC4s2fj254pms4MMeH1OzoglORlsWF5Ma8c642aZkzG8U94MJMzu83O9frEfO2u/ALU/x6u+ML0Jn+U4RDxvg9ilRAW2/ttsV1Pqjl38hW1qAWnl77u47eAJ+x3yfveBx/7GIyOwg03zD74jjsCt+5uuOmm2fs/+lF4//uhrQ0+EGGZjU9+Et79bmhqgrvumr3/b/8W3vY22LuXb3z7E3QNT+B/qJzptXu+/GW47DJ44QV+uu8vkEM+Jvn76cP/in9mH1vgmWfgi1+cdfr1fIvXOJd38VM+yVdn7OspnOCmLXvA5cd90Xd47Ld7KB+e2aX1Jh6nh0pu5/vcwffhqrAnePLJwNKb3/gGPPbYjF1/0T/GI9d/jvEpH7lf/xr87GczDyWPG/jF7P+JWhK0hKDSYu/JfsoLAo2cTlacl4Xfbxid9EbcL24/xudO2vP94MoTIIFpt434+cEVJ5J2boBs6/+t7QgqErGWLcgI27ZtM42NjenOxoKaa760DHrpZrnua7+htiyfB+64ON1ZmVPn0Djbv/Qsn7nhPP78ijWz9tfd/QyjLdX0PnXhrH3RXp+or2lhB/zlGsgKWc95Kg++3grD0Su943kfvHKsl/d960V+8GfbuWL97BUIF9v7bbFdT6JEZLcxZlusdM7+eaYWpcHxKV7vHHbkCOVw1UW5rK4s4OUI7QgTXh/uwgl8g0nqcnrlF0DCGgvEN6MtYb50cJqaiwYEh1u2LL7tmWBfWz/GwJtWOT8gAFzcUEbjid5ZK6i1dgUW0JnqK5h1zFyvT9R9tS+CZ3LmNs8k1L2AK8onNd73wbKiHNwuidrTaLG93xbb9aSaNio73Jkz6c5B8u052Y8Iju5hFOrihnIea2zn9c7hGYPoms4MAbDn+SLWx/EFE/013RP9oG/aP/9cPG4Xy4tzo5YQFtv7bbFdT6ppCUEtuFdP9rGuupBih81wGs2layoA+H1z94ztR88MkeUWVlfOLiE4WayxCGrp0oCgFpQxhj0n+3lTvXNWSIulrjyfddWFPHd0Zuf1184Osbaq0LEjraOp1dHKKorMeierjNfaPcLA2BQX1WdGdVHQ1edV83Jr74x5jZrODDl2Hqa51JTlcWZwHK8v9uI/amnRgKAW1J6TgQFpmVRCAHjbecvw+g3PHe0EAovinOofy8yAUJqHz284MzgeO7FaUmwFBBG5XkSaRKRZRO6JsD9HRB619r8sIg3W9gYRGRORvdbtmyHHbBWRA9Yx/yJOX6FcJcWrJ/soyvWwtqow3VmJy9b6MurK83j45ZMAPHUw0Fp5ZYS+/E433fVU2xFUmJgBQUTcwH3AO4CNwK0isjEs2YeAPmPMOcDXgK+E7Gsxxmyxbh8J2f5vwJ3AOut2feKXoTLFqyf62FJXisuVWfHf5RJuu2QVLx/r5UjHID/bf5o1lQVsXFGc7qzFbXpdBG1HUGHslBC2A83GmFZjzCTwCLAjLM0O4EHr/uPANXP94heRFUCxMeZFExgq/QPgvXHnXmWU4Qkvr50dyrixcccbAAARKklEQVTqoqD3baujND+LO773Ci+29vCuzSvJxILtylItIajI7ASEGqAt5HG7tS1iGmOMFxgAKqx9q0Vkj4j8RkQuD0nfHuOcAIjInSLSKCKNXV1dNrKrnGp/Wz9+Q8Y1KAeVF2TznQ9uY2TCxzs3reDPL1+d7iwlJDfLTWVhjpYQ1Cx2BqZF+gkUPgtItDQdQL0xpkdEtgL/JSLn2zxnYKMx9wP3Q2AuIxv5VQ61x1qO8qK6zCwhAGxrKGff56/DnWFVXuFqyrTrqZrNTgmhHagLeVwLnI6WRkQ8QAnQa4yZMMb0ABhjdgMtwHorfW2Mc6pF5tUTfaytKqAkPzMGpEWT6cEArLEIWmWkwtgJCLuAdSKyWkSygVuAnWFpdgK3W/dvAp4zxhgRqbIapRGRNQQaj1uNMR3AkIhcarU1fBD4SRKuRzmUMYY9bZk1IG0xC5YQMmm2Y5V6MauMjDFeEbkbeBpwAw8YYw6JyL1AozFmJ/Bd4CERaQZ6CQQNgCuAe0XEC/iAjxhjgtNGfhT4PpAH/MK6qUWqpWuE3pFJtq7SgOAENaV5THj9dA9PUlWUk+7sKIewNbmdMeZJ4MmwbZ8LuT8O3BzhuP8A/iPKORuBC+LJrMpcwWUoL1lTESOlWgihXU81IKggHamsFsSu471UFubQUJGf7qwoAvMzAZzoGUlzTpSTaEBQC+KVY71csro8I/vtL0arKvIRgePdo+nOinIQDQgq5dr7RjnVP8b21eXpzoqy5Ga5WVmSx3EtIagQGhBUyu06Hmg/uLhBA4KTNFTm09qtAUG9QQOCSrlXjvVSnOvJyJlBF7PVlQUc14CgQmhAUCn38rFeLm4oXxQDuhaThooCBsam6BuZjJ1YLQkaEFRKdQ6O09o1ou0HDhRc+lOrjVSQBgSVUi+09ADwlnMq05wTFS4YELTaSAVpQFAp9fvmbkrzszJy3YDFrq48H7dLtKeRmqYBQaWMMYY/NHfzlrWVGbcgzlKQ5XZRW5anVUZqmgYElTKt3SN0DIxrdZGDaU8jFUoDgkqZPzR3A/DfNCA4VkNFAce6R3TWUwVoQFAp9IfmburK86jX+Ysca3VlAaOTPrqGJtKdFeUAGhBUSvj8hhdbenjLWi0dOJl2PVWhNCColNhzso/BcS+Xr6tKd1bUHNZWFwLQ3Dmc5pwoJ9CAoFLi2aOdeFzC5eu1hOBkK0tyKcr1cPTMYLqzohxAA4JKieeOdLJ9dTnFuZm9fvJiJyJsWF5E05mhdGdFOYAGBJV0bb2jNJ0d4uoN1enOirLh3OVFHD0zpD2NlAYElXzPN3UCaEDIEOcuL2Zo3MvpgfF0Z0WlmQYElXTPHe1kdWUBa6oK050VZcMGa1ryJm1HWPJsBQQRuV5EmkSkWUTuibA/R0Qetfa/LCIN1vZrRWS3iByw/l4dcsyvrXPutW76c3IRGJ308kJLj5YOMkhwnYqj2o6w5HliJRARN3AfcC3QDuwSkZ3GmMMhyT4E9BljzhGRW4CvAO8HuoF3G2NOi8gFwNNATchxtxljGpN0LcoBnjvayaTXz7Ubl6U7K8qm4twsakrzONqhAWGps1NC2A40G2NajTGTwCPAjrA0O4AHrfuPA9eIiBhj9hhjTlvbDwG5IpKTjIwrZ/r5/g6qinJ0ucwMc672NFLYCwg1QFvI43Zm/sqfkcYY4wUGgIqwNH8M7DHGhI6R/55VXfRZEdHpMDPcyISX5452csMFy3V1tAxz7vIiWrqGmfT6050VlUZ2AkKkT3Z4/7Q504jI+QSqke4K2X+bMWYTcLl1+0DEJxe5U0QaRaSxq6vLRnZVujx7tJMJr593Xrgy3VlRcdqwvAiv39DarSOWlzI7AaEdqAt5XAucjpZGRDxACdBrPa4FngA+aIxpCR5gjDll/R0CHiZQNTWLMeZ+Y8w2Y8y2qiqdBsHJfr7/NNVFOWxbVZburKg4nWctYHT4tPY0WsrsBIRdwDoRWS0i2cAtwM6wNDuB2637NwHPGWOMiJQCPwc+bYz5QzCxiHhEpNK6nwW8Czg4v0tR6TQ0PsXzTV3csGmFLoaTgdZWFZKf7WZ/+0C6s6LSKGZAsNoE7ibQQ+gI8Jgx5pCI3Csi77GSfReoEJFm4BNAsGvq3cA5wGfDupfmAE+LyH5gL3AK+HYyL0wtrJ/u62DS62fHFq0uykRul7CppoS9bf3pzopKo5jdTgGMMU8CT4Zt+1zI/XHg5gjHfRH4YpTTbrWfTeV0jza2ce6yIrbUlaY7KypBW+pK+d4fjjPp9ZPt0TGrS5G+6mrejnQMsq+tn/dfXId2Fstcm+tKmfT5OdKh7QhLlQYENW+P7moj2+3ixovCeyOrTHJRfaB0t/tEX5pzotJFA4Kal/EpH0/sOcV15y+jrCA73dlR87CiJI/asjx2He9Nd1ZUmmhAUPPyX3tOMTA2xZ9sr093VlQSbF9dzivHenUq7CVKA4JKmN9vuP93rZy/spg3rw0fmK4y0aWrK+gZmaSlSweoLUUaEFTCnj3aSWvXCHdesUYbkxeJ7asDc1C92NKT5pyodNCAoBL2rd+0UFOaxzs3rUh3VlSSrKrIp648j9+8ptPELEUaEFRCXmrtofFEHx++fDUet76NFgsR4ar11bzQ0sOE15fu7KgFpp9kFTdjDH//5BFWlORyqzYmLzpXrq9idNJH43HtfrrUaEBQcfvZ/g72tQ/wiWvXk5vlTnd2VJJddk4FuVkufnnoTLqzohaYBgQVlwmvj398+igblhfxR2+qTXd2VArkZ3u4an01vzh4Br9fu58uJRoQVFy+8XwLbb1jfPqG83QRnEXshgtX0Dk0QaOOWl5SNCAo2w6dHuC+55u58aIarlyva1MsZtdsqCY/281/7G5Pd1bUAtKAoGyZ9Pr5m3/fT1lBNp9/98Z0Z0elWEGOh3dduIKf7j/N8IQ33dlRC0QDgrLl//z0EEc6BvnyjZsozdc5i5aCW7fXMzrp44lXtZSwVGhAUDE99NIJfvTySe66cg3XblyW7uyoBbKlrpQtdaV867eteH3+dGdHLQANCGpOzx45y9/tPMTVG6r5X2/fkO7sqAUkInz8refQ3jfGE3tOpTs7agFoQFBRPXWwg7se2s35K4v5+i1btFfREnTNhmo215bwT083MaJtCYueBgQ1izGGB184zscf3sOFtSX88MOXUJSble5sqTRwuYTPv+d8Oocm+Kenm9KdHZViGhDUDANjU9z94z18fuchrlpfxQ8+dAnFGgyWtDfVl3HHZQ18/4Xj/Orw2XRnR6WQBgQFgM9veOSVk7z1//6apw6e4VPXb+DbH9xGYY4n3VlTDnDPOzawqaaE//HjPew+oSuqLVa2AoKIXC8iTSLSLCL3RNifIyKPWvtfFpGGkH2ftrY3icjb7Z5TLYzB8SkefOE4V3/119zznwdYW1XAzrvfwkevWotL2wyUJTfLzQN3XMyy4hxu+87L/GSvNjIvRhJrqTwRcQOvAdcC7cAu4FZjzOGQNB8DLjTGfEREbgFuNMa8X0Q2Aj8GtgMrgWeA9dZhc54zkm3btpnGxsb4r1JNM8bQ0jXCS609/Lqpi9++1sWkz89F9aXcdcUa3n7+cl3sRkXVPTzBXQ/tZveJPq7eUM3HrlrL1lVl+p5xOBHZbYzZFiudnfqA7UCzMabVOvEjwA4g9Mt7B/B31v3HgX+VwDtkB/CIMWYCOCYizdb5sHFOZZMxhkmfn/FJP2NTPsamfAyOTdE1NEHX8ARdQxO0943SdHaY5rNDjEwG5rlfWZLLB968ivdsXsnmutI0X4XKBJWFOTx656V85/fHuO/5Zm76Zif15fm89dwqNtWWsrqygOqiHKqKcnQm3AxkJyDUAG0hj9uBS6KlMcZ4RWQAqLC2vxR2bI11P9Y5k+YzTxzg5ZCFw6fLRCGFo+Dd8DTBApSxtoQWqMILV9GOjXT87DRvJJ6dJkqejMHrN4xN+WblJVxlYTbrlxVx87Y6zltRxCWrK1hVka+/7FTcPG4XH7lyLf/90lU8dfAMP9l7isd3t/PgiydmpMt2u8hyC9keF1luF9keF26XEPqOC33/zXgnSsS70dMvAd+9/WLqK/JT+hx2AkKk/3v410+0NNG2R2q7iPiVJiJ3AncC1NcnthjLytI8zl1WZJ1wxp+IbzCJkkbCEwLBt/fsY2bun7Et7EThx0Y6Plqe3C4hP9tNblbglpflJi/bRWFO1vQvtYrCbHI8+mtNJVdhjoebttZy09Za/H5Da/cI7X2jdA4FSqXDE16mvH4mfX4mrb8+/+wfPjDzwx9ajT3jSyHCD6ylJNuT+j5AdgJCO1AX8rgWOB0lTbuIeIASoDfGsbHOCYAx5n7gfgi0IdjI7ywff+s5iRymlLLJ5RLOqS7knOrCdGdFzYOdkLMLWCciq0UkG7gF2BmWZidwu3X/JuA5EwjzO4FbrF5Iq4F1wCs2z6mUUmoBxSwhWG0CdwNPA27gAWPMIRG5F2g0xuwEvgs8ZDUa9xL4gsdK9xiBxmIv8HFjjA8g0jmTf3lKKaXsitnt1Em026lSSsXPbrdTHamslFIK0ICglFLKogFBKaUUoAFBKaWURQOCUkopIMN6GYlIF3AiZsLIKoHuJGYnnfRanEmvxZkWy7XM5zpWGWOqYiXKqIAwHyLSaKfbVSbQa3EmvRZnWizXshDXoVVGSimlAA0ISimlLEspINyf7gwkkV6LM+m1ONNiuZaUX8eSaUNQSik1t6VUQlBKKTWHRR8QRORmETkkIn4R2RayvUFExkRkr3X7ZjrzaUe0a7H2fVpEmkWkSUTenq48JkJE/k5EToW8FjekO0/xEJHrrf97s4jck+78zIeIHBeRA9brkFEzSYrIAyLSKSIHQ7aVi8ivROR1629ZOvNoV5RrSfnnZNEHBOAg8EfAbyPsazHGbLFuH1ngfCUi4rWIyEYCU46fD1wPfENEMm2JtK+FvBZPpjszdln/5/uAdwAbgVut1yOTvdV6HTKtq+b3Cbz/Q90DPGuMWQc8az3OBN9n9rVAij8niz4gGGOOGGOa0p2PZJjjWnYAjxhjJowxx4BmYPvC5m7J2g40G2NajTGTwCMEXg+1wIwxvyWwHkuoHcCD1v0HgfcuaKYSFOVaUm7RB4QYVovIHhH5jYhcnu7MzEMN0BbyuN3alknuFpH9VlE5I4r1lsXwvw9lgF+KyG5rPfNMt8wY0wFg/a1Oc37mK6Wfk0UREETkGRE5GOE21y+1DqDeGHMR8AngYREpXpgcR5fgtUiEbY7qPhbjuv4NWAtsIfC6fDWtmY2P4//3cXqLMeZNBKrAPi4iV6Q7Q2payj8nMZfQzATGmLclcMwEMGHd3y0iLcB6IK0NaYlcC4FfpXUhj2uB08nJUXLYvS4R+TbwsxRnJ5kc/7+PhzHmtPW3U0SeIFAlFqn9LVOcFZEVxpgOEVkBdKY7Q4kyxpwN3k/V52RRlBASISJVwYZXEVkDrANa05urhO0EbhGRHBFZTeBaXklznmyzPqhBNxJoPM8Uu4B1IrJaRLIJNO7vTHOeEiIiBSJSFLwPXEdmvRaR7ARut+7fDvwkjXmZl4X4nCyKEsJcRORG4P8BVcDPRWSvMebtwBXAvSLiBXzAR4wxC96IE49o12KMOSQijwGHAS/wcWOML515jdM/isgWAlUtx4G70psd+4wxXhG5G3gacAMPGGMOpTlbiVoGPCEiEPhueNgY81R6s2SfiPwYuAqoFJF24PPAPwCPiciHgJPAzenLoX1RruWqVH9OdKSyUkopYAlXGSmllJpJA4JSSilAA4JSSimLBgSllFKABgSllFIWDQhKKaUADQhKKaUsGhCUUkoB8P8B1xRdgraEbJ0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def doubling_update(x0, f_x0, y, w=0.01, p=100):\n", + " u = np.random.uniform()\n", + " l = x0 - w*u\n", + " r = l + w\n", + " k = p\n", + " left = []\n", + " right = []\n", + "\n", + " while k > 0 and (y < f_x(l) or y < f_x(r)):\n", + " v = np.random.uniform()\n", + " if v < .5:\n", + " l = l - (r-l)\n", + " left.append(l)\n", + " else:\n", + " r = r + (r-l)\n", + " right.append(r)\n", + " k = k-1\n", + " patches = np.concatenate((left,right), axis=None)\n", + " return l, r, patches\n", + " \n", + "double = doubling_update(x0, f_x0, y)\n", + "\n", + "ascisse = np.array([y for i in range(len(double[2]))])\n", + "plt.plot(double[2],np.array([y for i in range(len(double[2]))]) , 'bs')\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define updating rule for sampling x_n from new interval" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def new_x_double(y, l, r):\n", + " new_x0 = sample_x(l, r)\n", + " while y > f_x(new_x0):\n", + " new_x0 = sample_x(l, r)\n", + " return new_x0\n", + "\n", + "new_double = new_x_double(y, double[0], double[1])\n", + "\n", + "ascisse = np.array([y for i in range(len(double[2]))])\n", + "plt.plot(double[2], ascisse, 'bs')\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.plot([new_double], [y], 'yo')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample and plot results" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = []\n", + "i = 0\n", + "l = double[0]\n", + "r = double[1]\n", + "\n", + "while i <10000:\n", + " new_x = new_x_double(y, l, r)\n", + " new_fx = f_x(new_x)\n", + " new_sampled_y = sample_y(new_x, new_fx)\n", + " new_double = doubling_update(new_x, new_fx, new_sampled_y)\n", + " samples.append(round(new_x,2))\n", + " y = new_sampled_y\n", + " l = new_double[0]\n", + " r = new_double[1]\n", + " i = i+1 \n", + " \n", + "num_bins = 100\n", + "plt.plot(X, Y)\n", + "n, bins, patches = plt.hist(samples, num_bins, facecolor='blue', alpha=0.5, normed=1)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define Stepout Update function" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.017098164638967638\n" + ] + } + ], + "source": [ + "def stepout_update(x0, f_x0, y, w=1, m=40):\n", + " u = np.random.uniform()\n", + " l = x0 - w*u\n", + " r = l + w\n", + " v = np.random.uniform()\n", + " j = math.floor(m*v)\n", + " k = (m-1) - j\n", + " patches = []\n", + " \n", + " while j>0 and y0 and y" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def update_x_stepout(y, l, r):\n", + " new_x = sample_x(l, r)\n", + " while y > f_x(new_x):\n", + " new_x = sample_x(l, r)\n", + " return new_x\n", + "\n", + "new_x_stepout = update_x_stepout(y, stepout[0], stepout[1])\n", + "print(new_x_stepout)\n", + "\n", + "plt.plot(stepout[2], np.array([y for i in range(len(stepout[2]))]), 'bs')\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.plot([new_x_stepout], [y], 'yo')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample and plot results" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = []\n", + "i = 0\n", + "l = stepout[0]\n", + "r = stepout[1]\n", + "\n", + "while i <10000:\n", + " new_x = update_x_stepout(y, l, r)\n", + " new_fx = f_x(new_x)\n", + " new_sampled_y = sample_y(new_x, new_fx)\n", + " new_stepout = stepout_update(new_x, new_fx, new_sampled_y)\n", + " samples.append(round(new_x,2))\n", + " y = new_sampled_y\n", + " l = new_stepout[0]\n", + " r = new_stepout[1]\n", + " i = i+1\n", + "\n", + "plt.plot(X, Y)\n", + "num_bins = 100\n", + "n, bins, patches = plt.hist(samples, num_bins, facecolor='blue', alpha=0.5, normed=1)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Slice Sampling Unimodal.ipynb b/Slice Sampling Unimodal.ipynb new file mode 100644 index 0000000..5a48963 --- /dev/null +++ b/Slice Sampling Unimodal.ipynb @@ -0,0 +1,621 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Unimodal Slice Sampling Example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 449, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "import scipy.stats as stats\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate Unimodal Gaussian" + ] + }, + { + "cell_type": "code", + "execution_count": 450, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x_low = -5\n", + "x_high = 5\n", + "x_step = 0.1\n", + "\n", + "X = np.arange(x_low, x_high, x_step)\n", + "Y = stats.norm.pdf(X)\n", + "\n", + "plt.plot(X, Y)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for initial sample for x0" + ] + }, + { + "cell_type": "code", + "execution_count": 460, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.2647152950400775\n" + ] + } + ], + "source": [ + "low = X[0] \n", + "high = X[-1]\n", + "\n", + "def sample_x(low=low, high=high):\n", + " x0 = np.random.uniform(low=low, high=high)\n", + " return x0\n", + "\n", + "x0 = sample_x(low, high)\n", + "\n", + "print(x0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for calculating f(x0)" + ] + }, + { + "cell_type": "code", + "execution_count": 461, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def f_x(x):\n", + " ind = np.argmin(np.abs(X - x))\n", + " f_x0 = Y[ind]\n", + " return f_x0\n", + "\n", + "f_x0 = f_x(x0)\n", + "\n", + "plt.plot(X, Y)\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for sampling in the interval (0, f(x_0)), calculate y" + ] + }, + { + "cell_type": "code", + "execution_count": 462, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.12571049844872598\n" + ] + } + ], + "source": [ + "def sample_y(x0, f_x0):\n", + " y = np.random.uniform(low=0, high=f_x0)\n", + " return y\n", + "\n", + "y = sample_y(x0, f_x0)\n", + " \n", + "plt.plot(X, Y)\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.show()\n", + "print(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define horizontal slice using y" + ] + }, + { + "cell_type": "code", + "execution_count": 463, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def slice_y(y):\n", + " _x = np.linspace(-5, 5, 50)\n", + " horizontal_line = np.array([y for i in range(len(_x))]) \n", + " return _x, horizontal_line\n", + "\n", + "line = slice_y(y)\n", + "\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define function for estimating the sampling interval using doubling update" + ] + }, + { + "cell_type": "code", + "execution_count": 464, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def doubling_update(x0, f_x0, y, w=0.01, p=100):\n", + " u = np.random.uniform()\n", + " l = x0 - w*u\n", + " r = l + w\n", + " k = p\n", + " left = []\n", + " right = []\n", + "\n", + " while k > 0 and (y < f_x(l) or y < f_x(r)):\n", + " v = np.random.uniform()\n", + " if v < .5:\n", + " l = l - (r-l)\n", + " left.append(l)\n", + " else:\n", + " r = r + (r-l)\n", + " right.append(r)\n", + " k = k-1\n", + " patches = np.concatenate((left,right), axis=None)\n", + " return l, r, patches\n", + " \n", + "double = doubling_update(x0, f_x0, y)\n", + "\n", + "ascisse = np.array([y for i in range(len(double[2]))])\n", + "plt.plot(double[2],np.array([y for i in range(len(double[2]))]) , 'bs')\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define updating rule for sampling x_n from new interval" + ] + }, + { + "cell_type": "code", + "execution_count": 465, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def new_x_double(y, l, r):\n", + " new_x0 = sample_x(l, r)\n", + " while y > f_x(new_x0):\n", + " new_x0 = sample_x(l, r)\n", + " return new_x0\n", + "\n", + "new_double = new_x_double(y, double[0], double[1])\n", + "\n", + "ascisse = np.array([y for i in range(len(double[2]))])\n", + "plt.plot(double[2], ascisse, 'bs')\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.plot([new_double], [y], 'yo')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample and plot results" + ] + }, + { + "cell_type": "code", + "execution_count": 467, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = []\n", + "i = 0\n", + "l = double[0]\n", + "r = double[1]\n", + "\n", + "while i <10000:\n", + " new_x = new_x_double(y, l, r)\n", + " new_fx = f_x(new_x)\n", + " new_sampled_y = sample_y(new_x, new_fx)\n", + " new_double = doubling_update(new_x, new_fx, new_sampled_y)\n", + " samples.append(round(new_x,2))\n", + " y = new_sampled_y\n", + " l = new_double[0]\n", + " r = new_double[1]\n", + " i = i+1 \n", + " \n", + "num_bins = 100\n", + "n_d, bin_d, patche_d = plt.hist(samples, num_bins, facecolor='blue', alpha=0.5, normed=1)\n", + "plt.plot(X, Y)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define Stepout Update function" + ] + }, + { + "cell_type": "code", + "execution_count": 468, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.054679060166578544\n" + ] + } + ], + "source": [ + "def stepout_update(x0, f_x0, y, w=1, m=40):\n", + " u = np.random.uniform()\n", + " l = x0 - w*u\n", + " r = l + w\n", + " v = np.random.uniform()\n", + " j = math.floor(m*v)\n", + " k = (m-1) - j\n", + " patches = []\n", + " \n", + " while j>0 and y0 and y" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def update_x_stepout(y, l, r):\n", + " new_x = sample_x(l, r)\n", + " while y > f_x(new_x):\n", + " new_x = sample_x(l, r)\n", + " return new_x\n", + "\n", + "new_x_stepout = update_x_stepout(y, stepout[0], stepout[1])\n", + "print(new_x_stepout)\n", + "\n", + "plt.plot(stepout[2], np.array([y for i in range(len(stepout[2]))]), 'bs')\n", + "plt.plot(X, Y)\n", + "plt.plot(line[0], line[1], 'r--')\n", + "plt.plot([x0], [f_x0], 'ro')\n", + "plt.plot([x0], [y], 'g^')\n", + "plt.plot([new_x_stepout], [y], 'yo')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample and plot results" + ] + }, + { + "cell_type": "code", + "execution_count": 471, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = []\n", + "i = 0\n", + "l = stepout[0]\n", + "r = stepout[1]\n", + "\n", + "while i <10000:\n", + " new_x = update_x_stepout(y, l, r)\n", + " new_fx = f_x(new_x)\n", + " new_sampled_y = sample_y(new_x, new_fx)\n", + " new_stepout = stepout_update(new_x, new_fx, new_sampled_y)\n", + " samples.append(round(new_x,2))\n", + " y = new_sampled_y\n", + " l = new_stepout[0]\n", + " r = new_stepout[1]\n", + " i = i+1\n", + "\n", + "plt.plot(X, Y)\n", + "num_bins = 100\n", + "n, bins, patches = plt.hist(samples, num_bins, facecolor='blue', alpha=0.5, normed=1)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculate KL Divergence" + ] + }, + { + "cell_type": "code", + "execution_count": 374, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.961299091032062e-06\n", + "0.0\n", + "0.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/lorcandelaney/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:9: RuntimeWarning: divide by zero encountered in log\n", + " if __name__ == '__main__':\n", + "/Users/lorcandelaney/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:9: RuntimeWarning: invalid value encountered in multiply\n", + " if __name__ == '__main__':\n", + "/Users/lorcandelaney/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:10: RuntimeWarning: divide by zero encountered in log\n", + " # Remove the CWD from sys.path while we load stuff.\n", + "/Users/lorcandelaney/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:10: RuntimeWarning: invalid value encountered in multiply\n", + " # Remove the CWD from sys.path while we load stuff.\n" + ] + } + ], + "source": [ + "true_pdf = Y\n", + "model_double = n_d\n", + "model_stepout = n_s\n", + "\n", + "\n", + "def kl_div(true_pdf, model, interval, max_samples):\n", + " new_x = update_x_stepout(y, l, r)\n", + " new_fx = f_x(new_x)\n", + " new_sampled_y = sample_y(new_x, new_fx)\n", + " new_stepout = stepout_update(new_x, new_fx, new_sampled_y)\n", + " samples.append(round(new_x,2))\n", + " y = new_sampled_y\n", + " l = new_stepout[0]\n", + " r = new_stepout[1]\n", + " i = i+1\n", + " \n", + "i = 0 \n", + "\n", + "for in \n", + "print(Y[2])\n", + "print(model_double[2])\n", + "print(model_double[2])\n", + "\n", + "kl1 = (model_double * np.log(model_double/Y)).sum()\n", + "kl2 = (model_stepout * np.log(model_stepout/Y)).sum()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}