Skip to content

Instantly share code, notes, and snippets.

@tomekkorbak
Created April 17, 2020 16:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomekkorbak/4a055cf59b340a00169df371955077b8 to your computer and use it in GitHub Desktop.
Save tomekkorbak/4a055cf59b340a00169df371955077b8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "uncertainty.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "code",
"metadata": {
"id": "Vl1lm5eaemX6",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "7a7e1a36-058b-4284-a3a2-00f26437303e"
},
"source": [
"from sklearn.datasets import make_regression\n",
"from sklearn.metrics import mean_squared_error\n",
"from sklearn.linear_model import BayesianRidge\n",
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('seaborn')\n",
"np.random.seed(117)"
],
"execution_count": 124,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
" import pandas.util.testing as tm\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "AzVF4nspev_j",
"colab_type": "code",
"colab": {}
},
"source": [
"class ModifiedBayesianRidge(BayesianRidge):\n",
"\n",
" def predict(self, X):\n",
" y_mean = self._decision_function(X)\n",
" if self.normalize:\n",
" X = (X - self.X_offset_) / self.X_scale_\n",
" aleatoric = 1. / self.alpha_\n",
" epistemic = (np.dot(X, self.sigma_) * X).sum(axis=1)\n",
" return y_mean, aleatoric, epistemic"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "IrWk9qDBhGG-",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 467
},
"outputId": "e488593f-fcc9-4180-c1aa-8cfe9a492f2e"
},
"source": [
"X, y = make_regression(n_samples=12, n_features=1, noise=40)\n",
"X_train, X_test = X[:80], X[80:]\n",
"y_train, y_test = y[:80], y[80:]\n",
"model = ModifiedBayesianRidge()\n",
"model.fit(X_train, y_train)\n",
"grid_points = np.linspace(-10, 10, 1000)\n",
"grid_mean, grid_aleatoric, grid_epistemic = model.predict(\n",
" grid_points.reshape(-1, 1))\n",
"grid_std = np.sqrt(grid_aleatoric + grid_epistemic)\n",
"\n",
"plt.figure(figsize=(14, 7))\n",
"plt.scatter(X_train, y_train, s=100, marker='x', c='black')\n",
"plt.scatter(X_test, y_test, s=100, marker='+', c='black')\n",
"plt.plot(grid_points, grid_mean, c='r')\n",
"plt.fill_between(\n",
" grid_points, \n",
" grid_mean - grid_std, \n",
" grid_mean + grid_std, \n",
" color='r', alpha=.25)\n",
"plt.xlim(-10, 20)\n",
"plt.ylim(-200, 200)\n",
"plt.xlabel('$\\mathbf{x}$', size=15)\n",
"plt.ylabel('$p(y|\\\\mathbf{x}, \\mathbf{X_{train}}, \\\\mathbf{y_{train}}, \\\\alpha, \\\\beta)$', size=15)"
],
"execution_count": 63,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, '$p(y|\\\\mathbf{x}, \\\\mathbf{X_{train}}, \\\\mathbf{y_{train}}, \\\\alpha, \\\\beta)$')"
]
},
"metadata": {
"tags": []
},
"execution_count": 63
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "11MUHPUln8Fv",
"colab_type": "text"
},
"source": [
"# When to stop gathering data?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "0zXIybWAhPpi",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 459
},
"outputId": "540d3a49-26c8-44a7-93b7-ce02742ca25e"
},
"source": [
"uncertainties = []\n",
"DATASET_SIZE, SPLIT = 150, 100\n",
"X, y = make_regression(n_samples=DATASET_SIZE, n_features=1, noise=5, random_state=123)\n",
"X_train, X_test = X[:SPLIT], X[SPLIT:]\n",
"y_train, y_test = y[:SPLIT], y[SPLIT:]\n",
"for i in range(5, SPLIT):\n",
" model = ModifiedBayesianRidge()\n",
" model.fit(X_train[:i], y_train[:i])\n",
" predictions, aleatoric, epistemic = model.predict(X_test)\n",
" uncertainties.append(np.sqrt(epistemic).mean())\n",
"plt.figure(figsize=(14, 7))\n",
"plt.bar(range(5, SPLIT), uncertainties)\n",
"plt.xlabel('Training set size')\n",
"plt.ylabel('$\\\\mathbf{x}^T \\\\mathbf{S}_N\\\\mathbf{x}}$ (epistemic uncertainty)')\n",
"plt.axvline(x=23, linewidth=4, color='r')"
],
"execution_count": 87,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.lines.Line2D at 0x7f413fb1f5f8>"
]
},
"metadata": {
"tags": []
},
"execution_count": 87
},
{
"output_type": "display_data",
"data": {
"image/png": "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Wsp71qxZufvuu9OlS5dMmTIl48ePz4oVK0qdDQAAoGyKKkc1NTVJ/vZlsGvWrMnee++dJ598sqTBAAAAyqmoy+o6deqUiRMn5oADDsjXvva1dOrUKUuXLi11NgAAgLIpqhxdcsklWbJkSbbaaqv88pe/zJtvvrnO7z4CAABoLYoqR6effnrGjRuXJDn++OOTJCeeeGKmTJlSumSbsNMuv2+d+8dfWF/mJAAAsOloUjmaOnVqxo4dm/nz5+fwww9v3N/Q0JDtttuu1NkAAADKpknl6Pjjj8+xxx6biy++OGeddVbj/jZt2qSurq7k4QAAAMqlyZfVVVVV5cADD8zOO+/cHHkAAAAqoqilvH/zm99YnQ4AANioFLUgw8qVK1NfX59OnTpls802a9w/ceLEkgUDAAAop6LK0ZlnnlnqHAAAABVV1GV13bp1ywsvvJDp06ene/fuadu2bfbdd99SZwMAACibosrR8OHD8+qrr+aRRx5Jkjz77LO58MILSxoMAACgnIoqR7Nnz86QIUPSrl27JEnfvn2zYMGCkgYDAAAop6LKUXX1325VKhQKSZLly5dn5cqVpUsFAABQZkUtyHD00UdnwIABmTt3bkaMGJHp06enb9++pc4GAABQNkWVo379+qVr16559NFHU1NTk6uuuip77713qbMBAACUTVHlKEl22223dO3aNUmyaNGikgUCAACohKLK0cSJE/P73/8+11xzTZLknHPOSe/evdOvX7+ShmPdTrv8vnXuH39hfZmTAADAxqOoBRmmTp2aq6++unF7/Pjx+eUvf1myUAAAAOVWVDlatWpV44p1yd9WrVuzZk3JQgEAAJRbUZfV1dfX5+STT87++++f1atXZ+bMmendu3epswEAAJRNUeXozDPPTPfu3TNr1qwUCoUMGzYs3bp1K3U2AACAsinqsrp33303b731Vjp27JgOHTrkxRdfzOTJk0udDQAAoGyKmjkaOHBg2rRpk5133nmt/SeddFJJQgEAAJRbUeWooaEht912W6mzAAAAVExRl9XtvvvuWbx4camzAAAAVExRM0evv/56evfunc6dO6eqqqpx/8SJE0sWDAAAoJyKKkff+MY3Sp0DAACgoooqR6+++uo693fv3n2DwgAAAFRKUeXoiSeeaPz5vffey6xZs7LffvtZrQ4AAGi1iipH3/ve99baXrFiRYYMGVKSQAAAAJVQ1Gp1/2zzzTf/0EvtAAAAWoOiZo769u2bQqHQuP3GG29kzz33LFkoAACAciuqHA0ePLjx50KhkC233DJdunQpWSgAAIByK6ocWZUOAADY2JTkniMAAIDWruhytGzZssafFy1aVJIwAAAAlVJUOZo4cWLOP//8xu1zzjknP/nJT4oK8Pzzz+fII49c5/n19fXp27dv+vfvn/79++eNN94o6jUAAADWp6h7jqZOnZqJEyc2bo8fPz79+vVLv379mvQ8y5cvz6WXXpoePXp86GNuuOGGbLHFFsXEBAAA+NiKmjlatWpVqqv/0asKhULWrFnT5OepqanJDTfckLq6umJiAAAAlExRM0f19fU5+eSTs//++2f16tWZOXNmevfu3fQXr65eq2Sty7BhwzJv3rzsv//+Offcc9f6fqV/ts027ZMktbUdmpylXNaX7aOOb8i5bLjm/P167zZd3ntKzZiiORhXNIeWOK6KKkdnnnlmunfvnlmzZqVQKGTYsGHp1q1bqbPl7LPPzqGHHpqOHTtm0KBBmTZtWo4++ugPffzixctTW9shCxcuLXmWUllfto86viHnsmFKPa5q/2nbe7dpaumfV7Q+xhTNwbiiOVRyXH1UKSuqHCXJAQcckAMOOKDY0z+WE044ofHnnj175vnnn//IcgQAAFCsJpWjESNGZOjQoenbt+86L2/7v4s0bKilS5dm8ODBufbaa1NTU5PHHnssRx11VMmeHwAA4P9qUjk66aSTkiSDBw8uyYs/88wzueKKKzJv3rxUV1dn2rRpqa+vzy677JJevXqlZ8+e6dOnT9q2bZu99trLrBEAANBsmlSOunTpkiTZddddM23atCxdunStVeq6d+/epBffe++9M2HChA89PmDAgAwYMKBJzwkAAFCMopby/vrXv54//elPef/999PQ0ND4PwAAgNaqqAUZtt5663zve98rdRYAAICKKaoc9erVK1OnTs2nP/3pVFVVNe7faaedShYMAACgnIoqR//7v/+b//mf/8nWW2/duK9QKOT+++8vVS4AAICyKqocPf3003nsscdSU1NT6jwAAAAVUdSCDHvvvXfefffdUmcBAAComKJmjt54443U19enc+fOa91zVMovgQUAACinosrRN7/5zVLnAAAAqKiiylG3bt3y85//PK+99lrOO++8PP30041fEEtlnXb5fevcP/7C+jInAQCA1qWoe46GDx+eV199NY888kiS5Nlnn82FF15Y0mAAAADlVFQ5mj17doYMGZJ27dolSfr27ZsFCxaUNBgAAEA5FVWOqqv/djVeoVBIkixfvjwrV64sXSoAAIAyK+qeo6OPPjoDBgzI3LlzM2LEiEyfPj19+/YtdTYAAICyKaoc9evXL127ds2jjz6ampqaXHXVVdl9991LnQ0AAKBsiipHAwcOzLhx49K1a9fGfSeeeGKmTJlSsmA0D6vZAQDAujWpHE2dOjVjx47N/Pnzc/jhhzfub2hoyHbbbVfqbAAAAGXTpHJ0/PHH59hjj83FF1+cs846q3F/mzZtUldXV/JwAAAA5dLky+qqqqpy+eWXr7Vv9erVadOmqIXvaEFccgcAwKasqEZz++23Z+LEiWloaMhXvvKVHHHEEbn11ltLnQ0AAKBsiipHkyZNype+9KXce++92WOPPfLb3/42d999d6mzAQAAlE1R5aht27apqanJAw88kM997nMuqQMAAFq9olvNJZdckieffDLdu3fPU089lffee6+UuQAAAMqqqHI0evTofPKTn8x1112XqqqqzJ8/P5dcckmpswEAAJRNk1arGzFiRIYOHZrBgwenUCjk17/+dZJkzZo1KRQKmThxYrOEBAAAaG5NKkcnnXRSkmTw4MHNEgYAAKBSmlSOunTpkiT51Kc+lTvuuCMvvvhiCoVC9txzz5xwwgnNEhAAAKAcmvwlsElyzjnnpGPHjtlvv/2yZs2aPP7445k+fXquueaaUucDAAAoi6LK0ZIlS3L99dc3bn/lK19J3759SxYKAACg3IparW6XXXbJwoULG7cXLVqUXXfdtWShAAAAyq2omaP58+enV69e2X333bN69er85S9/SefOnXPKKackiVXrAACAVqeocmS1OgAAYGNT1GV13bp1ywsvvJDp06ene/fuadu2bfbdd99079493bt3L3VGAACAZldUORo+fHheffXVPPLII0mSZ599NhdeeGFJgwEAAJRTUeVo9uzZGTJkSNq1a5ck6du3bxYsWFDSYAAAAOVUVDmqrv7brUqFQiFJsnz58qxcubJ0qQAAAMqsqAUZjj766AwYMCBz587NiBEjMn36dN9zBAAAtGpFlaN+/fqla9euefTRR1NTU5Orrroqe++9d6mzsYk47fL71rl//IX1ZU4CAMCmrEnl6Omnn86+++6bJOnatWu6du36kY8BAABoLZp0z9HYsWPzgx/8IG+++eYHji1evDg/+MEPcs0115QsHAAAQLk0aebouuuuy0033ZTjjjsuO++8c3bcccckyfz58/P666/ntNNOy7XXXtssQQEAAJpTk8pRmzZtMnDgwJx66qn54x//mNdeey1JsuOOO2afffZJVVVVs4QEAABobkUtyFBVVZVu3bqlW7dupc7DRsqiCwAAtHRFfc8RAADAxkY5AgAASJHl6Kabblpru6GhIZdddllJAgEAAFRCUfccXXHFFXnkkUdy+eWXZ+nSpRk8eHCee+65XHTRRaXORwviviEAADZmRZWjfv36ZeLEifn85z+f5cuXZ8WKFTnnnHNKnY1WpDmLk1IGAEA5FFWOhg4dmtWrV+fWW29NoVDIeeedl4EDB5Y6GwAAQNkUVY7OPffc3HXXXencuXPefvvtXHnllVm0aFEuuOCCUucDAAAoi6IWZPjVr36VL37xi5kyZUruvPPO9OjRIzfffHOJowEAAJRPUTNHo0ePznHHHZckadeuXcaNG5cbb7yxpMHg43A/EgAApVJUOTruuONy9dVXp3Pnztltt93SqVOnnH766aXOBgAAUDZFlaMkOfjggzN79uxMnTo1L7/8clauXJm2bdtm1113zZAhQ0qZEQAAoNkVXY7233//7L///nnvvffy1FNPZebMmZk1a1Zee+21UuYDAAAoi6LL0X//93/nmWeeSVVVVfbdd98cddRR+fa3v13KbAAAAGVTdDm6//77UygUUldXl2XLlmX27NlJkt122y01NTUlCwgAAFAORZejW2+9NUny5ptvZvbs2XnppZdyxx135OWXX871119fsoAAAADlUHQ5+rs2bdrkgAMOyAEHHFDU+c8//3zOPPPMnHrqqenXr99axx5++OFcddVVqaqqSs+ePTNo0KANjQsAALBOTfoS2Ntuuy1jx45NksyZMyf19fXp0aNH6uvr86c//anJL758+fJceuml6dGjxzqPjxgxImPGjMlPf/rT/P73v8+LL77Y5NcAAAD4OJpUjiZMmJA333wzSXLttddm/vz5ad++fV5//fWMGjWqyS9eU1OTG264IXV1dR84NmfOnHTs2DE77rhj2rRpk8MOOywzZsxo8msAAAB8HE26rO71119Ply5dkiQPPfRQqqqqcvfdd+dnP/tZfvzjHzf9xaurU1297ggLFy7Mtttu27i97bbbZs6cOR/5fNts0z5JUlvboclZymV92T7quHNLd24xmnNcteQxS/Py3lNqxhTNwbiiObTEcdWkcrRq1aqsWrUqb7zxRhYsWJC99tordXV12XHHHfPee+81V8aPbfHi5amt7ZCFC5dWOsqHWl+2jzru3NKd21SlHle1/7Tdkscszaelf17R+hhTNAfjiuZQyXH1UaWsSeVot912yzXXXJOf/exnKRQKOfjgg5MkL7/8crbbbrsNS/lP6urqsmjRosbtN954Y52X38FHOe3y+9a5f/yF9WVOAgBAS9eke44GDx6ct99+O88991xqa2vTv3//rFmzJnfffXe6detW0mC77LJLli1blrlz56ahoSG/+93vGssYAABAqa135mju3LnZZZddkiQ9e/bMAw88kDlz5qRz587ZfPPN09DQkGuvvbaomaNnnnkmV1xxRebNm5fq6upMmzYt9fX12WWXXdKrV68MHz485557bpLkmGOOSadOnZr8GgAAAB/HesvRRRddtNZiCx07dkzHjh3/8QTV1dljjz2KevG99947EyZM+NDjBx54YCZNmlTUcwMAADTFei+rW7VqVTlyAAAAVNR6Z45eeumlxnuLamtr06lTp+y2227Zbbfdstdee5UjIwAAQLNbbznaY489Gi99W7hwYWbPnp3Zs2fnF7/4hXIEAABsNNZbjg4//PDGn2tra1NbW5uDDjqoOTMBAACU3XrvORo4cOAH9t10001rbTc0NOSyyy4rXSoAAIAya9L3HP3dFVdckW9+85t56623MmfOnPTp0+cjV50DAABo6dZ7Wd269OvXLxMnTsznP//5LF++PCtWrMg555xT6mwAAABlU1Q5Gjp0aFavXp1bb701hUIh55133jovv4OW7LTL71vn/vEX1pc5CQAALUFR5ejcc8/NXXfdlc6dO+ftt9/OlVdemUWLFuWCCy4odT4AAICyKOqeo1/96lc58cQTM2XKlPziF79Ijx49cvPNN5c4GgAAQPkUNXM0evToHHfccUmSdu3aZdy4cbnxxhtLGgwAAKCciipHfy9G/9fpp5++wWGgJXFPEgDApqWoy+oAAAA2NsoRAABAlCMAAIAkRd5zBJs69yMBAGx8zBwBAABEOQIAAEiiHAEAACRRjgAAAJIoRwAAAEmUIwAAgCTKEQAAQBLlCAAAIIlyBAAAkCSprnQA2Biddvl969w//sL6MicBAODjMnMEAAAQ5QjKbl2zSh820wQAQPkoRwAAAFGOAAAAkihHAAAASaxWBy2Ole4AACrDzBEAAECUIwAAgCTKEQAAQBLlCAAAIIkFGWCTYaEHAICPphwBSZQnAADlCFgvxQkA2BQoR9CKKCkAAM1HOQI2mNIGAGwMlCPYiCgpAADFU46AZqWwAQCthe85AgAAiJkjoMLMLAEALYWZIwAAgChHAAAASVxWB7RgLrkDAMpJOQJaLeUJACgl5QjYJClWAMA/U44A/smGFCelq+XzHgHwYZQjgDLyhzkAtFzKEUATNVfBUZwAoLKUI2CjtLEVjY3t39NS+T0DbNqUIwD4mD6qPClWAK2fcgSwEfCH+T+01N9FS80FwD8oRwBQYesrTooVQHlUtBxddtllefrpp1MoFHLRRRela9eujcfq6+uzww47pKqqKkkyevTobL/99pWKCtBqNecf3htymZkl00vD7wKgdCpWjh599NG88sormTRpUl566aVcdNFFmTRp0lqPueGGG7LFFltUKCEAleIPfgAqoWLlaMaMGTnyyCOTJJ07d86SJUuybNmybLnllpWKBMA/UVJaP+8hwMdXsXK0aNGifOpTn2rc3nbbbbNw4cK1ytGwYcMyb9687L///jn33HNTKBQ+8jm32aZ9kqS2tkPzhC6B9WX7qOPOda5zndsaMjm39Zz7r+f+Yp3H/ufKz3/kuWx6WvLfVrReLXFctZgFGdasWbPW9tlnn51DDz00HTt2zKBBgzJt2rQcffTRH/kcixcvT21thyxcuLQ5o26Q9WX7qOPOda5zndsaMjl34z/34zBjtfFo6X9b0TpVclx9VCmrWDmqq6vLokWLGrcXLFiQ2traxu0TTjih8eeePXvm+eefX285AgBKp7m+10lxAlqqipWjgw8+OGPGjMnJJ5+cZ599NnV1dY2X1C1dujSDBw/Otddem5qamjz22GM56qijKhUVACgj5QmolIqVo/322y+f+tSncvLJJ6dQKGTYsGG5/fbb06FDh/Tq1Ss9e/ZMnz590rZt2+y1115mjQAAxQloVhW95+i8885ba7tLly6NPw8YMCADBgwodyQAoBVrrksBN+R1gdajxSzIAABQSZW6x6pSX6YMfJByBACwEVKsoOmUIwAA1qJYsalSjgAAKBnFidZMOQIAoGyUJ1oy5QgAgBZBcaLSlCMAAFqFSi3VzqZDOQIAYKPXXEumN+e5lJ9yBAAALZDvwCo/5QgAADYhitWHU44AAICPZWO/TLBNpQMAAAC0BMoRAABAlCMAAIAkyhEAAEAS5QgAACCJcgQAAJBEOQIAAEiiHAEAACRRjgAAAJIoRwAAAEmUIwAAgCTKEQAAQBLlCAAAIIlyBAAAkEQ5AgAASKIcAQAAJFGOAAAAkihHAAAASZQjAACAJMoRAABAEuUIAMWMrD8AAA0mSURBVAAgiXIEAACQRDkCAABIohwBAAAkUY4AAACSKEcAAABJlCMAAIAkyhEAAEAS5QgAACCJcgQAAJBEOQIAAEiiHAEAACRRjgAAAJIoRwAAAEmUIwAAgCTKEQAAQBLlCAAAIIlyBAAAkEQ5AgAASKIcAQAAJFGOAAAAkihHAAAASZQjAACAJMoRAABAEuUIAAAgiXIEAACQpMLl6LLLLkufPn1y8sknZ9asWWsde/jhh3PSSSelT58+GTt2bIUSAgAAm4qKlaNHH300r7zySiZNmpSRI0dm5MiRax0fMWJExowZk5/+9Kf5/e9/nxdffLFCSQEAgE1BxcrRjBkzcuSRRyZJOnfunCVLlmTZsmVJkjlz5qRjx47Zcccd06ZNmxx22GGZMWNGpaICAACbgMKaNWvWVOKFv/Od7+Swww5rLEh9+/bNyJEj06lTpzz55JMZN25c4+V0P//5zzNnzpycc845lYgKAABsAlrMggwV6mgAAABJKliO6urqsmjRosbtBQsWpLa2dp3H3njjjdTV1ZU9IwAAsOmoWDk6+OCDM23atCTJs88+m7q6umy55ZZJkl122SXLli3L3Llz09DQkN/97nc5+OCDKxUVAADYBFTsnqMkGT16dB5//PEUCoUMGzYszz33XDp06JBevXrlsccey+jRo5MkvXv3zsCBAysVEwAA2ARUtBwBAAC0FC1mQQYAAIBKUo4AAACSVFc6QKlcdtllefrpp1MoFHLRRRela9eulY5EKzZq1Kg88cQTaWhoyBlnnJF99tkn559/flatWpXa2tp8//vfT01NTaVj0sqsXLkyxx13XM4888z06NHDmGKDTZ06NTfeeGOqq6tz9tlnZ8899zSu2CDvvPNOLrjggixZsiTvv/9+Bg0alNra2gwfPjxJsueee+aSSy6pbEhajeeffz5nnnlmTj311PTr1y+vvfbaOj+jpk6dmltuuSVt2rTJl7/85XzpS1+qWOaNYubo0UcfzSuvvJJJkyZl5MiRGTlyZKUj0YrNnDkzL7zwQiZNmpQbb7wxl112Wa6++ur07ds3t956a3bddddMnjy50jFpha699tp07NgxSYwpNtjixYszduzY3Hrrrbnuuuvy29/+1rhig91xxx3p1KlTJkyYkB/96EeNf1dddNFFue2227Js2bI88MADlY5JK7B8+fJceuml6dGjR+O+dX1GLV++PGPHjs3NN9+cCRMm5JZbbslbb71VsdwbRTmaMWNGjjzyyCRJ586ds2TJkixbtqzCqWitDjzwwPzoRz9Kkmy11VZZsWJFHnnkkRxxxBFJks9+9rOZMWNGJSPSCr300kt58cUXc/jhhyeJMcUGmzFjRnr06JEtt9wydXV1ufTSS40rNtg222zT+Ifp22+/na233jrz5s1rvCLHuOLjqqmpyQ033LDWd5Wu6zPq6aefzj777JMOHTqkXbt22W+//fLkk09WKvbGUY4WLVqUbbbZpnF72223zcKFCyuYiNasqqoq7du3T5JMnjw5PXv2zIoVKxovTdluu+2ML5rsiiuuyIUXXti4bUyxoebOnZuVK1fmm9/8Zvr27ZsZM2YYV2ywY489NvPnz0+vXr3Sr1+/nH/++dlqq60ajxtXfFzV1dVp167dWvvW9Rm1aNGibLvtto2PqfTf8RvNPUf/l9XJKYV77703kydPzvjx49O7d+/G/cYXTXXnnXemW7du+X//7/+t87gxRbHeeuut/Nd//Vfmz5+fr371q2uNJeOKYvziF7/ITjvtlHHjxuXPf/5zBg0alA4dOjQeN64olQ8bS5UeYxtFOaqrq8uiRYsatxcsWJDa2toKJqK1e/DBB3PdddflxhtvTIcOHdK+ffusXLky7dq1yxtvvLHWFDGsz/333585c+bk/vvvz+uvv56amhpjig223Xbb5dOf/nSqq6vzL//yL9liiy1SVVVlXLFBnnzyyRxyyCFJki5duuTdd99NQ0ND43Hjig2xrv/2revv+G7dulUs40ZxWd3BBx+cadOmJUmeffbZ1NXVZcstt6xwKlqrpUuXZtSoUbn++uuz9dZbJ0k+85nPNI6xX//61zn00EMrGZFW5oc//GGmTJmSn/3sZ/nSl76UM88805higx1yyCGZOXNmVq9encWLF2f58uXGFRts1113zdNPP50kmTdvXrbYYot07tw5jz/+eBLjig2zrs+offfdN3/84x/z9ttv55133smTTz6ZAw44oGIZC2sqPXdVIqNHj87jjz+eQqGQYcOGpUuXLpWORCs1adKkjBkzJp06dWrcd/nll2fo0KF59913s9NOO+V73/teNttsswqmpLUaM2ZMdt555xxyyCG54IILjCk2yG233da4It23vvWt7LPPPsYVG+Sdd97JRRddlL/+9a9paGjIt7/97dTW1ua73/1uVq9enX333TdDhgypdExagWeeeSZXXHFF5s2bl+rq6my//fYZPXp0Lrzwwg98Rt1zzz0ZN25cCoVC+vXrl+OPP75iuTeacgQAALAhNorL6gAAADaUcgQAABDlCAAAIIlyBAAAkEQ5AgAASKIcAbABRo0alf79++fLX/5y9t577/Tv3z/9+/fPnXfe+bGfo3///lm1atWHHp8+fXquvfbaUsRtkieffDJz5sz5WI/905/+lEsvvbSZEwHQ3CzlDcAGmzt3bvr27Zvp06dXOkrJDB06NMccc0w+85nPVDoKAGVSXekAAGyc6uvr87nPfS5z5szJ1VdfnR/96EeZMWNGkmSHHXbI97///Wy22WbZc8898+yzz+baa6/NW2+9lddffz2vvPJKDjrooHznO9/J7bffnocffjijR49OfX19vvrVr2b69OmZO3duLrnkkvTo0SPPPPNMvvvd76Z9+/bp2bNnxowZk6eeeirV1f/4z9zMmTNz5ZVXpl27dnnvvfdy8cUXp2vXrpk5c2bGjh2bNWvWpLq6Opdeemn+/Oc/55577smsWbMyZMiQ9OjRo/F5brnllkydOjWbb7552rVrl+9///t5/vnn88Mf/jC33HJLBg4c2PjYZ555JiNGjMixxx6bCRMm5O67786qVauy2267ZdiwYWnXrl353hAA1ks5AqDZfPKTn8x//Md/pKGhIZtvvnluvfXWtGnTJgMHDsxDDz2Uz372s2s9/rnnnstPfvKTvP/+++nRo0fOPvvsDzxn27ZtM378+Nxxxx358Y9/nB49emTkyJEZNGhQjjjiiNx222157733PnDeLbfckq997Ws55phjMnv27PzlL3/JihUrMmzYsEyaNClbb7117r333owaNSpjxozJj3/843zrW99aqxglydVXX51p06blE5/4RB588MEsWLCg8VhNTU0mTJiQJLnvvvty00035aijjsqsWbPym9/8JhMnTkyhUMhll12Wn//85+nfv38pfs0AlIhyBECz+fSnP50kqa6uTps2bdK3b99UV1dn9uzZWbx48Qcev//++6eqqipVVVXZZpttsmTJkg88pnv37kmSnXbaqfH4n//85xx00EFJkqOOOirDhg37wHn/+q//mquuuiqzZs3KEUcckSOOOCKzZs3KwoULc9ZZZyVJVq1alUKh8JH/ppNOOimnn356jjrqqBx99NHp1KlTHnnkkbUe88orr+TKK6/MLbfckurq6jzyyCN59dVX89WvfjVJsnz58rVmtQBoGXwyA9BsNttssyTJE088kSlTpmTKlClp3779OmeEkqSqqmqt7XXdFvt/S8Xfj69evbqx1Pzzc/zdMccck0MOOSQPPfRQxo4dm65du+aYY47JTjvt1Djb83EMGTIk8+bNywMPPJBBgwblggsuWOvyuBUrVuTf//3fM2LEiHziE59I8rcZpfr6+nz3u9/92K8DQPlZrQ6AZvfXv/41O++8c9q3b5958+blD3/4wzovfSvWbrvtlqeeeipJ8utf/3qdj7n66quzatWqHHPMMbn44ovz1FNP5ZOf/GQWL16c559/Pkny2GOPZdKkSUmSQqGQ999/f63nWLJkScaMGZMdd9wxffv2zSmnnJI//vGPaz1m6NChOfHEExtnzZJkv/32y/Tp0/POO+8kSSZOnNiYF4CWw8wRAM3u4IMPzvjx4/OVr3wle+yxR84666yMHTu28VK4DXX++efn0ksvTV1dXQ4//PAUCoW0abP2//+366675rTTTstWW22V1atX56yzzmpcUOHiiy9O27ZtkyT/+Z//2Zh52LBhueiii9K7d+8kSceOHfPOO+/kpJNOylZbbZXq6uqMHDkyL7/8cpLkD3/4Q+65554sWLAg99xzT5LkyCOPzIABA3LKKaekf//+adu2berq6vLFL36xJP92AErHUt4AtHozZ87M1ltvnS5duuTZZ5/NOeeck2nTplU6FgCtjJkjAFq96urqxtmf999/v3H2BwCawswRAABALMgAAACQRDkCAABIohwBAAAkUY4AAACSKEcAAABJkv8PsmM36bTrGnQAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NAyOgFdyoAGy",
"colab_type": "text"
},
"source": [
"# Active learning"
]
},
{
"cell_type": "code",
"metadata": {
"id": "c_qX4XqGpY-4",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 381
},
"outputId": "a90fa965-2ca8-4826-f4c4-9e931b1a86b0"
},
"source": [
"DATASET_SIZE, SPLIT_1, SPLIT_2 = 50, 10, 40\n",
"df = pd.DataFrame(columns=['training dataset size', 'mean squared error'])\n",
"for _ in range(100):\n",
" X, y = make_regression(n_samples=DATASET_SIZE, n_features=1, noise=5)\n",
" X_train, X_additional, X_test = X[:SPLIT_1], X[SPLIT_1:SPLIT_2], X[SPLIT_2:]\n",
" y_train, y_additional, y_test = y[:SPLIT_1], y[SPLIT_1:SPLIT_2], y[SPLIT_2:]\n",
"\n",
" # Randomly select more data\n",
" model = ModifiedBayesianRidge()\n",
" model.fit(X_train, y_train)\n",
" df.loc[len(df)] = ['without additional data', mean_squared_error(y_test, model.predict(X_test)[0])]\n",
" model.fit(X_additional[20:], y_additional[20:])\n",
" predictions, _, _ = model.predict(X_test)\n",
" df.loc[len(df)] = ['randomly selected additional data', mean_squared_error(y_test, predictions)]\n",
"\n",
" model = ModifiedBayesianRidge()\n",
" model.fit(X_train, y_train)\n",
" predictions, _, _ = model.predict(X_test)\n",
" _, _, epistemic = model.predict(X_additional)\n",
" indices = np.argsort(epistemic)[20:]\n",
" model.fit(X_additional[indices], y_additional[indices])\n",
" predictions, _, _ = model.predict(X_test)\n",
" df.loc[len(df)] = ['actively selected additional data', mean_squared_error(y_test, predictions)]\n",
"sns.barplot(x='training dataset size', y='mean squared error', data=df)"
],
"execution_count": 248,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f413a0c71d0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 248
},
{
"output_type": "display_data",
"data": {
"image/png": "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9+vFF19UaGiouxYLAEC55bbQbtGihZo2bSpJqlatmrKzs1VwVb+qAADg+rntmranp6d8fX0lSStWrFC7du3k6emppUuXKioqSi+88ILOnDnjrsUDAFDuuP0xpps2bdKKFSs0f/587dmzR35+fgoJCdHcuXM1e/ZsxcXFlTitv7+vvLzoAAOOAgOrlnUJKGdoU7jZ3NWm3BraX331lebMmaN3331XVatWVevW//d87I4dO2rcuHHXnD4jI8ud5cGi0tMzy7oElDO0Kdxsv6ZNXSvw3XZ6PDMzU9OmTdPbb79tv1t88ODBSklJkSQlJiaqfv367lo8AADljtuOtNeuXauMjAwNHTrUPqxXr14aOnSoKlWqJF9fX02ZMsVdiwcA/AZ42mz2v21XvcaNc1toh4WFKSwsrNjwnj17umuRAIDfGB8PD91duYp2XrygZpWryMeDZ3r9GvSnDQBwq05+AerkF1DWZZQLfOUBAMAiCG0AACyC0AYAwCIIbQAALILQBgDAIghtAAAsgtAGAMAiCG0AACyC0AYAwCIIbQAALILQBgDAIlyGdtFeugAAQNlx2WHIbbfdphUrVqh58+by8fGxD7/99tvdWhgAAHDkMrTXrl1bbJjNZtPmzZvdUhAAAHDOZWh//vnnpVEHAABwwWVonzx5Um+++aZ++OEH2Ww23X333Ro6dKgCAugbFQCA0uTyRrS4uDg1btxYM2bM0Ouvv64777xTo0aNKo3aAABAES6PtLOzs9W3b1/76wYNGnDKHACAMuDySDs7O1snT560vz5+/Ljy8vLcWhQAACjO5ZH2888/r169eikwMFDGGJ05c0aTJ08ujdoAAEARLkO7ffv22rRpk37++WdJUt26dVWhQgV31wUAAK7i8vR4VFSUKlasqIYNG6phw4YENgAAZcTlkXZISIhmzpyp5s2by9vb2z68devWbi0MAAA4chnae/fulSR9++239mE2m43QBgCglLkM7djYWDVu3Lg0agEAANfg8pr21KlTS6MOAADggssj7eDgYEVGRqpZs2YO17SHDBni1sIAAICj6+qa87bbbiuNWgAAwDW4DO3o6GhlZGTo6NGjuuuuu1RYWCgPD5dn1QEAwE3mMn3XrFmjsLAwvfzyy5KkiRMnasWKFW4vDAAAOHIZ2vPnz9fHH38sf39/SdLIkSO1fPlytxcGAAAcuQztqlWrqlKlSvbXFStWdLghDQAAlA6X17T9/f314YcfKjc3V0lJSVq7dq0CAgJKozYAAFCEyyPt8ePH64cfftDFixc1ZswY5ebmatKkSdc182nTpiksLExPPvmkNmzYoLS0NEVGRio8PFxDhgyhi08AAG6AyyPtatWqKS4u7oZnnJCQoAMHDmj58uXKyMhQz5491bp1a4WHh6tr166aMWOGVqxYofDw8F9UOAAAvzdu++1WixYtNHPmTEmXgz87O1uJiYnq1KmTJCk0NFTbtm1z1+IBACh3XB5p/1Kenp7y9fWVJK1YsULt2rXT119/LR8fH0lSjRo1lJ6efs15+Pv7ysvL010lwqICA6uWdQkoZ2hTuNnc1abcFtpXbNq0SStWrND8+fPVuXNn+3BjjMtpMzKy3FkaLCo9PbOsS0A5Q5vCzfZr2tS1Ar/E0O7YsaNsNluJE27evNnlgr/66ivNmTNH7777rqpWrSpfX1/l5OSoYsWKOnHihGrVquVyHgAA4LISQ3vhwoWSpOXLlyswMFD333+/CgoK9J///EdZWa6PgDMzMzVt2jQtXLhQfn5+kqQ2bdpo/fr16t69uzZs2KAHH3zw5rwLAAB+B0oM7dq1a0uSfvzxRy1YsMA+vHHjxnr22Wddznjt2rXKyMjQ0KFD7cNee+01jRkzRsuXL1dwcLB69Ojxa2oHAOB3xeU17dOnT+vrr7/WPffcIw8PD+3YsUPHjh1zOeOwsDCFhYUVG170CwAAALh+LkN73LhxmjZtmvbv3y9J+uMf/6ixY8e6vTAAAODIZWjfc889ev/992WMueaNaQAAwL1cPlzlp59+Uq9evdS1a1dJ0ltvvaVdu3a5vTAAAODIZWhPmDBBr776qgIDAyVJXbt21ZQpU9xeGAAAcOQytL28vNSwYUP767p168rLy+3PZAEAAFe5rtBOSUmxX8/esmXLdT3NDAAA3FwuD5lHjhyp559/XocOHdK9996rP/zhD5o2bVpp1AYAAIpwGdr+/v765JNPdObMGfn4+KhKlSqlURcAALiKy9PjL730kiQpICCAwAYAoAy5PNKuU6eORowYoebNm8vb29s+vHfv3m4tDAAAOHIZ2vn5+fL09NTu3bsdhhPaAACULpeh7ew32YsXL3ZLMQAAoGQuQ3vv3r2aM2eOMjIyJEl5eXk6fvy4oqKi3F4cAAD4Py5vRBs/frw6d+6sc+fOqV+/fqpTpw4/+QIAoAy4DO2KFSvq0UcfVdWqVdWhQwdNnjxZ8+bNK43aAABAES5DOzc3V/v371eFChX0zTff6Ny5c0pNTS2N2gAAQBEur2m/9NJLOnLkiGJiYjRixAidPn1aAwYMKI3aAABAES5D+95777X/vX79ercWAwAASuYytMPDw+2dhRS1bNkytxQEAACccxnaQ4cOtf+dn5+vhIQE+fr6urUoAABQnMvQbtmypcPrtm3bauDAgW4rCAAAOOcytFNSUhxep6Wl6dChQ24rCAAAOOcytP/617/a/7bZbKpSpYqio6PdWhQAACjOZWh//vnnpVEHAABwwWVojxgx4pr/zyNNAQAoHS5Du2rVqkpLS1Pbtm1ls9m0ZcsW3XrrrWrWrFlp1AcAAP7Xdd2INnfuXPvrp556SgMGDNC4cePcWRcAALiKy2ePp6WlKS8vz/46Pz9fJ0+edGtRAACgOJdH2g8//LAeeeQRNWnSRJK0Z88ePfbYY24vDAAAOHIZ2jExMerevbv27dsnY4yGDBmievXqlUZtAACgCJenx48ePapTp06pc+fOOnv2rObNm6fk5OTSqA0AABThMrRffvlleXt768cff9SKFSvUpUsXTZo0qTRqAwAARbgMbZvNpqZNm2rjxo3q27ev2rdvL2NMadQGAACKcBnaWVlZ2r17t9avX6927dopLy9P58+fL43aAABAES5Du1+/fho7dqzCwsIUEBCgWbNmXffd4/v379dDDz2kpUuXSpJiY2P1+OOPKzIyUpGRkfryyy9/VfEAAPyeuLx7vFu3burWrZv99QsvvCAPD5dZr6ysLE2cOFGtW7d2GP7iiy8qNDT0F5QKAMDvm+v0vXqC6whsSfLx8dE777yjWrVq3XBRAACgOJdH2r94xl5e8vIqPvulS5dqwYIFqlGjhsaOHauAgIAS5+Hv7ysvL093lQiLCgysWtYloJyhTeFmc1ebcltoO9O9e3f5+fkpJCREc+fO1ezZsxUXF1fi+BkZWaVYHawiPT2zrEtAOUObws32a9rUtQLfZWh/+umneuedd3T+/HkZY2SMkc1m+0U3kRW9vt2xY0c6HQEA4Aa4DO1Zs2Zp0qRJCg4O/tULGzx4sEaMGKHbb79diYmJql+//q+eJwAAvxcuQ/uOO+5QixYtbnjGe/bs0dSpU5WamiovLy+tX79eERERGjp0qCpVqiRfX19NmTLlFxUNAMDvkcvQbt68uWbMmKGWLVvK0/P/bgq7+qdcV2vSpImWLFlSbHiXLl1+QZkAAMBlaG/dulWStGPHDvswm83mMrQBAMDN5TK0nR0tr1+/3i3FAACAkrkM7WPHjmnp0qXKyMiQJOXl5SkxMZHT3AAAlDKXjzcbMWKE/Pz8tHPnTjVp0kQZGRmaNm1aadQGAACKcBnanp6eeuaZZ1SzZk317dtX//znP7Vs2bLSqA0AABThMrRzc3N1/Phx2Ww2paSkyMvLS6mpqaVRGwAAKMLlNe0BAwZo69at6t+/v7p37y5PT8/r7poTAADcPC5D+6GHHrL//c033+jixYuqXr26W4sCAADFuTw9npqaqpiYGEVGRsrLy0sbNmzQzz//XAqlAQCAolyG9tixY9W9e3cZYyRJderU0dixY91eGAAAcOQytPPz89WpUyfZbDZJ+kXPIQcAAL+ey9CWpPPnz9tD+8CBA8rNzXVrUQAAoDiXN6JFR0frL3/5i9LT0/X4448rIyND06dPL43aAABAES5Du1WrVvroo4+0f/9++fj4qG7duqpQoUJp1AYAAIpwGdonTpzQ+vXrlZmZab8ZTbp8BA4AAEqPy2vaAwcO1N69e5Wfn69Lly7Z/wEAgNLl8kjbz89PU6ZMKY1aAADANbgM7YcfflirV69W8+bN5enpaR8eHBzs1sIAAIAjl6G9b98+ffLJJ/Lz87MPs9ls+vLLL91ZFwAAuIrL0N61a5e2b98uHx+f0qgHAACUwOWNaE2aNOFhKgAA/AZc10++OnbsqHr16jlc0162bJlbCwMAAI5chvagQYNKow4AAOCCy9Bu2bJladQBAABcuK4OQwAAQNkjtAEAsAhCGwAAiyC0AQCwCEIbAACLILQBALAIQhsAAIsgtAEAsAhCGwAAi3BraO/fv18PPfSQli5dKklKS0tTZGSkwsPDNWTIEOXl5blz8QAAlCtuC+2srCxNnDhRrVu3tg+Lj49XeHi43nvvPd1xxx1asWKFuxYPAEC547bQ9vHx0TvvvKNatWrZhyUmJqpTp06SpNDQUG3bts1diwcAoNxx2WHIL56xl5e8vBxnn52dLR8fH0lSjRo1lJ6e7q7FAwBQ7rgttF0xxrgcx9/fV15eni7Hw+9LYGDVsi4B5QxtCjebu9pUqYa2r6+vcnJyVLFiRZ04ccLh1LkzGRlZpVQZrCQ9PbOsS0A5Q5vCzfZr2tS1Ar9Uf/LVpk0brV+/XpK0YcMGPfjgg6W5eAAALM1tR9p79uzR1KlTlZqaKi8vL61fv16vv/66YmNjtXz5cgUHB6tHjx7uWjwAAOWO20K7SZMmWrJkSbHhCxYscNciAQAo13giGgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARXqW5sMTERA0ZMkT169eXJDVo0EBjx44tzRIAALCsUg1tSWrZsqXi4+NLe7EAAFgep8cBALCIUj/SPnjwoAYNGqRz584pOjpabdu2LXFcf39feXl5lmJ1sILAwKplXQLKGdoUbjZ3talSDe06deooOjpaXbt2VUpKiqKiorRhwwb5+Pg4HT8jI6s0y4NFpKdnlnUJKGdoU7jZfk2bulbgl+rp8aCgIHXr1k02m021a9dWzZo1deLEidIsAQAAyyrV0F69erXmzZsnSUpPT9fp06cVFBRUmiUAAGBZpXp6vGPHjnrppZe0efNm5efna9y4cSWeGgcAAI5KNbSrVKmiOXPmlOYiAQAoN/jJFwAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARhDYAABZBaAMAYBGENgAAFkFoAwBgEYQ2AAAWQWgDAGARXqW9wFdffVW7du2SzWbTqFGj1LRp09IuAQAASyrV0P7mm290+PBhLV++XMnJyRo1apSWL19emiUAAGBZpXp6fNu2bXrooYckSfXq1dO5c+d04cKF0iwBAADLKtUj7VOnTqlx48b21wEBAUpPT1eVKlWcjh8YWPUXL+u9aX1/8bSAMwufnlnWJaCc6bZ4QVmXAIsp0xvRjDFluXgAACylVEO7Vq1aOnXqlP31yZMnFRgYWJolAABgWaUa2m3bttX69eslSUlJSapVq1aJp8YBAICjUr2mfc8996hx48bq06ePbDabXnnlldJcPAAAlmYzXFgGAMASeCIaAAAWQWgDAGARhPY1pKenKy4uTpK0fft2nT59WpLUsWNHXbx48VfN+8oNeTeqVatWxYYtXbpUs2bN0t69exUfHy9J2rx5s/Ly8hzew6+1atUqTZ06tcT/v3jxojp27HjNefzS9/1b06tXLx09evQXT38z2lBRiYmJiomJueHpbuTzmDp1qlatWnXDy3C2rr744gvFxsaWuI0999xzN7wcZ65nvTjbpopat27dTanFmV/zno8ePapevXrd1HpmzZqlpUuX3tA0x44d0+7du697/F+y7ZS0b7nSJv/973/rvffek/R/n1fR/eGv5Wq97N+/X5GRkSX+/4ULF/T111/flFoI7WsIDAzUhAkTJEkrV660b1y/1tGjR7VmzZqbMq+iQkJC7DuohQsXKj8/3+E9lDV3vW/8Mr+Fz6Okbeyf//xnWZZll5eXp4ULF7pt/r/F93yjEhISbii03aFdu3YKDw+XJM2dO1eS4/6wrCUlJek///nPTZlXqXcY8lv0yCOPaM2aNTLGqEWLFlq8eLHuuusu9e/fX4cOHdLEiRO1adMmHThwQLNmzZIkLVu2TFu2bFFBQYHeffddVahQQXFxcUpJSVFeXp5iYmL0wAMPqGPHjvrkk09UuXJlTZ06VfXr19e6deu0e/duzZ49W9HR0fY6tm7dqpkzZ8rb21vVqlXTm2++KQ8PDw0bNkzHjx/XXXfdZR9327ZtevXVV1WzZk0FBgbq9ttvV2JiopYtW6aOHTtq586dGjhwoCZPnqxhw4Zp1apVSkxM1BtvvCEvLy8FBQVpypQp+vTTT/Xdd9/pzJkzOnTokPr3768///nPWr16tZYuXSoPDw/Vr19fEydOdLruLly4oMGDBys3N1f33nuvfbiz6SdMmGB/371799bw4cMlSZcuXdLUqVNVu3Ztd3y8Dq58Kz958qTeeOMNzZ8/X7t371Zubq6eeuop/fnPf1ZsbKxq1aqlpKQkHTt2TK+//roaN26sSZMmaceOHapbt67y8/MlScePH9eoUaOUn58vm82myZMny2azacSIEapdu7Z27Nihp556Svv27dOuXbvUt29f9e17+Wl9mZmZ6tWrl9atWyebzabVq1crKSlJL7/8sr3euXPnauPGjfLw8FBoaKgGDRqkb7/9VjNmzJCXl5duvfXWYp/Nhg0bNH/+fHl5ealJkyaKjY1Vfn6+YmNjlZqaqgoVKmjatGkOn8ff/vY3jRo1SufOnVNBQYHGjBmjhg0b6uOPP9a7776roKAgVaxYUfXr13dY1k8//aTx48fLy8tLHh4emjlzpvz8/Jyuq3379mnkyJGqXr26/bM+evSoYmJiNGzYMIdtrGfPnkpMTNS+ffs0YcIEeXh4qHLlynrttde0b98+LVu2TDabTf/973/VpUsXRUdHO91+nLl06ZLTbcrZ9FOmTNG+ffs0btw4vfTSSxo2bJiysrKUk5OjsWPHOu3w6MKFC07H+89//qMZM2bI09NT3bp1U/369Yu950WLFunVV1/V4sWLJUmzZ89WtWrV1KZNG02YMEE2m82+Hq7YsmWLPv30U02fPl2SNGbMGIWGhqpTp06SpPz8fA0fPlzp6enKy8vT4MGD1a5dOy1btkyffPKJPDw89NBDD6lfv34O7+ONN97Qt99+q4KCAkVEROixxx5TamqqYmNjVVBQoODgYMXGxmr27Nn2tnjHHXcUq7NatWpO20NRzvYXJe1bnLXJVatW6cCBA6pRo4b27dun6OhoRUZGatmyZYqPj9fatWu1cOFCeXp6qnHjxhozZoxmzZqlzMxMHTp0SEeOHNGoUaPUvn17zZ8/X+vXr1dhYaHat2/vsI8u6vjx4xoyZIh8fHz0pz/9yT7c2fQTJkzQhQsXVKdOHTVr1szpNnPdDMyLL75o9u7da3bt2mUiIiLM4sWLTUFBgbn33ntNz549jTHGREREmH379hljjAkNDTWff/65McaYF154wWzcuNF8+OGHJi4uzhhjzPHjx03nzp3t4164cMEYY8xrr71mVq5caRISEszgwYOL1bF27Vpz5MgRY4wxw4cPN5s3bzZffvmlef75540xxuzcudM0aNDAGGPMk08+afbu3WuMMWbAgAEmPj7eYb5XlpuSkmJ/D126dDHHjh0zxhgzfvx4s2LFCrNy5UrTu3dvc+nSJXPw4EHzxBNPGGOMef/99825c+eMMcaEh4ebn376yaxcudK89tprDjUvXbrUTJ482RhjzJo1a0xoaGiJ0xetb9euXWbbtm3GGGP+53/+x0yZMuVGPrJfbOXKleYvf/mLKSwsNDk5OWbRokXGGGOys7NN27ZtjTHGjBw50l7Pe++9ZyZNmmQOHDhgevbsaQoKCsyxY8dM48aNTUpKiomNjTVr1qwxxhjz2WefmREjRpiUlBRz9913mzNnzphDhw6Zxo0bm+PHj5vDhw/b1++Vz2fw4MHmu+++M8YYExMTY3bv3u1Qb6tWrUx+fr4pLCw0y5YtM8YY0717d5ORkWGMMWbq1Knm4z7S7qoAABLySURBVI8/tq/bCxcumB49epjc3Fz7PL/99lvzwQcfmFdffdUYY8ynn35qli1b5vB5zJ4923zwwQfGGGMOHDhg/va3v5nCwkLTvn17c+rUKZOXl2cee+wxs3LlSof6vv76a5OUlGSMMebNN980ixcvLnFdxcTEmI0bNxpjjImLizMjR450aJ9Ft7GWLVsaY4yJjIw0O3fuNMYY8+6775qZM2eahIQE0759e5OVlWUuXLhgH9fZ9uNsWytpm3I2fdH6/vvf/9rr37p1q4mOjnbaxpyNV1hYaB5++GFz+vRpc+nSJfPMM8+Y7Oxsp++5S5cu9m2nZ8+e5vjx4yYqKsocOnTIGHN5m3vrrbfstV26dMl07tzZ5OTkmIKCAtO1a1f752+MMXv27DFRUVHGGGPOnTtnVq9ebY4cOWIiIiJMYWGhKSwsNGFhYSY1NdXEx8ebJUuWmO3bt5thw4YZY4zJzc013bp1M9nZ2WbYsGFm06ZN9ra3c+dO+zTGGKd1ltQeinK2v3C2bympTRbdN11Zj0W3iYceesi+H3722WfNtm3bTHx8vL1tbNmyxTz33HPGGGPmzZtnLl26ZAoLC01oaKjJzMx0eI9XTJ061SxcuNAYY8zbb79tIiIiSpy+aH3OtpkbwZG2pJYtW2rnzp3KyclRZGSkNmzYoBYtWqhRo0Yldmhy5ZtfUFCQMjMzlZSUZL82FhQUJB8fH509e/aG6ggICNCYMWNUUFCglJQU3X///crIyFDz5s0lSc2aNVPFihUlSampqWrYsKEkqUWLFsrNzb3mvM+ePSubzaZbb71V0uXreNu3b1ejRo109913y9PTU7fccosyMzMlSdWrV9fzzz8vSUpOTi7xvSQnJ6tFixaSLq/HK1xNHxgYqEmTJmnWrFk6f/68wzPp3e2uu+6SzWZThQoVdO7cOfXp00fe3t7KyMiwj3PfffdJkm655Rbt3r1bBw8eVLNmzeTh4aFbb71Vt99+uyRpz549GjZsmKTL6/Qf//iHJKl27dry9/eXj4+PAgICFBQUpIsXL9rX7xXdu3fX2rVr1aRJEx09etThyE+SunTpoqefflqPPfaYnnjiCZ06dUqHDx/W4MGDJUlZWVny9/dXUFCQJOngwYM6duyY+vfvL+ny0fyxY8eUlJSk1q1bS5IeffRRSZev916xY8cOnTlzRqtXr5YkZWdnKyMjQ5UrV1aNGjUkXX7OwtVq1Kih119/XTk5OTp58qQef/zxEtdVcnKyfR6tWrXSv//9b5efVXJyspo1a2afZvbs2WrVqpUaNWqkSpUqOYzrbPupXLlysXkePHjQ6TblbPqiatasqbfeekvz5s1TXl6efH19ndbsbLwzZ86oQoUKCggIkCS9/fbbJb7n0NBQffXVV2revLl8fHwUFBSk3bt3a+zYsZIun7Iv2k48PT3VoUMHbdmyRYGBgbrvvvvk4+Nj//8777xTFy9e1PDhw/Xwww/r0Ucf1bp163T48GFFRUVJunzNODU11T7N999/r127dtmv0xYWFio9PV0//vijRo8eLUkaMWKEJDl8js7qLKk9FOVsf+Fs33I9bfJqP//8s+644w57W2jZsqX27t3rMH3RfV/FihUVEREhLy8vZWRkXHPf98gjj0i63Da/+uqr65re2TZzIwhtXf4Q586dq5ycHPXu3VurVq3Sd999p1atWmnz5s1Op/H09LT/bf73p+6myE/e8/Ly5OHheMuAs9NCRY0aNUpz585VvXr17Nf5jDEO8yksLJQkh2HmOn5qb7PZHMa7cjpXkry8HJtBXl6eJkyYoI8//liBgYF69tlnS5xv0fqu1HY908fHx+uBBx7QU089pXXr1unLL790+R5uFm9vb0mXu4pNSEjQkiVL5O3tbd+RS8U/35I+h6LrNT8/3z5O0emvXr9FtWvXTjNnzlRCQoJCQ0OL/f/48eOVnJyszz77TJGRkZo3b55q1aqlJUuWOIx3JYC9vb3VpEkTzZs3z+H/d+7caa+5pHUyduxYh3Vw5swZl+1s8uTJGjhwoNq1a6d58+YpKyurxHVljLG3uWvVUpKi69fZOnW2/ThTUn2upl+0aJGCgoI0ffp0/fDDD5o2bZrT+Tsbz8PD47rfc+fOnbV06VJlZGSoS5cukqRKlSpp8eLF9vUnyeFmrh49euidd97RH/7wBz322GMO86tUqZI++OADff/99/rwww/1xRdfqGPHjurQoUOx95mQkCBJ8vHxUe/evYttu56entfc3zir87PPPnO6vq8oaX/hbN8i3Zx9X4UKFSQVb0epqalauHChPvzwQ1WuXLnYuizKWX3XM72zbeZGcCOapLp16yotLU2ZmZmqUqWKatasqc2bNzvcVWqz2VRQUFDiPO666y77jjMtLU0eHh6qVq2aqlSpovT0dBUUFGjXrl2SLje6S5cuFZvHhQsXdOutt+r8+fNKTExUfn6+6tatqz179ki6/O03Ly9P0uWj+f/+978yxuibb74pNq+r661evbpsNpuOHTsm6XJgNWnSxOl7uXjxojw9PRUYGKi0tDTt2bOnxC8cReu78v5Lmr7o+87IyFDt2rVljNHmzZtdfqFxh4yMDN1yyy3y9vbW5s2bVVBQYF+/V6tbt66SkpJkjFFqaqr9qKTo5759+/YS12lJvL291aJFC8XHxxf7xp2ZmanZs2erXr16io6OVvXq1e07iYMHD0qSlixZop9++smhzuTkZPvNTfHx8Tpx4oTuuusu+w75iy++0Jw5cxw+j2bNmmnTpk32eS9YsEB+fn7KzMzU+fPnlZ+fr++//75Y/WfPnlXt2rWVl5enLVu22Nuss3XlrK0U5Wwbq1+/vnbs2CHJ9fp1tv04U9I25Wx6Dw8Pe01X2qwkbdq0qcT5OxvP399fBQUFOnHihIwxevbZZ3X+/Hmn7/nuu+9WcnKyvvzyS3toN2zY0H5Eu2bNGm3bts1hmpCQEJ04cUK7d++2H51ekZSUpE8++UT33Xefxo0bp+TkZDVu3FiJiYnKzs6WMUaTJk1STk6OfZqmTZvqiy++UGFhoXJzc+33TTRp0sTejmbOnKmtW7fKZrPZ25GzOktqD1eUtL9w1l6up01eHeR16tTR4cOH7WdNr7Xvy8jIUEBAgCpXrqykpCSlpqbe0L6vpOmLbmvOtpkbQWj/rxo1aig4OFjS5R1YamqqbrnlFvv/t2zZUjExMTpw4IDT6R999FEVFBQoMjJSL7zwgv0bbEREhAYNGqTo6Gj98Y9/lHS5L/Eff/xRr776qsM8wsPD9dRTT2ns2LEaMGCA3n77bTVq1Eg5OTmKiIjQ2rVr7adBhw4dqiFDhmjQoEEOdRatNzw83OGU78SJEzVs2DBFRkbq0qVL9tOkV/P391fbtm315JNPavbs2RowYICmTJni9ItGjx49tHPnTv31r3/VoUOHrjl90fcdFhamiRMnasCAAXr00Uf1zTff3LSfRFyvNm3a6PDhw4qIiFBKSoo6dOigcePGOR23YcOGatCggcLCwjRz5kz7pYmYmBh99NFHioqK0qpVq37R3apdu3aVzWbTHXfc4TC8atWqysjIUO/evRUVFaVmzZrJz89PkydP1ssvv6zw8HB99913uvPOO+3TVKpUSaNGjdLAgQPVp08fnT17VrVq1VK3bt2UnZ2tiIgILVq0SD179nT4PCIiInTkyBGFh4drzJgxuu++++Th4aHo6GhFREQoJiam2E1o0uX2/f/+3/9TTEyMIiMj9eGHH0qS03X13HPPafr06Ro4cKD9bEdRzraxMWPGaMaMGYqKitIPP/xgP53rjLPtJz09vdh47dq1c7pNOZveZrMpPz9fMTEx6t69uxYsWKB+/fqpadOmSk9P18qVK4vNv6TxXnnlFcXExKhPnz5q3bq1qlWr5vQ922w2NW/eXBcuXLDvk0aPHq23335bERERWrVqlUJCQoott23btmrSpInDUa4k3XbbbVq9erXCw8PVr18/9e/fX8HBwYqKilLfvn31l7/8RYGBgfbLBNLl08atWrVSWFiY+vbta798FRMTow8++EARERE6evSoWrVqpebNm+vdd9/V6tWrndZZ0rZzRUn7i8cee6zYvuV62mRISIh69+5tf+3r66sRI0ZowIABCg8PV6NGjeyXv5xNW7lyZfXp00dr165Vnz59NH78eKfjRkVFaeXKlerfv7/OnTt3zekbNWqkzz77TPPmzXO6zRT94u0KjzEFylh8fLz+8Ic/6MknnyzrUmBRxhg9/fTTGj9+fLEvfyhfONIGytAzzzyjgwcPqkePHmVdCizq6NGjevLJJ9WmTRsC+3eAI20AACyCI20AACyC0AYAwCIIbQAALILQBtzg448/vqHx9+7dW+Lz3a+YO3fuTX8IzeHDh132zJadna0NGzbc1OWeOHGi2G+NryUyMvKaz0kAfi8IbeAmKygo0FtvvXVD04SEhNgf/1iS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\n",
"text/plain": [
"<Figure size 576x396 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wYiapPQ6oGlp",
"colab_type": "text"
},
"source": [
"# Doing inference on a subset of the data"
]
},
{
"cell_type": "code",
"metadata": {
"id": "TcCZLSIZCDUg",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 378
},
"outputId": "eacbaf09-246d-4c78-eb5c-d83c1a2a6eee"
},
"source": [
"DATASET_SIZE, SPLIT = 20, 10\n",
"df = pd.DataFrame(columns=['training data', 'mean squared error'])\n",
"for _ in range(500):\n",
" X, y = make_regression(n_samples=DATASET_SIZE, n_features=1, noise=5)\n",
" X_train, X_test = X[:SPLIT], X[SPLIT:]\n",
" y_train, y_test = y[:SPLIT], y[SPLIT:]\n",
"\n",
" model = ModifiedBayesianRidge()\n",
" model.fit(X_train, y_train)\n",
" predictions, _, _ = model.predict(X_test)\n",
" df.loc[len(df)] = ['all cases', mean_squared_error(y_test, predictions)]\n",
"\n",
" model = ModifiedBayesianRidge()\n",
" model.fit(X_train, y_train)\n",
" _, _, epistemic = model.predict(X_test)\n",
" indices = np.argsort(epistemic)[:5]\n",
" df.loc[len(df)] = ['most certain cases', mean_squared_error(y_test[indices], predictions[indices])]\n",
"sns.barplot(x='training data', y='mean squared error', data=df)\n"
],
"execution_count": 247,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f413a174fd0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 247
},
{
"output_type": "display_data",
"data": {
"image/png": "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ggWaPHmyTpw4ofz8fI0bN07dunXTkCFDlJycrIyMDOXm5urw4cM6cuSIpkyZojvuuKPM55w9e7Z27dolt9utGTNmqHnz5hWuc82aNUpNTVVwcLBatWqladOm6ZtvvtHMmTPlcrlUp04dPfvss6pdu3aF2z8ukwFK+fvf/242btxojDFmy5YtZuzYscYYY7p162bOnz9vJk+ebD744IMyyzz++ONm06ZNxhhj5s2bZ3bs2GE++eQTs2fPHmOMMQsWLDCvvfaa2b17t0lISDDGGHPu3Dmzdu1ac+TIETN48GBz8eJFc/HiRRMXF2eysrLMrFmzzLvvvuvL8c033/jl8wNW3n77bTNw4EBz8eJFk5aWZvr06WMuXLhg3nrrLTN79mxz5MgR079/f+P1eo3X6zUDBgww3333nRk1apT57LPPjDHGZGRkmJMnT5pFixaZVatWlVl/bm6uufPOO01BQYE5d+6cGT16tDl//rwZMGCAKSoqMsYYM378ePP555+bt99+2/z+9783Fy9eNMYY07FjR2OMMadOnTLvvPOOMcaYI0eOmHvvvdcYY8zgwYPN/v37zaJFi8y4ceOMMcZ8/PHHZsyYMWUyfPrpp+aRRx4xxhizfft28+KLL1a6zj59+phjx44ZY4xJT083BQUFJiEhwRw+fNgYY0xqaqpZsmRJhds/Lh972iijYcOGWrJkiZYvX67i4mKFhYVZLrN371499dRTkqTExERJ0tdff63nnntOhYWFOnnypPr27avmzZsrLy9PkyZN0p133ql77rlH77//vr777jslJCRIkvLy8pSVlaUePXpo+vTp+vbbb9W7d2+1aNHCvg8NXKbY2Fi5XC5FRUXp3//93+V2u9WwYUN9+eWX2rdvn2655RZ5PP/432u7du309ddf66677tK0adPUt29f3XPPPZXeDfLvf/+7mjdvrtDQUIWGhuoPf/iDdu7cqWPHjmn48OGSpNzcXB07dkyS1KZNG7lcrjLrqFevnr766iulpaUpKChIZ8+eLTdOu3btJEnXXnutcnNzy7y2Z88e3+sdOnRQhw4d5PV6K1xnnz599Mgjj6hfv37q06ePQkNDtWvXLiUnJ0uSiouL1aZNmwq3f1w+ShtlvPrqq2rcuLHmz5+vr776SikpKZbLuN3ucveRf+aZZzRixAh16dJFy5cvV35+vmrXrq23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\n",
"text/plain": [
"<Figure size 576x396 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment