diff --git a/notebooks/grids.ipynb b/notebooks/grids.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..73eaabe1371a753811b7dee164f9d7edeb26de72
--- /dev/null
+++ b/notebooks/grids.ipynb
@@ -0,0 +1,586 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "9824f12e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# code"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "fdc05dfa",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parameters = {'max_depth':(5,10,15)}\n",
+    "rf = RandomForestRegressor(n_estimators=15, try_features = 'third')\n",
+    "searcher = GridSearchCV(rf, parameters, cv=3)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "4f464219",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from sklearn.model_selection import GridSearchCV\n",
+    "from sklearn.ensemble import RandomForestRegressor\n",
+    "\n",
+    "from sklearn.datasets import make_regression\n",
+    "import matplotlib.pyplot as plt "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "25a04ec5",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "X, y = make_regression(n_features=1, n_informative=1, random_state=0, shuffle=False, noise=10)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "24b05b14",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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pRSUjz/+WMOGDdPmzZt1ySWXuL0c27EzA0ui0agqKircXgbQLx0dHdqxY4emTZvW6/Fp06bptddec2lVgPOi0agk5e1/xwkzMLVnzx499thjuvXWW91eCtAvBw8eVGdnp6qqqno9XlVVpUgk4tKqAGfFYjEtWrRIF110kerr691ejiMIMwVk6dKlCgQCaT9ef/31Xt+zf/9+TZ8+Xddee61uvvlml1bub9n83eGsQCDQ6/NYLNbnMSBfzJ8/X2+++aaeffZZt5fimBPcXgByZ/78+bruuuvSPmfUqFHxf96/f78mTZqkCRMm6Gc/+5nDq8tfmf7d4ZzKykoVFxf32YU5cOBAn90aIB/ccccd+s1vfqNXX31Vp556qtvLcQxhpoBUVlaqsrLS0nM/+ugjTZo0SePGjdOTTz6poiI28bKVyd8dziopKdG4ceO0adMmffOb34w/vmnTJl1zzTUurgywVywW0x133KH169frj3/8o2pra91ekqMIM+hj//79uvTSSzVixAg99NBD+vjjj+NfC4fDLq4s/zU1NenQoUNqampSZ2enGhsbJUlf/epXdeKJJ7q7uDyxaNEi3Xjjjfra174W33VsamriTpiDjh49qvfeey/++d69e9XY2KiKigqNGDHCxZXlr9tvv13PPPOMnn/+eZWVlcV3I0OhkAYNGuTy6hwQAxI8+eSTMUlJP+Cs2bNnJ/27v/LKK24vLa/8+Mc/jo0cOTJWUlISGzt2bGzz5s1uLymvvfLKK0n/vZ49e7bbS8tbqf4b/uSTT7q9NEfQZwYAAPgaFyEAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICvEWYAAICv/X+nInqdFRL8gAAAAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "plt.scatter(X, y);"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "8532c5eb",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "rf = RandomForestRegressor()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "528b3452",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "searcher = GridSearchCV(estimator=rf, param_grid={'max_depth':(5,10,15)}, cv= 3)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "ec7bef2c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=3, estimator=RandomForestRegressor(),\n",
+       "             param_grid={&#x27;max_depth&#x27;: (5, 10, 15)})</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GridSearchCV</label><div class=\"sk-toggleable__content\"><pre>GridSearchCV(cv=3, estimator=RandomForestRegressor(),\n",
+       "             param_grid={&#x27;max_depth&#x27;: (5, 10, 15)})</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: RandomForestRegressor</label><div class=\"sk-toggleable__content\"><pre>RandomForestRegressor()</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestRegressor</label><div class=\"sk-toggleable__content\"><pre>RandomForestRegressor()</pre></div></div></div></div></div></div></div></div></div></div>"
+      ],
+      "text/plain": [
+       "GridSearchCV(cv=3, estimator=RandomForestRegressor(),\n",
+       "             param_grid={'max_depth': (5, 10, 15)})"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "searcher.fit(X, y)\n",
+    "    \n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "a20fe377",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'mean_fit_time': array([0.08331521, 0.07211264, 0.0718383 ]),\n",
+       " 'std_fit_time': array([0.01629742, 0.00011223, 0.00013308]),\n",
+       " 'mean_score_time': array([0.00523392, 0.00518481, 0.00502459]),\n",
+       " 'std_score_time': array([1.56304468e-04, 1.14600801e-04, 5.38271269e-05]),\n",
+       " 'param_max_depth': masked_array(data=[5, 10, 15],\n",
+       "              mask=[False, False, False],\n",
+       "        fill_value='?',\n",
+       "             dtype=object),\n",
+       " 'params': [{'max_depth': 5}, {'max_depth': 10}, {'max_depth': 15}],\n",
+       " 'split0_test_score': array([0.92873148, 0.92620142, 0.92348871]),\n",
+       " 'split1_test_score': array([0.90228693, 0.90530648, 0.90144398]),\n",
+       " 'split2_test_score': array([0.89852812, 0.8944555 , 0.89516853]),\n",
+       " 'mean_test_score': array([0.90984884, 0.90865446, 0.9067004 ]),\n",
+       " 'std_test_score': array([0.01343993, 0.01317466, 0.01214443]),\n",
+       " 'rank_test_score': array([1, 2, 3], dtype=int32)}"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "searcher.cv_results_"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "f58df0df",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "max_depth 5\n",
+      "0.9098488414768675\n",
+      "0.08331521352132161\n",
+      "max_depth 10\n",
+      "0.908654464483059\n",
+      "0.07211263974507649\n",
+      "max_depth 15\n",
+      "0.9067004042768522\n",
+      "0.0718382994333903\n"
+     ]
+    }
+   ],
+   "source": [
+    "for i, p in enumerate(searcher.cv_results_['params']):\n",
+    "    for parname, parvalue in p.items():\n",
+    "        print(parname, parvalue)\n",
+    "    print(searcher.cv_results_['mean_test_score'][i])\n",
+    "    print(searcher.cv_results_['mean_fit_time'][i])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f44a0964",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6168dc37",
+   "metadata": {},
+   "source": [
+    "## Log search results to model repo"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "1c8a9237",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import mlflow"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "19952b7e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "mlflow.set_tracking_uri('https://modelrepository.eflows4hpc.eu/')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "c5f64c94",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2024/01/15 10:53:31 INFO mlflow.tracking.fluent: Experiment with name 'gridsearch-example' does not exist. Creating a new experiment.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<Experiment: artifact_location='mlflow-artifacts:/2', creation_time=1705312411739, experiment_id='2', last_update_time=1705312411739, lifecycle_stage='active', name='gridsearch-example', tags={}>"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mlflow.set_experiment('gridsearch-example')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "544a9c35",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "metrics=['mean_test_score', 'mean_fit_time']\n",
+    "\n",
+    "for i, p in enumerate(searcher.cv_results_['params']):\n",
+    "    with mlflow.start_run():\n",
+    "        for parname, parvalue in p.items():\n",
+    "            mlflow.log_param(parname, value=parvalue)\n",
+    "        \n",
+    "        for m in metrics:\n",
+    "            mlflow.log_metric(m, searcher.cv_results_[m][i])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "899abf9c",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "8afb1656",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "9ace8a2d",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a9c1680f",
+   "metadata": {},
+   "source": [
+    "## Serialize results"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "a874f869",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pandas as pd"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "74f4b85f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df = pd.DataFrame.from_dict(searcher.cv_results_)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "68f37d48",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>mean_fit_time</th>\n",
+       "      <th>std_fit_time</th>\n",
+       "      <th>mean_score_time</th>\n",
+       "      <th>std_score_time</th>\n",
+       "      <th>param_max_depth</th>\n",
+       "      <th>params</th>\n",
+       "      <th>split0_test_score</th>\n",
+       "      <th>split1_test_score</th>\n",
+       "      <th>split2_test_score</th>\n",
+       "      <th>mean_test_score</th>\n",
+       "      <th>std_test_score</th>\n",
+       "      <th>rank_test_score</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>0.083315</td>\n",
+       "      <td>0.016297</td>\n",
+       "      <td>0.005234</td>\n",
+       "      <td>0.000156</td>\n",
+       "      <td>5</td>\n",
+       "      <td>{'max_depth': 5}</td>\n",
+       "      <td>0.928731</td>\n",
+       "      <td>0.902287</td>\n",
+       "      <td>0.898528</td>\n",
+       "      <td>0.909849</td>\n",
+       "      <td>0.013440</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0.072113</td>\n",
+       "      <td>0.000112</td>\n",
+       "      <td>0.005185</td>\n",
+       "      <td>0.000115</td>\n",
+       "      <td>10</td>\n",
+       "      <td>{'max_depth': 10}</td>\n",
+       "      <td>0.926201</td>\n",
+       "      <td>0.905306</td>\n",
+       "      <td>0.894456</td>\n",
+       "      <td>0.908654</td>\n",
+       "      <td>0.013175</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>0.071838</td>\n",
+       "      <td>0.000133</td>\n",
+       "      <td>0.005025</td>\n",
+       "      <td>0.000054</td>\n",
+       "      <td>15</td>\n",
+       "      <td>{'max_depth': 15}</td>\n",
+       "      <td>0.923489</td>\n",
+       "      <td>0.901444</td>\n",
+       "      <td>0.895169</td>\n",
+       "      <td>0.906700</td>\n",
+       "      <td>0.012144</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   mean_fit_time  std_fit_time  mean_score_time  std_score_time  \\\n",
+       "0       0.083315      0.016297         0.005234        0.000156   \n",
+       "1       0.072113      0.000112         0.005185        0.000115   \n",
+       "2       0.071838      0.000133         0.005025        0.000054   \n",
+       "\n",
+       "  param_max_depth             params  split0_test_score  split1_test_score  \\\n",
+       "0               5   {'max_depth': 5}           0.928731           0.902287   \n",
+       "1              10  {'max_depth': 10}           0.926201           0.905306   \n",
+       "2              15  {'max_depth': 15}           0.923489           0.901444   \n",
+       "\n",
+       "   split2_test_score  mean_test_score  std_test_score  rank_test_score  \n",
+       "0           0.898528         0.909849        0.013440                1  \n",
+       "1           0.894456         0.908654        0.013175                2  \n",
+       "2           0.895169         0.906700        0.012144                3  "
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "df"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "630a4d63",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df.to_csv('search.results')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "a604829e",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "search.results\r\n"
+     ]
+    }
+   ],
+   "source": [
+    "! ls search.results"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7b090b0b",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c4c2addd",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 65,
+   "id": "79b51d03",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import json\n",
+    "import pandas as pd"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "id": "a533b1fb",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df = pd.read_csv('search.results', index_col=0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "id": "09989aa2",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "dct = df.to_dict()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 66,
+   "id": "7ffcd844",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2024/01/15 11:19:33 INFO mlflow.tracking.fluent: Experiment with name 'serializedgridsearch-example' does not exist. Creating a new experiment.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<Experiment: artifact_location='mlflow-artifacts:/3', creation_time=1705313973974, experiment_id='3', last_update_time=1705313973974, lifecycle_stage='active', name='serializedgridsearch-example', tags={}>"
+      ]
+     },
+     "execution_count": 66,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mlflow.set_experiment('serializedgridsearch-example')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "id": "1f5a6864",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "metrics=['mean_test_score', 'mean_fit_time']\n",
+    "\n",
+    "for i, p in enumerate(dct['params'].values()):\n",
+    "    with mlflow.start_run():\n",
+    "        p = json.loads(p.replace('\\'', '\"'))\n",
+    "        for parname, parvalue in p.items():\n",
+    "            mlflow.log_param(parname, value=parvalue)\n",
+    "        \n",
+    "        for m in metrics:\n",
+    "            mlflow.log_metric(m, searcher.cv_results_[m][i])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "976d5e87",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "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.10.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}