Created
December 23, 2020 20:44
-
-
Save jbencook/c75206d46f9331bc81e9d258485f6d3e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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