{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Emukit Bayesian Optimization Benchmark\n", "\n", "This notebook uses the `emukit.benchmarking` package to compare two Bayesian optimization methods against each other, using the Branin test function." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import emukit\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up test function\n", "\n", "We use the Branin function which is already included in Emukit, both the function and the appropriate input domain are ready made for us." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from emukit.test_functions.branin import branin_function\n", "branin_fcn, parameter_space = branin_function()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up methods to test\n", "\n", "We compare Bayesian optimization using different models. All the methods collect points one at a time in a sequential fashion and use the expected improvement acquisition function. The models we test are:\n", "- A Gaussian process with Matern52 covariance function\n", "- Random forest using the pyrfr package\n", "\n", "We choose to create lambda functions with a consistent interface that return an instance of a loop with a given initial data set." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from emukit.examples.gp_bayesian_optimization.enums import ModelType, AcquisitionType\n", "from emukit.examples.gp_bayesian_optimization.optimization_loops import create_bayesian_optimization_loop\n", "from emukit.examples.gp_bayesian_optimization.single_objective_bayesian_optimization import GPBayesianOptimization\n", "\n", "loops = [\n", " ('Random Forest', lambda loop_state: create_bayesian_optimization_loop(loop_state.X, loop_state.Y, parameter_space, AcquisitionType.EI, \n", " ModelType.RandomForest)),\n", " ('Gaussian Process', lambda loop_state: GPBayesianOptimization(parameter_space.parameters, loop_state.X, loop_state.Y, \n", " acquisition_type=AcquisitionType.EI, noiseless=True))\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Run benchmark\n", "\n", "A total of 10 initial data sets are generated of 5 observations that are randomly sampled from the input domain. For every intial data set, each method is run for 30 optimization iterations. The Gaussian process model has its hyper-parameters optimized after each function observation whereas the other models have fixed hyper-parameters." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 25.5470322184274\n", "Optimization restart 1/1, f = 30.18602300697501\n", "Optimization restart 1/1, f = 34.77383975972789\n", "Optimization restart 1/1, f = 39.27579970545233\n", "Optimization restart 1/1, f = 45.279742126096316\n", "Optimization restart 1/1, f = 49.83452548159511\n", "Optimization restart 1/1, f = 57.71211096023106\n", "Optimization restart 1/1, f = 63.408489237767775\n", "Optimization restart 1/1, f = 69.7657648537998\n", "Optimization restart 1/1, f = 74.11705706387997\n", "Optimization restart 1/1, f = 78.169700702114\n", "Optimization restart 1/1, f = 82.92986833538372\n", "Optimization restart 1/1, f = 85.96840421184503\n", "Optimization restart 1/1, f = 88.60100124126319\n", "Optimization restart 1/1, f = 91.58237562375848\n", "Optimization restart 1/1, f = 93.91219523954564\n", "Optimization restart 1/1, f = 97.81334922272859\n", "Optimization restart 1/1, f = 99.80933787223913\n", "Optimization restart 1/1, f = 99.64355892771789\n", "Optimization restart 1/1, f = 103.58354723380539\n", "Optimization restart 1/1, f = 106.36091412602798\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 27.836530536242154\n", "Optimization restart 1/1, f = 32.90842811940668\n", "Optimization restart 1/1, f = 37.829132482846155\n", "Optimization restart 1/1, f = 43.41402878466789\n", "Optimization restart 1/1, f = 49.399509158910774\n", "Optimization restart 1/1, f = 54.055567768906336\n", "Optimization restart 1/1, f = 59.02852439781061\n", "Optimization restart 1/1, f = 62.643812804139614\n", "Optimization restart 1/1, f = 66.20945944351806\n", "Optimization restart 1/1, f = 68.73018663314333\n", "Optimization restart 1/1, f = 74.19681739131704\n", "Optimization restart 1/1, f = 78.61873598586246\n", "Optimization restart 1/1, f = 82.52788425607052\n", "Optimization restart 1/1, f = 86.18976628665932\n", "Optimization restart 1/1, f = 89.33489501677641\n", "Optimization restart 1/1, f = 91.5829744818464\n", "Optimization restart 1/1, f = 91.9886851447681\n", "Optimization restart 1/1, f = 96.48998261888111\n", "Optimization restart 1/1, f = 98.24387224885808\n", "Optimization restart 1/1, f = 100.45961016133991\n", "Optimization restart 1/1, f = 100.69119315827253\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/GPy/kern/src/stationary.py:168: RuntimeWarning:overflow encountered in true_divide\n", " /Users/marpulli/miniconda3/lib/python3.6/site-packages/GPy/kern/src/stationary.py:551: RuntimeWarning:invalid value encountered in multiply\n", " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 9544.951010929284\n", "Optimization restart 1/1, f = 33.11222834217144\n", "Optimization restart 1/1, f = 38.55967077332465\n", "Optimization restart 1/1, f = 43.874377933891004\n", "Optimization restart 1/1, f = 49.035984917501246\n", "Optimization restart 1/1, f = 53.98493197355749\n", "Optimization restart 1/1, f = 58.86089856623372\n", "Optimization restart 1/1, f = 63.74302430235618\n", "Optimization restart 1/1, f = 68.5494755670191\n", "Optimization restart 1/1, f = 74.36117580422368\n", "Optimization restart 1/1, f = 83.93138680051584\n", "Optimization restart 1/1, f = 89.01206854101929\n", "Optimization restart 1/1, f = 94.151482205532\n", "Optimization restart 1/1, f = 99.18630445546243\n", "Optimization restart 1/1, f = 104.4463153879492\n", "Optimization restart 1/1, f = 109.55975581227881\n", "Optimization restart 1/1, f = 114.6545440311893\n", "Optimization restart 1/1, f = 119.84711215594932\n", "Optimization restart 1/1, f = 124.84692225463206\n", "Optimization restart 1/1, f = 129.80964666855542\n", "Optimization restart 1/1, f = 134.71738994792486\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 30.92053671806591\n", "Optimization restart 1/1, f = 36.69270045163513\n", "Optimization restart 1/1, f = 43.08722928307922\n", "Optimization restart 1/1, f = 48.715209249496965\n", "Optimization restart 1/1, f = 54.286887711716986\n", "Optimization restart 1/1, f = 59.803021607999256\n", "Optimization restart 1/1, f = 66.2233554897513\n", "Optimization restart 1/1, f = 71.9812271059596\n", "Optimization restart 1/1, f = 77.46091424321678\n", "Optimization restart 1/1, f = 83.38949983420338\n", "Optimization restart 1/1, f = 89.60768556125919\n", "Optimization restart 1/1, f = 95.1629006854754\n", "Optimization restart 1/1, f = 100.76361859376455\n", "Optimization restart 1/1, f = 106.52139919058997\n", "Optimization restart 1/1, f = 111.93813235050817\n", "Optimization restart 1/1, f = 117.37820437452115\n", "Optimization restart 1/1, f = 122.75696431620712\n", "Optimization restart 1/1, f = 128.2323914159556\n", "Optimization restart 1/1, f = 133.65744709181175\n", "Optimization restart 1/1, f = 140.11226634708146\n", "Optimization restart 1/1, f = 145.54048136504997\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 24.926239367637073\n", "Optimization restart 1/1, f = 29.913296272043123\n", "Optimization restart 1/1, f = 36.40558699733244\n", "Optimization restart 1/1, f = 39.755142756692116\n", "Optimization restart 1/1, f = 42.30143913670721\n", "Optimization restart 1/1, f = 45.76437651352971\n", "Optimization restart 1/1, f = 51.092407564899396\n", "Optimization restart 1/1, f = 51.56237750314517\n", "Optimization restart 1/1, f = 58.76811619248467\n", "Optimization restart 1/1, f = 61.27656211334025\n", "Optimization restart 1/1, f = 74.73919587850997\n", "Optimization restart 1/1, f = 80.01867352379257\n", "Optimization restart 1/1, f = 85.40327410380777\n", "Optimization restart 1/1, f = 89.86188181282293\n", "Optimization restart 1/1, f = 95.08032579388646\n", "Optimization restart 1/1, f = 98.88943241524956\n", "Optimization restart 1/1, f = 101.24537117205169\n", "Optimization restart 1/1, f = 104.9755892125606\n", "Optimization restart 1/1, f = 107.61680321317989\n", "Optimization restart 1/1, f = 110.91854725680273\n", "Optimization restart 1/1, f = 111.44872220221217\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n", " /Users/marpulli/miniconda3/lib/python3.6/site-packages/GPy/kern/src/stationary.py:168: RuntimeWarning:overflow encountered in true_divide\n", " /Users/marpulli/miniconda3/lib/python3.6/site-packages/GPy/kern/src/stationary.py:551: RuntimeWarning:invalid value encountered in multiply\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 29.96298353733568\n", "Optimization restart 1/1, f = 37.249215187449884\n", "Optimization restart 1/1, f = 42.91909088008915\n", "Optimization restart 1/1, f = 48.532597903827494\n", "Optimization restart 1/1, f = 54.1446432053736\n", "Optimization restart 1/1, f = 60.14691407338602\n", "Optimization restart 1/1, f = 65.67118597812556\n", "Optimization restart 1/1, f = 71.11961655740332\n", "Optimization restart 1/1, f = 76.76292595953933\n", "Optimization restart 1/1, f = 82.20992167870186\n", "Optimization restart 1/1, f = 87.56808924936279\n", "Optimization restart 1/1, f = 92.95694214755117\n", "Optimization restart 1/1, f = 98.93600257416028\n", "Optimization restart 1/1, f = 104.4084100233467\n", "Optimization restart 1/1, f = 109.724946676732\n", "Optimization restart 1/1, f = 115.00143433135455\n", "Optimization restart 1/1, f = 120.24280058416423\n", "Optimization restart 1/1, f = 125.46470779313925\n", "Optimization restart 1/1, f = 133.22298624333274\n", "Optimization restart 1/1, f = 138.5372081772901\n", "Optimization restart 1/1, f = 144.6565822881205\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 26.575601087566117\n", "Optimization restart 1/1, f = 32.882870535059155\n", "Optimization restart 1/1, f = 39.64984328991697\n", "Optimization restart 1/1, f = 44.81791618813332\n", "Optimization restart 1/1, f = 49.55289494562957\n", "Optimization restart 1/1, f = 53.354402993778244\n", "Optimization restart 1/1, f = 57.05562740268452\n", "Optimization restart 1/1, f = 61.23118396014632\n", "Optimization restart 1/1, f = 63.25210324172785\n", "Optimization restart 1/1, f = 69.52071043115944\n", "Optimization restart 1/1, f = 73.74848204855833\n", "Optimization restart 1/1, f = 77.4845766740822\n", "Optimization restart 1/1, f = 81.03469008861182\n", "Optimization restart 1/1, f = 84.4996009910425\n", "Optimization restart 1/1, f = 88.0458898303127\n", "Optimization restart 1/1, f = 89.261498681588\n", "Optimization restart 1/1, f = 89.56680784205768\n", "Optimization restart 1/1, f = 96.42141147932134\n", "Optimization restart 1/1, f = 100.59401742441104\n", "Optimization restart 1/1, f = 102.80819544622007\n", "Optimization restart 1/1, f = 104.71019484428403\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 27.178649001856684\n", "Optimization restart 1/1, f = 37.415794323314486\n", "Optimization restart 1/1, f = 43.26418855844944\n", "Optimization restart 1/1, f = 48.872994259096686\n", "Optimization restart 1/1, f = 53.83731211803996\n", "Optimization restart 1/1, f = 57.783948361046924\n", "Optimization restart 1/1, f = 60.77223324212782\n", "Optimization restart 1/1, f = 64.4436095152125\n", "Optimization restart 1/1, f = 65.16229040765003\n", "Optimization restart 1/1, f = 71.78572805999839\n", "Optimization restart 1/1, f = 76.60495077043707\n", "Optimization restart 1/1, f = 81.70045595631865\n", "Optimization restart 1/1, f = 84.96136412986264\n", "Optimization restart 1/1, f = 88.70311744957556\n", "Optimization restart 1/1, f = 91.28128842590583\n", "Optimization restart 1/1, f = 93.0605235566763\n", "Optimization restart 1/1, f = 95.63102946259838\n", "Optimization restart 1/1, f = 101.19406888194794\n", "Optimization restart 1/1, f = 104.40000126195085\n", "Optimization restart 1/1, f = 107.21250954835983\n", "Optimization restart 1/1, f = 109.11987382818006\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 24.674982462585003\n", "Optimization restart 1/1, f = 30.070259172446303\n", "Optimization restart 1/1, f = 35.345858923294124\n", "Optimization restart 1/1, f = 40.200028900585025\n", "Optimization restart 1/1, f = 44.56369222774292\n", "Optimization restart 1/1, f = 48.946279457293315\n", "Optimization restart 1/1, f = 54.49337184317026\n", "Optimization restart 1/1, f = 59.02063493565577\n", "Optimization restart 1/1, f = 61.91197330591243\n", "Optimization restart 1/1, f = 64.12015151976517\n", "Optimization restart 1/1, f = 69.32330834826864\n", "Optimization restart 1/1, f = 73.07321233995994\n", "Optimization restart 1/1, f = 75.30464397830737\n", "Optimization restart 1/1, f = 76.83715778036525\n", "Optimization restart 1/1, f = 76.8423213499019\n", "Optimization restart 1/1, f = 75.9024873188911\n", "Optimization restart 1/1, f = 79.35770020247777\n", "Optimization restart 1/1, f = 77.25854674180363\n", "Optimization restart 1/1, f = 74.96637374073114\n", "Optimization restart 1/1, f = 76.30689067193683\n", "Optimization restart 1/1, f = 73.94028180092727\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " /Users/marpulli/miniconda3/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimization restart 1/1, f = 25.42688527703912\n", "Optimization restart 1/1, f = 30.274838621096944\n", "Optimization restart 1/1, f = 35.734871694265436\n", "Optimization restart 1/1, f = 40.12792530119823\n", "Optimization restart 1/1, f = 44.55455953151398\n", "Optimization restart 1/1, f = 49.10885504790364\n", "Optimization restart 1/1, f = 53.296560845020274\n", "Optimization restart 1/1, f = 61.78311343176486\n", "Optimization restart 1/1, f = 66.67700703232029\n", "Optimization restart 1/1, f = 77.955235089316\n", "Optimization restart 1/1, f = 82.40009097199221\n", "Optimization restart 1/1, f = 86.96416384747147\n", "Optimization restart 1/1, f = 90.83100786910975\n", "Optimization restart 1/1, f = 94.52319316563272\n", "Optimization restart 1/1, f = 97.66059573672568\n", "Optimization restart 1/1, f = 99.74513928678118\n", "Optimization restart 1/1, f = 104.926547510068\n", "Optimization restart 1/1, f = 108.61085238102743\n", "Optimization restart 1/1, f = 110.15468800248559\n", "Optimization restart 1/1, f = 113.02443993093505\n", "Optimization restart 1/1, f = 114.0193038228087\n" ] } ], "source": [ "from emukit.benchmarking.loop_benchmarking.benchmarker import Benchmarker\n", "from emukit.benchmarking.loop_benchmarking.metrics import MinimumObservedValueMetric, TimeMetric\n", "n_repeats = 10\n", "n_initial_data = 5\n", "n_iterations = 20\n", "\n", "metrics = [MinimumObservedValueMetric(), TimeMetric()]\n", "\n", "benchmarkers = Benchmarker(loops, branin_fcn, parameter_space, metrics=metrics)\n", "benchmark_results = benchmarkers.run_benchmark(n_iterations=n_iterations, n_initial_data=n_initial_data, \n", " n_repeats=n_repeats)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plot results\n", "\n", "Plot the results of each method against each other. The plot shows the average value and standard deviation of the lowest observed value up to the given iteration." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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1WOT/HMeyt6+BtrRw5iisSZEY4wxY9KonENt8uTJuueee450MYwxxhTB8uXLt6nqlKGeZ1QG2J577smyZctGuhjGGGOKQEQGOli+X3YPzBhjzJhkAWaMMWZMsgAzxhgzJo3Ke2DGmPEtm81SV1dHKpUa6aKYIorH48ycOZNIJFKU81uAGWOGXV1dHRUVFey5557sOM+xGS9UlcbGRurq6pgzZ05RrmFNiMaYYZdKpZg0aZKF1zgmIkyaNKmotWwLMGPMiLDwGv+K/Tu2ADPGGDMm7TTARGSWiDwqIq/m54P7cn57rYg8JCKr899r+nj92fljVovI2QMpVNYPd36QMcYMgeu6LFy4kLlz5/KRj3yE5ubmnb9oANatW8fcuXMLcq7uvvOd7zBjxgwWLlzIwoULufzyywt+jU4rVqzg/vvvL9r5C2UgNTAf+DdVPRA4DLhQRA4ELgceVtV9gIfzz3cgIrXAleRWh303cGVfQdddIu3zciJBJrQgM8YUR0lJCStWrGDlypXU1tZyww03jHSRduqSSy5hxYoVrFixgu9///sDfl0QBIO6zrgJMFXdpKrP5x8ngNeAGcDHgNvzh90OnNzLy48HHlLV7araBDwEnLCza0qgbOzI8PeWFrZnswN7J8YYs4sOP/xw6uvrAWhra+OYY45h8eLFzJs3jz/84Q9ArmZ1wAEH8PnPf56DDjqI4447jmQyCcDy5ctZsGABCxYs2CEIU6kUn/3sZ5k3bx6LFi3i0UcfBeC2227j5JNP5thjj2XPPffk+uuv5yc/+QmLFi3isMMOY/v27QMu+8MPP8yiRYuYN28en/vc50in00BuSr7LLruMxYsXc++997J27VpOOOEEDj74YI444ghWrVoFwL333svcuXNZsGABRx55JJlMhiuuuIJf//rXLFy4kF//+tdD/wEXyaC60YvInsAicivMTlPVTfldm4FpvbxkBrCh2/O6/Lbezn0ecB7A5CnTqUoKQdzh6ZYW3lVSwt6lpbh209eYcWf1V1bTtqKtoOcsX1jOPj/dZ0DHBkHAww8/zLnnngvkxi7dd999VFZWsm3bNg477DA++tGP5sq6ejV33303P//5zznttNP47W9/y1lnncVnP/tZrr/+eo488kguvfTSrnPfcMMNiAgvv/wyq1at4rjjjuONN94AYOXKlbzwwgukUine9a53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E3iex//93//xzW9+k9/+9rdAblHJF154gVgsxn777cdFF13ErFmz+izDn/70J+bNm9f1vPtSKvPnz+dnP/sZ73//+7niiiv47ne/y09/+lPOPPNMLr/8ck455RRSqRRhGPLggw+yevVqnn32WVSVj370ozz++ONs3bqV6dOn8+c//xmAlpaWPt/3cBkTNTDIhZi/fddn2/BEqPQ8liUStI/jKrUxZvAuvPBCFixYwCGHHAJANpvl85//PPPmzePUU0/l1Vdf7ff1VVVVxONxzj33XH73u99RWloK7HypkpaWFk499VTmzp3LJZdcwivdgviYY47pOu+BBx7Y56TCZ555JgsXLuTvf/87P/rRj7q2dy6l0tLSQnNzc9ckv51LriQSCerr6znllFOA3LyKpaWlPPjggzz44IMsWrSIxYsXs2rVKlavXs28efN46KGHuOyyy3jiiSeoqqrq830PlzFRAwNwy1wyDRlis2LILi6lEnccfFWWJxIcVllp8ycaM0r0V2Mqdd1+90+ORnda4+rpoIMO6qrpQG7hyW3btrFkSW56vmuvvZZp06bx4osvEoYh8XgcAM/zCLv1au5cZsXzPJ599lkefvhhfvOb33D99dfzyCOP7HSpkm9/+9scffTR3Hfffaxbt46jjjqqa1/PpVv6WmJl6dKlXeXurnMplcFSVb7xjW9w/vnnv2Pf888/z/3338+3vvUtjjnmGK644ope3/dwGTOf4OIJYVoJOobWJb7cdUmHIS+1tVnPRGMmqA984AOkUiluvPHGrm0d3Tp6tbS0sPvuu+M4DnfeeWdX7Wn27Nm8+uqrpNNpmpubefjhh4HcgpEtLS2cdNJJXHvttf0uVdJdS0sLM2bkFqnvvJdWaFVVVdTU1PDEE08A/1xypaKigpkzZ/L73/8egHQ63bU22i233EJbW26V7Pr6ehoaGti4cSOlpaWcddZZXHrppTz//PN9vu/hMmZqYJBvRmzO4pUN/j5Yd7WRCA2ZDKs6OjigtHSXa3TGmLFJRPj973/PJZdcwg9+8AOmTJlCWVkZ11xzDZBbBuUTn/gEd9xxByeccEJXbWbWrFmcdtppzJ07lzlz5rAoX/NLJBJ87GMfI5VKoar85Ce5pRMvvfRSVq9ejapyzDHHsGDBAv72t791lePrX/86Z599NldffTUf+tCHivZ+b7/9di64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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from emukit.benchmarking.loop_benchmarking.benchmark_plot import BenchmarkPlot\n", "colours = ['m', 'c']\n", "line_styles = ['-', '--']\n", "\n", "metrics_to_plot = ['minimum_observed_value']\n", "plots = BenchmarkPlot(benchmark_results, loop_colours=colours, loop_line_styles=line_styles, \n", " metrics_to_plot=metrics_to_plot)\n", "plots.make_plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plot results against time\n", "\n", "Using the `TimeMetric` object above, the time taken to complete each iteration of the loops was recorded. Here we plot the minimum observed value against the time taken." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot against time\n", "plots = BenchmarkPlot(benchmark_results, loop_colours=colours, loop_line_styles=line_styles, \n", " x_axis_metric_name='time')\n", "plots.make_plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion\n", "\n", "We have shown how to use Emukit to benchmark different methods against each other for Bayesian optimziation. This methodology can easily be expanded to more loops using different models and acquisition functions." ] } ], "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.7" } }, "nbformat": 4, "nbformat_minor": 2 }