Skip to content

Instantly share code, notes, and snippets.

@fehiepsi
Created January 31, 2019 00:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fehiepsi/fa2f7980aef1e7242670a2470694ee2e to your computer and use it in GitHub Desktop.
Save fehiepsi/fa2f7980aef1e7242670a2470694ee2e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns; sns.set(rc={\"figure.figsize\": (8, 6)})\n",
"import torch\n",
"\n",
"import pyro\n",
"import pyro.distributions as dist\n",
"from pyro.infer.mcmc import MCMC, NUTS\n",
"\n",
"pyro.enable_validation()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c155382149284ee5aec96e62b326e2d1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(IntProgress(value=0, description='Warmup', max=1300, style=ProgressStyle(description_width='ini…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"count_data = torch.tensor([\n",
" 13, 24, 8, 24, 7, 35, 14, 11, 15, 11, 22, 22, 11, 57, \n",
" 11, 19, 29, 6, 19, 12, 22, 12, 18, 72, 32, 9, 7, 13, \n",
" 19, 23, 27, 20, 6, 17, 13, 10, 14, 6, 16, 15, 7, 2, \n",
" 15, 15, 19, 70, 49, 7, 53, 22, 21, 31, 19, 11, 18, 20, \n",
" 12, 35, 17, 23, 17, 4, 2, 31, 30, 13, 27, 0, 39, 37, \n",
" 5, 14, 13, 22,\n",
"], dtype=torch.float)\n",
"\n",
"def model(data):\n",
" alpha = (1. / data.mean())\n",
" lambda1 = pyro.sample(\"lambda1\", dist.Exponential(rate=alpha))\n",
" lambda2 = pyro.sample(\"lambda2\", dist.Exponential(rate=alpha))\n",
"\n",
" tau = pyro.sample(\"tau\", dist.Uniform(0, 1))\n",
" lambda1_size = (tau * data.size(0) + 1).long()\n",
" lambda2_size = data.size(0) - lambda1_size\n",
" lambda_ = torch.cat([lambda1.expand((lambda1_size,)),\n",
" lambda2.expand((lambda2_size,))])\n",
" \n",
" with pyro.plate(\"data\", data.size(0)):\n",
" pyro.sample(\"obs\", dist.Poisson(lambda_), obs=data)\n",
"\n",
"nuts_kernel = NUTS(model, jit_compile=True, ignore_jit_warnings=True, max_tree_depth=7)\n",
"posterior = MCMC(nuts_kernel, num_samples=1000, warmup_steps=300)\n",
"posterior.run(count_data);"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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i7Y1k3rfW6SvWXFxsU6ePKktW7bI4XBcthYNDQ1yOByXnaVL0tixY/Xll18GH/dm3SI+1N1ut2bPnq333ntPklRVVSWv16trr732sn0zMzO1Z88eBQIBNTQ06E9/+pMyMjIGesq90pe+amtrg38+duyYvvzyy+DvmiLZG2+8oblz52rEiBHd7hNNa/aN3vQVbWs2ZswYnTlzRp999pmkr2/G5PV6u3wRjbY160tv0bZu9fX1kr6+vLt582bl5+crLi7usv2ibc2k3vcWyWu2efNmVVRUaNu2bRo6dKgkadq0aWpra9ORI0ckSbt371ZmZmaX4zMzM/Xb3/5WkvT555/r3//+t+bMmdPzQW16o58t1q1bZ82ZM8dKTU21brvtNuuuu+6yLMuyTp06ZS1ZssTKysqy7rnnHuvdd98Njlm+fLn18ccfW5ZlWR0dHVZRUZE1b948a968edbu3bsHpY9LhdrXU089Zd19991Wdna2tWjRok77DbbuerMsy1q4cKH1l7/85bIx0bxmltW7vqJxzd566y0rKyvLys7OtrKzs6133nknOCYa1syyQu8tUtetu76effZZKzMz05o3b55VVFRktbW1BcdE+5r1trdIXbPjx49bU6ZMsRYuXGjl5ORYOTk51ooVKyzLsqwPPvjAysrKshYsWGA98MADnT75lJOTY505c8ayLMtqaWmxHnvsMWv+/PnWwoULO/277Q53aQMAwBARf/kdAAD0DqEOAIAhCHUAAAxBqAMAYAhCHQAAQxDqQBRJT0/X3//+d1trvv/++7rzzjt7vf/evXt1//332zoHAPYg1AGEzfHjx7Vs2TLNnj1bU6dOHezpAMYj1AGEjdPpVGZmpp5//vnBngpwVSDUgSj08ccfKy8vT2lpabrjjju0du1aXbhwIbh96tSp2rlzpxYuXKibb75ZW7Zs0alTp5Sfn6+ZM2eqoKCg0/6S9Morr2j27NlKT0/XH/7wh+DzjY2NeuSRRzRz5kx9//vf16lTpzqNW79+vebOnauZM2dq0aJFwa+/lKRJkybpvvvu0/XXXx+mvwkAF4v4W68CuJzD4dAzzzyjadOm6cyZM3rooYf0m9/8Rg888EBwn8OHD2vv3r2qqanRvffeqw8//FAbN25UUlKS8vLytG/fPt17772SpLNnz6qxsVF/+9vfdPToUT388MOaNm2aJk2apLVr18rlcunw4cP64osvtGzZMo0fPz54nG9/+9v64Q9/qISEBL3++usqKCjQwYMH5XK5BvqvBbjqcaYORKFp06ZpxowZcjqdGj9+vPLy8lReXt5pn+XLlys+Pl7XX3+9pkyZottvv10TJkxQQkKC7rzzTlVWVnbav6CgQEOHDtWtt96quXPn6u2335bf79eBAwf0ox/9SHFxcZoyZUrwB4Fv5ObmasSIEXI6nVq6dKkuXLjQ5d0GAYQfZ+pAFKqqqtKLL76oiooKnT9/Xn6/XzfeeGOnfUaOHBn8s8vluuzx2bNng48TExM73QHa57IWAAABnklEQVRr7NixqqurU0NDgzo6OpSSktJp28Vee+01/e53v1NdXZ1iYmLU3NwccfezBq4WnKkDUWj16tWaNGmSysrK9K9//Us//vGPFcq9mb766iu1trYGH9fU1GjUqFFyu91yOp2qqanptO0bR44c0S9/+Utt2bJF5eXlOnLkiBISEkKaC4D+I9SBKNTS0qLhw4dr+PDhOnHihHbt2hVyzZdfflkXLlzQkSNH9O677yozM1OxsbFasGCBtm7dqvPnz+t///uf3njjjU7ziI2NldvtVkdHh7Zu3arm5ubgdsuy5PP51N7eLkny+XyXvUEPgH0IdSAKPf300yotLdXMmTP13HPP6a677gqp3siRI5WYmKg5c+boiSee0OrVqzV58mRJUlFRkVpbW3X77bersLBQixYtCo674447NGfOHGVkZCg9PV0ul6vTpfovv/xSN910k+6++25J0k033aTMzMyQ5gqge9xPHQAAQ3CmDgCAIQh1AAAMQagDAGAIQh0AAEMQ6gAAGIJQBwDAEIQ6AACGINQBADAEoQ4AgCH+L9j8MX9xZDbMAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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jlqxYoW2bNnC/UgSRtrnoqIiFRYWyuv9+Bx39erVKioqSvGKh8evmDnowIEDevvttzV//nxJUl1dnT788EPde++9evXVV1VYWKgvf/nL/M/ngOH2+oYbbtBHH32ks88+W/F4XLfccotmzpypG2+8McUrtmuk23VPT4+CwaAk6de//rUaGxu1fv36VC7XtJH2WpK2bt2qF198UU899RT3I0kYaZ+LiopM7S1PpzsoOzt74EYhSXPmzNG+ffskSV/60peUk5OTqqWNO8PtdUFBgc4++2xJktfr1bnnnjvwb4BTM9Lt+mjAJam3t3fg7AWnZqS97u7u1vr167VixYpULW/cGGmfreHpdJfE43E99thjKisrS/VSxr3h9vrw4cN66qmndMstt6RoZePPUHt97bXXqrm5WVOmTNGmTZtSuLrx5fi9XrlypW666aZBD5yQvKFu01dddZVisZgWLFigH/zgB5o0aVIKVzgyHja7ZNWqVcrIyNCVV16Z6qWMe0PtdTQa1c0336wvfvGLWrhwYQpXN74Mtde/+MUv9PLLL+ub3/ymfv7zn6dwdePLsXv9hz/8QWlpafrKV76S6mWNO8ffpl966SVt2bJFmzdv1u7du7Vhw4YUr3BkRNwFdXV1eu+997Ru3TqeXnTZUHsdi8V066236rOf/azuuuuuFK9w/Bjpdu31enXZZZfpmWeeSdHqxpfj9/rvf/+7XnvtNZWVlQ2cMZaXl2v37t0pXqltQ92mj37SZmZmpi6//HK98cYbqVzip+LpdIfdd999ampq0sMPPzymn4IZD4ba63g8rqqqKvl8Pv30pz+Vx+NJ8SrHh6H2uqurS5IGXjn9/PPPj+lX8Vox1F7X1taqtrZ24DpFRUWqr6838+KrsWioff7www8VCASUnp6uaDSqhoYGFRcXp3ilI+PV6Q565513VF5erunTpw/8SlNBQYE2bNig73//+3rrrbfU1tam3NxcFRYW8vPDJAy315dffrm+973vDfoVkZKSEtXU1KRyuaYNt9c33XSTVqxYof7+fknS1KlT9eMf/1jTpk1L5XJNG+k+5FjWXkE91gy3z8uWLVN1dbU8Ho+i0ajmzp2rO++8c0zvMxEHAMAofmALAIBRRBwAAKOIOAAARhFxAACMIuIAABhFxAFDysrK9Le//c3Rma+//roWLFhwwtffsmWLrrjiCkfXAODUEHEArnn66ad16aWXqqSkRAsWLNDq1asVjUZTvSxg3CDiAFxz6NAh3XnnnXrttdf0xBNP6LXXXtOvfvWrVC8LGDeIOGDQW2+9pYqKCpWWluqCCy7QypUrdeTIkYHLi4qKtHnzZn3961/X3LlztW7dOu3du1dLly5VSUmJli9fPuj6kvTggw9q/vz5Kisr0+9///uB73d3d+v6669XSUmJLrvsMu3du3fQ37vnnnt00UUXqaSkRJdeeqm2bds2cFllZaVKS0s1adIk5eXl6Vvf+taYfy9qwBLeOx0wyOv1asWKFZo1a5Y++OADXXvttfrtb3+r73znOwPXeeWVV7Rlyxa1trbqkksu0Ztvvqk1a9YoOztbFRUVeu6553TJJZdIkvbv36/u7m69/PLL2r59u6677jrNmjVLM2bM0MqVKxUIBPTKK6/oP//5j6655hoVFBQMHOecc87RjTfeqGAwqEcffVTLly/X1q1bFQgEPrHuxsZGfe5zn3N9f4CJgjNxwKBZs2Zpzpw58vv9KigoUEVFhRobGwddZ9myZcrMzNTMmTNVWFio888/X9OmTVMwGNSCBQvU3Nw86PrLly/XpEmT9IUvfEEXXXSR/vjHPyoWi+mFF17QTTfdpIyMDBUWFg6E/6glS5ZoypQp8vv9uvrqq3XkyBG1tLR8Ys1PPvmkmpqadPXVVzu/IcAExZk4YFBLS4t+9rOfqampSYcOHVIsFtPnP//5Qdc57bTTBv4cCAQ+8fX+/fsHvs7KylJGRsbA12eccYba29vV1dWlaDQ68PGMRy871qZNm/Tkk0+qvb1dHo9Hvb296u7uHnSdF198Uffdd58eeeSRgU89A5A8zsQBg2prazVjxgw1NDTojTfe0M0336xkPsvoo48+Ul9f38DXra2tys3NVSgUkt/vV2tr66DLjtq2bZt++ctfat26dWpsbNS2bdsUDAYHreUvf/mL7rrrLj344IN8VCngMCIOGHTw4EFNnjxZkydP1p49e/TYY48lPfOBBx7QkSNHtG3bNr300ku6+OKL5fP59LWvfU3r16/XoUOHtHv3bj399NOD1uHz+RQKhRSNRrV+/Xr19vYOXP7qq6/qtttu0wMPPKBzzz036TUCGIyIAwbdcccdqq+vV0lJiX7yk5/oG9/4RlLzTjvtNGVlZenCCy/UrbfeqtraWp111lmSpOrqavX19en8889XVVWVLr300oG/d8EFF+jCCy/UokWLVFZWpkAgMOip940bN6qnp0fXXXed5s6dq7lz52rZsmVJrRXA//F54gAAGMWZOAAARhFxAACMIuIAABhFxAEAMIqIAwBgFBEHAMAoIg4AgFFEHAAAo4g4AABG/RcrTriPowE8aAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"marginal = posterior.marginal(sites=[\"lambda1\", \"lambda2\", \"tau\"])\n",
"marginal_support = marginal.support(flatten=True)\n",
"for site in marginal_support:\n",
" support = marginal_support[site]\n",
" if site == \"tau\":\n",
" support = (support * count_data.size(0) + 1).long()\n",
" sns.distplot(support, kde=False, axlabel=site)\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"OrderedDict([('lambda1',\n",
" OrderedDict([('n_eff', tensor(52.6577)),\n",
" ('r_hat', tensor(1.0053))])),\n",
" ('lambda2',\n",
" OrderedDict([('n_eff', tensor(46.5222)),\n",
" ('r_hat', tensor(1.0179))])),\n",
" ('tau',\n",
" OrderedDict([('n_eff', tensor(17.9911)),\n",
" ('r_hat', tensor(1.0381))]))])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"marginal.diagnostics()"
]
}
],
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment