Created
May 18, 2020 15:49
-
-
Save nzw0301/f9eed6b38f6932b70ec9d7a3a5eee0dc 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": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Comparison between ConfigSpace's integer sampling in `log` space and new Optuna's `suggest_int(log=True)`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import ConfigSpace\n", | |
"import ConfigSpace as CS\n", | |
"import ConfigSpace.hyperparameters as CSH\n", | |
"\n", | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"low = 2\n", | |
"high = 64\n", | |
"step = 2\n", | |
"num_samples = 10_000" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"cs = CS.ConfigurationSpace(seed=1)\n", | |
"uniform_integer_hp = CSH.UniformIntegerHyperparameter(name='x', lower=low, upper=high, log=True, q=step)\n", | |
"cs.add_hyperparameter(uniform_integer_hp)\n", | |
"\n", | |
"\n", | |
"samples = [cs.sample_configuration().get('x') for _ in range(num_samples)]\n", | |
"samples = np.array(samples)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.hist(samples, bins=8);" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"assert np.sum(samples % 2) == 0 # no odd numebrs." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 0, 0, 1826, 0, 1428, 0, 830, 0, 645, 0, 557,\n", | |
" 0, 493, 0, 388, 0, 318, 0, 295, 0, 285, 0,\n", | |
" 235, 0, 225, 0, 212, 0, 181, 0, 174, 0, 172,\n", | |
" 0, 137, 0, 153, 0, 138, 0, 144, 0, 139, 0,\n", | |
" 101, 0, 114, 0, 113, 0, 107, 0, 90, 0, 95,\n", | |
" 0, 75, 0, 90, 0, 99, 0, 87, 0, 54])" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# 2, 4, 6, ..., 64 generated\n", | |
"np.bincount(samples)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Optuna" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import optuna\n", | |
"from optuna import samplers\n", | |
"from optuna.study import create_study\n", | |
"from optuna.trial import Trial\n", | |
"from optuna.distributions import IntLogUniformDistribution" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"sampler = samplers.RandomSampler(seed=1)\n", | |
"study = create_study(sampler=sampler)\n", | |
"distribuion = IntLogUniformDistribution(low=low, high=high, step=step)\n", | |
"\n", | |
"samples = []\n", | |
"for i in range(num_samples):\n", | |
" trial = Trial(study, study._storage.create_new_trial(study._study_id)) \n", | |
" \n", | |
" samples.append(trial._suggest(\"x\", distribuion))\n", | |
"\n", | |
"samples = np.array(samples)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.hist(samples, bins=8);" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"assert np.sum(samples % 2) == 0 # no odd numebrs." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 0, 0, 1826, 0, 1428, 0, 830, 0, 645, 0, 557,\n", | |
" 0, 493, 0, 388, 0, 318, 0, 295, 0, 285, 0,\n", | |
" 235, 0, 225, 0, 212, 0, 181, 0, 174, 0, 172,\n", | |
" 0, 137, 0, 153, 0, 138, 0, 144, 0, 139, 0,\n", | |
" 101, 0, 114, 0, 113, 0, 107, 0, 90, 0, 95,\n", | |
" 0, 75, 0, 90, 0, 99, 0, 87, 0, 54])" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# 2, 4, 6, ..., 64 generated\n", | |
"np.bincount(samples)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"@webio": { | |
"lastCommId": null, | |
"lastKernelId": null | |
}, | |
"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.8.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment