Skip to content

Instantly share code, notes, and snippets.

@jbencook
Created December 23, 2020 20:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbencook/c75206d46f9331bc81e9d258485f6d3e to your computer and use it in GitHub Desktop.
Save jbencook/c75206d46f9331bc81e9d258485f6d3e 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": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from scipy.optimize import differential_evolution"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.5590952009638621 1.4469720006899172\n",
"0.5029192798674605 1.4866578874813645\n",
"0.5002904764114741 1.4994683757767997\n",
"0.5000709162887501 1.4999759888186115\n"
]
}
],
"source": [
"a = 0.5\n",
"b = 1.5\n",
"n = 10000\n",
"\n",
"for n in [10, 100, 1000, 10000]:\n",
" x = np.random.uniform(a, b, size=n)\n",
" print(x.min(), x.max())"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(x, density=True)\n",
"plt.xlim([0, 2])\n",
"plt.xlabel(\"$x$\")\n",
"plt.ylabel(\"$p(x)$\");"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def log_likelihood(theta_hat):\n",
" a_hat, b_hat = theta_hat\n",
" return -n * np.log(b_hat - a_hat)\n",
"\n",
"def negative_log_likelihood(theta_hat):\n",
" return -log_likelihood(theta_hat)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: -0.9537197940327512\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 4233\n",
" nit: 140\n",
" success: True\n",
" x: array([0.50007057, 1.4999752 ])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bounds = [[-1e10, x.min()], [x.max(), 1e10]]\n",
"differential_evolution(negative_log_likelihood, bounds=bounds)"
]
},
{
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment