update bayesian optimization wip

This commit is contained in:
ritchie46 committed 2019-08-26 18:47:52 +02:00
1 parent c4395b8d0b
commit 1690651127
1 file changed
+566 -84
+566 -84
View File
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 336,
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -58,27 +58,49 @@
" 0, & \\text{otherwise}\n",
"\\end{cases}$$\n",
"\n",
"$$\\text{EI}(x) = (\\delta) \\Phi(Z) + \\sigma \\phi(Z)$$\n",
"$$\\text{EI}(x) = (\\delta) \\Phi(Z) + \\sigma(x^*) \\phi(Z)$$\n",
"\n",
"Recommendation value for $\\xi = 0.01$. \n"
]
},
{
"cell_type": "code",
"execution_count": 391,
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Randomly selected hyper parameters: {'x': 9.545454545454545}\n"
]
}
],
"outputs": [],
"source": [
"\n",
"def select_hyperparams_random(param_ranges):\n",
" \"\"\"\n",
" Select hyperparameters at random.\n",
" \n",
" Parameters\n",
" ----------\n",
" param_ranges : dict\n",
" Named parameter ranges.\n",
"\n",
" Example:\n",
" \n",
" {\n",
" 'foo': {\n",
" 'range': [1, 10],\n",
" 'type': 'float'\n",
" }\n",
" 'bar': {\n",
" 'range': [10, 1000],\n",
" 'type': 'int'\n",
" }\n",
" }\n",
"\n",
" Returns\n",
" -------\n",
" selection : dict\n",
" Randomly selected hyperparameters within given boundaries.\n",
" \n",
" Example:\n",
" {'foo': 4.213, 'bar': 935}\n",
"\n",
" \"\"\"\n",
" selection = {}\n",
" for k in param_ranges:\n",
" val = np.random.choice(\n",
@@ -101,17 +123,14 @@
"\n",
" f : GP predict function\n",
" y_current : float\n",
" Current best score\n",
" Current best evaluation f(x+)\n",
" x_proposed : np.array\n",
" Proposal parameters. Shape: (1, 1)\n",
" xi : float\n",
" Exploration parameter\n",
"\n",
" Returns\n",
" -------\n",
" expected_improvement : float\n",
" E(max(f_proposed - f_current), 0)\n",
" \n",
" \"\"\"\n",
" mu, var = f(x_proposed)\n",
" std = var ** 0.5\n",
@@ -122,25 +141,49 @@
" z = delta / std\n",
" unit_norm = stats.norm()\n",
" return delta * unit_norm.cdf(z) + std * unit_norm.pdf(z)\n",
"\n",
"\n",
"\n",
"hp = select_hyperparams_random(param_ranges)\n",
"print('Randomly selected hyper parameters:', hp)\n"
"\n"
]
},
{
"cell_type": "code",
"execution_count": 401,
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'foo': 4.545454545454545, 'bar': 580}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"param_ranges = {\n",
" 'foo': {\n",
" 'range': [1, 10],\n",
" 'type': 'float'\n",
" },\n",
" 'bar': {\n",
" 'range': [10, 1000],\n",
" 'type': 'int'\n",
" }\n",
"}\n",
"\n",
"select_hyperparams_random(param_ranges)"
]
},
{
"cell_type": "code",
"execution_count": 263,
"metadata": {},
"outputs": [],
"source": [
"class BayesOpt:\n",
" def __init__(self, \n",
" param_ranges, \n",
" f, \n",
" random_trials=5, \n",
" optimization_trials=30,\n",
" def __init__(\n",
" self, param_ranges, f, random_trials=5, optimization_trials=20, kernel=None\n",
" ):\n",
" \"\"\"\n",
" Parameters\n",
@@ -148,6 +191,15 @@
"\n",
" param_ranges : dict\n",
" f : function\n",
" black box function to evaluate\n",
" random_trials : int\n",
" Number of random trials to run before optimization starts\n",
" optimization_trials : int\n",
" Number of optimization trials to run.\n",
" Together with the random_trials this is the total budget\n",
" kernel: GPy.kern.src.kern.Kern\n",
" GPy kernel for the Gaussian Process.\n",
" If None given, RBF kernel is used\n",
" \"\"\"\n",
" self.param_ranges = param_ranges\n",
" self.f = f\n",
@@ -156,14 +208,25 @@
" self.n_trials = random_trials + optimization_trials\n",
" self.x = np.zeros((self.n_trials, len(param_ranges)))\n",
" self.y = np.zeros((self.n_trials, 1))\n",
" self.kernel = GPy.kern.RBF(input_dim=self.x.shape[1], \n",
" variance=1,\n",
" lengthscale=1) \n",
"\n",
" if kernel is None:\n",
" self.kernel = GPy.kern.RBF(\n",
" input_dim=self.x.shape[1], variance=1, lengthscale=1\n",
" )\n",
" else:\n",
" self.kernel = kernel\n",
" self.gp = None\n",
" self.bounds = np.array([pr['range'] for pr in param_ranges.values()])\n",
" self.bounds = np.array([pr[\"range\"] for pr in param_ranges.values()])\n",
"\n",
" @property\n",
" def best_params(self):\n",
" \"\"\"\n",
" Select best parameters.\n",
"\n",
" Returns\n",
" -------\n",
" best_parameters : dict\n",
" \"\"\"\n",
" return self._prepare_kwargs(self.x[self.y.argmax()])\n",
"\n",
" def fit(self):\n",
@@ -171,75 +234,129 @@
" self._bayesian_search()\n",
"\n",
" def _random_search(self):\n",
" print(f'Starting {self.random_trials} random trials...')\n",
" \"\"\"\n",
" Run the random trials budget\n",
" \"\"\"\n",
" print(f\"Starting {self.random_trials} random trials...\")\n",
" for i in tqdm(range(self.random_trials)):\n",
" hp = select_hyperparams_random(self.param_ranges)\n",
" self.x[i] = np.array(list(hp.values()))\n",
" self.y[i] = evaluate_params(hp)\n",
" self.y[i] = self.f(hp)\n",
"\n",
" def _bayesian_search(self):\n",
" print(f'Starting {self.optimization_trials} optimization trials...')\n",
" for i in tqdm(range(self.random_trials, \n",
" self.random_trials + self.optimization_trials)):\n",
" \"\"\"\n",
" Run the Bayesian Optimization budget\n",
" \"\"\"\n",
" print(f\"Starting {self.optimization_trials} optimization trials...\")\n",
" for i in tqdm(\n",
" range(self.random_trials, self.random_trials + self.optimization_trials)\n",
" ):\n",
" self.x[i], self.y[i] = self._single_iter()\n",
"\n",
" def _single_iter(self):\n",
" def _single_iter(self, x=None):\n",
" \"\"\"\n",
" Fit a GP and retrieve and evaluate a new\n",
" parameter proposal.\n",
"\n",
" Returns\n",
" -------\n",
" out : tuple[np.array[flt], np.array[flt]]\n",
" (x, f(x))\n",
"\n",
" \"\"\"\n",
" self._fit_gp()\n",
" if x is None:\n",
" x = self._new_proposal()\n",
" y = evaluate_params(self._prepare_kwargs(x))\n",
" y = self.f(self._prepare_kwargs(x))\n",
" return x, y\n",
"\n",
" \n",
" def _fit_gp(self, noise_var=0):\n",
" \"\"\"\n",
" Fit a GP on the currently observed data points.\n",
"\n",
" Parameters\n",
" ----------\n",
" noise_var : flt\n",
" GPY argmument noise_var\n",
" \"\"\"\n",
" mask = self.x.sum(axis=1) != 0\n",
" self.gp = GPy.models.GPRegression(bo.x[mask], \n",
" bo.y[mask], \n",
" self.gp = GPy.models.GPRegression(\n",
" self.x[mask],\n",
" self.y[mask],\n",
" normalizer=True,\n",
" kernel=self.kernel,\n",
" noise_var=noise_var)\n",
" noise_var=noise_var,\n",
" )\n",
" self.gp.optimize()\n",
"\n",
" def _new_proposal(self, n=25):\n",
" \"\"\"\n",
" Get a new parameter proposal by maximizing\n",
" the acquisition function.\n",
"\n",
" Parameters\n",
" ----------\n",
" n : int\n",
" Number of retries.\n",
" Each new retry the optimization is\n",
" started in another parameter location.\n",
" This improves the chance of finding a global optimum.\n",
"\n",
" Returns\n",
" -------\n",
" proposal : dict\n",
" Example:\n",
" {'foo': 4.213, 'bar': 935}\n",
" \"\"\"\n",
"\n",
" def f(x):\n",
" return -expected_improvement(\n",
" f=self.gp.predict,\n",
" y_current=self.y.max(),\n",
" x_proposed=x[None, :]\n",
" f=self.gp.predict, y_current=self.y.max(), x_proposed=x[None, :]\n",
" )\n",
"\n",
" x0 = np.random.uniform(\n",
" low=self.bounds[:, 0],\n",
" high=self.bounds[:, 1],\n",
" size=(n, self.x.shape[1])\n",
" low=self.bounds[:, 0], high=self.bounds[:, 1], size=(n, self.x.shape[1])\n",
" )\n",
" proposal = None\n",
" best_ei = np.inf\n",
" for x0_ in x0:\n",
" res = optimize.minimize(f, \n",
" x0_, \n",
" bounds=self.bounds)\n",
" res = optimize.minimize(f, x0_, bounds=self.bounds)\n",
" if res.success and res.fun < best_ei:\n",
" best_ei = res.fun\n",
" proposal = res.x\n",
" if np.isnan(res.fun):\n",
" raise ValueError('NaN within bounds')\n",
" raise ValueError(\"NaN within bounds\")\n",
" return proposal\n",
"\n",
" def _prepare_kwargs(self, x):\n",
" \"\"\"\n",
" Create a dictionary with named parameters\n",
" and the proper python types.\n",
"\n",
" Parameters\n",
" ----------\n",
" x : np.array\n",
" Example:\n",
" [4.213, 935.03]\n",
"\n",
" Returns\n",
" -------\n",
" hyperparameters : dict\n",
"\n",
" Example:\n",
" {'foo': 4.213, 'bar': 935}\n",
" \"\"\"\n",
" # create hyper parameter dict\n",
" hp = dict(zip(self.param_ranges.keys(), x))\n",
" # cast values\n",
" for k in self.param_ranges:\n",
" if self.param_ranges[k]['type'] == 'int':\n",
" if self.param_ranges[k][\"type\"] == \"int\":\n",
" hp[k] = int(hp[k])\n",
" elif self.param_ranges[k]['type'] == 'float':\n",
" elif self.param_ranges[k][\"type\"] == \"float\":\n",
" hp[k] = float(hp[k])\n",
" else:\n",
" raise ValueError('Parameter type not known')\n",
" return hp\n",
"\n",
" \n",
"bo = BayesOpt(param_ranges, evaluate_params)\n",
"# bo.fit()"
" raise ValueError(\"Parameter type not known\")\n",
" return hp"
]
},
{
@@ -251,12 +368,22 @@
},
{
"cell_type": "code",
"execution_count": 402,
"execution_count": 284,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAD8CAYAAABtlBmdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4lGXi9fHvk056T4AYkhA6hJLQEVQsoIhYsCMIAva29l3dtayuuuvaUEEFASsiWFBBBRHphN4CCaGFkAak95n7/QP05+7rSoAkT8r5XJdXJslk5oAkmfPczTLGICIiIiIiIlJfXOwOICIiIiIiIs2LiqiIiIiIiIjUKxVRERERERERqVcqoiIiIiIiIlKvVERFRERERESkXqmIioiIiIiISL1SERUREREREZF6pSIqIiIiIiIi9UpFVEREREREROqVW30+WWhoqImJianPpxQREREREZF6sn79+jxjTNjJ7levRTQmJobk5OT6fEoRERERERGpJ5Zl7a/J/TQ1V0REREREROqViqiIiIiIiIjUKxVRERERERERqVcqoiIiIiIiIlKvVERFRERERESkXqmIioiIiIiISL2q0fEtlmXtA4oAB1BtjEmyLOtF4FKgEtgD3GyMya+roCIiIiIiItI0nMqI6LnGmB7GmKQT738PdDXGJAC7gUdrPZ2IiIiIiIiw4cAxpv60B2OM3VFqxWlPzTXGfGeMqT7x7mogqnYiiYiIiIiIyC/ScooZ/946Plx7gOKK6pN/QSNQ0yJqgO8sy1pvWdak3/n8eODb3/tCy7ImWZaVbFlWcm5u7unmFBERERERaXayC8sZO30tbi4Ws8b3wc/L3e5ItaKmRXSgMaYXMBy4w7Kswb98wrKsPwPVwAe/94XGmGnGmCRjTFJYWNgZBxYREREREWkOCsurGDdjHcdKK5kxrg9tQnzsjlRralREjTGZJ97mAPOBPgCWZY0FRgA3mKYyWVlERERERMRmFdUOJs9aT2p2EW/dmEi3qAC7I9WqkxZRy7J8LMvy++U2cCGwzbKsYcDDwEhjTGndxhQREREREWkenE7D/XM2syr9CC9clcDg9k1vZmlNjm+JAOZblvXL/T80xiy0LCsN8AS+P/G51caYW+ssqYiIiIiISBNnjOHpr3fw9ZbDPDq8I1f0app7wp60iBpj0oHuv/Px+DpJJCIiIiIi0kxNW5bOjBX7GD8wlkmD4+yOU2dO+/gWERERERERqT3zNmTw3LcpjEhoyV8u6cSJmadNkoqoiIiIiIiIzX7anctDc7fQPy6Ef13dHReXpltCQUVURERERETEVlsy8rnt/fW0i/Bj6k2JeLq52h2pzqmIioiIiIiI2GRfXgk3z1hHkLcHM2/ujb+Xu92R6oWKqIiIiIiIiA1yiyoYO2MtTmOYNaEP4f5edkeqNzU5vkVERERERERqUUlFNePfW0d2YTkfTexH2zBfuyPVKxVRERERERGRelRZ7eTW99ez43Ah08Yk0jM6yO5I9U5Tc0VEREREROqJ02l4+LMt/Jyax3OXd2Nopwi7I9lCRVRERERERKSePL8ohfkbD/HAhe25uvdZdsexjYqoiIiIiIhIPZi+fC9Tf0pnTL823HFuvN1xbKUiKiIiIiIiUse+2pzJ01/vYFiXSP42sguWZdkdyVYqoiIiIiIiInVo88F8/jRnM73bBPPytT1wdWneJRRUREVEREREROpMQVkVd360gTA/T6bdlIiXu6vdkRoEHd8iIiIiIiJSB4wxPDpvC5n55cyZ3J9Abw+7IzUYGhEVERERERGpAx+sOcA3W7N48KIOJLZpfmeF/hEVURERERERkVq2I7OQpxbsYEj7MCadHWd3nAZHRVRERERERKQWlVRUc+eHGwhs4c5LV3fHRZsT/X+0RlRERERERKQWPf7FNvYdKeGDW/oR4utpd5wGSSOiIiIiIiIitWTu+gzmbTjE3UPb0b9tiN1xGiwVURERERERkVqQllPE459vo19cMHed187uOA2aiqiIiIiIiMgZKq9ycMcHG2nh4cor1/bEVetC/5DWiIqIiIiIiJyhpxbsYFd2Ee/d3JsIfy+74zR4GhEVERERERE5A19tzuTDNQeYPCSOczqE2x2nUVARFREREREROU37j5Tw6Lyt9IwO5IELO9gdp9FQERURERERETkNFdUO7vxwIy4WvHZdT9xdVa9qSmtERURERERETsPz3+5i66ECpo5JJCrI2+44jYoqu4iIiIiIyCn6fkc201fsZdyAGC7qEml3nEZHRVREREREROQUHMov44FPN9O1tT+PXtzR7jiNkoqoiIiIiIhIDVU5nNz90UaqHU5eu64Xnm6udkdqlGpURC3L2mdZ1lbL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 truncated
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f9ef1f369b0>]"
]
},
"execution_count": 284,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x288 with 1 Axes>"
]
@@ -274,15 +401,15 @@
" return np.sin(2 * x) + (x / 3)**2 - x + 50\n",
"\n",
"plt.figure(figsize=(16, 4))\n",
"plt.plot(x, func(x))\n",
"\n",
"np.random.seed(1)\n",
"bo = BayesOpt(param_ranges, evaluate_params)\n"
"plt.title('A unknown function $f$')\n",
"plt.xlabel('$x$')\n",
"plt.ylabel('$f(x)$')\n",
"plt.plot(x, func(x))\n"
]
},
{
"cell_type": "code",
"execution_count": 403,
"execution_count": 259,
"metadata": {},
"outputs": [],
"source": [
@@ -291,7 +418,7 @@
"\n",
"param_ranges = {\n",
" 'x': {\n",
" 'range': [1, 10],\n",
" 'range': [0, 10],\n",
" 'type': 'float'\n",
" }\n",
"}\n"
@@ -299,14 +426,14 @@
},
{
"cell_type": "code",
"execution_count": 438,
"execution_count": 285,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 2/2 [00:00<00:00, 5210.32it/s]"
"100%|██████████| 2/2 [00:00<00:00, 2374.36it/s]"
]
},
{
@@ -320,19 +447,373 @@
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
"\n",
" /opt/miniconda3/lib/python3.7/site-packages/paramz/transformations.py:111: RuntimeWarning:divide by zero encountered in log\n",
" /opt/miniconda3/lib/python3.7/site-packages/paramz/transformations.py:108: RuntimeWarning:invalid value encountered in greater\n",
" /opt/miniconda3/lib/python3.7/site-packages/GPy/kern/src/stationary.py:168: RuntimeWarning:overflow encountered in true_divide\n",
" /opt/miniconda3/lib/python3.7/site-packages/GPy/kern/src/rbf.py:54: RuntimeWarning:invalid value encountered in multiply\n",
" /opt/miniconda3/lib/python3.7/site-packages/paramz/transformations.py:113: RuntimeWarning:invalid value encountered in greater\n",
" /opt/miniconda3/lib/python3.7/site-packages/GPy/kern/src/rbf.py:51: RuntimeWarning:overflow encountered in square\n"
]
},
{
"data": {
"image/png": "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P/10DjjgAM4991ystW3/pUTaE38uBDtXR1tERJrP5XIxdepU7r777h2OFRYWctpppzFq1ChGjRrF/PnzARgyZAilpaVYa+nWrRtPPvkkAOeffz7vvvvuNm3MnTuXww47jF/84hccdNBBXHrppcRiMQDS09O59dZbmTBhAm+88Qbvvfcew4cPZ8iQIUyZMoXa2loABgwYwA033MDo0aMZPXo03333HQCrV6/mqKOOYujQoRx11FGsWbMGgOeee47BgwczbNgwDjvsMGDn/cXW0qgl4ruiSpNGevlmfN0HpDoUERFJ+N2/v2LZhvKktnnQnpnc9l8H7/a8s88+mxkzZnDSSSfxxRdfMGXKFD788EMA7rjjDo488kgeffRRSktLGT16ND/72c/o2bMn77zzDj6fj2+//ZZJkyZRUFAAwOLFi/nqq6/Yc889GT9+PPPnz+fQQw9N6ncT6VD8OVCtJJCISHs0ceLEHfadeeaZXH755VRXV3PCCSfscPzCCy/kwgsvpKioiNNPP32bY3Pnzm3Ufa+44gqGDh3K9ddfv83+X//611x99dUceuihrFmzhmOPPZbly5fX9an69+/PwIED+fDDD5k8eTIff/wxDzzwwA7tL1y4kGXLltG/f3+OO+44XnzxRU4//XSqqqoYPHgw5557LrW1tZx44om89957DBo0iMmTJ/PAAw9w1VVXAZCZmcnChQt58sknueqqq3j11VeZNm0akydP5oILLuDRRx/lyiuv5F//+hczZszgrbfeok+fPpSWlgLssr/YGlQJtBPWHaC0Ogw1yf1hQ0REOqahQ4eyatUqZs+evUNH5+233+YPf/gDeXl5TJw4kZqaGtasWUM4HObiiy9myJAhnHHGGSxbtqzumtGjR9O3b18cDgd5eXmsWrWqjb+RSDsTyIXaMohGUh2JiIi0E5mZmUyePJl77713m/3vvvsu06ZNIy8vj5NPPpny8nIqKiqYMGECH3zwAR988AGXXXYZX375JevXryc3N5f09PQd2h89ejQDBw7E6XQyadIk5s2bB4DT6eS0004DYOXKley9994MGjQIgAsuuIAPPvigro2t1eGTJk1iwYIFACxYsIBzzjkHiFchbW13/PjxXHjhhfz9738nGo0C7LK/2BpUCbRThqA7h6rSzaT1ygAtjyciknKNqdhpTSeffDLXXXcdc+fOpbi4uG6/tZYXXniB/ffff5vzp0+fTq9evfj888+JxWL4fL66Y16vt+6z0+kkEtEPvtLF+XPi7zWlkNY9tbGIiMg2dlW5EwgEdnm8e/fuja78achVV13FiBEjuOiii+r2xWIxFixYgN/v3+bcww47jPvvv581a9Zwxx138NJLL/H8888zYcKLine truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIEAAAEVCAYAAAB3+fUzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd8leX9//HXdU7GySKMADJkKchIIIQAMkSUiqOKCjgoisrXUtdPqV9nsWKxtH4rtRa1WrRuqrjQulqEFhEEMQiyEdkoIwnZ84zr98cJaYAQAhn3SfJ+Ph555Jx7XPf7EAjnfO5rGGstIiIiIiIiIiLSuLmcDiAiIiIiIiIiInVPRSARERERERERkSZARSARERERERERkSZARSARERERERERkSZARSARERERERERkSZARSARERERERERkSZARSARERFptIwx+caYbk7nEBEREQkFKgKJiIhInTDG7DTG/KTs8Y3GmKV1fL3FxpibK26z1sZaa7fX0bWKy4pM+caYLbV9DREREZHapiKQiIiIhDxjTJjTGSpxR1mRKdZae5bTYUREREROREUgERERqVPGmF7Ac8CQsl4z2WXbI40xs4wxu40xB4wxzxljosr2jTTG7DXG3G+M2Q+8ZIxpYYz5yBiTbozJKnvcsez4mcA5wNNl13i6bLs1xpxZ9jjeGPNq2fm7jDEPGWNcZftuNMYsLcuTZYzZYYy5uN7/sERERETqkIpAIiIiUqestZuAW4DlZb1mmpft+j+gB5AMnAl0AB6ucOppQEugMzCF4PuWl8qedwKKgKfLrjEN+IL/9s65o5IoTwHxQDfgXGAScFOF/YOBLUAC8Afgb8YYU8VL+70xJsMYs8wYM7IafxQiIiIijlIRSEREROpdWXHl58AvrbWHrLV5wO+AayscFgCmW2tLrLVF1tpMa+271trCsuNnEizmVOd6buAa4EFrbZ61difwR+D6CoftstY+b631A68A7YC2x2nyfoLFpA7AHOBDY8wZ1Xv1IiIiIs4IxfH1IiIi0vi1BqKBVRU62xjAXeGYdGttcflOY6KBPwEXAS3KNscZY9xlhZuqJAARwK4K23YRLOIctv/wA2ttYVmu2Moas9Z+VeHpK8aYCcAlBHsbiYiIiIQk9QQSERGR+mCPep5BcDhXH2tt87KveGtt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 truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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rLUVwO+BBa08zXRglbV2XyhiFhEREekCxgPbrLXVTezbaq311NsW9EM6PYAT6X6MtTbSMYhIJ2aM+S3+FcMWhaCvj4D/sdZubX9kIiIiIp2fMeZh/EmcqnqbLTAY/wM3l7X2unrt++CfHjYGWA38xVr7UGDfz4ELrbVTA58vBWZYay/qiGsRkchTEkhERERERKQLCfYhnR7AiXQ/SgKJiIiIiIiIiHQDqgkkIiIiEibGmO8aYz41xuwyxvyikf3GGPNQYP9mY8yElo41xmQZY9YaYzYZY3KMMRM76npERESkc1MSSERERCQMjDFO4BHgXOBEYIYx5sQGzc4FRgR+ZuNfwaelY38H/NpamwXcFfgsIiIi0iIlgURERETCYyKwy1r7pbW2BngBuKBBmwuAZ6zfWqCHMWZgC8daIDXwPg3QiooiIiISlJiOPFmfPn1senp6R55SREREOtCGDRsKrLV9Ix1HlBgE7Kn3eS8wKYg2g1o4di7wljFmIf4Heqc0dnJjzGz8o4tISko6adSoUW27ChEREYl6wd6DdWgSKD09nZycnI48pYiIiHQgY8zuSMcQRUwj2xquyNFUm+aOvR74ibX2RWPMZcBfgG8d09jax4HHAbKzs63uwURERLquYO/BNB1MREREJDz2AsfX+zyYY6duNdWmuWOvApYH3v8d/9QxERERkRYpCSQiIiISHuuBEcaYYcaYOOAK4JUGbV4BZgVWCZsMlFhr97dw7D7gjMD7s4DPw30hIiIi0jV06HQwERERke7CWusxxtwEvAU4gSettduMMXMC+x8D3gDOA3YBFcA1zR0b6PrHwIPGmBigikDdHxEREZGWRDwJVFtby969e6mqqop0KFKPy+Vi8ODBxMbGRjoUERGRTsta+wb+RE/9bY/Ve2+BG4M9NrB9DXBSaCMVERH5L31Pj17t/a4e8STQ3r17SUlJIT09HWMaq4EoHc1aS2FhIXv37mXYsGGRDkdEREREREQ6kL6nR6dQfFePeE2gqqoqevfurb9YUcQYQ+/evZX1FRERERER6Yb0PT06heK7esSTQID+YkUh/U5ERERERES6L30njE7t/b1ERRJIREREREREpNs5tBM+eyvSUUg3oiQQ/kzaj370o7rPHo+Hvn37cv7550cwKhEREViyZQnpi9Jx/NpB+qJ0lmxZEumQREREJBRqK+H5y2G5FnlsjDGGn/3sZ3WfFy5cyD333BO5gDpYbm4uGRkZIe83qCSQMSbXGLPFGLPJGJMT2PZ7Y8xOY8xmY8xLxpgeIY+ugyQlJbF161YqKysBeOeddxg0aFCEoxIRke5uyZYlzH51NrtLdmOx7C7ZzexXZysRJCIi0omtWLGCFStWwOrfQ1EuVBVDTUWkw4o68fHxLF++nIKCgojG4fV6I3r+UGvNSKAzrbVZ1trswOd3gAxr7VjgM+COkEfXgc4991xef/11AJ5//nlmzJhRt8/tdnPttddy8sknM378eP75z38C/szcaaedxoQJE5gwYQIffPABAKtWrWLatGlccskljBo1ipkzZ+JfAVZERCR481bOo6K2ghTPdJI80wCoqK1g3sp5kQ1MRERE2uzee+/lbw/Mg/cfgqR+/o1l+yMbVBSKiYlh9uzZ/PGPfzxmX35+PhdffDEnn3wyJ598Mu+//z4AmZmZFBcXY62ld+/ePPPMMwD86Ec/8ife6lm1ahWnn346F154ISeeeCJz5szB5/MBkJyczF133cWkSZP48MMPWblyJePHjyczM5Nrr72W6upqANLT07n99tuZOHEiEydOZNeuXQDs3r2bs88+m7Fjx3L22WeTl5cHwN///ncyMjIYN24cp59+OtB0XiFc2rxEvLX27Xof1wKXtDeYX7+6je37StvbzVFOPC6Vu78/psV2V1xxBfPnz+f8889n8+bNXHvttbz33nsALFiwgLPOOosnn3yS4uJiJk6cyLe+9S369evHO++8g8vl4vPPP2fGjBnk5OQAsHHjRrZt28Zxxx3H1KlTef/99zn11FNDem0iItK15ZXk4bBp9KidRYXzA9ysqtsuIiIinZPB8tOReyA+Gb57H7z4P1B2AHqfEOnQmjRt2rRjtl122WXccMMNVFRUcN555x2z/+qrr+bqq6+moKCASy45Ol2watWqoM574403MnbsWG677bajtt9yyy385Cc/4dRTTyUvL4/vfOc77Nixo+6799ChQxk+fDjvvfces2bNYu3atSxevPiY/tetW8f27dsZOnQo3/3ud1m+fDmXXHIJbrebjIwM5s+fT1VVFSNGjGDlypWMHDmSWbNmsXjxYubOnQtAamoq69at45lnnmHu3Lm89tpr3HTTTcyaNYurrrqKJ598kptvvpmXX36Z+fPn89ZbbzFo0CCKi4sBms0rhEOwI4Es8LYxZoMxprEJi9cCbzZ2oDFmtjEmxxiTk5+f39Y4w27s2LHk5uby/PPPH/MX+O233+b+++8nKyuLadOmUVVVRV5eHrW1tfz4xz8mMzOTSy+9lO3bt9cdM3HiRAYPHozD4SArK4vc3NwOviIREenshqQNIdVzMYZLine truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"np.random.seed(3)\n",
"bo = BayesOpt(param_ranges, evaluate_params, random_trials=2)\n",
"bo._random_search()\n",
"bo._fit_gp()\n",
"new_proposal = bo._new_proposal()\n",
"x_, y_ = bo._single_iter(new_proposal)\n",
"\n",
"for i in range(2, 10):\n",
" new_proposal = bo._new_proposal()\n",
" ei = expected_improvement(\n",
" f=bo.gp.predict, y_current=bo.y.max(), x_proposed=x[:, None]\n",
" )\n",
" x_, y_ = bo._single_iter(new_proposal)\n",
" bo.x[i], bo.y[i] = x_, y_\n",
"\n",
" quants = bo.gp.predict_quantiles(x[:, None], quantiles=(10, 90))\n",
" mu, var = bo.gp.predict(x[:, None])\n",
"\n",
" plt.figure(figsize=(20, 4))\n",
" plt.suptitle(f\"Iteration {i - 1}\")\n",
" plt.subplot(1, 2, 1)\n",
" plt.title(\"$f(x^*)$\")\n",
" plt.plot(x, mu, color=\"C0\", label=\"Mean\")\n",
" plt.fill_between(\n",
" x,\n",
" quants[0].flatten(),\n",
" quants[1].flatten(),\n",
" alpha=0.15,\n",
" edgecolor=\"C1\",\n",
" label=\"Confidence\",\n",
" )\n",
" plt.scatter(\n",
" bo.x[: bo.random_trials],\n",
" bo.y[: bo.random_trials],\n",
" color=\"r\",\n",
" label=\"random trials\",\n",
" )\n",
" plt.xlim(x.min() - 1, x.max() + 1)\n",
" mask = bo.x.sum(axis=1) != 0\n",
" plt.scatter(\n",
" bo.x[mask][bo.random_trials : -1],\n",
" bo.y[mask][bo.random_trials : -1],\n",
" color=\"g\",\n",
" label=\"BO trials\",\n",
" )\n",
"\n",
" plt.legend()\n",
" plt.subplot(1, 2, 2)\n",
" plt.title(\"$EI(x)$\")\n",
" plt.plot(x, ei, color=\"C1\")\n",
" plt.vlines(new_proposal, 0, ei.max(), linestyle=\"--\", label=\"New proposal\")\n",
" plt.xlim(x.min() - 1, x.max() + 1)\n",
" plt.legend()\n"
]
},
{
"cell_type": "code",
"execution_count": 234,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([5.69161243])"
]
},
"execution_count": 234,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bo._new_proposal()"
]
},
{
"cell_type": "code",
"execution_count": 235,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f9ef1bdc7b8>"
]
},
"execution_count": 235,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1440x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"quants = bo.gp.predict_quantiles(x[:, None], quantiles=(10, 90))\n",
"mu, var = bo.gp.predict(x[:, None])\n",
"\n",
"ei = expected_improvement(\n",
" f=bo.gp.predict,\n",
" y_current=bo.y.max(),\n",
" x_proposed=x[:, None])\n",
"\n",
"\n",
"plt.figure(figsize=(20, 4))\n",
"plt.suptitle(f'Iteration {i}')\n",
"plt.subplot(1, 2, 1)\n",
"plt.title('$f(x^*)$')\n",
"plt.plot(x, mu, color='C0', label='Mean')\n",
"plt.fill_between(x, quants[0].flatten(), quants[1].flatten(), alpha=0.15, edgecolor='C1', label='Confidence')\n",
"plt.scatter(bo.x[:bo.random_trials], bo.y[:bo.random_trials], color='r', label='random trials')\n",
"\n",
"mask = bo.x.sum(axis=1) != 0\n",
"plt.scatter(bo.x[mask][bo.random_trials:], bo.y[mask][bo.random_trials:], color='g', label='BO trials')\n",
"\n",
"plt.legend()\n",
"\n",
"plt.subplot(1, 2, 2)\n",
"plt.title('$EI(x)$')\n",
"plt.plot(x, ei, color='C1')\n",
"plt.vlines(bo._new_proposal(), 0, ei.max(), linestyle='--', label='New proposal')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "Array 'cov' must be square if it is two dimensional, but cov.shape = (50, 1).",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-206-b3e1a5540454>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstats\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultivariate_normal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflatten\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcov\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrvs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m75\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m16\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/miniconda3/lib/python3.7/site-packages/scipy/stats/_multivariate.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, mean, cov, allow_singular, seed)\u001b[0m\n\u001b[1;32m 361\u001b[0m return multivariate_normal_frozen(mean, cov,\n\u001b[1;32m 362\u001b[0m \u001b[0mallow_singular\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mallow_singular\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 363\u001b[0;31m seed=seed)\n\u001b[0m\u001b[1;32m 364\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_process_parameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdim\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmean\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcov\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/miniconda3/lib/python3.7/site-packages/scipy/stats/_multivariate.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, mean, cov, allow_singular, seed, maxpts, abseps, releps)\u001b[0m\n\u001b[1;32m 733\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmultivariate_normal_gen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseed\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 734\u001b[0m self.dim, self.mean, self.cov = self._dist._process_parameters(\n\u001b[0;32m--> 735\u001b[0;31m None, mean, cov)\n\u001b[0m\u001b[1;32m 736\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcov_info\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_PSD\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcov\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_singular\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mallow_singular\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 737\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mmaxpts\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/miniconda3/lib/python3.7/site-packages/scipy/stats/_multivariate.py\u001b[0m in \u001b[0;36m_process_parameters\u001b[0;34m(self, dim, mean, cov)\u001b[0m\n\u001b[1;32m 419\u001b[0m \" but 'mean' is a vector of length %d.\")\n\u001b[1;32m 420\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcov\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 421\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 422\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mcov\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 423\u001b[0m raise ValueError(\"Array 'cov' must be at most two-dimensional,\"\n",
"\u001b[0;31mValueError\u001b[0m: Array 'cov' must be square if it is two dimensional, but cov.shape = (50, 1)."
]
}
],
"source": [
"a = stats.multivariate_normal(mu.flatten(), cov).rvs(75)\n",
"\n",
"plt.figure(figsize=(16, 4))\n",
"for i in range(a.shape[0]):\n",
" plt.plot(x, a[i, :], alpha=0.5)"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'gpmean': [[<matplotlib.lines.Line2D at 0x7f9ef3c11240>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3ae7eb8>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa18d0>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa1160>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa1da0>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa1e80>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa9470>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa97b8>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa9b00>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa9e48>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3aa9f28>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3ab2518>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3ab2860>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3ab2ba8>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3ab2ef0>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3ab2fd0>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3abd5c0>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3abd908>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3abdc50>],\n",
" [<matplotlib.lines.Line2D at 0x7f9ef3abdf98>]]}"
]
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"bo.gp.plot_samples(samples=20)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 2/2 [00:00<00:00, 1279.92it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Starting 2 random trials...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
" /opt/miniconda3/lib/python3.7/site-packages/paramz/transformations.py:111: RuntimeWarning:divide by zero encountered in log\n",
" /opt/miniconda3/lib/python3.7/site-packages/paramz/transformations.py:108: RuntimeWarning:invalid value encountered in greater\n",
" /opt/miniconda3/lib/python3.7/site-packages/GPy/kern/src/stationary.py:168: RuntimeWarning:overflow encountered in true_divide\n",
" /opt/miniconda3/lib/python3.7/site-packages/GPy/kern/src/rbf.py:54: RuntimeWarning:invalid value encountered in multiply\n",
" /opt/miniconda3/lib/python3.7/site-packages/paramz/transformations.py:113: RuntimeWarning:invalid value encountered in greater\n"
]
},
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f7eb2e6b668>]"
"[<matplotlib.lines.Line2D at 0x7f9f04d91860>]"
]
},
"execution_count": 438,
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" /opt/miniconda3/lib/python3.7/site-packages/matplotlib/figure.py:2369: UserWarning:This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAAEYCAYAAAAnPkG+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XlwXOd5LvjnO3tv2AFqobhJ3CyJpElGiy1RElVJrlMeZxI7EyseVeJMymU7jmWn7LlJZWO2uhlHY1ljT+XGSU0l5Ti24ti+N9fOTUxrIy1FiSiKkmWRAmUKoiiJxA70fs75vm/+OKdPd4MgsRJAA8+vCtXndJ/uPuCCbjz9vu8ntNYgIiIiIiIiIqLWZSz3CRARERERERER0cIw4CEiIiIiIiIianEMeIiIiIiIiIiIWhwDHiIiIiIiIiKiFseAh4iIiIiIiIioxTHgISIiIiIiIiJqcQx4iIiIiIiIiIhaHAMeIiIiIiIiIqIWx4CHiIiIiIiIiKjFWUv5ZD09PXrTpk1L+ZRERERERERERC3rueeeG9Za98503JIGPJs2bcKxY8eW8imJiIiIiIiIiFqWEOL12RzHFi0iIiIiIiIiohbHgIeIiIiIiIiIqMUx4CEiIiIiIiIianFLOoOHiIiIiIiIiFpHEAQ4d+4cKpXKcp/Kqud5HtavXw/btud1fwY8RERERERERDStc+fOIZfLYdOmTRBCLPfprFpaa4yMjODcuXPYvHnzvB6DLVpERERERERENK1KpYLu7m6GO1eYEALd3d0LqpRiwENEREREREREl8RwZ2ks9M95Vi1aQogBAHkAEkCotd4vhPhzAP8LAB/AjwF8WGs9vqCzISIiIiIiIiKiOZtLBc89Wus9Wuv98f5hADdprXcB6Afw24t+dkRERERERES0pgkhcP/99yf7YRiit7cX733ve5fxrFaeebdoaa2/p7UO491nAKxfnFMiIiIiIiIiIopkMhm89NJLKJfLAIDDhw/j2muvXeazWnlmu4qWBvA9IYQG8Jda6y9Puf1XATwy3R2FEB8B8BEA2LBhw3zPk4iIiIiIiIiW0U985KtX5HGf/fKHZjzmPe95D7773e/iAx/4AL72ta/hvvvuw9GjRwEAxWIRv/Ebv4Ef/vCHCMMQhw4dws/+7M9iYGAA999/P4rFIgDgS1/6Et71rnfhiSeewKFDh9DT04OXXnoJ+/btw9/93d+1/Kyh2VbwvFtrvRfAewD8uhDiQO0GIcTvAAgBTPs3rbX+stZ6v9Z6f29v74JPmIiIiIiIiIjWlg9+8IP4+te/jkqlghdffBG33nprctuf/umf4uDBg3j22Wfx+OOP47Of/SyKxSL6+vpw+PBhHD9+HI888gg++clPJvd5/vnn8YUvfAEvv/wyzpw5g6eeemo5vq1FNasKHq31W/HloBDi2wBuAXBECPHLAN4L4F6ttb5yp0lEREREREREy2k2lTZXyq5duzAwMICvfe1r+Jmf+Zmm2773ve/hn/7pn/Dggw8CiJZ2P3v2LK655hp84hOfwIkTJ2CaJvr7+5P73HLLLVi/Ppo0s2fPHgwMDOCOO+5Yum/oCpgx4BFCZAAYWut8vP1TAP5ICPGfAPxnAHdprUtX+DyJiIiIiIiIaA173/veh8985jN44oknMDIyklyvtcY3v/lNbN++ven4Q4cOYd26dXjhhReglILnecltrusm26ZpIgxDtLrZtGitA/ADIcQLAP4DwHe11v8C4EsAcgAOCyFOCCH+6xU8TyIiIiIiIiJaw371V38Vv//7v4+bb7656fqf/umfxhe/+EXUGouef/55AMDExASuvvpqGIaBr3zlK5BSLvk5L6UZK3i01mcA7J7m+huuyBkREREREREREU2xfv16PPDAAxdd/3u/93v41Kc+hV27dkFrjU2bNuE73/kOPv7xj+P9738/vvGNb+Cee+5BJpNZhrNeOmIpR+fs379fHzt2bMmej4iIiIiIiIjm7+TJk9i5c+dyn8aaMd2ftxDiOa31/pnuO9tVtIiIiIiIiIiIaIViwENERERERERE1OIY8BARERERERERtTgGPERERERERERELY4BDxERERERERFRi2PAQ0RERERERETU4hjwEBEREREREdGi0Fpfdn8+TNPEnj17cOONN2L37t34/Oc/D6XUZe8zMDCAv//7v1/wc7cSBjxEREREREREtGCHDh3Cpz/96STU0Vrj05/+NA4dOrSgx02lUjhx4gR+9KMf4fDhw/jnf/5n/OEf/uFl78OAh4iIiIiIiIhojrTWGB8fx8MPP5yEPJ/+9Kfx8MMPY3x8fFEqeQCgr68PX/7yl/GlL30JWmsMDAzgzjvvxN69e7F37148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 truncated
@@ -361,14 +842,14 @@
},
{
"cell_type": "code",
"execution_count": 436,
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 2/2 [00:00<00:00, 1687.17it/s]\n",
"100%|██████████| 2/2 [00:00<00:00, 1929.75it/s]\n",
" 0%| | 0/5 [00:00<?, ?it/s]"
]
},
@@ -384,22 +865,23 @@
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 5/5 [00:01<00:00, 3.41it/s]\n"
" 20%|██ | 1/5 [00:00<00:01, 2.33it/s] /opt/miniconda3/lib/python3.7/site-packages/GPy/kern/src/rbf.py:51: RuntimeWarning:overflow encountered in square\n",
"100%|██████████| 5/5 [00:01<00:00, 3.23it/s]\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f7eb2ef96a0>"
"<matplotlib.collections.PathCollection at 0x7f9f04a61400>"
]
},
"execution_count": 436,
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAAEYCAYAAAAnPkG+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XdgXXd9///nufvq6mpZw5blvWfike0MZ5OEDEghgSTQUGhLE6DAt0ALNNAyG6AUWgq/Am1JGpIUMpoQZzs7IU7ieG/Lsizbsvbd94zP749rO3biKcuSrvR6/JPo6t5zP5Lvte95nffn/baMMYiIiIiIiIiISPHyDfQCRERERERERETkxCjgEREREREREREpcgp4RERERERERESKnAIeEREREREREZEip4BHRERERERERKTIKeARERERERERESlyCnhERERERERERIqcAh4RERERERERkSKngEdEREREREREpMgF+vPJqqurzfjx4/vzKUVEREREREREitYbb7zRZoypOdr9+jXgGT9+PMuWLevPpxQRERERERERKVqWZW07lvtpi5aIiIiIiIiISJFTwCMiIiIiIiIiUuQU8IiIiIiIiIiIFLl+7cEjIiIiIiIiIsXDtm2am5vJZrMDvZQhLxKJ0NDQQDAY7NXjFfCIiIiIiIiIyCE1NzcTj8cZP348lmUN9HKGLGMM7e3tNDc3M2HChF4dQ1u0REREREREROSQstksI0aMULhzklmWxYgRI06oUkoBj4iIiIiIiIgclsKd/nGiv2cFPCIiIiIiIiIiRU4Bj4iIiIiIiIgMWpZlcfPNN+//2nEcampquOqqqwZwVYOPmiyLiIiIiIicZI7r4boejuth2y4528V2XTwPDIUGq8YU/n8f397dGhaAZeH3QSjoJ+T3Ewr58ft9BP1+fD5tn5HCayjvuOTzDrZrsA94jXnG4JnDP9ZnFUIUy4KA30fAb+1/nRVem2ZAt2nFYjFWrVpFJpMhGo3y5JNPMnr06AFbz2ClgEdEREREROQEGWPI2y6ZrE0675C3XVzP4LoG1zMYy8JnWVg+8Pv8+H0Wfn8AK2BxrKfNrmdI5jxcN49nPIxn8DyD74CT8mDARywcpCQaIhT0n9SfWQaG7bikczaJVA7bMTiewXM9XAM+n4XP58Pn8+H3Wfh8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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAAEYCAYAAAAnPkG+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl8XXWd//HXOXfPzd40adO0tNCNrmkpi0JBEWV0UFyQRQVnXHDDGVQePx0dHcRldERRdNTRcZwZURBFlE2EAZEdKdB9X9I2SbPfJHe/95zz/f2RtLTQJW1zk9zk/Xw8+kh6c++536Rpcu77fL6fj2WMQUREREREREREipc92gsQEREREREREZGTo4BHRERERERERKTIKeARERERERERESlyCnhERERERERERIqcAh4RERERERERkSKngEdEREREREREpMgp4BERERERERERKXIKeEREREREREREipwCHhERERERERGRIucfySerqakxM2fOHMmnFBEREREREREpWi+88EKXMWbyse43ogHPzJkzWbVq1Ug+pYiIiIiIiIhI0bIsa/dQ7qctWiIiIiIiIiIiRU4Bj4iIiIiIiIhIkVPAIyIiIiIiIiJS5Ea0B4+IiIiIiIiIFI98Pk9zczOZTGa0lzLuhcNhGhoaCAQCJ/R4BTwiIiIiIiIicljNzc2UlZUxc+ZMLMsa7eWMW8YYuru7aW5uZtasWSd0DG3REhEREREREZHDymQyTJo0SeFOgVmWxaRJk06qUkoBj4iIiIiIiIgckcKdkXGyX2cFPCIiIiIiIiIiRU4Bj4iIiIiIiIiMWZZlcfXVVx/4u+M4TJ48mUsuuWQUVzX2qMmyiIiIiIiISBFxXY9s3iGddXAcj7zr4nngGYNnXr6fBVjW/rcWQb9NMOgnFPDh99sEfD5se+xvv4pGo6xfv550Ok0kEuHhhx9m2rRpo72sMUcBj4iIiIiIiMgYlc059MYzpHMOjmtwXA8PsG0bv8+Hz7awbT+238IH+I5yrIznkUjkcb0MxjN4nsG2wO+zCfgswkE/0UiASCiAz/fqDT9nXvvLgnyOz//kvce8z5vf/Gbuv/9+LrvsMm6//XauuuoqnnjiCQCSySSf/OQnWbduHY7jcOONN3LppZfS1NTE1VdfTTKZBOAHP/gBr33ta3nssce48cYbqampYf369ZxxxhncdtttRd9rSAGPiIiIiIiIyBiRzTv0JTIk0g65vAuWTSjoxx8I4gtA6CSO7bNtfEGbI0UBybxLbzqF63r4LYtgwMb1vIEgaJQrfa688kpuuukmLrnkEtauXcsHPvCBAwHP1772NS688EL+67/+i97eXs466ywuuugiamtrefjhhwmHw2zbto2rrrqKVatWAfDSSy+xYcMG6uvrOffcc3nqqac477zzRvNTPGkKeERERERERERGUS7v0tWXIp7O4RmLUDBAIBgkEBzZdQT8PgL+Q2uAjIFs3gXgiR9cgc+28Nn2iAc+S5Ysoampidtvv523vOUth3zsoYce4p577uHmm28GBka779mzh/r6eq677jpWr16Nz+dj69atBx5z1lln0dDQAEBjYyNNTU0KeERERERERETk+LiuR09/mt5ElrxriISDlEQio72sw/IdFOZ4BpzBwMe2wOez8dnWiGxvetvb3sYNN9zAY489Rnd394HbjTHcddddzJs375D733jjjdTV1bFmzRo8zyMcDh/4WCj0ci2Uz+fDcZyCr7/QNEVLREREREREZITkHZc9bX1sbY7Rl3YJR8KUlUbw+4/WPWfssGCwiscCy8JxPTI5l0zOIe+4GGOOeYwT9YEPfIAvfelLLF68+JDbL774Yr7//e8feO6XXnoJgL6+PqZOnYpt2/ziF7/Add2CrW0sUMAjIiIiIiIiUmDZvMOu1hjbWnrxbB+l0QihYHFvqrEA2xoIe2zLwvV4OezJu3jDHPY0NDTwj//4j6+6/Ytf/CL5fJ4lS5awaNEivvjFLwLw8Y9/nP/5n//hnHPOYevWrUSj0WFdz1hjFTJde6UVK1aY/Q2NRERERERERMa7TDZPa1eCrONREgmPerPi49Xbtot58+Yf9+MM4HkGyxqo+PH77KKfUjUSNm3axOmnn37IbZZlvWCMWXGsxxZ3XCgiIiIiIiIyBrmuR0tnnGTWIVoSJhCaWOHG/q1cAK4HjutiDY5kH6mePRONAh4RERERERGRYdQZS9LZlyESCVEaDYz2ckadbQGDgY7jeuSdgdv8PhufT51jhosCHhEREREREZFhkEhnaelM4PP7KSsdmxOxRpttWWANbOHKOR6W42Hb4Pf5im772lijgEdERERERETkJBhj2NvRTyrrEi1RsDMUB2/h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 truncated
"text/plain": [
"<Figure size 1152x288 with 1 Axes>"
]
@@ -421,7 +903,7 @@
},
{
"cell_type": "code",
"execution_count": 437,
"execution_count": 14,
"metadata": {},
"outputs": [
{
@@ -430,7 +912,7 @@
"{'x': 10.0}"
]
},
"execution_count": 437,
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
@@ -441,16 +923,16 @@
},
{
"cell_type": "code",
"execution_count": 407,
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([4.47201616])"
"array([9.82811278])"
]
},
"execution_count": 407,
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}