{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dealing with Bias and Variance" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import addutils.toc ; addutils.toc.js(ipy_notebook=True)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import scipy.io\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from addutils import css_notebook\n", "from sklearn import metrics\n", "import sys\n", "import os\n", "from IPython.core.display import Image\n", "css_notebook()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", "\n", " if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", " root._bokeh_onload_callbacks = [];\n", " root._bokeh_is_loading = undefined;\n", " }\n", "\n", " var JS_MIME_TYPE = 'application/javascript';\n", " var HTML_MIME_TYPE = 'text/html';\n", " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " var CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " var script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " var cell = handle.cell;\n", "\n", " var id = cell.output_area._bokeh_element_id;\n", " var server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id !== undefined) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd, {\n", " iopub: {\n", " output: function(msg) {\n", " var element_id = msg.content.text.trim();\n", " Bokeh.index[element_id].model.document.clear();\n", " delete Bokeh.index[element_id];\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[0].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[0].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[0]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " }\n", "\n", " \n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " var NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"

\\n\"+\n", " \"
    \\n\"+\n", " \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n", " \"
  • use INLINE resources instead, as so:
  • \\n\"+\n", " \"
\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded() {\n", " var el = document.getElementById(\"aeb7b02e-fe21-4b4a-bdf5-c28800abc186\");\n", " if (el != null) {\n", " el.textContent = \"BokehJS is loading...\";\n", " }\n", " if (root.Bokeh !== undefined) {\n", " if (el != null) {\n", " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " }\n", " finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };var element = document.getElementById(\"aeb7b02e-fe21-4b4a-bdf5-c28800abc186\");\n", " if (element == null) {\n", " console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'aeb7b02e-fe21-4b4a-bdf5-c28800abc186' but no matching script tag was found. \")\n", " return false;\n", " }\n", "\n", " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.13.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.13.min.js\"];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " \n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.13.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.13.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if ((root.Bokeh !== undefined) || (force === true)) {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }if (force === true) {\n", " display_loaded();\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " var cell = $(document.getElementById(\"aeb7b02e-fe21-4b4a-bdf5-c28800abc186\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", "\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"aeb7b02e-fe21-4b4a-bdf5-c28800abc186\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"aeb7b02e-fe21-4b4a-bdf5-c28800abc186\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'aeb7b02e-fe21-4b4a-bdf5-c28800abc186' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.13.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.13.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.13.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.13.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"aeb7b02e-fe21-4b4a-bdf5-c28800abc186\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import bokeh.plotting as bk\n", "bk.output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 Bias-Variance Tradeoff" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 (In)Formal introduction to Bias and Variance\n", "\n", "Roughly speaking Machine Learning algorithms try to characterize a tradeoff between generalization (how well the model represents the general concept or function to learn) and apporoximation (how well the model fits the data). A small error denotes a good approximation of the function _out of sample_. A more complex model has a better chance of approximating $f$, in contrast a less complex model has a better chance of generalizing (picking the right approximation) out of sample.\n", "\n", "A more formal definition can be given after *Hastie, et al. 2009*.\n", "Let's explain Bias-Variance using linear regression problems, and specifically we'll use a squared-error measure as loss function. Assume further that the output $Y = f(X) + \\epsilon$ where $E(\\epsilon) = 0$ and $Var(\\epsilon) = \\sigma_\\epsilon^2$\n", "\n", "We estimate a model $\\widehat{f}(X)$ of a function $f(X)$, and the expected squared error of a given point $x_0$ is:\n", "\n", "$$Err(x_0) = E[(Y - \\widehat{f}(x_0))^2]$$\n", "\n", "It is possible to decompose this error in its Bias and Variance components:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"bias-variance " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$Err(x_0) = \\big(E[\\widehat{f}(x_0)] - f(x_0)\\big)^2 + E\\big[\\widehat{f}(x_0) - E[\\widehat{f}(x_0)]\\big]^2 + \\sigma_{\\epsilon}^2$$\n", "\n", "$$Err(x_0) = Bias^2 + Variance + Irreducible Error$$\n", "\n", "Where $Irreducible Error$ is the variance in the true relationship that cannot be captured by any model no matter how well we estimate $f(X)$. $Bias^2$ is the difference between the average of our estimate from the true mean. $Variance$ is the expected squared deviation of $\\widehat{f}(x_0)$ around its mean. Usually the more complex is the model the lower the Bias but the higher the variance. We can give a pictorial illustration of the relationship with the image below. (The image is taken from [this](http://scott.fortmann-roe.com/docs/BiasVariance.html) blog)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAo0AAAI1CAIAAAA8VlcCAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAIABJREFUeJzsnXdAU+fXx8/NJuwpewmKCIqKICiiogK14p5U62zVtvpqXa3aqVVra+1PK3XWUQdqUbEWNzgQB4IMAQVZggxZAULmzX3/uBgREFFys3g+/4jJzXNOkm+ec591DkYQBCAQCAQCgVBLaKp2AIFAIBAIxBtBcRqBQCAQCPUFxWkEAoFAINQXFKcRCAQCgVBfUJxGIBAIBEJ9QXEagUAgEAj1BcVpBAKBQCDUFxSnEQgEAoFQX1CcRiAQCARCfUFxGoFAIBAI9QXFaQQCgUAg1BcUpxEIBAKBUF9QnEYgEAgEQn1BcRqBQCAQCPUFxWkEAoFAINQXFKcRCAQCgVBfUJxGIBAIBEJ9YajaAQQCgVA50pqniTfjYmNvZJgu2bWmL1fV/iAQr0Djae1GlH1g2ccTA6wwDMMw3d6jp3+yOYFHKM++tDh67eS++hiGYZieV9iM/9ubJZL79njf/80Y7cnBMMws4IujeWLluYXQLF6TsV6fsPAmMpZVXd8wf/qHvbgYhmGYTeCkWSuP5r6zlqTld86eObPvp98OnbxTLm3H9UjYCCVCILQevOSALwDYfflAoArzsqoLH5kAQN/fn0paunZooI7Tivv892saLz0d7qjf7dMr1bKOeolQdxpl7LAyuRUZN9z93AoABh4rf6mE99BGTfQIOrA/jOG173IkbISSQOPpTgCNbcABAI4+WyVfN2Yc+OWnTgBJ2w9kil5/Ci+K3vXE95slfd53mpGhY2hiZmakQ++wlwh1p1HGLC6zFRljTC4LgMbhsrCXD72HNmg07O0XvbKJhI1QDihOdwYaOx/sXTohRcLxmL/MGyBnz85EftPHxdlH/sgPWjXG+n17I5pp8B8PcuM3+eur6q0hlEebMsZe+weUow0kbIRSQHEaQUII8s79MHvazDkfjxvSz6PXoCk/nM8XEiApjFoz3o2BYRhmMmDKkj9S+AAARNW/4f0/iyf7JvHTo1/PHGSKYZhd6Jp/n7e2uMdwmLzqAx0oPfr79epXq+OC1D1/CaYuDzTGAED8/PqOz0a6mTIxjG7kPGTpyadC8ipZTeqZ7V/PGdXPoeuMqy9yjnzaz4Su67f1sZgQvciMO/7715/M2/JQIG/0Te3IajPO/bF2/uj+jo5TLr7IO7nY34KGYWzzHqPWRhc0HQ0RgoKr2xcFe1rrYhjDtMeor+VvCa+899fXc6dOnjrpwyF9PALm/O9Ge1YyESqgdW0AXpV46JuF8+fNGutDrnU3YjP/WpNdG4Qo/9Qb5fE6SNgIpaDqiXeEEqiOCgQA1+8fid5wgbQ8ZpGbvsdXNypx8r+XV/SmA+ax8kY1ThDC9O+6AeiO+6+m8XJJ3h++GJh8dEW+kFd7dZqV+zepwjf7UBs31xyAOezwc7zxEd6VmY4+23LEBEEQ9dc/dvRccSmvqrr0yfWIGQ4A0H97roQgCEJamXT+741jzQA4AxfP8O8fOKg7l+71e25D3om1s4Y7YgC6Ey7XNrb55nbw6tSYIz9PtAAApw8nTF32x5nY6+d3f+HDAYBeGzPJT0ZWn7ZzopvHRzvinpTzKp7eObpioHnvzU/EBEEIn+wKc/T4/HyJhCAIAq+4OM8SaH03pKlkyb9zQsoYQNfYrIuldRMsu5gZcwEAaEHRNQRBEOLWtCEtOT3TzjAwIkdEEISMn7rFlw7AHBFVKV8Crvk3mAHgHDZpWuvyaBUkbATloDjdGXhLnJbxYudagO7YsxWvNq2IMjd6AIDL2hQhQUie/u4FYPpxXB1BEATRcH9VP1drGuh8cLKM7Jvqb37aM/RICd5q840IU9e5AECfbTlkh1D+T5jTh5Gl5GuE2Sf/flj30nx1zER9oA099cqfqn8GA4DeqCNFEoIQZJ89kVpPEARBVJwIeK07e0s7NWeDaADdv09paHxA+mz/YAZA350FUoKQ8W58Zoc5rkx8+SxB1F9fOv9c5cs7k/57i+RvUZC8yhHA+vO7ry5GUEtbMhYkr3R4FacJgmihDVHGj90A+u8rfvkVVkeHsgD8/i5rFqffJI83gYSNoBp0fhoB/KR9/5SDU0BPg1eLYSyXSXM8v1qW9k9MwTe9utmFTu+5ZOXFE+kNgQN0Ki//njj24F9eY4L3/xL1bOwCB0Zd4sG7Hot+6tLmKgq7x9wvB6xfeGf7XxkL1vdiFJ/9X1bQ96GNr2G7TAwHIMQVWQk34hMT47JFIKsuqcPBlFQojU4DYPjND7VhADBcwiY1Nspgvb4C+LZ26AwasF19HHUar6ebew92gBu1pbVSIPhxW/Y/M5022k1H3p7u4K27AUD2PPbQXQI4P08cdlRfh8Nh63D12OJuw0Isu+mhpSM1pZk2pNWF1QD0F/V443IfnavPAY/R/YxeXwJ+kzzgTWvNSNgIqkHfBYJoKH5aAwBNN+EAMCx6dtUB4FfU4wBMhw8muULp+dOPhdK847sEs+f6DP5stiNx97eDj0VQe/dAiu+iQJO3bHlh2E1cOVoXnu794369OOfoLt60JQP0G5/DKxP+mDewh/8nu5MljkNnfT6xKwAulb3eANtA9233le1qpykYi8sEIAgAkJSlPREARm9lz6+kuqASAPr/eC726qWY89FnTh3/+0jUxasxB79wZ7/FJYR6oOM2PsQUMresOZotIEBWl/LXliTvTYe+6M5q40VN5PFmkLARFIPG050ZQpB/74m+t6OxCRvgeUqRELrqvXoSlxJAc+hlxQIAVtewsQ7fbTl9Lm10/QnrBdGWdI7Z3EWeP6/8c+eDWSP3Zg1d0V//zXYaoZmNWPFRl+hdx36Lmeh83GDR2R6NXYEkd/eEoZ9nz76S9keQCQ1Akn3lvba5dqwdGseAA/DiwcMXUn+H138YdK4JFwDy7uQLJ5vptP5yhHqDmQTvunvG9euvFvX1OhDi5+Y2bMPdS/1MFHHwCQkbQS1oPN2ZaUj85dtzJVI9r8n+TKj678DdJpteBdnXUoX6o5eMJCfwON3Hj7KE7D+XL70+aNEgQwyA2XXakkG0koOrvt5SHDbLs10/cr3+n33iAnVR82eddFky3q6xjySq7/x9XcT0/KCfCQ0AQPoiJbnsPd5OB9thWA8d2w0gafPWFinbGFaDRtgDFB3YcrG8jTEMglIav5TWR7eNj7Y58pWJKrLzu/6alBp78kDEjzMVE6QBAAkbQS0oTncC8LryutYerrofGSvp2oVFt5742/c+jIoDH80/8ERAAADBT9+z+qjBgiN/jn256Mz1mBxsAiU3iI/menIAAIBuHbY0VId/64h42jTXtiYPm8DuMetzLwCedMTiYaYvhwSYjpWzMUiufr85Ojn50v7vvlj7XwUAELhM3qtIxTgALpE274Zfe/zt7cjEYhxwsaRFMyIpAcB2X7JrmRsU/i/Q9+PtF1Oe1fBrChOjj8WVSIHTe8X2j22g+sTEoXN3XM54Xlmee+/k99Mm/NT01A+CUmSiWiEACGoEeCtPCngCAJmwQfxGzchK//lk3uF7aVf2/7H74GGSo1FX015I5I20KY82QcJGUImqN7IhKEZWfWutX+Ngl2Ni07V7d1cnB1srcyMWAIDJrBvk/lKZIPfMmjH9nK3te4XM+mzhvEU/Xyxsdsqq5sIkI73QE2VNdnXzrsw04w77+3mbG71fR/L0dy+65cLbryVUlBSf+3KwNQtAz33a9ruV9Ylf2gGAY+ii3+/XCrL2Lp4SaAcAQO86dOKs1ScLxARBEMKsvYunBNoDADBcR4SvOJYnbqudisf7PxvrbwMAALb+4744lCMiCIIQZf3kBgDcnqHzt6cJCELGf3LqqzH9nIzpAExjh37jvjqV2/g5iEuv/2/hh74uJjQAprnnqCW7El60yBeJoALh472Lw8f6dwEAAHbPkMmzN8TXNO51xitiv581KdiNvFO0GjTuo6WHM1JbaoMgRLmRS/wNWnSBLL+f0wSiJ+2SRxsgYSMoAyPeskcCgdBqCFwiJeh0DJfK6KzWMlIitANp6ZUti1f/w5m7dXVoNysLE66sruxx3O4lMzbEGy66k/uHb6srN5orD831HNECFKcRCIT2U399pv2QK9NuZ//hp9v04WvTbILiPrrz9A9fVMoSoa6g2ywEAqH9iCuKa0HPwoD52qOSkuSMBttJH3mgII1QY1CcRiAQ2o/R0K8XuTz9fc0RcqckABCCvOiVU7YZf//P+gG6bb8YgVApaN4bgUB0CqTlt/dv3PhXoszWzsxAlymtk9iPW758oqchKh6JUG9QnEYgEAgEQn1B894IBAKBQKgvKE4jEAgEAqG+oDiNQCAQCIT6guI0AoFAIBDqC4rTCAQCgUCoLyhOIxAIBAKhvqA4jUAgEAiE+oLiNAKBQCAQ6guK0wgEAoFAqC8oTiMQCAQCob6gOI1AIBAIhPqC4jQCgUAgEOoLitMIBAKBQKgvKE4jEAgEAqG+MFTtAKLzIpVK6+rqAEAsFvP5/KZP6enpMZlMADAwMKDTUX1ghAaA9IygCBSnERRSXV1d8JL8/PySkpKqqqqqqqqKioqqqqra2tr2NGJkZGRqampqampiYmJsbGxra+vg4ODg4ODo6Ojg4KCvr0/1u0AgSJCeESoBIwhC1T4gtASxWJyVlZWenp6Wlpaenp6cnFxcXEy1UQcHhz59+nh4eHh6enp4eHTr1o3BQHefCAWA9IxQE1CcRnSIwsLC+Pj4hISE27dvp6SkSKXSVi+j0+k2Njb29vZmZmYmJiYmJibkkMLIyAgAWCyWrq5u0+vr6urIpiorK8khC/lHZWVlXl5eSUnJm3TLZDL79u3r5+fn7+/v7+9vY2Oj6HeM0GaQnhFqCIrTiHemvr7+6tWrMTEx//77b6sjDEdHRw8PDw8PDzc3NycnJ3t7e1tbWwUOC8RicWFhYWFhYX5+flZWVmpq6qNHj4qKilpeaW9vHxYWFhoaOmTIEC6XqygHENoE0jNCzUFxGtFeUlNTL168eOHChVu3bonF4qZPWVlZBQQEDBo0yNvbu2fPngYGBsp3r7q6Oi0tLTEx8fr16/Hx8ZWVlU2f5XA4gwcPDgkJGTVqVLdu3ZTvHkLdQHpGaAooTiPeQkZGRmRk5PHjx588edL0cRcXl+HDh/v6+g4aNMjFxUVV7rUKQRAZGRk3b95MSkq6fPlyfn5+02e9vLymTJkydepUR0dH1fiHUB1IzwiNA8VpROsUFhYePnw4MjIyLS1N/iCXyx0yZEhoaGhISIi69WVtkJWVFRMTc+HChRs3bgiFQvJBDMN8fHymTJkSHh5uYWGhWg8RVIP0jNBgCASiCWKx+OTJk6GhoTTaqxw4HA5n/PjxkZGRfD5f1Q52iJqamr/++iskJIQ8zErCZDInTZoUExOD47iqHUQoGKRnhBaA4jSikdLS0rVr1za9E6fRaMHBwYcOHeLxeKr2TsG8ePHizz//HDRoUNN7Vnt7+02bNmnfm+2cID0jPWsNKE4jiKSkpFmzZrHZ7Ka/8G+++aagoEDVrlFOZmbmsmXLmvbm+vr6S5Ysefr0qapdQ7wnSM9Iz1oGitOdmmvXrgUGBsp/0nQ6ffz48efPn+9sM2YikejEiRPDhg1r9lE8ePBA1a4h3gGkZxKkZy0DxelOSkJCwogRI+Q/YwMDg//7v//Lzc1VtV8qptlQDMOwiRMnpqWlqdovxFtAem4VpGftAMXpTsf9+/dHjRol79FsbW23bt2KFrGaUlpa+t1335mZmcnXNadNm5aVlaVqvxCtgPT8VpCeNR0UpzsR2dnZ48aNwzCM/LlaWlpu27ZNIBCo2i81hcfjff/992QmSHLmcPbs2c+fP1e1X4hGkJ7fCaRnzQXF6U5BXV3d6tWrWSwW+RM1NzffsmWLph9KUQ7V1dXr1q2TVzHS09PbvHmzSCRStV+dGqTn9wbpWRNBcVrLwXF83759VlZW5M+SxWJ9+eWXtbW1qvZLwygvL58zZ478DK6Li8s///yjaqc6I0jPCgHpWbNAcVqbycrKanqkcty4cdnZ2ap2SoNJSkoaMmSI/PMMCwsrKipStVOdCKRnxYL0rCmgOK2dSCSSDRs2cDgc8hfYq1ev2NhYVTulJURFRTk4OJAfrKGh4a5du2Qymaqd0nKQnqkD6Vn9QXFaC7l//76Xlxf5w9PR0dm4caNEIlG1U1pFbW3t4sWL5dOGQ4YMQbtnqQPpmWqQntUcFKe1CqlUun79enll3KCgoJycHFU7pbXcv3+/T58+5Eetq6u7d+9eVXukbSA9KxOkZ7UFxWntoaCgICAggPyZ6evr79+/H81fUY1EIvn555/lG48nT55cXV2taqe0BKRn5YP0rJ6gOK0lnDlzRn4y0t/fHw07lElSUpK7uzv54Ts4OFy/fl3VHmk8SM8qBOlZ3UBxWuPBcfzbb78l15aYTOb69eulUqmqnep0CASCJUuWkDk36HT65s2b0eDv/UB6VgeQntUKFKc1m4qKitDQUPmdb2Jioqo96tRcvnzZ1NSU/DomTZpUV1enao80DKRntQLpWU1AcVqDSUxMdHR0JH9FwcHBFRUVqvYIQRQUFHh7e5NfSs+ePZ88eaJqjzQGpGc1BOlZHUBxWlOJiorS1dUFABqNtm7dus5WuU+dEQqFn376Kdm1mZqa3rx5U9UeaQBIz2oL0rPKQXFaI9m6dSu5gGdgYPDvv/+q2h1EK/z111/kvlk2m33s2DFVu6PWID2rP0jPKgTFaQ1DKpV+9tln5L2tra1tcnKyqj1CvJErV64YGxsDAIZhGzZsULU76gjSswaB9KwqUJzWJAQCwejRo8lOrV+/fsXFxar2CPEW0tPTnZycyK9s3rx5aOtyU5CeNQ6kZ5WA4rTGUF9fHxQURP5Cxo0bV19fr2qPEO2ipKTEx8eH/OKmT5+Ocl6SID1rKEjPygfFac2gpqZGXilo9uzZaJeNZtHQ0CA/bjR27FhU7hfpWaNBelYyKE5rABUVFf369SN/FYsWLUIJBzQRkUg0btw48ksMCQnh8/mq9khlID1rAUjPygTFaXWntLS0e/fu5O9h5cqVqFPTXKRSaXh4OPlV+vn5dc6uDelZa0B6VhoYQRCAUFdevHgRFBSUlpaGYdgPP/ywdu1aVXukeEQiUUNDQ8vHdXV15fUAtAYcx7/44ouIiAgACAoK+u+//7TvPbYB0rPy/aGUTq5npYHitPrC4/GCgoIePHgAAFu2bFm+fLmqPXp/JBJJZmZmXl5efn5+Xl5eQUFB1Uuqq6sFAkHLl3C5XJOXmJqaOr6ka9eu3bp1o9Ppyn8XimLx4sXbt28HgLCwsH/++Udet1G7QXpGeka8HyhOqykCgSAoKCghIQEA1q1b98MPP6jao3cDx/GUlJQbN24kJiampaVlZmZKJBJFNa6jo9OzZ8/evXv7+PgEBAS4ubmRBQM0BYIg5syZc+DAAQAIDw8/ePCgRnfT7QHpuQ2QnhFtg+K0OkIQxIwZM44cOQIAS5Ys2bZtm6o9ai9paWkXLly4du3a7du3a2trW15Ao9P1TS0NLKz1zSy5hiZcQ1NdYzMWh9vySrGAX1/9ooFXJeBV1b4o4ZUX11eWE4Ss5ZXm5uYDBgwYOXJkSEiIi4uL4t8VBeA4PnXq1FOnTgHA6tWrN27cqGqPKATpGZCeER0AxWl15Kuvvtq0aRMAhIeHHz58WM1vrnEcv3r16okTJy5evFhUVNT0KRqdbu7Y3djKwcLJzdypu5m9i76ZFe1977VxqaS2/Hl5XtaL/CcVhU+qnxdUFOQ06+lcXFyCg4OnTZvm7++v5p+bWCwODQ29du0aAOzcuXPhwoWq9ogqkJ5bN4T0jGgfKE6rHREREYsWLQKAYcOGxcTEqPO+jHv37h08ePDUqVPl5eXyBzEa3aqbp6OXv21Pb2s3r1bHFopCWF9bnJlU9CgxP/l2WV4mNBGzvb39pEmT5syZI694r4bweLyAgIC0tDQ6nR4VFRUWFqZqjxQP0nP7QXpGtAqK0+rFuXPnxo0bh+O4p6fnzZs3DQ0NVe1RK9TX10dGRkZERJB7gkjYugYuPkO69h/i6DWQo68Ct/nVFXlJN5/ej8tNvC4RCeWPDxkyZMGCBWPGjOFwOMr36q0UFRX5+fkVFRVxudxr1675+vqq2iNFgvT83iA9I+SgOK1GPHnyxMfHh8fj2draJiQk2Nraqtqj5hQUFOzYsWP37t3ytToWh9s9ILT7wGCH3n50BlO17pFIRMK8Bzcex198knAZl4jJBy0sLBYtWrRw4UILCwvVuteStLS0gIAA8ntPSkoyNzdXtUeKAelZISA9I1CcVhf4fL6vr++jR4+4XG58fLyXl5eqPXqNvLy8b7/99tixY1KplHzE2s2r18iJbgEfUDoT2BGEdbxHcdGpl06+yH9CPsLhcObOnbt27VpLS0vV+taMixcvjho1CsfxoUOHXr58WQu2yyI9Kxyk504L/bvvvlO1DwgAgBkzZsTFxQHA7t27Q0JCVO3OK4qKilauXDlv3rzk5GSZTEZnMHsMHhW6ZKP/1EVdurqryZijVRhsjnX33n0+mGbn6SOora4pKZRKJffv34+IiKitre3Tpw+Xqy49MrmtNy4uLj8/v6GhYeTIkar2qKMgPSscpOdOCxpPqwW//fbbsmXLAGDhwoU7d+5UtTuN1NTUrF+/fseOHSKRCACYbE7fDz/qF/axnolGTmRVFefdObk7Iy5ahuMAoKent3r16mXLluno6KjaNQAAgiDCwsL+/fdfDMNOnDgxceJEVXv0/iA9KwGk584DitOqJzY2dsSIETiO+/n5xcXFqcOGWIIgIiIivv3224qKCgCgM1leIVMGTPpU19hM1a51lKrivPijO7JuxpAHYOzt7Tdt2jRt2jRV+wUAwOPxvL29c3JydHR0EhMT1XlnbxsgPSsTpOfOAIrTKqa6urp3797Pnj2zsrK6d++eOuy1ycjI+PTTT2/dugUAGEbzGD4uIHyxnmkXVfulSCqLcm8c+i074TL539GjR//xxx92dnaq9QoAUlJSBgwYIBQK+/Xrl5CQwGSq7zRsqyA9qwSkZ+0GrU+rmNmzZ9++fRvDsFOnTvXp00e1zggEgh9//HHGjBl5eXkAYOfRf+yaHV4hU1hcPdU6pnC4BsY9Aj6w8/Qpz8viV1c8efJkz549urq6/fr1U+2eF0tLS0NDw5iYmJKSEoIghg0bpkJn3gOkZ5WA9KzdoPG0Kjl8+PDMmTNBPZIpPnz4cNq0aVlZWQDA1tUfPHOpV+hUDKOp1iuqwaWSu6f23Dm5SyoWAcCAAQMiIyPt7e1V6BJBEKNHjz5//jydTr9169aAAQNU6Mw7gfSscpCetRIUp1VGYWGhp6dnbW2th4fH/fv3VZi1gCCI//3vf6tWrSL317gOGD5i4Td6Jmp3LpM6qorzL+5Y9yz9PgAYGRn99ddfY8eOVaE/ZWVlXl5epaWlTk5OycnJ6pkepBlIz+oD0rOWgea9VUZ4eHh6ejqLxbpw4YKNjY2q3Kiurh4/fvyOHTtwHGdydEYs+GbI7BUsHV1V+aMSdAyMPIaNYTDZzzISBQ0NkZGRpaWlI0aMUFWFPj09PQ8Pj6NHj1ZXV/N4vFGjRqnEjXcC6Vl9QHrWMtB4WjWcOHFiypQpAPDtt9+q8FYpPT193LhxOTk5AGDl6vnhil+NrVQ5RaZySnMe/fvL8qriPADw9fU9deqUCndCzZ07d//+/TQa7ebNm/7+/qpyoz0gPasnSM/aAYrTKqCmpsbd3b2kpMTd3T0pKYnNZqvEjXPnzk2fPr2+vh4AeodMDpq/hsFSjSdqhYhfe/631Tl3rwGAubn5uXPnVJWjuLq62t3dvbS01MPDIykpSW33yiI9qzNIz1oAmvdWAYsXL75+/TqNRjt9+rSTk5NKfNixY8fs2bNFIhGLww1d8pPf5AU0umrmxNQNBovdI+ADOoNVmH6fz68/evSop6dn9+7dle+Jjo6Og4PDyZMny8vLmUxmYGCg8n1oD0jP6gzSsxaAxtPKJi4ubujQoQDw+eefb9++XfkOEASxfPnyrVu3AoCBudXE7/aY2WtGLXol8yz9/umfPhfW8eh0+rZt2z7//HOVuDF27NizZ88ymcy0tDSVdK9tg/SsKSA9ay4oTisVmUzWv3//pKQke3v7jIwMXV1lb2+RSqWzZ8/++++/AcDcsfuk73ZrWcIHxVL57OnJ7+bXlj8HgFWrVm3cuBHDMCX7kJ+f36NHD6FQGBYWdvbsWSVbbxukZ80C6VlDQfPeSuXgwYN//vknAOzYscPb21vJ1oVC4aRJk06ePAkADr0GTP5hn46hiZJ90Cy4hiZuAR8UpCTwayri4+NLS0tDQ0NpNKWewTUyMhKJRDdu3Hj8+PHgwYNVNbHcKkjPmgXSs4aCxtPKo6GhoVu3bsXFxf379797966S72QlEsmkSZPIG9iu/YeMWf072mXTTgR1NSfWzSl7mgEACxYsiIiIULID9fX1bm5uxcXFffr0SUxMVHLH+iaQnjUUpGeNA42nlceGDRvOnTsHAJGRkQ4ODso0jeN4eHh4VFQUAHQfGBy2ahuDqfrqCJoCk81xGxT6LP1eXWVZYmKiSCQaPny4Mh1gsVhmZmZnzpwpLS21s7Pr27evMq2/CaRnDQXpWeNA42klUV5e7uzszOfzJ0+eHBkZqWTrs2bNOnjwIAC4+o0Yu3obRkNl298ZiUh4Yt2c4swkANiwYcPXX3+tTOsEQfj4+CQmJtrY2OTk5Kgw2xcJ0rOmg/SsQaDxtJJYt27djRs3GAzGmTNnjI2NlWl606ZNv/76KwA49R009uvt6LzK+0FnMLr7jyx4eLu+6kVsbKyLi0uvXr2UZh3DMBsbm6NHj9bV1ZmZmak8STLSs6aD9KxBoPG0MiguLnZxcREKhfPnz9/nJ67LAAAgAElEQVS9e7cyTR85cmTGjBkEQVh17z11w0EmG923dogGXtWRFdOqSwpYLFZMTIyS6//4+fnduXPHwsIiNzdX+Zur5SA9aw1IzxoBWsBXBuvXrxcKhSwWS8mTS9euXZszZw5BEMZWDhPWRaBOreNwDU0mfr+Ha2giFovHjx+fmpqqTOvk7Fd5efn//vc/ZdptBtKz1oD0rBGg8TTllJSUODk5iUSihQsX7ty5U2l28/LyvL29q6qquIYm4VuOd/JEx4ql5HHK8TUfS0RCJyenxMREExPlHQcKCAi4deuWqanps2fPdHR0lGZXDtKz9tGZ9awRoPE05ezcuVMkEjEYjFWrVinNqEAgmDhxYlVVFZ3BHL8uAnVqisWqe+8Pv9wCGJaXl/fRRx/JZDKlmd64cSMAVFZWksk9lA/Ss/bRmfWsEaA4TS0CgYBMBDF+/Hhlnl359NNPk5KSACDokzXW3XsrzW7nwdVvxICJnwBATEzM+vXrlWZ30KBB5Kabbdu2KX8yDOlZW+mcetYU0Lw3tezZs+eTTz4BgLt37/r4+CjH6IEDB2bPng0AHsPGfrB0k3KMvhMyHOeVFVUW5VYV5wlqq0X1taKGehG/DpeI6Sw2m6vH1tVn6+rrGpmZ2nU1sXUyMLfCMLW7pyRk+Ilv5xc8vE2n02NjYwMCApRj99SpU5MmTQKACxcuBAcHK8coCdJzq6hEzxKhFDCMyVbYmbROqGdNAcVpCiEIwsPDIyMjY8iQIbGxscoxmpub6+XlVVdXZ2Lj9PG2KCZHXZZ86ipKC1PvFKTefZ71sKbsmUwqbf9rGSyOsbWDrXs/e08fO8/+XENT6vx8J/jVFQcWj+HXVDo4OCQnJyvnhJJMJuvevXtOTk5wcPCFCxeUYJEE6bkpKtRzRSHvv9/uluZUYRjYuJuHLvYxttZ/R/dbp1PpWYNAcZpCoqKiJkyYAABnzpwZM2aMEiziOB4YGBgfH09nMD/6JbJLV3clGG2bmpLC9Gtnsm7+V1Wc3/JZJpNpbW1tbGxsaGhoaGjIZrOFQiGPx+PxeNXV1cXFxTiON38Nhpk7uLoHju45bIyeiYUS3kLb5CZeP/XDAiCIGTNmHDp0SDlGt2/fvnjxYgzD7ty5o7RxLdIzqIGeRXzx7vnnRQ1iGU4AAI1O0zPVmbvzA0UNrDuPnjUIFKcpJCQk5OLFi87OztnZ2crJYUvKHQACZy33nTBPCRbfhEQoyIg7l3Y16vnjFGiiMRcXlyFDhri7uzs7O/fo0cPJyamNcvEikejJkyePHz/Oy8tLTk6Oi4srKSmRP4thNPveAzyGjXULCKUzVFlz/sru9Unn/sYw7OrVq2SRR6rh8/nW1ta1tbXz5s3bs2ePEiwC0rN66Dnx7OMbh1Kl4lfxns6kjVjo3WuEc4ffZSOdRM8aBIrTVFFQUODs7CyTyX766aevvvpKCRaLiorc3d3r6uosnNxmbj1FY6gmT5Ogribp3N8P/j0srOORjzCZzNDQ0AkTJgwZMsTevkM7dTMyMuLi4iIjI2/evCmXrr6Zpc+4Ob2CJ6vqQK2IX7f/89F1FaXdunVLSUlRThLEhQsX/vnnn/r6+s+fP9fT06PaHNKzmuj5yq4HyedzmvbbdAbNe2z3wI8Vtr2uM+hZs0B5Q6ni999/j42NZTAYBw4c0NdXzOpR28ybNy85ORmj0Sd886e+maUSLDZDxK+9eXjbv7+uyH94WyoWAYC3t/fq1av3798/b9683r17GxoadtCEubl5//79Z8+ePWvWLDMzs9LS0hcvXogb6vOSbqZePCGTSi1dPZSfSJLBYhtbO2TeOF9ZWUkQRFBQkBKMWlpa7tmzRywWu7i49OnTh2pzSM+gHnquKeMXppaRk94kNDrmOdzZwllha8mdQc+aBRpPU4JMJnN2di4oKFBaLfSbN28GBgYSBOEzfu6Q2SuUYPE1CCL92pm4v7Y08KoAAMOwMWPGrF27tl+/flRbjo2N/fHHH+Xbmows7YI+WdO1/xCq7bbk3JYvM2+cZ7PZaWlprq6uSrDYp0+fhw8fDhw48NatW5QaQnpWHz2LhdK9n54X1IpwqQwA6EyanonOvIhRdKaCVyK0WM8ah9qdddEO4uPjCwoKAGD+/PlKMIfj+OLFiwmC0DPt4j/tMyVYbMqL/MdHVoX/t+2rBl4VhmGTJ09OSUk5ffq0Ejo1ABg6dOi1a9fi4+PJEx01pc/++WHBmY2La1+UvPW1CvZkzkommyMSiZYuXaoci+QRqfj4+OzsbEoNaZmen6W/uH4wJXZfcmFaectn1VzPLA4j/Ofhdp4WdAaNzqTZe1pM2xik8CANWq1njUMjx9PV1dX79+83NTUdP368gYGBqt1phUWLFkVERFhZWRUVFSlhx82uXbsWLFgAAB8u/8U98EOqzb2CIJL+PRL718+4RAwAHh4eO3fuVNqxy5ZER0cvXryYjCgsrl7I5z+4BXygTAfij+6IP7YDAM6fP//BB5Sbrq2ttbCwEIlEVK8Za5Oerx9IuXc6i0bHAECGE95h3YbOfTnLqlF6JrtuDMOoc0Bb9axxaMx4etmyZQEBAadOnZJIJGFhYcuXL589e3b//v3LyspU7VpzpFLpyZMnAWDSpElK6NSEQuGPP/4IADY9+roPHkW1OTmCuprTP31xZfd6XCLW09PbvHlzUlKSCjs1AAgLC3v06NGqVauYTKa4oT7652UXd3wjEQmV5oDP+LnkSuqaNWuUcAdsYGAQGhoKAKdOnaLOijbpueRx5b3TWYSMwCUyXCIjZERi9JNn6eXwLnqurhbu3Zu0eXP8xYtPFeteM9rWM4ZhGIZJxXhpdpWIL6HCAa3UsyaiGXFaIBBcvHhx586dEydOzM3NvXXr1tSpUwUCwZo1azZs2KBq75pz5cqViooKACCT7FDNnj17iouLASBgxv8BlTfXTakoyD64ZFz2nSsA4OPjk5qaunLlyjZOpCgNXV3dTZs23bx509nZGQBSLp44/OUkfnWFcqwzOTqDZy4FgIcPH545c0YJFkmNJSUlPX1KVczQJj3nJZfSGa91ejQalnO3uP16vnevuGvX37/4IubHH6+PGnU0OPhviYTCbNht6ZmAG4dSt006dWjZpf9N++fi9vtND2spBK3UsyaiGXFaIpE4Ozv37NkTAB48eAAACxYs4HA4kydPzs3NVbV3zTl69CgA2NjY+Pv7U21LIBBs2rQJABx6+9l7Kik/QHFm0tHV4bUvSjAMW758+a1bt5ycnJRjup34+vomJyeHh4cDQEVB9pGV06pLCpVj2j3wQ1O7rgDw3XffKWEIMnr0aPLYDHVDEG3SMznd3Qx+zYt26lkolI4dG1lTIxQKpXy+BMdl168X/PxzvML9bEarek6Mfnz/TJZMRgAAQUB6bF7c/ocKN619etZENCNOYxhmaGhIrsScO3eOwWCQMZvBYAiFypvVbA8SiSQ6OhqUNUm4b9++58+fA0DAR0uotkXy9H7ciXVzhPW1Ojo6UVFRW7ZsUYdhdEsMDAz+/vvviIgIOp1eU/rsyIqpJdlpSrCL0egDp38OAKmpqeR0MaXo6+uTC4eHDx+mon0t07ODlyW5TVqODJc9id/eTj0nJZWUl/ObRiuRSHr6dCYVrjajpZ4TItPwJkN5XCJ7eCGn2bvrOFqmZw1FM+K0rq4ujuNXr16Nj48/ffq0n58fWSGVx+ORU2Tqw61bt3g8HgCQGRYpRSaT/f777wDg2GegtZsX1eYAIP3qmdMbPpOIhCYmJpcuXRo7dqwSjHaEBQsWnDx5UkdHp4FXFfn1x7mJ15Vg1G1giKmdCwD89ttvSjA3fPhwAHj06BEVU4VapmcrV5OAjzwxGsZg0RksOoYBYHFSSXY79SyRyFrOxAuF75DZu4M01bOgrvmatAwn6qsECjeqTXrWUDQjTtNotDVr1owfP37QoEEikWj9+vUSieTAgQMTJ05kqChL0Zu4dOkSABgbG/v5+VFt69y5czk5OQDQf+xsqm0BQM7dazH/WyPDcTs7u5s3bw4aNEgJRjvOuHHjLl26ZGxsLBY2nN20pORxCuUmMcx7zEwAuHPnzp07d6i2Jt+IS2pPsWifngdMcv94W/DA6R7d/DmA7SVkce3Xc9++Vlzua6NtDocREuJCmbOtINczwAuA1yai2bosQ3NdxZvUIj1rKJoRpwHAw8OjqKjo+vXrL168GDx4MJ1Ot7W1nTNnDnkDrj78999/ADB8+HA6XWH15t4EWWLd1M7Fqc9Aqm0VpN45u2kJIcPNzc2vXbvm7q76igjtZ9CgQTExMVwuVyIS/vPjQiWsVfccGqZjYAwAW7dupdqWg4ODm5sbvNSeYtFKPVs4GVm68h7f+pqQFb2TnvX1WUePTmAy6SwWHcOAw2E4OBh9990QSr1tCalnDucqADSGagwwGhY4qxdQs5FUa/SsoWhMnAYAAwODwYMHm5mZAQCDwRg+fPiMGTPUalT3/PnztLQ0AAgJCaHa1v379+/evQsA3mNmUr3Nu6o478xPX+BSCZfLPXfunIuLUgcQCsHX1/fYsWN0Or2BV3Xy23n8mkpKzTFYHK/QqQBw9uzZFy9eUGoLXuotLi5OJBIpsFmk55aMGuX66NGiL7/0mz27z+bNw5OTP9XTY1Hn6pvw9fWNjPyZRjsCUIRhEjM7/TGrBnpRNrLXDj1rLpoUp1tl3bp1qnbhFVeuXCEIAsMwJfRre/fuBQAWV68HxYlNJCLhmY2LRfw6Op1+7NgxX19fSs1RR1hY2Pbt2wGgpqTw/NaVQPHm1V4jJgCGicVicr80pZCnTuvr6+PjFbn3GOm5VVxdTX76KWjfvrDFi311dFS27hYWFrZjxzKAfQSxQc80qpufDaXmtEDPmovGxGmxWHzgwIEJEyb4+fl5vcTd3X3nzp2qdu0VpKocHBysra0pNcTn848dOwYA7oEfsjhcSm1djvi+oiAbACIiIsLCwii1RTULFy5cu3YtAOQnx985RW35PMMutvYe/QFg//79MhmFR2wBIDAwkDzNkpCQoMBmkZ7VHKTnToJmxGmCIObPnz979uyzZ88mJSUJhUKpVFpQUFBZWUl1D/JOkOnjBw6kfLU4Ojq6rq4OAHqNmEipofSrp9OvngaA8PBw5eR2pprvvvtuyJAhAHDryO/FmUmU2uo1chIApKamUt3dsNns/v37w0sFKgqkZ/UH6bkzoBlxms/nnzlzZubMmXw+//vvv4+Ojk5PT3/06NGECRPS09NV7V0jlZWVmZmZAKCEJXMyCYChhY2lS0/qrPCrK67u+QkAunfvHhERQZ0hZUKn048cOWJhYSHD8Qv/W0tmcqYIV78R5OhQCUkbSNUlJCTguGKSUiE9awRIz50BzYjTMpmMRqN99dVXbDbb09MzKysLAKytrYODg8llLXUgPj6ezNdDdb9WX18fExMDAG4BoZTuuIndv1nEr2MymZGRkcopOawcrK2tDx48CACVRbn3ovZRZ4jJ5nT1GQoAp06dojqXE6k6Ho9H7vzqOEjPmgLSs9ajGXGaw+F07dqVzG3Sq1ev48ePkwskjo6O33//vaq9a+T27dsAYGJiQvWZpZiYGIFAAADdB4VSZ+VZ+v2M6/8CwNKlS3v37k2dIZUQEhIydepUAEg48Selx7TcAkIBoKioiNzMTB3+/v5kvjBFTRUiPWsQSM/ajWbEaRaLNW/evG3btolEIktLy9zc3Llz5x49enTevHnqkzc0JSUFAHx9falOr3j+/HkAMLKyp26SUCaVXv7zByAIW1tbtdpRr0B++eUXfX19qVh0aed31Flx9g4kpwovXLhAnRUAMDIy6tGjBwAoavyB9PwmJBJZTk4Vn5oSVe8N0rMWoxlxGgBmzpxZU1Nz+vRpJpO5bdu2w4cPh4eHJyYmzpkzR9WuNULqiepbdZlMRk4SOvWhcDbyUVw0uSf2119/1dPTo86QCrGxsfn2228BoODh7YIUqvbF0BlMO08fALh48SJFJuSQ2lNUv4b03CqbNt3S1f3J1XW7vv5PM2acVp9ojfSsxWhMnOZyuTt37iTndgYMGJCfn3/kyJG4uLhffvlF1a4BAFRVVZGZxj09PSk1dP/+/fLycgBw6kdVpWeCkN09tRsAPD09lVPKUFUsWrSoS5cuAHDnxC7qrJDf1P3796uqqqizAi+1l56e3vG1Q6TnVtmzJ+nbb+MkEhwACAJOnsxYvlyNclsiPWsrGhOnm2Frazt9+vTAwMCioiJV+wLQ5KaP6n7t2rVrAEBnsux7UZVvJOtmTFVxPgB89dVXmLIKWqsEHR2dpUuXAkBB6p3izGSKrDj3DQAAHMepzoNIaq+uri4/P7+DTXVyPd+8Wfjtt3G//prw+PFreeu2bk0QN6nxLBJJd+1KrK1Vl5xZSM/aiqbGaTkbNmxQtQsAL/s1JpNJZqalDvLkoqVLT+rSQdz7Zx8AuLq6Tp48WbEtS6Wyhw9LS0vrWz5VXy+IjEz+5ptLR48+EAiU1/EtWrTI2NgYAMghFxUYWdnrm1kC9Ukb5DG141OFnVnP8+efGzbs4M8/x69bd83DY+fBg68KtxQV1Ta7mCAgP7+mZSNisbi6urqysrK6uloiUd7cONKzVqJexaaaIZFIVq5caWBg8M033/z222/Jyc3vEOvr6xMSEnbtonCSp508ePAAANzc3CgtxkwQBJkiysatD0UmSrPTy3IzAGD58uWKLb2wb1/yF1/ECAQSABgxwvnw4fEcjjQqKurSpUv37mXl5Q0kCBMAAgDDsAOurvEDBniGhISMHTtWR0dHgW40Q19ff9GiRRs2bHiaeKO+qlzPxIIKKzY9+mbd/I/qJIj29vZGRkY1NTUZGRkdzLTVafUcFZV54MBDqVQmfVnI+ZNPzgUFOdnaGgCAm5tZUlKJTPZqGpbJpHfrZkr+zePxSD0nJSXl5uZKpY31LlkslouLi7e3N9LzO6FAPWs6aj2eFovFx44di4yMlEqldDr9aAuio6OVkBS+PZClUqkuUJGdnU2uCdn0oKpfS489AwBcLpfcCqAQ7t4tHjny7/nzz5FBGgBiY/N7995gZWU1Z86c48eP5+b2JghTADoAA4BOEMZPnrgdOnRo+vTpVlZWS5cuLSkpUZQzLZkzZw6GYYQMz4g7R5EJGzcvAEhPTyezblFH165dAaDj84SdVs+RkY9w/LWkmDQaFheXT/69adNwDMNotMbJcyaTtnnzcA6Hcft26oABS83MZs+ZE3H8+D9PnjyRB2kAEIvFGRkZSM/vgaL0rOmodZzW1dXNy8tLSUlhs9nDhg2bMGECj8cjmlBXV6eE8vXtobCwEACcnJwotZKU1JgX0Jqa8YdMKs268R8AjBkzxsDAQCFt7t2bNHDg/itXnjbdDCKVysrK2AKBPgBNhzYTwOl1KdIxcLVi6QEAj8fbtm2bq6vrhg0bKDqD5+zsTCZVSL92hor2AcDazQsAcBynOn0eqcCO92udVs9SqazZpiUMwySSxsgdFOR06dJHXl6W+vosR0ejiIgPZ81ymzFj1cCBx+/e1ZVKewEEM7DPRxh3XWTt/L1Dj+8denzn0ONTK6dQky7WLB1Aen5HFKVnTUet4zQA6OjosNlsAHBxcZk1a1azH5uent748eNV5NorcBwnN8cqp1/jGproGptR0X7+w/gGXhUAzJw5UyENVlcLP/vsPxxv3vcBAAA+yLCrn8Ecgcy5tZfS/uref6eLV5ipFROj8fn8tWvXDh06lKKByIwZMwCgoiC7PC+LivbN7F0xjAbUr7Q5OzvDy9Hwe9OZ9RwW1p3JfG16XCyWDh7sIP/vsGFODx58Ulv7VV7ekl69pP369f37bwEAC4AJgAEwaKBPwMgp5rZDjMyHGJkPNTKfbmG32q77sR5Iz++MQvSsBah7nJajq6v74YeNBe+aFiWdPn26ijx6xfPnz8lpLqr7NXKF3tyhG0Xt5z+8DQBWVlYjRoxQSIMPH5a+6UwFBvTuOq4JtbYtn6JhRA8uT4eG99Q1+NLW9Yhbf38DUwC4c+eOj49PYmKiQnxryuTJk8nbwWdp9xTeOAAwOTpGlnZAfb/m6OgIAIWFhR2paNSZ9TxzZu8PP3Rlseh0OsZi0Wk07KefhnftatzyypiYmMDAwLy8GgBTgFfbyMUE7W6taauiR3p+VxSiZy1A3eN0YmLisWPHnj9/Tv734sWLdnZ2HA5HT09vxYoVfD5fte6RPHv2jPyDVBV1PHr0CADMHKnt14KCghS1g4zLZUqlrXRZNIxw0uEfKGs9DDAwYrXdq3FAFxb7J6eecywdMYCioqLQ0NCcnByFuCfH0NCQrENcmEpVNkRzp24AkJGRQVH7JKQCxWIxOSB+PzqznjEMoqKmnDw5afFi3xUr/BMS5q5c6d/ysmvXro0dO1YgELBprRz0omFEG8e/kJ7bj0L0rAWodZw+cOBA//79p0+fbmdnFxcXl5WVFRISQh6Y5vP5v/zyS3BwcENDg6rdhNLSUvIPe3t76qwIBAJylszY2uGtF78H/OqKisIcABg6dKii2vTysuRyWzlTQBBYrkAXf0Nv9ptzsgPntTswDODjLvY/OLozMayiomLMmDE8Hk9RTpKQxQGfPbpPEJTcuZtYOwH1M3hyBZLJQ94PpOewsO5btwavXz/Mx8em5bOPHz8eP368WCw2YjC3dXWwZzfQ4NXNKAuT+ehXtnxVU5Ce24lC9KwFqHWc3rBhg56e3ty5c0eOHDljxozdu3ebmppevnxZLBbz+fwjR44kJyerw6Escs85i8WitAiPfDOFoUUrfUfHKUhJAIIAgGHDhimqTTabPm2aR8vH20gv5KVb7aHbep812NBshV3jXfysWbMU4qEcsjcX1teW5z1WbMskBl1sAKCoqEgsprDyoKlp4xmhjuSKQnpuA4lEMm3aNB6Px6bRNjp5uHP1f3RMM2JIWJiMiclYmMycJfrCOrs9TSE9vxWF6FkLUOs4XVlZeefOnb1798bExHz55ZdHjx6NjIwcPnw4k8nkcrnTp08/cuQIWdBNtZSVlQEAWc6LOl71a11aWdPtOKU56QDg6Oio2NlOU9PMNuPya9AwwozV1s8+2LjLNAs7ADhz5oxiC+kMGDCALDhRmHpHgc3KIaMRjuO5ublUtE8iF2FH+jWk5zaQJ3JYaOXsztUHAEcO/2+3O0ttH08xL1xtn3mw+11DRnsTm3Rcz3Fx+cHBf/fo8cekSSebZk9DetYm1DpOOzk5yU9wTp8+ncFgeHt7N71gxIgR6pD6taKiAqjv1+SL9BT1a2RuRQ+PVoa/7019fX1ExE6At0wDypER2LUaCzFBKxNzHgv0G2StLCvOtXS0YnEAYOXKlQp0lcPhkB169fMCBTYrx7BL46ixoICS9klYLBZZZ6IjeQU6s54vXXrq7b3byurXYcMOpqaWNXs2JeXZDz8cAzDx0jMca2Ytf1yXLv3ApGS+VW6QURkTe7d55o7oOTLyUVDQocuXn2ZlVZw9m+XpuTM5uXHNAulZm1DrOG1gYMBgNK5u6unpubq6slisphcwmUxKk/u0E3I9z9zcnFIrpFKZHB0mm0NF+9XF+QDQrZsiN/Vs3Li7tnYGQCvbZd+EjMC+fOo1OdN/wRPvsPSAky/sml3AxLB5lo4AkJCQEBUVpUBvyTp65OegcHQMGj+Eysr23rW8H6QOOzL+6LR6PngwZdSoow8elJSW1t+4UeDtvef27cYtdQ0NklGjjnp57efzRwMspsFUCaGYzvO99SyVyubPPyeTNQ5VJBIZQcCSJTHyC5CetQa1jtMNDQ043pj1HsOwZkEaAHAcV4ct36SG5EspFEGOcriGlFiRSaW88iIAcHV1VWCz27dnA9AA2tpt20yCdIzIaDAEABlgEoK2s8TlOq95wBhmbNGFxQaAffv2KdDbnj17AkAVNeMPHX0jjEaHl98jdZiZmUHHes/OqWepVPbZZ+fl6UJxnJDJZMuWNVZvXLLkwrVreQBAijmN32VXSVdFeft+en76tLqu7rVM+FKpLCnp1YFspGetQa3j9L1799hsNoZhGIZxudxLly5xuVysCVwul+qEOO2BPM/N4VAyLJBDKlXHwIiKxmtfPJfhOAAosO7C06dP6+r02g7SACADoGEEAGAANCBwApM22QcuI7AzFc3nRWkAw40sAOD69esK3Mbi7u4OAHWVpVIxJYmidPSNgPoehzw425HaD51Tz9nZVc2KSeM4kZpaThAgkxFHjqQKha9SgUoIWnSFjQzaOH71Dryfns3MWqlcYmbGJUuDVFYKkJ61BrWuw4FhGIPB6NKlC7khoiW1tbW1tc0r2Ggr1dXV8PK3oXBEDY01rBQ4ioqPjwcQAei99UoOTaZLk9qyG3z0q/aUODfr/krFrQSMwYZmR8qf8fn8+Ph4RR0kI+/cgSAkQgGDpfgopWNg1MCrVM7IQB3OK7aNuum5SxddDINm210sLXUxDPh8SdMgTSImaAKcrktv/vj78R56NjXVGTvW7b//suWlNtlsRmCgo5XVr2Vl9QDQvbsugAkQVUjPmo5aj6dHjx4tFAqfPXtW8Aaqqqq2bt2qajeBnHvncqkqzEdCpoii0Sm5tRILGpcPyF0bCiElJQXgPgD+1isbcHqEa+K2rskBhuUtxyhdWK2MBrrq6NEwDF7mtFII8vcu/zQUC41OBwCqMyvp6upCx8YfnVPPJiY6U6Z4sFivpn/YbPrChf0BQE+P5eho1LR0NQZgzRIoKkjD++p5376wQYPsAYDBoGEYjBnTPTIyvby88b0/fdoAMB2A3sn1rAWodZxetGjRm0bSJBiGLVmyRGn+vAmyx6G0AqAcJjVleuW/ZAXOdubn5wPcM2OmAwCjzQxNAHC/zrRQxL1UbUnOgTdFr7XekIlhlkw2KDRHv0amD78AACAASURBVPy9U9SvUfTdNYPcellf30qR73bSafW8a9eHISEuAECjYRgGCxf2X7p0APlURMSHAASADADoGIFhxFf2mQp0+P30bGKic/XqzPT0RefPT8/L+z8LC12ZjJAfgZFKCQBjAOdOrmctQK3nvYODg1XtgtrR9o3LeyOfJ1TgKEokEgGwDBgNXTmVEoLGpUtvtdgRJufPkq48KZOBEbIWAV0ka/0tGzGYz8XCpgUEO4j8vcs/DcVCoymynnfbyDdgqjlU6tkNoO+IEVEjR7qsXTvYxOTtB0MMDNhnz04tLOQ9fVrt4WFhbv7qtxAc3NXfPzM+nsald+mji8+1yu3KUbBI3lvPPXua9+xpDgDZ2ZXy0l4vkQEYIT1rOmodpxEajUDAAvg8X8jJJRplhr054wlPygQAaYsgTcOIfvrVrb6EnCek4gdMUDSVh2EAQPWJf0wpVtScnLtigMkAtEePKp4+rTl2LP3Ro0XtCdUAYG9vaG9v2PJxIyM+wHk/ffNvHHoo2l8ARejZ29s6Li5fJGraAgOgDOlZ01HreW+E0mByGruwprXIOkhWlgOAjox4dS/4Hj81GYG9aeBSK5XAy2kxhSB/7yyuwhbpX4Mg4GW/Qx2EUqyoM4Ja0eN4sbxzEwqlVVWCdetiO9gsqbQa/C3j3Wop63K1ZZHoneelOq7nZcv8DAzY8iV2JpMGkAdQiPSs6aA4rQBIDSmn8hpFU1gsHV3yDwXWrq+sNGj1UBYDI3Tp0pbr0K07hsnS+K1sCZYRRIlYCAC2tgrLZiV/7/JPQ7GIGuqoaLYZZL9maNjKiLCdaLqey3Krm3XrYjF+5UpH01va2NgAQJFI8KYLJARtRV7vsY8GrS90D88aMCljYLmkvavjCtGziYnO7dtzg4Kc9fVZXbroTpxoC3AcOr2etQAUpxWAgYEBANTVUavaxvkfanpP+S9ZgXV72Ow3jgyGG5UZ0SXtyrCIgQ6tlZnAIrFAQhDwMpmDQpC/d4r6NaqmH1+HPKnYkXVfTdczR5dFyJrfBTZdbH4/yBSkFRIR/w1T05ue9bhX++oYWLmEvSC7XzvnkBSlZxcXk//+m15b+1Vp6fLwcAsAMXR6PWsBmvHmhULhtWvXVO2FijE2NgYAQV0NFY2zX86MKbB3HjnSHqCVSUIpgd2oNf/F+eEcy7y3NiIjsADDVlL7xvOqAIDJZCqwCqf8vctXARQL+d2R3yPVUFrqSiFQp2cLJyM9Eza5N5uEwaAtWODdxkvag7+/PwDgBJFU34rPMsCu1Vg0e7BSwi5s3wQ40nPbqL+eKUUz4rRIJFqxYoU6pB5rFXJJidL6bvAyY4OwTsF1akn0zazIXSFPnjxRVJt79kzmcCoBcAya33fXSpk/PXOfYl7IpTUP5BwaTgOChclYmIyBEavtMm3ZraQ4uFRdBgADBgxQ4A+YLHrPNTRhUXPghPzuGrOpUAZ50pROf/+9uJquZxqDNm7NQIBaABmTidFo2Jdf+n30Ua8ONuvp6UlWtoipKm35rFhGa3lUAQCeNOjLCCxHoJfKN3rTyQVAen4zHdezFqAZcRoAUlNTPT09g4ODo6OjFXgURyGQPQ7VmeLJ+kUNta1vfu4gTDZH39QSFBqnjYx0li0zATiCYVfYr89d4wSWI9CrkrJW2WfRoLF7Y2AEAyN2uCQdcrv7uU32Crusv93ujDBupU9M4/NyhXwAmD59uqK8BYDMzEwAMLZ2VGCbcsQN9bhUAtTXoSLzQ3XEihbo2dLVQt/sJMDhsDBxVtbnmzYN73ibNBotPDwcAO7UVZWJm2+35NDwVhdouHR8cqb/vCc+S3L6jHkUENdizA1Iz23ScT1rARoTpz/55BMcx9euXRsdHd2rV68VK1ZkZ7erGLsSsLCwAOr7NdKKiF9L/jwUjom1AwAo9lP9/PPPWKwiGXFbRrRya9Ugo+vQ8A9NSxw5fAdOwyDDF391v+uqU2fHbhhjWjzSuNSK1cqeHQJgX2kBAFhbW3/88ccK9PZlv+agwDblNPAa5UH1+IPUYUf6NW3Rsx1AHoY9dnVVWBf/2WefsVgsnCD2lea3fHaxTfN73B7cui3P3CokbAJABphARv+hsGezmXDq9JyRkQVIz1qBZsRpXV3d5cuX02i0gICAvXv3Pnz40M/Pb8GCBf7+/ocOHVK1d409DtUVUq2tG+vd1r4oafvK98PYxhEAHj16pMA2rays5s+fDwASIofRZNcYBmDKFP3yzO3rvF6XqrsUi3R4UuYMi3z71qa4mxFTVZpcXwMAa9euVWBVUxzHybkEExsnRbXZlNqKxokBO7vmlToVCI7jiorTaqdnAjLiCo6uurr/s5iLf9xv4L3lYAKler5UXZZY13wm4AOTknUOj8j0eQyMGGFcNsa0iI8zmm4lowH8V2Xd9FVU6Pn+/efe3rszMsYDfF1Z2EPEV/ydkAbpWQvQjDjNYDCcnF71nrm5ubGxsfHx8QkJCe9RXF3hkHeUVI8/yLUxAOCVFVHRvoVzDwDIzMwkyw8rivXr11tbWwNcwokGFoYDABOTMTCZO7c2s8FASmBCGV1M0GqljG8KPN/aWjq/dmtRNgB4eXl98sknCvTz4cOH5EqYtZuXApuVU1teTP7h4uJCRfskchF2pHq0eur5xqGU/7bdLcp4UVHIS7+St29hTAOvrbP+itLziROPvLz+1NPbOHDg/vj4Z6SeCYBvCjKbntHCCQwAhhuVnfe4cb33tau9YtfaP+LhzGbnfiUE1rSuDBV6zs+vCQw8kJxcCkADYJXnsc9svPU+uQvaRIP0rAVoRpwmEYvFkZGR/v7+PXr02LFjh6+v74kTJwoLC1XtF3Tp0gUABAKBQPDGs5Udh+o47dCrMZVxXFycAps1MjKKioriciUE7NCh3/Q3KJ1k/uyQ292MBkMJ8Up+MsCei3TKWiuNJSdP2LAm/5GEIMzNzU+ePKnYrSWxsbEAwGBxbKiJ0zWlRQBgY2NDaX0Leb/WkfGHGuqZV8a/+0+WDH9ZHFoqEwsld05mtPEShej5zz8Tw8OjUlLK+Hzx3bvFgYF/PXxYExUVxeVy+bh0ZV76C4koT6i7OKfvyLTAD9ICF2R7/1rUPY5nQYZFN53aZin2mJjMQ7dx6xxFev7pp5sSCS57eTINlxKFqWWlOQq+69IgPWsBmhGnxWLxkiVLTExMpk6dmpmZuXLlytzc3OvXr0+aNInFYqnau8Z5QgAoLi6mzoq+vj65waemhJJbE2NrBwMLa1B0nAYAX1/f3bt3Y5iIJ43Latg/yCDZmiVomSIUAMTEGwV5u7ZqUXZyjVTCYrGOHz+u8Lt48l3buHnRmZQoqqakAACcnZ2paFzO8+fPyT86Mv5QQz2X5lTRma9pA5fIih61NTPfcT1LJLIvv7wklb68OcBlALB69ZWXesaKRYJ5j3M/eeKd3mAoJWh8GT2zweBcpc2PBT1X5HrJCMxLr2aAfqV8xYeFyUyZ4g9NngOVen74sEzuMwmdSa8qVvBpeA3SsxagGXGawWAEBQV5eno6Oztfv3598+bNTafBVY69vT35R17e2w8EdwQyB0J5/mOK2nfo7QcAV69eVXg23fDw8G3bttHp9CqpeMnT1MNlhd56lc1WrI0Y4laPYIlksr9KC9bkPWqQ4RwO58CBA8OGDVOsewKB4ObNmwBg38tXsS3LeVHwBAB69KAkNbSc3NxcAGAwGB1ZNVRDPesYsOWDaTn6pm9Zze2gnnNyqhoaXlvZxXEiLa0cmui5BvcVExje5KaTAJAS2MN6o+hKawD4wTFtlmV+V069DVsQZlq8v9s9DCSU6tnd3YxOb35PY2yl4NShGqRnLUAz4jSNRgsLC0tISIiMjNy4ceOYMWMuX76snLyG7cHW1pZMl0N1v+bl5QUAL/IVdnSqGY5e/gCQk5Nz584dhTe+ePHis2fPGhgYSAjZ3tL8ZP4xPXoDC5NhAExMxsRk6xweNRti83FpdGXJrMeJB8oKZEBYWVnFxsZOmzZN4b5FR0eTaY9se3Y0G0aryKTSyqJcAPD0fPsafEcgqyLa2tp2JE20GurZtoeZgblu02ygNDrmMeItg7kO6tnKSq9lVmlLy8aAR+qZTrdttReVELR7daYAwMCIGRb5+7vfO+qWMMcy82rNM6r1vHLlQABCnk2fzqRZdTexVNymd9A0PWsBmhGn5Xh7ex87dmzHjh0xMTE+Pj6///472b2qFiaTaWVlBcrq1+oryyjKdtK1/xAmmwMAhw8fpqL9UaNG3b179//Zu++4pq42DuDPvQlh7yFDWSKgDEFwgAxBUUQU96h79nVWa61tra1aqx221dZF1dY9QHCyBEEFByJDkL2RvTfZ9/3jtiniQiC5STjfz/t5PyUkOQ/4y32465xx48YBQD2nqZF7CLA7eoxsB+X0rwwj9RgV5WxmOZuZ2NoYVFu2pzhzRsaTX0pzy9lMAJgxY8bTp0/HjBkjjMLIn1dZS3eglYMw3r+utIDP5YLwt2vk/kcvjzaJYZ5xOj5zp6uKjgKGYTQ6juHY2IU2Q0YbvOGpBJRm1GTFllQXNvYyz2pqcgsX2gqWtQAAWVnahg2jBF9OmTLF13cM9qaZ6jEALsGhJM/Dhmk7OmYBNAMAhmNGwwfM/NoVw/tyHQvJyrMUkIw/Utra2oKDgxcvXgwABEHU19erqKi0trZu3rx5x44d4rCEuKGhYVlZ2Qet8d4D5HYNACrz08l9hb7FkFcc4uSVce9WQEDAwYMHhXHu39LSMiYmJjQ09IsvvkhLS2Pzn5Szn5Sz4cnb/9waO3bst99+6+Xl1efFkKqrq+/cuQMAw8ZNxTCh/OVakZtK/kcfzkb+RmQCe3/WUAzzrGWouvr4lOqiRlYbR8tQVVH9DZcctjexru6+X5XfQGfQuCzuEKdBZqMnZj642eM8+/v7crn8y5dfAACOY1u2OH3yyStnRnbv9r59+0/ea8fkCeDFtzxZkPn89fcUQZ6Tkq4CcBz9Ph637BOc3veRlrg8SzrJ2J/mcrlXrly5evXq6tWrtbW17ezsdu/eXVNTs2LFioCAAKqrA/j3L778/HyhjmJjY0NeXVmWmSSkIaw8/ACgrq4uJCRESEMAgI+PT2pq6qNHj9avX29ubv76onU4jltZWW3dujU1NTUuLk54GzUAuHTpEnlHlrWnn5CGKM9MAQAzMzNhTwpBJtDIqLdTW4hnnnE6rmumYTR8wBubNADcOvC4urCR4BMcJpcgoCChnOC7Qy/yrKAgc+nSrLKyT5OSPq6t/Xz//vH4qzumw4cPCAtbOHCgCvklhgGG8QB4AJkAqf9VTkWeh0+aKowmDRKYZ0knGfvTABASEkJ+0qytrdevXz9jxozhw4eLz6KkdnZ2Fy9ezMjI4PP5wlvahU6njx49OiYmpixDWH3a2M5JRVuvuabil19+mTFjhpBGITk5OTk5OQFAS0tLTk5OQ8M/E0doaWlZWFj04Rwm78Dlcg8dOgQAehbDNQcJ607Q0oxE+HchB+GpqampqqoCAHNz816+lSTmub2JWZzyyq3SXA6vLJPb+zzr6yvr67912m0vL9OXL7dUVLTW1bVHRRU0NbFGjNDS12c2NHxMPgHluWf6MM+STmL6tKam5vr169esWUOuAituyPM0bW1tBQUFQr3x38nJKSYmpjz7OZ/LxYVwbQWG0xz9lkWf3P/w4cN79+6R55KFTVlZ2cFBKCeG3+vixYvkWdjRM1cJaYj2prr68iIQ/nYtLS2N/I/enzWUxDy/cdYtVjvHZaEo8qynp6Snp2Rt/Ybpu7uJy+W3t3NUVGR7UwbKs1SSjOPeGIZ9+umnu3fvFs8mDZ2SJMiWkJAbGnZHG/knrTAM956noKoBAN9//72QhhATfD5///79AKBlaDbEabyQRil4FgsEAQCTJk0S0hAkMnuysrK93/+QxDyr6SrJKzOg0yE2nI7rWWiKIM9VVW2zZgWoqf2go3Ng06awjo4PWyiooYG5cGGwktJ+NbUfbW2PJSSU96wMlGdpJRl9WkVF5auvvmKxWPv373dxcTEzM5s7d25ERATVdf3HwMCAnDFH2Ns1Nzc3JSUlAChMjhPSEDKyco5+ywAgKirq8ePHQhpFHFy9ejUrKwsAxsz5WEhXkAFAYVIsdFoVUXjI7A0dOrT3N7FIYp4xHJuy1QnHMPJ0GI2O4zRswhoHYee5pYVtb3/89u2cpiZWTU3bn38menuf7/4N2wQB06Zduno1g8XiEgSRkVHr6vpXfn5PlhFDeZZWktGnAaChocHJyemrr756+PBhfn5+YGCgt7f35s2bebw3rCVHCXIXJDU19b3P7A1ZWdkJEyYAQMGz+8Ibxd5ngaK6FgBs2LBBfH7Dfau1tfWzzz4DAM1Bgy1dfYQ0CsHnkR1o4sSJQhpCgNyu9dVBQknMs6mD3pKDkyxdDfXMNa3Hm6z4Y7LmIBUQcp5PnEhsaGCy2f+8LYvFe/z4ZWhod9ede/Cg+MmTUsHLeTw+QcCRI08/tAyUZykmMX167969KSkpX375ZW5uLpfL5XA4T58+TU9Pv3btGtWl/cPW1hYA4uPjhT2Qr68vANQU5TRWvhTSELKKyuOWbwOApKQkf39/IY1Crb179758+RIwbNKGPbjQVqEvzUgibw729vYW0hAkJpOZkpICANbW1n3yhhKaZx0TtanbnBb/4jVpw0i1fyfh6nGe794tnDbtspXV0dWrb718+eZ7BxMTK5jMVw500+n48+fdXfwjK6u28y3aAMBm81JSPnjtEJRnKSYZfbqjoyMkJOTOnTv79u0zMzOj0Wh0On3kyJFBQUG3bt2iurp/kFMWlJaWCvuu06lTp5JT9mfFhQlvFKtx08jJuXbs2EFedSlNMjIyfv31VwCwnTBr4DAhXsKWFRsGAGpqam5ubsIbBQCePn3KZrOh767uQXn+66/kSZPO37qVnZFRc+ZMyrBhR3Jy6l5/mrGxmqzsK32RzydMTNS7WZiFhaZgZ5okI0P70OvRUJ6lm2T0aQ6HY25u/vosuCoqKuJzVNbFxYX8j7g4YZ05Juno6Hh4eABAdmy4EIfBsIlrv8VptMbGxnnz5onP77n32traZs+ezeFwFFQ13Jd/JryBCD4v51EEAMyYMUPYC8aQqZOTk3N07JupT/t5ntvbOevXhwomMOFw+CwW7/PPo15/5scfOxAECG4RpdEwdXV5Pz+Lbtbl5mbk4KAv2KXGcQzDYN26kd18OaA89wOS0adxHFdRUXn9bumWlpYXL15QUtLrDA0NyQUMhL1dA4B58+YBQFVBhpDWziJpGQ0ZNWsVANy/f/+bb74R3kAi9r///S8zMxMAPFd9Ka+sJryBCpMftjXWwb//XkJFps7R0VFO7l1rg3ZfP8/zixfVXXZzORzekydvODJvaKgaEvKRtrYi+aWlpVZk5GIFBZluVoXjWFjYwhkzLGVlaRiGkS+3tPyA+UNQnqWeZPRpBQUFNpvdZTL9lpaW5cuXM5lMqqp6HbkLIoLt2vTp08m/Z9PuCvf0vOvCTeTRwv3794eHC3N3R1ROnDhx/vx5ALAeP2PYuKlCHSstMggABg0a1OcLfHXB5/MfPXoEnXaC+0R/zrOGhrxgCWcBHR3FNz55wgTTysrPsrM3FBR88uLFug89aq2uLnf58uzW1q9aW79MT1/n5vYB02+hPPcHktGncRzfvn27p6fnrFmzdu/evXv37oULF2ppaQUFBe3YsYPq6v4zduxYAMjOzm5qEso6GQJaWlrTpk0DgLSoYL4wj0hjOG3a578qqGoSBDF//nxh36UjbNHR0Rs2bAAAzUGDvdZ+K9SxOloa8+KjAWDp0qUyMt3du+qZhIQEMnLk/G59pT/n2cxMw9XVkN5p3k1ZWdqKFfZvfWcMzM01TUx6vjtLp+Pd3wsnoTz3E5LRpwHAwcEhLCwsPj5+165du3btunjxIpfL/eOPPxYuXEh1af8h/8zkcrmRkZHCHmvNmjUA0FpXlf80WqgDKWnoTPv8VxpdpqmpycfHp7S0VKjDCU9aWtrMmTPZbLasorLf9oPkSkrCkxFzk8flYBi2bNkyoQ4EAKGhoQAgIyPj7u7eh2/bz/N88eIsa2sdGg2Tk6NjGCxfbr9xo7CWJ+8BlOf+Q2L6NACMGzeusLAwMTHx7Nmzd+/era+v37Bhg/AmH+4BS0vLwYMHA4AI5mAZP348OU1PfNBJYY9laDt68if7AMNKS0t9fHyEvXclDILKaXSZ6V/9oWU0RKjDEQQ/6fYFAHB3dycjIVRk3lxcXFRVVfvwbft5ngcOVElMXBMfv/rixVn5+Z8cOzaFRhOXBQVQnvsVMWpy3SEjIzNixIjFixfb29tXVFR0dHRQXVFX5Fx6IjiVi+M4Oa1Befbz8uw3LJ/Xt4aNm+q2ZAsApKWljR8/XrLu1MrLy3N3dy8tLQUMm/zJPiNboSxi/cqIT2MaKooBYPPmzcIeq66uLiEhAYQzj2N/yPPYsdO/+y7y99/j09NrXqsKc3DQmzHDsjcHtPscynN/I2F9WqCxsfHAgQMGBga6urpU1/IKHx8fACgtLRXBqdxFixaR68o9u35a2GMBwJjZaxz9lgJAYmKim5ubsG+r7SspKSmurq4FBQWAYeOWbxP2tTakxBtnAMDMzGzqVKEPFxERwefz4d/s9a1+kGeX9HT3b7+N3b490tb22K+/ivtEuSjP/ZCk9mkTE5OTJ0/m5OSI2329np6e5AJ2wcHBwh5LXl7+f//7HwBkP7pT91K4SwWTPFd96bp4M2BYTk6Oi4tLenq6CAbtjdjYWA8Pj8rKSpxOn7Llh1EzVohg0OLUJyVpTwFg06ZNIjgvExUVBQCGhobCmGFRuvM81P1jDJsAgBEEjcnk8fnE559HvXhRLYKhewbluX+S1D5NUlBQ0NTUpLqKV8jLy5NX3wQGBopguE2bNikrKxN83qPLR0UwHAA4zf3fpPW7MZxWVlbm7Ox8+fJl0Yz7oQiC+O2337y8vBobGxlyCrN2Hrfy8BPN0A8v/AEAAwcOXLVKWGsLCnA4nBs3bgDAggULhPH+0p3n3CelOP2VbSCNRty+nSOCoT8UynN/Jtl9GsdxMbwL/qOPPgKA9PR0Eexuamtrb9q0CQCyYsNqS/KEPRxp+KS50788xFBQam5uXrBgwerVq9vb20UzdDdVVVX5+Ph8+umnLBZLQVVj3r4zJiNEdCNmUcojconGr7/+mtwTFaqoqKj6+noAmDt3rpCGkOI887n8LgtbsdmcwMBrKM8C0pdnSSTWfZrFYr37CTiOC3v6uh7w8/NTUFAAUe2CbN26VU1NjSD4ItulBoAhYyYs/S1Ix3QoAJw8edLBweHu3bsiG/3dAgMD7ezsyEufBlo5Ljt0TW+IiA6gEXze/b8PAICJicmKFaI4JklmzMzMbMSIEUIaQorzbGyvC10nM8GTkoJRnklSmWdJJNZ9ujvXFtKEtjJMjykqKpJXW1y5ckUEw6mrq5O/qKy4sNL0ZyIY8Z9x9Y0W/Xx5uPdcAMjKypowYcLChQsrKipEVsDr8vLyvL29586dW1lZCRg2evbq+d+fUdIcILIC0u5eqyrIAIAdO3YIey4IAGCz2eR6cXPmzBHeKFKcZ2M7XStPE5yGYziG4RhOwzQNmwCKUJ5JUplnSYQR3V/QXOTGjh27f//+AQMGvD6zN4nJZM6aNSs3t7tLvYrMzZs3/fz8AODx48fkukNC1draamlpWVZWpmM6dOlvVzFcpH+7ZD4IiT6xj5z4V01N7csvv1y3bp2SkpIoa6irq/vll18OHjxI3qqnYWDs9b9vjOxEutIOm9l+Ys3EtoZaOzu7Z8+eieAvyMDAQPLwYHJysp2dnfAGku485z4uLX5eBRgY2Q4Y4jQQ5ZkkxXmWOGLdp9/WnrsQwx+ByWTq6+s3NDSsWLHi1KlTIhjx4sWL5NRsHiu3j5y+XAQjdsZqa449fyg59DLB5wGApqbm5s2bN27cKIJpCqqqqg4cOHD8+PHW1lYAoDPkxsxZPXr2Ghpd6H/+dxF9cv+zG2cwDLt//76rq6sIRvTy8oqKirK0tMzIyOjmh6VnUJ5RnkUwosjyLHHEuk8rKiqam5sPGDDgbTcDVFdXP3/+nMPhiLiw7ti4cePhw4eVlJTKy8uVlZWFPRxBEGPHjn38+LGMnPyKI7dVdQyEPeLrqgoyo0/se/kigfxSRUVl/vz5S5cudXJy6vNPHY/Hi4yMPH/+fHBwMLnPgWH4EKfx45ZtU9Mz7NuxuqMiJ/X8tgUEn/fRRx9duHBBBCMWFhaamZnx+fwDBw5s3bpV2MOhPKM8C5WI8yxZxLpPL1++/O+//37HEwiCOHDgwLZt20RWUvelpKTY29sDgL+/Pzl3sbAlJSWNGjWKx+OZOrjN3vWnCEZ8o7LMpCeBf+Y/uw//Rmvw4MHLli3z8/Oztrbu5QaOy+UmJiYGBgZeuHChsrKSfBCn0Ya6+Y6Zs1pzkFlvq+8RPo93dsus6sIsTU3NzMxMbW1tEQz69ddff//99wwGo7S0VAQjojyjPAuViPMsWcS6T1+5ckUEC50Kj6OjY2Ji4siRI58+fSqaEbdu3frrr78CwJRPf7LymCaaQd+opignKeR8VmwYq61F8KCWlpa7u7ubm5u1tbW5ufnAgQPf+z58Pr+4uDg7OzstLe3Bgwf3799vafnvDRXVNIe6+zpMXaw64P1vJTxPAvwfnPsNAP7++28RrFIAAFwu19jYuKysbM6cOQEBASIYEVCeUZ6FhpI8SxCx7tOS7tixY+vWrQOAe/fuiWbhl9bWVgcHh5ycHIaC0vLfr1P7aQcALpuZ//Re2t1rL9PiOayuK4UrKyubm5ubmJio/ktWVpbJZDb9Ky8vLzs7+/UlxhnyimajPYeNm2piP1bEJb7+/QAAIABJREFUF829riI37eLnH/G4HE9Pz6ioKNGcVzt37tySJUsAICIiYuLEiSIYEVCeUZ6FhpI8SxDUp4WIzWYbGxtXVFT4+fldv35dNIM+f/589OjRLBZL32L4Rz9exMXjvjUum1WWkViY/LA45XFVYSZ8eOownKZnbmNs52xsP1bfwk5Mfi52R9uZT2Y2VBRraGikpKQMGjRINOOOGDEiOTnZ3t4+MTFRZFfcoDwLoDz3LUryLEFQnxauvXv37ty5E8fx7OxsMzMRnW36/fffP/nkEwBwWbjRef560QzafRxmR31ZYX1ZYX1pYUN5UVtTPautmdXWwmpr5fM4NLqMrKKyrIIyQ1FZWUNHw8BEY6CJhoGJur4RTUbs5rQJ/2Nn6p1AAAgKCpo5c6ZoBr13756HhwcAnDlzhtwLERmU59ehPPcShXmWFKhPC1dtba2hoWFHR8fGjRt///130QxKEMTkyZMjIiIwnDbrm2OmDm6iGbe/SY28Gv771wAgsruVSNOnT79x44aenl5RUZGI5+NDeZZi/TDPkkKs5yOTAlpaWosWLQKAv//+u7GxUTSDYhh2+vRpfX19gs+79fNnDRUlohm3XynPfh55dDcAWFlZiaxjAUBOTs6tW7cAYN26daLfqKE8S6v+mWdJgfq00G3evBnH8dbW1sOHD4tsUF1d3StXrjAYDFZb8/V9GzpfpIr0Xktt5Y0fPuFxOaqqqkFBQYqKiiIbeufOnXw+X05OjlwCUvRQnqVPf86zREB9WuiGDRvm6+sLAL/++qvIdkEAwMXF5dChQwBQU5Rzfd9GHlccZ4ORRKy2lqu717TUVtJotLNnz1pYWIhs6NTU1KtXrwLAqlWrtLS0RDZuZyjPUqaf51ki0Hbt2kV1DdJv2LBh/v7+HR0dsrKy5BUTouHo6MhiseLi4pqqSpuqSs2dvABdS9k7PC4neO+68uznAHDkyBHyILDIrF27NjMzU15e/urVqyKYFOxtUJ6lBsqzRED706IwfPhwcn75gwcPkqurisy+ffvIeZIz7t2KPvWjKIeWPgSfF/Lr9uLnjwHgiy++WLt2rShHT0pKIu+G2rBhg56eniiH7gLlWTqgPEsKtD8tItbW1sePH2cymTweT5Q38mMY5uvrGxUVVVpaWp6dQhCEoe1okY0uVQgi/PDOjJibALBgwYKjR4+K+EbPtWvXZmVlKSsrBwQEkAtCUwjlWeKhPEsOtD8tIpaWlkuXLgWA33//PTs7W5RDMxiM8PBwct31R5ePPL5yTJSjSweC4N85tjstMggApk6devr0aRFv1GJiYm7cuAEAW7ZsEYczeSjPEg3lWbKg+6dFp7Ky0sLCorm52dfXl7wVQZRqa2vHjx+fmpoKAGNmr3Fb+qmIC5BcBJ8XevCr9JgbAODp6RkSEiInJyfKArhcrr29/YsXLwYNGpSVlSUmOx8ozxIK5VnioP1p0dHV1f3yyy8B4Pbt23fu3BHx6FpaWmFhYcOGDQOAJ1f/jPpzL0HwRVyDJOJx2Dd/+pTcqLm6ugYFBYl4owYAR48effHiBQDs379ffDZqKM+SCOVZEqH9aZFiMpnDhg0rLCy0trZOTk6m0+kiLqCurm7y5MkJCQkAMMTJy3frzzKyov6USpCOlsZre9eXZiQCgI+PT2BgoOg3KzU1Nebm5o2NjWPGjHn06JFYzX6M8ixZUJ4lFNqfFik5ObmffvoJAF68eEHeDCpimpqad+/enTBhAgDkPo68/NWStoZa0ZchERrKi89/No/cqC1fvvzatWuU/O2/b9++xsZGDMN+++03cduooTxLEJRnyYX2pyng7e0dERGhqKiYmppqamoq+gI4HM6aNWtOnz4NAOp6Rn5fHNQxHSr6MsRZQeKDkF8+72hpxDBs165d33zzDSVlxMfHjx07lsfjrVy58uTJk5TU8F4oz+IP5VmioT5NgYKCAhsbm/b2di8vr4iICKr+qPzuu+++/fZbgiDoDNnxq3cM955LSRnihiD4jy4ffXTpKEHw6XT6n3/+uXz5ckoq4XA4Dg4OaWlpAwYMyMzMVFdXp6SM90J5Fmcoz1IA3T9NAXV1dRkZmaioqIKCAhMTEzs7O0rKcHd3Hz58eFhYWEd7e35CTHNNubGdM40uQ0kxYqKjueHWz1ufhwcAELq6urdu3Zo+fTpVxezfv//y5csAcPLkyZEjR1JVxnuhPIstlGfpgPanqcHlch0dHZ8/f66hoZGUlGRkZERVJbm5uTNnziQvv1TXN/Ld+rOeuS1VxVCrMDE27PevWutrAMDZ2TkgIMDAwICqYpKSkpydnVks1uTJk0NDQ6kqo5tQnsUQyrPUQH2aMgkJCU5OTjwez8PDIyoqCscpu6avra1t48aNf//9NwDgNNrYjzaOnrkKF/m1uxTiMDtizx98dvMsEASNRtuxY8fXX38tI0PZrlh7e7uDg0NWVpaqqmpKSoqxsTFVlXQfyrP4QHmWMui4N2UMDAz4fP79+/eLiopUVVWdnJyoqoTBYPj5+dnY2Ny9e7e9ra0k9UlufNQA06HKWrpUlSRKBc/uB+3+uDApFgCMjIxu3bq1ZMkSGo1GYUmffPJJeHg4AJw5c8bFxYXCSroP5VlMoDxLH7Q/TSUej+fm5vbo0SM5ObmEhARra2tq6ykvL1+9ejV5VArDcOsJM9yXfqqgqkltVcLTUFFy7++fcx9Hkl8uXrz40KFDlF/ecvv27WnTphEEsXjx4rNnz1JbzAdBeaYWyrO0Qn2aYkVFRXZ2dk1NTcOHD3/06JE4zM5z5cqVzZs3V1ZWAoCsoorrok/svOdJ2WFDNrM9PvDPhOt/c9ksABg8ePDx48fJ23CpVV1dbWtrW1VVZWxs/Pz5cxUVFaor+jAoz5RAeZZu6Lg3xdTU1AwNDYODg6uqqoqKimbNmkV1RWBtbb1q1aqamprnz59z2cyCxAcZ92/JKaloGw3BMImfGIfLZj67efbGD58UJsXxeTwGg7F58+bAwEALCwuqSwMejzd16tT09HQajXbz5s0hQ4ZQXdEHQ3kWMZTn/gD1aerZ2NhUVFQkJiampaWpq6uPGTOG6opATk7Oz89v2rRp2dnZRUVFzNbm3CdR2XHh8ipqmgMHY9RdItQbXDYrJfzKjR8+yXkUyWUxAWDGjBnXr1+fP38+hZfYdLZt2zbyxpXdu3cvXryY6nJ6COVZNFCe+w903FsssNlsFxeXhIQEBoNx9+5dsbrUIiIiYufOneQUygCgoqM/wneR3aS5DAUlagvrvvamuuSQS8mhl9qb6shHxo8fv2fPHmdnZ2oL6ywwMHDevHkEQUybNu369esSPaUiyrNQoTz3N6hPi4uXL186ODjU1NTo6ek9ffp04MCBVFf0H4Igbt26tWfPnsTERPIRWUVlK49ptl6zxXyCxrLMpOcRgdlxYRwWk3xk3Lhx33zzjYeHB7WFdZGZmTlq1KjW1tYhQ4YkJCSoqqpSXVFvoTwLA8pz/4T6tBi5e/fupEmTeDyejY1NbGysGIY7Ojr6xx9/7LyIoa6ZlY3XbHMnL0V1MVrsvbHyZc6jO2mRQXWlBeQjOI7PnDlz+/btjo6O1Nb2upqaGmdn57y8PAUFhfj4eMovk+4rKM99BeW5n0N9WrwcOHBg27ZtAODp6RkWFsZgMKiu6A1SU1NPnDhx8eLF+vp68hEMww2GjbBwnmg6cpy6niFVhdUU5eQ/jcl+GFFVkCF4UE9Pb8mSJatWrTIzM6OqsHdob2/39PSMj4/HMOzixYvz58+nuqK+hPLcGyjPCAn1abGzbt26Y8eOAcDChQvPnTsntud1Ojo6goOD/f394+LiOqdIXc/IxMHF2G6swbAR8spqwi6jtb6mLCOxMPlhYVJsS22l4HEajTZhwoS1a9f6+PiIyWU1r+PxeDNnzrx58yYA7N+//4svvqC6or6H8vxBUJ6R16E+LXY6Z/2bb77ZvXs31RW9R2lp6bVr1wIDA7ts4ADDtAYN1h1iozlosI6JpY6JZZ8cS2yqKq0pyqkpzql7mV+RndpQUdz5uzQabfz48XPmzJk+fbqWlhgdunyj9evXHz16FADWrl1L/of0QXl+N5Rn5L1QnxZHnY8dnTp1iqp16D5UZWVleHh4eHh4TExMdXX160+QV1ZTHWCgomOgOsBAWXOAvIqGopqmorq2jJz860/mMNtb66rbm+vbm+pbaiubKkubqsuaqstYbS2vP9nAwMDLy8vb29vLy0tDQ6PvfzYh2LNnz7fffgsA06ZNCw4OpnZmR6FCeQaUZ6QXUJ8WU5WVlaNGjXr58iWNRrt06dKcOXOorujDZGVlxcbGPnjwIDExMScnh8fj9e37MxgMKyurESNGuLm5ubm5SdzM/gcPHtyyZQsAjB49OioqSklJYm4K6hmU53dDeUbeAfVp8ZWXl+fh4VFaWspgMK5du+bj40N1RT3EZDLT09PT0tIKCgqKiooKCwtLSkrq6ura2tq683JlZWUtLS0jIyNjY2NjY2MzMzNbW1tLS0uxPUv3XqdOnVq9ejVBEHZ2djExMWpqQj/rKQ5Qnkkoz8iHQn1arOXk5Li7u1dWViooKFy8eNHPz4/qivoSi8Wqr69vbGxsb2/v6OhgMv+5JVRBQUFWVlZRUVFdXV1DQ0Nyt19vdOLEibVr1/J4PCsrq5iYGG1tbaorEh2UZ5RnpCcIRLylp6eT0afT6RcvXqS6HKRXfv75Z/KCZzMzs/LycqrLoQDKszRBeRYN1KclwIsXL3R1dQGARqOdOHGC6nKQHhJc6mxhYVFcXEx1OZRBeZYOKM8ig/q0ZMjKyjI0NAQADMP++OMPqstBPtjnn39ObtSsra0rKiqoLodiKM+SDuVZlFCflhiFhYWmpqbkpm3Pnj18Pp/qipBuYbFYy5YtIzdqDg4OtbW1VFckFlCeJRTKs+ihPi1JysrKhg79Z52ARYsWMZlMqitC3qO+vt7T05P8J3N2dm5sbKS6IjGC8ixxUJ4pgfq0hKmrq3N3dyc/Jy4uLjU1NVRXhLxVQUHBsGHDyH+s2bNnt7e3U12R2EF5liAoz1RBfVryMJnMRYsWkZ8WU1PTlJQUqitC3uDevXs6OjrkP9O2bdt4PB7VFYkplGeJgPJMIdSnJRKfz9+5cyd5RwR5KyrVFSGvOHjwIJ1OJ+8+OnbsGNXliDuUZzGH8kwt1Kcl2Llz5xQUFMi/cLds2cLhcKiuCCHa2toWLlxI/qNoamqGhoZSXZHEQHkWQyjP4gD1acmWnJwsWIZ23LhxL1++pLqifi0jI8POzo785xgxYkRBQQHVFUkYlGexgvIsJlCflngNDQ1Tp04lP0saGhpBQUFUV9RPHTt2TLA7uHLlyo6ODqorkkgoz2IC5Vl8oD4tDfh8/q5du3AcF3yoWltbqS6qH6mpqZk2bRr5y5eXl0dzbPUSyjO1UJ7FDerT0iMmJsbIyIj8dJmbmyclJVFdUb9w9+5dPT098tduZ2eXnp5OdUVSAuWZEijPYgj1aanS2Ni4ePFi8jNGp9O3bduG7nEUntra2mXLlpFXKeM4/tlnn6GZOvoWyrMooTyLLdSnpdCVK1fU1dUFN6TeuXOH6oqkDZ/PP3PmjJaWFvlLNjAwiIyMpLooqYXyLGwoz2IO9WnpVFFRMXPmTPjXkiVL0KpzfSU3N3fSpEnkLxbDsDVr1qDZE4UN5Vl4UJ7FH+rT0iwoKIhcQBAAlJSU9u7diw4b9kZDQ8PWrVsZDAb5KzUzM4uJiaG6qH4E5blvoTxLCtSnpVx9ff2WLVsEH0VDQ0M02VMP8Hi8I0eOCA4MysvL79ixAzUJ0UN57hMoz5IF9el+ITc3d8aMGYLDhi4uLtHR0VQXJRn4fP7169dtbW0FBwYXLFhQXFxMdV39Gspzj6E8SyLUp/uRmJgYe3t7wdbNw8MjNjaW6qLE2u3btx0dHQW/sTFjxjx+/JjqopB/oDx/KJRnCYX6dP/C5XL9/f0NDQ0Fn9Vx48bduHEDrX7TGYvFOn369IgRIwS/JUtLy8uXL/P5fKpLQ16B8twdKM+SDvXp/ojFYh0+fNjAwEDwubWwsPD390dTAzY0NPzwww/6+vqC38yQIUPOnj2LtvviDOX5bVCepQPq0/1Xe3v7oUOHBFM+AYCOjs6ePXvKysqoLo0CeXl5n332mbKysuC3YWNjc/r0abRqk6RAee4M5VmaoD7d33E4nEuXLjk4OAg+zzQazc/P78aNG1wul+rqhI7JZF64cGH8+PHkNEykCRMmhIeHo6OCkgjlGeVZ+qA+jfwjOjp68uTJnT/e+vr6O3bskNYJfhMSEjZv3qyhodF5gz5v3rzk5GSqS0P6AMozyrPUwAiCAAT5V35+/smTJ8+ePVteXi540MbGZv78+fPmzRs8eDCFtfWJtLS0K1euXLlyJS8vT/Dg4MGDly9fvnz58s5n8hApgPJMYW1IX0F9GnkDLpcbEhJy9uzZ0NBQJpMpeNzc3HzixImTJ08eN26cYG1a8dfa2nr37t3w8PCIiIjCwkLB48rKyn5+fkuXLu1ynBCRMijPiERDfRp5l+bm5hs3bly5cuXOnTscDkfwuJycnJubm4+Pj6enp5WVlWCpYPHB5XKTk5Pv378fFhYWFxfHZrMF35KXl58yZcqCBQsmT54sLy9PYZGIiKE8I5II9WmkW+rr62/evBkeHh4ZGVlfX9/5W+rq6mPHjnV1dR0zZszQoUO1tbWpKrKsrCw7OzsuLi4uLu7x48etra2dv6utrT1x4kRfX19fX18lJSWqikTEAcozIkFQn0Y+DI/He/r0aVhYWERERGJiIo/H6/IEAwMDu38NHTrU2NhYUVFRGJU0NTUVFxenp6enpKQkJyenpKTU1NR0eY6MjMzIkSO9vb29vb0dHBzEcD8JoRbKMyL+UJ9Geq6lpeXhw4dxcXEPHjxISEjofOavM01NTaN/aWpqamhoaGhoaGpqamlpqaqqAoCMjEyXHYKWlhYulwsA9fX1dXV1gv+vr68vKCgoLi4uLi5uamp643BKSkpOTk4uLi5ubm6jR49GRwKRbkJ5RsQT6tNI32CxWGlpaWlpaS9evCD/v6KiQjRDDxo0yNra2sbGRvD/dDpdNEMj0grlGREfqE8jwlJfX5+Xl1fQSVlZGbkb0YPU0Wg0csfF0NDQtJPBgweTOzEIIlQozwhVUJ9GKEBu3RoaGpqbmwGAxWK1t7d3foKSkpKMjAwAqKqqkgcV1dTUqKkVQd4H5RkRKtSnEQRBEER8ocsFEQRBEER8oT6NIAiCIOIL9WkEQRAEEV+oTyMIgiCI+EJ9GkEQBEHEF+rTCIIgCCK+UJ9GEARBEPGF+jSCIAiCiC/UpxEEQRBEfKE+jSAIgiDiC/VpBEEQBBFfqE8jCIIgiPhCfRpBEARBxBfq0wiCIAgivlCfRhAEQRDxhfo0giAIgogv1KcRBEEQRHyhPo0gCIIg4gv1aQRBEAQRX6hPIwiCIIj4Qn0aQRAEQcQX6tMIgiAIIr5Qn0YQBEEQ8YX6NIIgCIKIL9SnEQRBEER8oT6NIAiCIOIL9WkEQZC+weXyqS4BkUKoTyMIgvRKayt77doQDY2fFBX3jR9/NienjuqKEKmCEQRBdQ0IgiCSiiDAxeWvxMRyFosHADIyuIICIy9vo5aWAtWlIVIC7U8jCIL0XFxcydOnZWSTBgAOh9/Rwfnll8fUVoVIE9SnEQRBei4jo4bBoHV+hM3mxceXUlUPIn1Qn0YQBOk5U1N1DueVy8fodNzaWoeqehDpg/o0giBIz7m6GhoZqQp2qTEMaDRsw4ZR1FaFSBPUpxEEQXpOTo5+794yFxdDHMcAYNAg1ejopebmmlTXhUgPdL03giBIz9XUtKekVFpYaKqry7e2svX0lKiuCJE2dKoLQPqLqqqqioqKysrK2trampqampqaqqqqlpYWAGCz2W1tbZ2frKSkJCMjAwCqqqq6urpaWlra2to6Ojra2toDBw7U1EQ7KwjFqqqqysrKd+58EhpajePA54ORUfuIEcV0Oh/lGelbaH8a6XtlZWUpKSmpqalFRUXF/+ro6Oir91dSUjIyMjI2NjYyMjIyMrK3t7ezs9PW1u6r90eQzt6eZ3cA1057OzyANIDrH/r+KM/Iu6E+jfSBsrKyR48eJSQkpKSkpKSk1NTUvPv5cnJyWlpaOjo6GhoaAMBgMBQVFTs/oaWlhcvlAgC5511bW8tms9/9ngYGBnZ2djY2NqNGjXJyctLV1e3dz4T0X93O8+cAr0xmgmGEh8djOTk6yjPSh1CfRnqCIIiUlJS4uLjHjx8/fPiwpKTk9ecwGIwhQ4YMHjzY9F8mJiby8vJaWlrKysofOmJjY2N9fX17e3t+fn7Bv/Lz8/Pz88ktYBempqbOzs5OTk6urq42NjY9+SGRfqNneZ42LZHP77r9LCrabGSk+t4RUZ6R7kN9GvkA9fX1kZGR4eHh4eHhlZWVXb5rYGDg6OhoZWVla2trbW1tbm5OnpMTKjabnZGRkZ6enpaWlpaWlpSU9HphAwcO9Pb29vb2njBhgqrq+7ehSD/RyzyPHHkiKamic6vW0lKoqdnWm5JQnpHXoT6NvF9tbW1wcHBAQMC9e/d4PJ7gcTqdPnz4cPLP/LFjxxoaGlJYpEBBQcGjR4/IHaMXL150Kdjb23vevHnTpk1TUVGhsEiEQn2V56dPy8aO/YsggMfjkzdlnT07Y+HCPt7ZRXlGUJ9G3qq2tvbq1auBgYH379/vvHWQoD/n37bDJCsr6+XlNXv27OnTp4v5j4D0FWHkOSGh/LvvHiQnVwwZovH1126eniZ9XfUrUJ77J9Snka4Ignjw4MGJEyeCg4MFF2ljGObo6Dhr1iwfHx9JPD1GnoC8detWYGDgixcvBI+rqqrOmzdvzZo1Dg4OFJaHCA/KMyLpUJ9G/lNeXn7u3LmTJ0/m5eWRj2AYNnr06Dlz5sycOdPY2JjS6vpMZmZmUFBQYGBgamqq4MHhw4evWrVqwYIF6GZWqYHyjPIsJQgEIYhnz57Nnz+fTv9v3psBAwZ8+eWXBQUFVJcmROnp6Zs2bVJTUxP81AoKCmvXrs3NzaW6NIQgCKKlhXX1aoa//7OkpIoPeiHKM8qzNEF9ul/j8/m3b9/28PAQfLAxDPP09Lxy5Qqbzaa6OhFpb2//66+/Ro8eLfgl4Dg+c+bMhw8fUl1a/1Vc3Pj119FKSvsYjD2KivtwfPeqVTf5/Pe8CuWZQHmWRqhP91N8Pv/69evW1taCD7Oamtr27duLioqoLo0yL168WLNmjZycnOB34uzsHBMTQ3Vd/c7586kMxncYtgvgv//JyOw5fvzZ216C8vw6lGepgfp0fxQZGTlq1H/r7hkZGf3222/Nzc1U1yUWqqqqvvnmGy0tLcHvx8vL6+nTp1TX1V+UlDTJyHzXuUML/jd69Mk3vgTl+R1QnqUA6tP9y+PHjz09PQWf2KFDh16+fJnD4VBdl9hpa2vz9/cX3EGLYdiMGTOSkpKorkv6+fs/k5f//o192tLycJcnozx3E8qzREPrT/cXJSUlH330kbOzc3R0NAAYGxufPn06LS1t3rx5nS+3QUgKCgpr1qzJyck5ePCgjo4OQRDXrl1zdHRcuXJlRUUF1dVJMyaTi2FveJzBoE2ZMkTwJcrzB0F5lmxU/6GACF1LS8uOHTvk5eXJf3E9Pb3Dhw+zWCyq65IYLS0t+/btE1xGq6SktHfv3vb2dqrrkk7p6dV0+p4ue9IyMnuGDPm9tZVNoDz3GsqzxEF9WsoFBwcbGBiQH0g5ObkdO3a0tLRQXZREqqmpWb16NY7/cwhq8ODB9+7do7oo6fTFF1E4vptO34Pju3F8t7b2zz/99LCjg0OgPPcdlGcJgvq01CotLZ0xY4bgwMmMGTPQbZS9l5iYOGbMGPJXimHYypUr6+vrqS5KCoWH561de3vx4mvnz6eSt2OJeZ4bG5lhYbnXr2dVVEjS3w0ozxIB9WkpxOPxjhw5Ipjm19zcPDo6muqipAefz79w4YKOjg756x0wYMDly5epLkqaiX+ew8JyVVX3y8p+Jye3V05u719/JVNd0QdAeRZ/qE9Lm9LSUi8vL/IjR6fTt2/fjs48CUNtbe3SpUsFu3cLFixoamqiuigpJP55Lilpkpff2/lsOo2250MnUKMcyrM4Q9d7S5WAgABbW9vIyEgAsLOzi4+P/+GHHwRX3CB9SFNT8/Tp03fu3DExMQGAS5cu2dvbx8fHU12XZMvPb/Dzu6yu/qOJyaH9++MuXboi/nkOCsrg8V5ZJUFGBr9xI4uqenoG5VmcoT4tJZqamhYtWjRv3rz6+no6nb579+6EhIQRI0ZQXZeU8/LySk9PX79+PYZhBQUFrq6u+/fv5/P5VNclvoqKGv/44+mOHdF37uR3+VZJSZOd3fGwsLzGRmZRUePXX0d99NEl8c9zUxOryyNcLr+2tp2SYnoJ5Vk8ofWypEFubq6fn19mZiYAmJqanjt3ztnZmeqi+pfbt2+vXLmyuroaANzc3C5fvqynp0d1UWLn2rWsBQuCaDSMzye4XP7UqeZBQfMEd0tv2hTm75/IZvM6v2TQoBuXLx8W5zxHRRV4e1/g8f5rZrKytFOn/BYulLzlMgVQnsUK2p+WeLdv3x41ahTZpBctWpScnCzOGzVp5evr+/z5c29vbwB48OCBo6Pjo0ePqC5KvDQ1sZYsucZicdvbOUwml8vlh4TkHj/+TPCE+PiyLk2aRiN27jwm5nmeMMF03jwrBoNGfikrS3dw0J8/3/rdrxJzKM9iBfVpCUYQxO7du/38/BobG+Xl5c+ePXvu3DkVFRWq6+qndHV1w8LCDhw4QKfTy8vLPTw8jh07RnVRYiQurqRLG2azeVevZgi+NDZWe20mMpqFha4oiuud8+dtPuWJAAAgAElEQVRn+vv7+vgMmThx8L59nvfvL6PR3jSnmkRBeRYf6Li3pGpoaFi0aFFoaCgAGBsbBwcH29vbU10UAgAQHR09f/78mpoaAFiyZIm/v3/nNYv6rZs3s+fODWSxXmnVrq5GDx4sA4CGhgZv73VPn1oA/NPh6HTcykrn2bPVdPoH7E5UV7fduZNfXd3m7m7s4ND1UC353crKVnd345Ej9Xv18/QbKM+UQ31aIpWUlPj4+KSnpwPAhAkTLl++rKmpSXVRyH9KSkpmzpyZmJgIAK6urtevX9fQ0KC6KIrV13cYGPzKZHIFj8jK0n/6acKmTaM75dmeRvPl8WgAMGqUwaVLs0xN1bs/RGRkwaxZV7hcPgDGZvPWrBlx9OgUwXfv3MmfNSuAy+VjGLDZvGXL7E6enNaHP6AUQ3mmFurTkuf58+c+Pj7l5eUAsG3btv3799NoNKqLQrpiMpmrVq26cOECAAwdOjQ0NNTY2Jjqoih27lzq8uU3GAwah8Oj0bCRIw2io5dmZKR1zvPOnXsKC5uUlBjGxmo4/gFHj5ubWYaGv3W++ppOx8+cmf7RRzYA0NjIHDTot9ZWtuC7DAbN39932TK7vvv5pBnKM4XQ+WkJExER4erqWl5eTqPRjh079tNPP6EmLZ7k5OTOnTv35ZdfAkBmZqaTk1NCQgLVRVFs8WLblJSPv/hi7Nq1jmfOzHjwYHl0dGSXPCsry9naDjA1Vf+gJg0Ajx69bG/ndn6Ey+WfOZPS0sIGgCdPSrsccmezeZcuvej9D9VPoDxTCO1PS5IzZ86sXLmSx+MpKSkFBARMnjyZ6oqQ9zt+/PiGDRt4PJ6CgkJQUBB5DS0CfZ3noKDMhQuDWaxXWjWGYRgGI0fqf/SR7eefR3b5rrPzoIcPV/Rm0O7gcvnHjj0LC8tVVGTMn289a9ZQYY8oVCjPoof6tMQ4duzY+vXrCYLQ19cPCQmxs0PH6yTG7du3Fy1a1NTUxGAwLl++3Hk9iX6rz/NcXt5iZHSQy33DpBx0Oq6oKNPWxun8XVlZ2p49Hp9/PraX474bm81zdz+dnFzJYnFxHMNxbN26kYcOSXZvQ3kWMXTcWzL8/PPP5EbN2Ng4Li4ONWnJ4uvrGx0drampyWaz586de/HiRaoropgw8qyvr/zLL5NoNPz1e6K4XD6TyZ00yQzHMRkZGoaBnBzdwkJr06bRAMDh8AMC0rdvj/rrr+TGRmbvK+ns9OkUskkDADm7y+HDT58+LevbUUQM5VnE0P60BNi7d+/OnTsBwMLCIjIyctCgQVRXhPREenr6hAkTKisraTSav7//ypUrqa6IGkLN8+PHpVeuvLh/vzg9vYbDeeWE9OzZwz791CkgIL2qqtXNzWjVqhF0Ol5f3+HpeSY7u44gCAzD1NTkoqKWWFlp91U9ixdfu3gxjc//bzMrLy+ze/e4bdvEevKW7kB5Fhk61QUg7/HLL7+QGzUbG5vIyMgBAwZQXRHSQ1ZWVvfv3/fy8iopKfn4449VVFTmzJlDdVGiJuw8OzkNdHIaeO1a1oIFVzs/zmDQbGx0yO92fnzz5ojMzFrBBCy1te2LF19LSlrzxjfn84knT0rT0qqHDdN2cTF8bVaWN9DQkMdxrHOfJghCQ+MNS4lwufwPulOccijPIoP2p8XakSNHNm7cSBCEjY1NTEyMFNwkzeVyi4uL8/Lyamtr6+vr6+vrGxoaOjo6Xn+mgoKCxr+0tLTMzMwMDQ2l4OL24uJiFxeX0tJSBoNx7do1Hx8fqisSHZHluaODa219tLS0mWzANBqmrCyblbVhwADFLs9UUtrf1sbu/AiGQX39djW1rlN51NS0T5t26dmzchkZGofDGznSICTkI2Vl+rvzXF4uGxKi2XkrKyeHnznjMHLkUDLPVVVtq1ffiozM53L59vZ6p05Ns7HR6dvfhlD15zyLDOrT4uvvv/9euXIlQRBmZmaxsbG6uhIwgWIXHA4nKysrLS0tNTU1NTU1Ly+vqKiIw+H07N0YDIaJiYmFhcXw4cNtbW2HDx8+ePBgHJekXRBSdna2q6trTU2NgoJCSEjIuHHjqK5IFESc58rK1lWrbt65U8Dj8R0c9M+fn2Fu/oY/C+Tlv+889cq/r/3s9Y4+Y8aVsLBcwc1dOE4oKpYwmee7kWcnAC8AHgAGwAMIAMiHf/JsWlHh19Ymz+MBAMjI4LKy9IKCT7S1FXrwI1Olf+ZZlFCfFlM3b96cOXMmj8cbOHDgw4cPDQ0Nqa6ou5hM5r179+7du/fo0aNnz569cV+ZhNNockpqckoqDPk3bJXYHW0dLU3MliaCeOuyeqqqqqNHjx4zZoy7u7ubmxudLjHncZ4/f+7u7t7U1KSqqhoeHj5mzBiqKxIuqvLM4fC5XL68/FuD4et76c6dPA7nn4zhOGZiopaXt0nwBDLP0dH3fvlFls/v8kchD+B7gH9f+/Y887gKHc3K7I5WDjOdINo6fccCYC7Af0eJcJzv5obt3OmG8owIoD4tjuLj4z09Pdvb27W1tR8+fDhkyBCqK3q/3NzciIiIsLCwe/futbd3XXxXRUdfx8RSa5CZ6oCBDAVdnKahb26grN2tKSFZbc2t9dVNVWVN1WVNlaXVhVk1xTltDbVdnqaqqjphwgRvb++JEydKxJ81T548mTBhQltbm7a29qNHj8zMzKiuSFioynN3zvhWVLSOHPlnXV0Hm81jMGg0GhYVtWTMmIGv5VkG4CvB3OMC41fjmoMMVHT0ldS1GQpK3amqc56zYptLM5QJfpezOekAgSjPiADq02InLy/P2dmZPIgUHR09evRoqit6l+Li4oCAgEuXLiUnJ3d+XEFVQ99iuJ7FcH1LO93Bw2QVVQCA1cYJPfgk90kZhmMYBmNmD3NZ9IY1elltnI4WlqqOIvb2Ganam+qr8tLLslIqclPLs1JYbS2Cb2EYNnbs2Pnz58+aNUvMTxZER0dPnjyZzWZbWFjEx8erqqpSXVHfoyTPqalV69eHPn1apqjIWLnSfs8eDzk5emFhQ2Mj08JCS1FRpvOTW1vZJ08mZWXV6ukpT56sc//+7TfmmcteyWEqCraXGI5pG6su692d0DmPSm8deMTj/HfECMP4OD2ex4no9AjKc3+H+rR4qampcXZ2zsvLo9FowcHB06aJ6ToBHR0dV69ePXnyZGxsrCBCNLrMwGEOJg6uJiNctY2GwGuXwwbvjS1KquT+e7cMTsMmrh9p62X639s2s8J+f5oXXwYAsooyXv9zHDbO6L3FEAS/Mi+9MDG2IPFBRU4awf/n/Wk02qRJk1auXDl16lQZGZl3vwlVLly4sHjxYoIgPD09w8LCGAwG1RX1JUryXFLSZGFxmMvlk7OayMrSxo83rapqTUysoNEweXmZw4d9li4d3vkl3clzWVbdla9jCILgcfg0Oo7TsIU/TdD5kGVCXsfn8k9/EtFQ3sLj8gEAxzEag7ba36elLh/lGRFAfVqMcDic8ePHx8bGAsDRo0fXrl1LdUVvUF5efujQIX9//6amJvIRDKcZ2zlZuvqYO00g95vfiNXGPjQ/uMuDqjqKH5+a+s8XBFz84m5Fbp1g9wLDsXnfeeiaqTMUurtVam+qy4oLz3oQWpqZBP9mW0dHZ+PGjevWrRPPRX5++OEHctrkjz76iFznQDpQled160JOnUrustY1nY4LJiPDcSwubgV5g9YH5bmhojX5dm51YYOWkeqoGZYqOl2vNeuB5pr2sEPxJanVBEHomKhN2jhKb8h/KUV5RgD1abGyZcuWgwcPAsDnn3/+448/Ul1OV4mJiQcPHgwICGCz/7mPRcfE0m7yfAsXb3lltfe+vO5l86l1oV0exDDss+tzyePbtcVNf20Ie+NrNQaqTPl0TOft13u11tdk3L/1POxKQ0Ux+YiCgsLSpUs3bdpkaWnZ/fcRjY8//vjPP/8EgF9//XXLli1Ul9M3qMrzqFEnEhLK3/EEDINZs4Z98YXp3r1Hbt3K5fEYAEUABR+U577F4/D5fEJG9q23HaI892eoT4uLy5cvL1iwAAAmTpwYGhoqVjcKJyYmfvvttyEhIeSXNBnGULcpwyfNMRg6ovtvwufyf5kVSPBfzRsG8/Z6GFrrPLqS/iQgg/emyZkBAMcxGXn6quNTFF+7q/XdCIJflPwo9U5gzuMo8vghjuNz587dtWuXhYXFB72VULW3tzs7Oz9//pxOp9+9e9fNzY3qinqLwjwvXXr9woVUHu9dWzZV1bamphCAWQB8AAzDaEZ2KnN3T3ntQjHxgvLcP6E+LRZevHgxevTo9vZ2IyOjZ8+eaWlpUV3RP0pKSrZu3RoUFETmRE5Z1W7yfAffxYrqPanw5P9C68uaOz+CYWA+dpC2oerjtzdpEo2Oj5491GXhG647646GipKE4FMvoq9z2SwAoNPpS5Ys+fHHH8XnV52fn+/o6NjY2DhgwIDExEQDAwOqK+o5avOclFQxatQJPv+fbVvnI97/IgCSAWwA/jufgtPxyRtHWXkai7LUHkN57ldou3btorqG/q65uZmcJldOTi4iIkJM7mdobW3ds2fPwoULU1NTAUBeRd1l4aZpn/9qMsL1jbc7d0dzTVtFTl2XvwwbylpKXtTw37n3AwAEn1BQk7d06eFc0PLKqoNHedhNno9hWHVBBpfDTk5OPnHihIyMjKOjozgcvdDQ0LC1tb106VJra+vjx4+XLl0qiVO4gBjkWU9PeeRIg7t3C1tb2TiOGRmpNTWxXk0dxpDNJcC084MEQdBouEVPAyZiKM/9CurT1Fu1alVMTAwA+Pv7T5kyhepygCCIc+fO+fn5hYaGcrlcOkPOae7/pn1x0NBmFE7r1cQLWoaqSSG5/FcPfRMEQDeO6dBkcIuxgwZZ92pKRRlZeWM7Z1uv2VwWs7ogo6Oj486dO5cuXTI1NTU3N+/NO/eJIUOGEARx//790tJSDMM8PDyorqgnxCHPQ4ZofPaZ88cfO37zjfuZMynV1Z2nFgEMBzuf8dWFTV3+OlTTUxrq9v77C8QHynM/gY57U+zixYsLFy4EgDVr1vj7+1NdDuTm5q5du/bu3bsAABg21NXHfdlnKtp6ffLmefFlkccSW+q6zoLyXjgNl1OSWXV8ipxSn93mUfcyL/rUj4WJseSXc+bMOXTokJ5e3/ykPcbj8caPH3///n0ajRYbG+vk5ERtPR9KDPM8cuTxpqZXLtvGMGzGDpfr+x/yef8dD6fJ4B4r7Ef4SsCcQm+E8izFUJ+mUlFR0fDhw5ubm83NzZOSkhQV++A2jx4jCOLw4cPbt28nZ/rUMDD23vT9wGEOffX+RcmVgbvuEwTAh0dOVUdx3l4PNb1uzff0QfKextw58m1rfTUAqKmpHTt2bP78+X0+ygd5+fLl8OHDGxoaTE1NU1JSlJWVqa2n+8Q1z+YAfgD/HHTFcExJQ37Nn76pkQVRxxNxGsbnEziO6Vtqzf/e4x1T63TGZfNaattVdBRpYrbCFcqzVELHvSlDEMSUKVPy8/NlZGRCQkKMjY0pLKaiomLOnDmHDx/mcrk0uozT3P/5fnZATbcvz9WF//G0uaa9B00aALQMVUfN/O/mk5cvau6ffp54M7u6sHHAYHWGXM+PxmsYmNhOnM1ub6vKS2cyO4KCgkpKSsaPH0/h/AyqqqqDBw8ODAxsaGgoLy+fPn06VZV8EDHOc/2AwaPaGhkyDBqGY/IqcpM/GfXkamZ6dJGSloKOiZrJCD17nyEeK+2606R5XH70n0nX9sUl3sqJD8rEcBg0TEd8rhJHeZZKaH+aMseOHVu3bh0A7N27d8eOHRRWEhERsWjRotraWgDQG2Ljs+UHzUGD+3yUI0uutzUwe/ZadX3l1f7/nOnMuF8c8ssTAIIggEbHaQzayiOTlbV6u75Qefbz0N+215cVAYCZmVlwcLCNTQ+vLe8Tq1atOnXqFADcunXL19eXwkq6SczzXF/WUp5VK68iq26gfH5rJIfFJafTwem4vY/Z+NXdvcMw6nhi6p2CTnPq4V7/cxju3fefl15CeZYmqE9To7S01MrKqrm52c3NLTo6mqrrMwmC2Lt3765du/h8PobhI2csd1u8BRfOKj0Xt0eVZtZ2uWRMTU+5pbadx+G95UX/GeyoP32HC59HHF50jdNpIUKaDG7uNGjqtj4478Vmtt/135sWFQwACgoKR44cWbZsWe/ftmc6Ojrs7e2zs7MHDhyYkZEh5kcLJSjP4b8/fRFTxH/1Tq11Z/yUNOTf+/58HvHr7MAur1VUl1t/Vhz3EVGepQY67k2NxYsXp6amysrKhoaGamtrU1JDe3v7zJkz//zzT4IgFNU0Z+w4bDd5Pia0eycU1OSy40oEbZomg9tMMJ2505VGx1pqO5gt7He/vKGiJf1uEcHnFyZVdH6c4BMdzexRM/pgSiYaXWbImPGag0wLE2OZHe03btwoKSnx9fWl5H4SGRkZGxubM2fONDc3NzU1icONAO8gQXm+93dKexOr8yM0Oj7QSlvD4K1T3gq0NTCfBmd1eZDL4jnNtermiW1RQnmWGuJ1EUQ/ERAQcPPmTQD46quvqJpFqLy83M3NjZxiTN/SbunBYCM7Z6GOOHikvu9WJ3kVWQDAabidt9n41fYysjQLF8Omytb3v56A5pq22PNpr9/ExZDry703S1efRb8EqOsZAcDff/89derUlpaW975KGNzd3VesWAEAx48ff/jwISU1dIdk5VlJs+spEj6Pr9K98yZKGvIyr10MoaanhNPErkkLoDxLAdSnRa2xsXHTpk0AMHTo0O3bt1NSQ0pKyujRoxMTEwHA3mfBgv3nlDQHCHtQgk9U5NQzm1kYhvF5/MbKVvKumLz4MrzbF812nXYUAAC0jft4NmYtQ7PFvwYOGTMBAMLCwtzc3EpLS/t2iG766aefdHR0+Hz+qlWrOBwOJTW8m8Tl2XGaeed9XwzH1PVVtIy6FyEM3JfY4rT/4orh2MS1jj0vXSRQniUdOu4tajt27IiKisJx/Nq1ayYmJqIv4MmTJ15eXtXV1RhOm7B6h8vCTTguirOJCdez4wMzBJOcNFW1NVa2WowdVPy8qjTj/fORvQ1Gw+wmDda36OPpEukM2aGuk3kcTmlGYmVl5dWrV318fEQ/KaO8vLyuru61a9dqa2s1NTXHjBkj4gLeSzzzzGXzyrPq2B1ceVVZ7NX1VTUGqiiqyhWlVAIAEKBtpDb7Wzd55e5eDq1noamqo1hb0sRl8zQHqvhsHm08QqzXhCahPEs0dB2ZSOXn51tZWbFYrBUrVpBXP4pYVFTU9OnT29ra6Ay5adt/MxsluhmC/lxzu7Gi6/HtTRdnNpS3nP886o07yt2B07AVR3w0DIR1WUrqncCII7sIPk9HRyc8PNze3l5IA70NQRDOzs5PnjzR1NTMzc1VV+/Vgsd9SzzznB5TFHE4gcflEwShYaAyY4eL5sCu557ZTG51foO8iqzmQBXxuatKBFCeJRE67i1S27dvZ7FYysrK33//vehHDwkJmTJlSltbG0Necda3x0XZpAHgjTdltdS161lojvA1x3Cs8+HEt8EwwHAMw4BGx+kMGoZjnqvshdekAcB24pwpW37AabTq6moPD48nT54Ib6w3wjDsjz/+wHG8rq7uu+++E/Ho7yaGeX75ojr0t3gum0fwCSCgoawlYOe9zjcIkBhy9IFW2pqD+leTBpRnyYT6tOjExsYGBQUBwJdffqmrK+pjZTExMXPnzmWz2fLKavP2/m1kK+ojTjomal2uiaUzaBoDVQBg/Gr7WTtdbSaYMORlsNe2m+SryEt1CAIIPkEQwOfxTR31VhyePMJX6PMYDxs31W/7QRpdpqmpadq0aenp6cIesQtHR0fyApwjR47k5OSIePS3Ec88Z9wr7tx6CYJob2QWP68ScXniDOVZ4qDj3iLC5/Pt7OzS0tJMTEwyMjLk5D5sHeVeiouLmzRpUnt7u4KqxoL9ZzUHUbAkV3lW7cUvo4FPkKeocRo2cZ2j7cRXJogoy6y98nUMwSd4XD6NjhME6JiqDbLWGeZmGHk8sTKvocuEzBsvzGTIC+Vu79e9fJFwdddqDotpYGBw7949ES8DVVNTY25u3tjYOHny5NDQUFEO/UZim+eAb+4VJVd2fjJdluaxws7caVBZZq2iupzuEA1xm+yTEijPEgRdRyYiAQEBR48eBYAjR46I+JxQWlqal5dXa2urrKLynG//1DEdJsrRBZS1FEwd9Boq23gcnrq+8sS1jkPdu65NpKKtYOlmhGEgq8AwG23gu3XMqJlDTex1lTTk4y68YLW/eoEoAaaOeiraIppEWlXHQMfEMudhRFNT482bN2fPnq2i8v47bvuKoqJiS0tLbGxsXl7epEmTBg2iePlFsc1zY0VrRU5d58sSCQJUdRRvHXic+6Q0NbIg416xsb2ugqqsKGsWQyjPEgTtT4sCn8+3trbOzMy0trZ+/vy5KOcZKC0tdXJyKi0tpdFlZu8+IfrD3T3W0cKKOZWS/7SM4MPgUfpV+Q21JU1dnrP6T191ISzO8Q4Z927d/vVzIAgbG5vY2FhVVVWRDV1fX29qatrU1OT1//buPK7m7P8D+Pvut7qtkhYqSXtpQSIkTPYlQ1nCYBhmsQwzw4yxzJgfgxnMYOzGWLJLEoXJElIqKhWpVFLat9vd7++Pw/02GBPdz1bn+cc8cjWf90mve879fD7nc87gwTExMaTVfR2d89xYJ937abS0Xo6W9uRw2ZbOpk+bPFDAYrH02+t+vGM4PqsGnGeGwEklw+HDhzMzMwFg9erVZHZqNTU1w4YNKyoqAhZr6PyfGDRIK+Wqw19fybpe0FgnkzTIsm4UimskTTtWNofVya29sTmpgzQAuASM7Dd1IQCkpaUFBwfLZP+xjJoWmZiYLFq0CABiY2OvXbtGWt3XEZHn2lrp6tVXAwP//OijiPj4wjd+T3PyrKMvmPH7ULdBnY0sRGadjQJmeKqV6n+eXqvrysRl+dVaaTbT4TwzAj6fJpxKpXJxccnOzvbx8UlMTGS9PlGKGGq1euzYsREREQDQb9qiXh/OJqeuVjy4+iR6cwLaKQHh8NiWjqaF6c/RRoTmXUyCl/dtzprMRIjdvirl/BEAmDdv3tatW0mrW1tba2dnV1FRMWDAgCtXrpBWtyki8lxeLvby2lFRIW5sVHC5bLVavXv3qOnTPZt+z3vnec+88xWFtU1fYXPZY5f5d+lh2fKWtw5tOc+MgM+nCRcZGZmdnQ0Aq1evJm2QRuVQp+Y1bCKzBmkAKH/y6iVulULdrpPB3H2jxizzn755SNjGwVQN0gAwaM53XX0HAsC2bdv27t1LWl0DA4Nly5YBwN9//52SkkJa3aaIyPPq1VfLy8WNjQoAUChUSqV67two8T+nI6xevToi4hxAp87es90Cw5p/cJtuHV65xK1WqS0cTLTS8tahLeeZEfA4TbhNmzYBgIuLy9ChQ0krGhkZuWrVKgCw8eg1aM53pNXVFsMOeq+MAWwuy7CDnr6prn1Pq9cf8SIZi80ZsXhDe1sHAJg3b96dO3dIKz137ly0jBTKFfmIyPOVK3mSfz7irFSqml79joyMXLVqK8BnwJpRkNZx+0dnb4Y392ki/0nuQn0Bl/di0T02h9VnopuuIakT1GmuLeeZEfA4TayEhIS4uDgAWLBgAWkn04WFhdOmTVOr1QZmliO/+oVFyrKg70elVFaXFJY/efTsUdqT1Jv5KfFPUm+W5GSYWss5PJZmewM2m8UTcN0H2VHb2qZ4Qp0xy34X6BlIpdJp06Y1NDSQU1dHR+eTTz4BgCNHjhQUFJBTVIOgPBsYvDr7WqlUm77cG6OwsHDatBlq9RQAI1CzlHKVWqW+GZ6Rea1ZP75Qnz9z21CvEV072Bnb+ViM+qp371BXbbX8Ff+W54rCnOqSQrVa9d+HoEjbzDNT4PvTxAoJCTl27JipqWlBQYGODhnXaVUq1aBBg/7++28WmzN53SFLJ8///n9IVFGUW3A/oaIgp6qkoPpZQc3zpyrFq2tFvdSBxRqvVpsCgFAk9xmp6z64t0F7CzJb+58e3ow5839fAMCsWbN27dpFTtFnz57Z2trKZLLFixevX7+enKIIQXnesiXhq69ipdIX25Cz2Sxra8OcnC84HNbLPOcDhL1yXmHvaxX8XV9tteH9vEuegcPjG5l3Mra0MbawMbXpatPND+cZKM0zU+BxmkB5eXkODg4KheK7774jbYW8DRs2LFmyBAB6h87zn/wFOUXfrr7y+ePEuML0xIL7t+sry97x/xYBsABe7MRnZN6pk3vPTq497HsOEOqT9wzJW0RvXpZ26RQAHDt2bPz48eQUnTZt2oEDB4yMjHJzc0lbIZm4PCuV6unTzxw+nCYQcJVKlamp7rlzk7y8zOF/eXZhc8arlP84gze3N5n66wdabMa/USnVpTmVdRWNlk7tRCY6LcvzP+A8I5TkmUHwOE2gxYsXb9y4UUdHJzc3l5yFFR88eODt7S2VSq2cvSatPUjtFW+lXJaTcCXt8um85BtqlVLzOovF6tKli4ODg7Ozs4ODg42NjZ6eno6ODnp/qlSqmpqahoYGsVicm5ubmZmZnZ2dlZVVWPiPZ3U4PL69b6D7wLGdvf2p/TFlEvGBBcGVT/MtLS3T09PJ6WXu37/v6empVqs3b96MtpUkAdF5zswsv3PnaYcOev372+rocKFJns3te5fmBjXdrIXD43Qf6dD/o25ab8YrKopqT/1wvbqkns1hqRQqI4u86pKDOM/aRUmeGQSP00SRyWQdO3YsKysLCws7cOAACRVVKpW/v/+tW7d4AuFHv0camVO2xE99Remd03vTr5yR1P1v2raLi0tAQEBgYGD//v3fY0O9goKCuLi4y5cvx8XFNb2PpWds2i0opGtDenIAACAASURBVPvoaUIReaspvaI4+96hJRPVatXMmTN3795NTtGAgICrV6+6u7vfv3+fhHKU5znzal384TS06CyHxxaK+DO3DhM2ez/K92yDUr1r9rnacnGTjwgqgDMA93GetYvkPDMLHqeJcvz48QkTJgDAtWvX+vYl4y7ali1b5s+fDwD9py/2HTeLhIqvq3n+9M7J3fdjTyrlLxZMcHNzmzJlSlhYmKWl1h5XzcrKOnjw4MGDB588eYJe4euKfEaG9Rg9naqLh5f++CE56hCLxYqNjR04cCAJFQ8dOjRlyhQAuH37tq+vL9Hl6JDnR7eK7l183FAl6eRh1nuCK9GDNADkJGafWv3q80K2tuz4+Jk4z9pFcp6ZhZHjdFVV1d69e9u1axccHEzmmrTvJCgoKCYmxtHRMTMzk4SZ3hUVFY6OjhUVFWadnab+epLNIfvSmUwiTji+887pvWiE5nA448ePX7x4sY+PD0EV1Wr1tWvXfv755+joaBRjnkDYM3iW74ezuHyyn7qRiet3zxteX1Fqb2+fnp4uEBC+fHRjY6OVlVVVVRU5U37aZp4TTsWpFOMB/lG9a1eThw8/13pFnGcy88wsjHkua9GiRX379j1x4oRcLh81atTixYs/+uijHj16lJbScce6oqKiS5cuAcDMmTPJeRxr+fLlFRUVLDZn6PyfyO7U1OrMa1G7Pxl669gfSrlMIBDMmTMnOzv7yJEjxA3SAMBisfr37x8VFZWSkjJx4kQOhyOXSuKP/L7vs9H5KfHE1X0jvq7og3krASAnJ+fXX38loaKOjs7kyZMBIDw8XCwWE1qrzeZZpSh8pZPk8zmDB3f5t/+1JXCeScsz4zDjfLqxsbF79+7h4eHu7u7Z2dlOTk6hoaH79u07duxYUlLSli1bqG7gq3755Zcvv/ySy+U+ffrUzMyM6HKpqandu3dXKpVewyYOnruC6HJNNVSVR274suB+AgCwWKwpU6asXbtWi5cEm+/Ro0cLFy6MiopCf3TyHxr02SqBHqmXW44tn5GfelMkEmVlZVlZWRFd7t69e56engBw8uTJ4OBg4gq15Tybm4f8+muyUqlSq0Eo5BoaCh88mGdC/Fp4OM9El2MQZpxPy+VyOzs7V1dXALh79y4AfPLJJ0KhcMKECbm5uY2NjVQ38FWHDx8GgAEDBpDQqQHAihUrlEqljr6R/5T5JJTTKLifsH/+GNSpOTs7X7ly5cCBA5QM0gDQtWvXc+fOnTx5Eu2Rl3Ujev/84JJH6WS2YcDMb1hsTn19/Zo1a0go161bN0dHRwA4duwYoYXacp5//nn48ePjhw938PIynzu3OzmDNOA8Y00wY5xmsViGhobogltkZCSXy0VjNpfLlUgkcrn8vw5AqpycHPRhAs27IVpycnJkZCQA+I6fraNvREJFAFCrVTfDtx1dPqOhqpzD4axcuTI1NTUgIICc6m8RHBz84MGD2bNnA0BNadGhryclnztEWvX2tg6eQyYAwN69e4uKikioiDJ27tw54i4V4jyPGeMUGTkxOXnOL78EkTNIa+A8Y8CUcVpPT0+pVF6+fDk+Pv706dN+fn4mJiYAUFNT8/TpUzI3t2gOdPLB4/HGjh1LQrmVK1eq1Wpdw3ZeQyeSUA4AFDLJ6TWf3Ti0Ra1Smpubx8bGrlixgs8nfPJtM4lEoh07dhw+fNjAwEApl13a8cOV3f8HZN3f8QuZy+ULpVLpTz/9REI51K81NDScP3+eoBI4z9TCecaYMU6z2exvv/02ODjY399fKpX++OOPcrl8//79H374IZfLFQrptaQ+umgTGBjYrl07omvdunXr3LlzANBz3EyekIxP+tKG2uMrPs5JuAIA/fr1S0lJGTBgAAl139XEiROTkpI8PDwAICniz8gNi5UKMq67iEzMug2ZAAB79ux59OgR0eXc3NycnZ0B4MiRIwSVwHmmA5zntowZ4zQAuLm5FRUVXb16taysrF+/fhwOp2PHjjNmzNi8eTOPx6O6df9TUFCQkZEBACEhISSUW7dunVqt1jM29Ro2iYRy4pqKw9+EFaYnAkBISEhsbCw566y9n65du16/fh11u5nXok6snC0T15NQt9f4OXyhrkwmI2ex4tGjRwNAdHQ0ERM1cJ7pA+e5zWLMOA0ABgYG/fr1Q0v/cLncQYMGhYWF+fv7U92uf4iOjgYANps9fPhwomvl5OSgO3newyfzBIRfVJA21B397qOy/GwAWLBgweHDh+lzbfDfGBgYREdHozHmyb1bp9d8RsJZiJ5RO7fBwQBw8ODB8vJyost98MEHANDY2Ih2stIunGdawXlum5g0Tr/R8uXLa2pq/vv7yHLhwgUA6NGjBwkzYzdv3qxSqbh8oefQUKJryaWSUz/OK8t/CABr16799ddf2WxmhEcgEBw+fPjjjz8GgCf3b0dvXkbCvT2fkVNZLHZjY+P27duJruXv729oaAgvs6ddOM90g/PcBjEjmgAgk8n2798/btw4Pz8/z5dcXFy2bdtGddP+Ry6XX7lyBV5+JCRUVVXVnj17AMAtcLSOAbFr5atVysj1i9DlwW+++ebrr78mtJzWsdns7du3jxo1CgAexEVePfAL0RWNLaztew4AgB07diiVyv/8/pbg8XjoWujFixe1e2ScZ3rCeW5rmDFOq9Xqjz/++KOPPoqIiEhOTpZIJAqF4smTJxUVFZaWlvT5IBwfH19bWwsAJFwk/OuvvxobG4HF6j5mOtG14vZvQBNtJk+eTM60T63jcDjHjx8PDAwEgIQTu5IjDxJd0XPYRAB4+vRpTEwM0bVQ3rKzsx8/fqzFw+I80xbOc5tClxHu7RoaGs6cOTN16tSGhoZVq1adPXs2PT09IyNj3Lhx6enp+vr6VDfwhevXrwOASCTq0aMH0bXQEridXLubWHUmtFDOnb8Tz+wHgMDAwL1799LtKbjm4/P5p06dQjNm/9738/O8LELL2Xr11jc1B4D9+/cTWggAhg4dir5ACdQWnGc6w3luO5gxTqtUKjabvXTpUoFA4O7unpWVBQCWlpZBQUGkbbvWHDdu3AAAHx8fok/xk5OT09PTAaDbEGJn4daWPYvetBTUaisrq/DwcPpPtHk7Q0PD48ePo+dQI39eJJdKiKvFYrFdA0cDwJkzZ4hehd7Kyqpz584AEB+vzYWgcZ5pDue5jWDGOC0UCrt06YLWNvHw8AgPD1epVABga2u7atWq+noyHk74T0ql8tatWwBAwhT048ePAwCXL+zqS+CWc2q16tzGJY111VwuNzw8vH379sTVIo2DgwM6dasoyr2yi9hrnh6DPwQAmUx28uRJQgvBy9ShkVUrcJ4ZAee5LWDGOM3n82fNmrVp0yapVGpubp6bmztz5szDhw/PmjVLIiHwI+Q7uXfvXl1dHZDSr6GlJ+y69yV0LYj7F08UZSQBwJo1a+j2/FtLTJgw4dNPPwWAezHH0WQighiZdzLv6gYAR48eJa4Kgn5B2dnZZWVlWjkgzjNT4Dy3eswYpwFg6tSp1dXVp0+f5vF4mzZt+uuvvyZPnpyUlDRjxgw9PT2qWwfw8qMfh8Px8/MjtFBSUlJubi4AOPYZQlyVxrrqawd+AQBPT88vv/ySuEKUWLt2rZWVFajVMdtWEvoEqmPvIAC4ceNGcXExcVXgZb+mVqu1dakQ55lBcJ5bN8aM07q6utu2bQsNDQWAXr165efnHzp0KC4ubsOGDTSZCZKUlAQA7u7u6OE/4pw9exYAuHxhlx4BxFW5un9jY101i8Xavn07h+QNgIknEonQrroVhY8TT+0lrpBT36EAoFKpYmNjiasCAM7OzmgJoISEBK0cEOeZQXCeWzfGjNOv6Nix46RJk/r3719UVET083zNlJaWBgA+Pj5EF0Jb0tp068XXIepCQkXh47TYkwAwY8aMXr16EVSFWuPHjx88eDAA3Dy6vbG2iqAqhh06trd1gJcLexGHxWJ1794dXuaw5XCemQXnuRVj6jitsWbNGjrMI1MoFJmZmQDg7u5OaKHi4uKUlBQA6Ozdl7gqt4/vUKtVIpFo7dq1xFWh3JYtW9hstkImSYzYT1wV9JuKjY0l+gMlyp5W+jWcZybCeW6taD1Oy+XyhQsXok3jN2zYMPk1o0ePPn36NNXNBAB4+PChVCoF4vu1mJgYtVoNAHY+RPVr1SWFmdeiAGDevHno0lNr5eTkhPbRS4k6Im2oJaiKnU8/AKisrCR68irKXkFBQctX0sV5ZiKc59aK1uO0TCY7cuTI0aNHFQoFh8M5/JqzZ8/SZDag5kMf0f0aem8YWVgbWVgTVOLOyd0qpVJHR2fhwoUElaCPpUuXslgsaUNtShRR++h1dPFBu0pcvXqVoBKIJnstPwXBeWYonOdWiUt1A95GT08vLy+PzWYLBILAwMBx48bt3bvXwMBA8w319fXTp0+nroH/k5qaCgDm5uZEP5R5+/ZtALBy8iTo+I21VWmXTwPAjBkzSNjjT6VS3b9/Pzk5OSsrq6amBi1oY2Ji4uzs3L17dxcXF6Ib4OHhMWLEiMjIyLvn/uo5bhabgBlGbC7XvKt7YXoi+t0Rx9nZmcvlKhSKtLS0Fj53hPP8fnCetUiLeWY6Wo/TAKCj8+J5Snt7++nTpzcdpAFAJBIFBwfTYVEh9IkP7XBOnJqaGnTX0MKxG0ElMq+fV8plADBr1iyCSiBJSUl79+49evRoZWXlv32PmZnZhAkTPvnkE1dXV+Ja8vHHH0dGRjZUleenxqNrelpn6ditMD0xISFBrVYT93iCQCCwtbXNycnJz89v4aFwnt8VzrPWaTHPTEfr695N6enpjRgxAn2N7pwhkyZN0ozlFCooKAAAOzs7QqskJyejhdisnLwIKvEgLhIAPDw8PD2JOsV58OBBUFBQjx49tm/fjjo1FoApj++oI3LUETnoiNrxXnzwev78+e+//+7h4TFx4kT0L0yEIUOGoE0bM65EEFTC0tkLACorK3NycggqgaDVFlver+E8v0MJnGfCaCvPTEf38+mkpKRHjx7179/f0tISAC5evDhr1qyioiI9Pb25c+euXLmSJoucoHedra0toVWSk5MBgM3ltrdxIOL4Vc8KirNSASAsLIyI46vV6nXr1i1fvlyhUACAHocTZNyhh76Jp8hQl/2PC3S1SkVaQ831mvIr1WVSlSo8PDwiImLXrl2TJ0/Weqt4PF5oaOiWLVse3b4sE9fzdUVaL2Fh74a+SE9P79q1q9aPr4H6NbRsSEvgPDcHzjNT8sx0tD6f3r9/f48ePSZNmtSpU6e4uLisrKwhQ4YUFRUBQENDw4YNG4KCgsRiMdXNhJqaGjQjkejzD3TXsF1HOzaXkA9Yj25fAgAej0dE9yEWi0eNGrV06VKFQqHD5swwtznq7Dvfyr63gckrnRoAGHC4fQzafdPJMdy554T2HbksVmNjY1hY2LfffovOwLRr2rRpAKCQSXLvXtP6wQFA1K6DUN8QiJ8Rg/q1vLy8lhwE57k5cJ6BIXluBeg7TstksjVr1ohEopkzZ37wwQdhYWE7d+5s165dbGysTCZraGg4dOhQSkrKjh07qG4paC5hEX3+gZ40JejkAwCe3LsFAH369LGwsNDukcVi8dChQ8+dOwcAHnqGfzl1n9bBRp/z372zCZf/qaXdHgcfa4GuWq3+6aefJkyYoPUHN729ve3t7QGAuOWR0W+N6H4NJbCiogItzf1+cJ7/E84zg/LcCtB3nJZIJBUVFbdv3969e3d0dPSXX355+PDho0ePDho0iMfj6erqTpo06dChQ3/++adcTuB6ts3x7Nkz9AX69EcQtVqN7gaZ2hLSrynlsqL0RAAYMGCAlo+sVE6cOPHatWsAMM7UanMXj/Y8wTsdwVaou62rp4/ICABOnjz5zTffaLeF8PKnLki7o/UjI6bWXQGAnPt5AFBYWPjeB8F5/o8j4zwzKs+tAH3HabVa3blzZ/SpEAAmTZrE5XLRSnIagwcPVqvVlG+ZpenXCH2I5dmzZ2gCnaGZFRHHL86+h/avDQgI0O6R16xZg9ZwHt3O8gurLuz3miCqz+Gut3P3MzABgA0bNhw5ouXHQ9FPXVH4uKGqXLtHRgzMLIH4fk2TwIqKivc+CM7z2+E8A6Py3ArQd5wGAAMDA+7LG1cikahr166vPILF4/F0dHSIuMHzTlCGjIyMuMTcZkM0kx4NO3Qk4vhoyz9dXV1fX18tHjYlJWX16tUA4KNvvMCqS0sOxWGxlls7WQt0AOCzzz7T7ipFmt68II2Qdf8NO1gBQH19fUlJCRHHRzTrbbWkX8N5fgucZ4RBeW4FaD1Oi8VizZ0bFov1+nPSSqWyoaGB9Ha9CiW1Xbt2hFZ58uQJ+oKg84+KolwA8PHxEQje7SLe282bN0+pVOpzuN92cny/M4+m9Djc1bauHBarsrJy3bp1WmkhYmlpaWxsDABl+Q+1eFgNzW/t0aNHRBwfMTAw4PF4APCWp3j/E87zW+A8IwzKcytA63H6zp07AoGAxWKxWCxdXd2YmBhdXV1WE7q6uunp6VQ3E8rLywHAxMSE0CqlpaUAwOZw9IwJWaO4qvgJADg4aPNmYVxcHFq0aJa5reYp0hbqLNQdatwBADZv3qzdu1Zouaiq4nwtHlND3/TFYlhEr3SLctiSfg3n+d/gPGswKM+tAK3HaRaLxePxOnbsaP0vjIyM2GzqfwSUVKL7NXTlR0ffiKDjVz7NBwDtPg35xx9/AIAJlz/URJtLNn5kbsNjscVi8W+//abFw6J+Df07aJ3mF0f0FTx0HtyS3hPn+d/gPGswKM+tAPWD3FuMHDlSIpEUFhY++ReVlZW//PIL5bu+V1dXA/HXCVFShcT0a421VWiDHS2efzQ0NERGRgLAyHYWAq1+nDLlCXoZmADAyZMntXhYtExm9bMnarX2ZzxweHyeUAfIOv9oyXMsOM9vhPPcFIPy3ArQd5wWCATz5s17++kyi8WaP3++SKT9BXdoCF350TMipPfUTArV4tIWCQkJaBUa1Adp10Cj9gCQm5uruc3ZcujhArlUIhMTMulBz7g9vLyqTDS0Qhad4Tw3hfP8dvTPM6HoO04LhcKgoCCqW9EsKENEn9ajPoIn1CXi4FJxPfpCKBRq65jx8fEAIGSznXS0/0HKU/TiPOzSpUvaOqbmZ5c1EtKvod0AiX6MEE3Sbsn8SpznN8J5fgVT8twK0HecZhCUIXJO69nNWPPoPWjeyVrc1ARNBLXg67R8WuzrjLk8EYcLWp1uqvnZCerXOFweEYd9BVrxXiaTvfcRcJ7fCOf5FUzJcyuAx2mGQZ9htU7zTn5l59CWQBc2LfmENBgAzPlCAKitrdXWAfX19dEXBPVrXML+KV7X2NhIWq2WwHnWwHl+C6bkmSB03y+LEQwMDIyNjXV1CbmCpyESiUQGRgRdJwQAHX1DIZetxfnzIpHIUFfXWEuPr7xOh80BAC2ujaz52RUy6du/syXIWZanJVVwnt8I5/mN6J/nVgCP01pQW1tbVVVF9M5d9fX19bXVcgkxVdTqxrqaRgC1Wq2tQ9bX19eIxdU8onYHl6qUQMxtVA5hfTE06T0J1ZIqOM9vhPP8RvTPcyvA+B9+7ty55Ew4pAk5MR+N+TovtvHW4uKFRkZGAPBMStQ0kxKZBLR6G1Xzs2v+NbRLISfwtOYVWpw/RSicZw2c57dgSp4JwqTz6YKCgpiYmMLCQnQNRK1W19XVRUVF/d///R+1DUNXCMmZkahSELI5GF/3xTtZi7M3u3TpAgDFMomKgM+DtQp5rVIBLx8+0QrNzy7QJaRfU8rJmAuDzoNbslgmzvMb4Ty/gil5bgUYM05HRUWNGDHijX+l9d1b3xVagZboJ/zQ7E25lJD5FPyXj5pocb6Gv78/ADSqlDmN9Q7afpTlXsOLc4XAwEBtHVPzs/MJePAGAND2TUT3OGib15bcXcZ5fiOc51cwJc+tADOue0ul0i+++EIoFO7YsSMjI+NxE3l5eWi5+VYP/ZjiakJW6dMzfrHchBaXWfD19UXv4Rs12m/zleoyAOjUqZMWzz/y8vIAgMsX8HUI6RTQ747odb4QNNbSGc5zUzjPb0f/PBOKGeO0RCIpKiras2fP7NmzXVxc7JqwtbWlfIoBevajqqqK0CpmZmYA0FhXTcTBdQ3b8XVFAJCdna2tYxoYGAwbNgwAzlU+k2tvOg8A1Cjk8bUVABAcHKzFw2ZmZgKAkYU1i639uTxKhRw9HoN+j8RBOURPnb4fnOc3wnluikF5bgWYMU7z+Xxzc3NbW1uqG/JmKKnkrEdPUL8GACaWNqDtjd/nzJkDABVy2aWqUi0e9kxFsVSlYrPZs2bN0uJhMzIyAMDY0laLx9RorH3xiyP6/APlsCW9J87zv8F51mBQnlsBZozTOjo669evP3v27Ot/tWjRIi2uDPB+UFKJ3nkNJVWlUIgJuOwGL9/PWjz/AIAPPvjA09MTAHY8y0PTZFquWNZ46HkhAIwfP97NzU0rx0TQ+YeJla0Wj6lRX/kcfWFqSsg2jhoohy3Z7Qrn+d/gPGswKM+tAH3nkd28efP58+eaP/J4vIyMjKVLl/bs2ZPFYsHL+d6XL19esWIFdc0EALCwsADi+zUbGxv0RU3pU11D7X+GNenYGQDu3r0rl8u1dTeIxWJt3brV39+/SiFf/STz585uLVxzUaJSLc/PlKpUurq6P//8s1YaiTx//hw94GdqrbUbhE3VlBahL7R4A/J19fX1aIXFlvRrOM//BudZg0F5bgXoO07v379/165dr7x47tw5ShrzdprzD6VSSdzuBZrL/jXPn1o4eGj9+B2dvQGgvr4+MTGxd+/e2jps7969v/322x9//DGxruqPZ3nzLN9//yI1wLrC7JzGegDYuHGjtbW1thoJAHFxcegLa3dfLR5Wo+b5UwDQ1dW1srIi4viIZpNBrZxP4zy/DucZYVCeWwH6jtNjxoxJT0+fP3/+W6aJ1dbWbt68mcxWvZG5+YtN4ysqKoi7j2Jpacnn82UyWU3pUyKOb+XizeULFDJpXFycFvs1AFi1alVqauq5c+eOlhU1KBULO3blvvtZiESl/LEg+3pNOQDMnj37k08+0WIL4WW/Zmxho29qrt0jI7WlT4Hgkw9ochLckquROM9vh/MMjMpzK0DfcdrJyWnSpEkhISFv/7a0tDQWAdvXvBN0nRAA8vPzievX2Gy2nZ1dVlZW+ROt7ajTFJcvtHL2fnLvVlxc3LJly7R4ZDabffDgwcDAwOTk5HOVJc9kku9tnI3eZbOdUplkef6D7MZ6ABg8ePBvv/2mxeYhqF+z9iDk5AMAKgofw8u1MoiDHsUBgI4dO773QXCe3w7nGRiV51aAvvPI7OzsPvvsM/S1TCaLj49/41K9mzZt0uKWOO9Hc8EqNzeX0EJoDkvZk4cEHd/G0w8Arl69qrncpC2GhoZXr15Fj53cra+enJV46HmhtBlr6zcolX+WFkzNTkKd2ty5c6Oiovh8La9XnJ6ejibddHLrod0ja6Dfmru7O0HHR1C/ZmxsbGho+N4HwXn+TzjPDMpzK0DfcbqpxsbG4ODg1+d1q1SqDRs2mJmZde3a9bvvvpNKyVtvtiljY2O0hVx+fj6hhby8vACgovCxipgl2Lr6BgKATCYLDw/X+sFFItGJEydWrFjB5XLrlYqdz/ImZSXuLclPa6hVvvYJTKZWpdZXby1+HJqZsLckX6JScbnc33//fdu2bUSseHDgwAEA4HB5dj79tH5wAGioKhfXVAJZ/VoLn2DEeW4OnGdgSJ5bAfpe936FXC6PjIzk8/l+fn6dOnVCL6alpS1ZsoTH4/Xv3//EiRN37949ffo0JSu2W1tbZ2RkEH3+4e3tDQBKuayiMKe9raPWj9+uk32HLi6ljx8cOHDg888/1/rxWSzWypUrJ0yYsGzZsoiIiHK59M/Sgj9LC4RsjiVf2J4n0OFwGpXK53JJsUzS9Oxk4MCBW7ZscXFx0XqTAECpVB46dAgAuvQMEOoT8rG9JCcdfaHdB29eh/q1ll+NxHluDpxnpuSZ6ZhxPg0AtbW1YWFhISEh1tbWf/zxB7oGjvqR06dPHz9+PCMjw8XFBQWUfOhSoeZuCkG8vb3RzfinWakElXAdMAoAkpKSHjx4QFAJFxeXM2fOXL16dfTo0ehDlUSlzJU0JNRVxlWXJdRV5knEqFPT09ObPHny9evXL126RFCnBgCXLl0qLi4GANfAMQSVeJqVAgCGhoYODg4ElUC0df6B89x8OM/EwefTCGPOp9VqtZ+f3/z580Ui0fbt23v27Ont7Y02zkJ3uTgczvLly2fOnDlz5kzym+fq6hodHY3uCRHHxMTEwcEhOzu7OCvVc8h/zLB7P879RsTtW69SKvfu3bthwwYiSiD9+vXr16+fRCK5fft2cnJydnZ2SUmJWCzW09OztLR0dnb29vb29fXlcgmP6LZt2wBAx8CYoIuEAPAs6x4A9OzZk9A1buVyOfrk2vJ+Def5XeE8a50W88x0jBmnXV1dL168iG6b9ezZc9myZTt37kR/hTbeAQAjIyOqphugO21Pnz6trKwk9FE/Pz+/7Ozs4qwUgo6vZ2zqEjAy/fKZHTt2LF26lOhFAYVCYUBAQEBAAKFV3iIjIyMyMhIAPIeGct5lym7zqVXKZw/vA4Cfnx8Rx9fIyspCmwu1/GokzvP7wXnWIi3mmemYcd2bx+P16NFDs4O6rq7u06dP5XI5+i023YDvjXPCSaCZT5GWlkZoIfQkaOXT/NqyZwSV8P1wNovFrq+v37JlC0El6GPdunVqtZov1O0+aipBJZ5mpcokYgDo27cvQSUQTfZaPrsH55mhcJ5bJWaM0zo6OkKhUHO37OTJk1evXt25c+eRI0cAoLCwEL1eU1ND9B21f+Pk0H9/twAAIABJREFU5ITmbRLdrwUFBaEvcpOuElSiXUc7h96DAWDLli01NTUEVaGDvLw8FKFuQ0J0DIjaHTU36RoAGBoa9u/fn6ASCMqelZVVy8+AcZ6ZCOe5tWLGOM1isaZPn+7u7t67d29nZ+dp06Z99dVXN2/ePHv2rJub2+LFiy9evJiamjp16lSi18f5Nzwez8nJCYjv16ytrdGny7zkG8RV8ZvwCbBY1dXVy5cvJ64K5RYuXKhQKDhcXo+xM4irkpd8HQAGDhxI9B66KHtaOfnAeWYinOfWihnjNAD06NHj8OHDLBarpKTko48+WrJkyZ49e8LDwy9cuDBo0KAhQ4Z4eXllZGT8+OOPVLUQ5Sk5OZnoQsOHDweAJ6k35VIJQSXM7Jxd+g0HgG3btqWmEjUXl1pRUVEREREA0CN4hsikPUFV6sqfleZmAsDQoUMJKqGRmJgI2ruZh/PMLDjPrRhjxmkAGD16dHx8fFVV1d69e3V1dXV0dEJCQqysrJYuXXrp0qWIiIjU1FTN0sTk8/HxAYDU1NT6+npCC40aNQoAZBJx3t1rxFUJmPE1X1ekVCrnzZtH1V1/4kgkki+++AIAjMw79Q6ZS1yhrBsXQK1msVgffPABcVUA4OHDh2h/OV9f7SwVifPMIDjPrRuTxuk3KigoUKvVAwcOHDVqlGaiGSX8/f0BQKFQ3L59m9BCvXr1Qiu9ZN24QFwVkUl7/0mfA8CtW7e2b99OXCFKrFq1Cj3yMfiT77l8AhfGyboeDQC+vr7a3Q3pdTduvLhujHLYcjjPDILz3Loxfpxes2YN0Z/3m8nb21tXVxeaJIwgLBZr/PjxAJCbGKeQEXWpEAC8R0wxt3cFgEWLFpFw/ZM058+fX7duHQC49B/R2YfAOas1pUXPHqUBwH9uJ9NyKHX29vbauqSE88wUOM+tHq3HablcvnDhwhUrViiVyg0bNkx+zejRo0+fPk11M1/gcrm9evUC4vs1AJgwYQIAyCRiNPeSIGwOZ+SSX/i6IqlUOn78+NYxV7agoGDq1KlqtdrQzGrw3BWE1sr4OwLUai6Xi8YhQqHUafHkA+eZEXCe2wJaj9MymezIkSNHjx5VKBQcDufwa86ePav1nXBaAqUqMTFR1Yydc1qiZ8+eaMW+1AtHCS1kbGkT9OkqAMjNzQ0LC1MSs18CacRi8YQJEyoqKtgczsivfhHo6RNYTK1Ou3QaAIYPH25lZUVgIYDi4uJHjx6Btvs1nGeaw3luI2g9Tuvp6eXl5d27d08gEAQGBo4bN66mpkbdRF1d3bhx46hu5v+gB/9ra2vRTEXisFisWbNmAcCT1Fs1pUWE1nLuN7zbkAkAEBkZScRmBqRRKpUTJ05MSEgAAP/J8y0duxFariA9Ef1qPvroI0ILAcD58+fRF3369NHiYXGe6Qznue2g9TgNADo6OgKBAADs7e2nT5/+ylbTIpEoODhY67u3vre+ffvq6ekBwMWLF4muNX36dD6fr1arkiL+JLrWoDnLbTx6AcD27dvXrl1LdDkiqNXq6dOnnz17FgA8h4b6fjiL6Iqp548AgJmZ2bBhw4iuhfJmZ2eHHnrWFpxn2sJ5blPoO05LJJKTJ09q/qinpzdixIjXv43H46Etd+hAIBCgpX2jo6OJrtW+ffupU6cCQFrsSWnDqztzaxeHyxuz7Dc0B6fpyuoM8tVXXx08eBAA7H0DB3+ynMUiNvm1Zc8e3ooBgI8//pjo5SAUCkVsbCw0WdtLW3CeaQvnuU2h7zgtlUqjoqL+89vOnj0rlUpJaE8zocf/ExMTKysria61cOFCFoslk4jvxZwgupZAT//DlbuMLWzUavWcOXNWr15NdEVtUSqVc+bMQXslWTh2G7nkFxabQ3TR5Mi/VEoln8//9NNPia51+/ZtNCWKiKUncJ7pBue5DaLvOA0Ax44d69mz54gRI0a9yYgRI3r27Emf+d7IkCFDAECpVDbnQ0YLubi4oNUG7p79SymXEV1O19AkZM1+YwsbAFixYsWcOXPoPw2nsbExODgYnTBZOHb78Ps/eAICny59UbSuGo00oaGhFhYWRJdDFwkFAsGAAQO0fnCcZ1rBeW6bWLRdmqempsbIyKg531ldXU3VdpZv5Ojo+PDhw5EjR6K7R4SKi4tDaR70yXLv4ZOJLgcADdUVJ1Z+XPr4AQCMHDnywIEDzfw1ke/p06cTJky4efMmANh17z/66008oQ4Jda/9+cvtEzu5XG5qaqqrqyvR5Tw9Pe/duzdixAi0oaHW4TzTBM5zm0Xr8+levXrFxMSkpqbeu3fv1q1bnTp1io+Pv/dScnJyVFSUt7c31c18FXq4MCYmhoQHNAMCAgYPHgwAt4/vVMjIuP6vZ9Ru4k8HrD18ASAyMtLb2zspKYmEuu8qOjray8sLdWpuA8cGf7eNnE5NXFOZfO4gAEyZMoWETu3hw4f37t0DgIkTJxJUAueZDnCe2zJaj9Oenp6DBw/u1q2bh4eHm5uboaGhRxNeXl7Dhg1DG9rTyqRJkwBAKpWeOXOGhHIrV64EgPqK0vuxhN/VQ/i6ovGrdncfPR1YrLy8PH9//82bNxP9iG3zyWSypUuXDh8+vKysjMXm+E/+Ytj8n9gcwu/hIQknd8kkYi6XS87WTEePHgUAoVA4cuRIgkrgPFML5xmj7zhtYGCwfv36pq+w2W9o7aZNm155WItyLi4uaK+h48ePk1Cud+/e6K7eraPbZWKSllDlcHmBs74Zu+w3gZ6BVCpdsGCBn58fHdZivHLlSrdu3dauXatWq/WMTUN+2Ns7dB6Q9URA5dP8u5F/AUBYWJidnR0JFVHGhg0bpq9P1BoXOM8UwnnGgM7jNIvFas6+GiKRiD7PZWmgU5DY2FgSZskCwKpVq1gsVkNVeXz4VhLKaXTtNWj65lPo+ZY7d+74+vrOnz+/urqazDZolJSUhIWFDRo0KCsrCwBsPXtP33wGXc8kzdV961UKhVAoJOfkIzMzE+3RS/Q6jjjP5MN5xjToO04zWkhICIvFkslk6BlHovXq1Qs9e3o38q/yghwSKmoYdug4ZcOxwXO/F+obKhSKLVu22NjYLF26tLS0lLQ25OXlffrpp507dz548KBarTZobzFm6ZYJP+zVMzYlrQ0A8OTerUcJlwFgyZIlnTt3JqHinj17AEBHRwdt4UwcnGecZxIqkpZnxqHvfG8AkEqlaDEyAKivr+/Tp098fPwrJ9lNv4dWAgICrl696u7ufv/+fRLKlZSUODo61tbWWjp2m7z+CNHrHryusbbqxqHfUi8cVauUACAUCmfOnLlw4cIuXboQVzQtLe3nn38ODw9XKBQAwOHxe46d4RfyCaFb+72RXCrZ99nI6pJCa2vrzMxMtNMUoWQyWceOHcvKysLCwg4cOEB0OZxnnGdCkZxnZqHv+XRNTc2CBQuavvLGmR2ffvopPfe9+fjjjwEgLS0NLcBLNHNzc7RWQ3H2vZTzR0io+AodA+PBc7+fvvm0c7/hLBZbIpFs3bq1a9eu/fr127lzp3Z/R8XFxRs3bvT09PTw8Dh48KBCoeDw+N7DJ8/eGdM3bAH5nRoA3Dzye3VJIYvF2rNnDwmdGgBERESgTWhQ0oiG84zzTCiS88ws9D2frqmpGT58+Lp160xNTVksllgsHjNmzKlTpzTn00qlsqSk5Ouvv46NjaXV89NIY2OjlZVVVVXVrFmzdu3aRUJFpVLZq1evpKQkvq5o1rYoUbsOJBR9o8qnebeP73hw9ZxKoUCvcLncHj16BAQEBAQE9OnTB60a/U6qq6uvX79++fLluLi4tLQ0zYc2Ll/gETS+17iPKfx5n+dlHVg4TqVUTp069c8/CV+eGgkKCoqJiXF0dMzMzCRhigbOM84zoUjOM7PQepxm6DonGp9//vnvv/8uEony8/PbtWtHQsWUlJSePXsqFAobz94hq/eQNi/0jcQ1FQ/iIh/ERZbkZDR9XSgUuru7Ozg4ODs7Ozg4dO7cWUdHR0dHx9jYGABUKlVNTU1DQ4NEIsnJycnMzMzOzs7Ozs7IyFC87CUBgMVid3T1cQ0c7dg7iNjt/P6LQib968sJZfnZpqammZmZpqZk3ETMzs52cXFRqVQ///zzkiVLSKgIOM84z4ShJM8MQutx2tLSsmvXrubm5m98IkulUpWUlDx69Ki4uJie47QmfD/88MN3331HTtEffvjh+++/B4D+0xf7jiN8F53mKMt/mJdyo+B+QlF6okwibsmhhPqGndx6Wrv37NprkEF7wpcwbI5LO39MjjwIAPv27Zs+fTo5RWfPnr1r1y6RSJSbm9u+fXtyiuI8IzjPWkdJnhmE1uP0ggUL9u3b9/ZvmzJlytatW+k5TgPAmDFjIiIiLCws8vPzydl/U6lUBgYGXrt2jcPlTV4fjh4yoQmVUlnyKK3gfkJ5waOqksLqZwWNtVVv/1/0jE2NLW2NLazbWdvbdPMz6+xI/pSit3icGHfyh7mgVoeGhh45QtJt1LKyMhsbm8bGxs8//3zLli3kFEVwnpvCedYKCvPMFPQdpxsbG8+ePRsSEvL2bzt8+PDYsWN1dMhYQu89XL16Fe0M+Oeff6JHTUhQUFDg6elZVVVl2KHjtF9PCvVp+iEGAKQNtVXPChXSRoVMKm2oQy8KRQZcgZDDE5h07MwXkjGH5f3UlBb9uXCcpK7G1tY2JSWFtHWhly9f/uOPP3I4nKysLHt7e3KKIjjPb4fz/B4ozDNT0HecbjX8/Pxu377t5eVF5vJGR48eDQ0NBQA7n37jVvxBq8/srYNCJjn01aTSxw+4XO6lS5f69+9PTt3GxkZra+vy8vIJEyagRRZJhvPcKrXZPDMCjjvhFi5cCAApKSlXrlwhrWhISMiiRYsAIPfutesHNpFWt61Qqy/8thxtsrR+/XrSOjUA2LNnT3l5ObzMFflwnluhNpxnRsDn04RTKBQODg55eXl9+vS5ceMGaXWVSmVQUNDly5cBYPDcFV7D8P4zWoN2+gMAktdkEIvFXbp0KSkp8fPzQ1snkQ/nufVpy3lmBHw+TTgul7t06VIAiI+Pv3DhAml1ORxOeHg4ut9zacePOQnknf20binnj6BOzdfX948//iCz9NatW0tKSgBgxYoVZNZtCue5lWnjeWYEfD5NBoVC4ejomJub6+Pjk5iYSOZT/Dk5Ob179y4rK+MJhKFr/rRw7EZa6VYpJ+HK6Z8+V6uU9vb2N2/eJPMZktraWjs7u4qKCn9//+vXr5NW93U4z60GzjMj4PNpMnC5XPQM6N27d8nZxFfD3t4+MjJSV1dXLpWc/GFuWf5DMqu3MoXpiZHrF6lVSnNz8+joaJIf9NyyZUtFRQUAoAU1KYTz3DrgPDMFPp8miUKhcHV1ffjwoZOT0/3793k8HpnVL1y4MHr0aJlMpm9qPmntQcMOHcms3jqU5maGL5sqbagzNTW9cuUK2pKZNNXV1Q4ODmVlZQEBAX///TeZpd8I55npcJ4ZBJ9Pk4TL5f72228AkJWVtW3bNpKrDxky5Pjx43w+v6685NBXk0jeK7AVKExPRJ2aoaHh+fPnSe7UAGDFihVlZWVcLpcmC0HgPDMazjOz4PNpUg0bNiw6OtrY2PjRo0fkrJDcVHh4+JQpU5RKpY6+0Ycrd1o4eJDcAIZ6nBh3dt0CuVSiq6t79uzZgQMHktyA9PR0Ly8vhUIxZ84ckmf6vB3OMxPhPDMOZ+XKlVS3oQ3x8vLauXOnWCwWi8XDhg0jubqbm5ubm9uZM2ekjQ3Z8ResnLwMzaxIbgPjZMdfPPvzIoVMis480GpcJAsNDc3NzTUwMDh9+vR7bM1EHJxnxsF5ZiJ83ZtULi4uaHfVP/744+7du+Q3IDg4OCoqSk9PT9pQd2z5jIy/I8hvA4MknNwdsW6BUi5r377933//3bdvX/LbcOrUKXQDb+nSpWZmZuQ34C1wnpkF55mh8HVvspWVlTk5OVVWVnp5ed25c4fL5ZLfhhs3bowdO7a8vBxYrF7jZ/ed/AWLzSG/GXQmlzTGbFuJ+v2uXbtGRUV17dqV/GbU1dW5uLgUFRV17tz5wYMHQqGQ/Da8Hc4zI+A8Mxq+7k02PT09MzOziIiIkpISAwOD3r17k98Ga2vrcePGxcTElJeXF2Xcffbwvl33fjwBfs+8UFNadOz7mfkp8QDg7+9/6dKljh2pmVG8ZMmSS5cusViso0ePOjo6UtKGt8N5pj+cZ6bD59MUUKvVH3zwwaVLl/T09NLT021tbSlpRnV19ahRo9AKA4ZmVqO+/hXPxAGAvLvXz21c0lhXDQBjx449cuSIQCCgpCV37tzp3bu3UqmcNm3a/v37KWlDc+A80xnOcyuAx2lqPH782MPDQywWDxky5Pz582Su6NSUQqH46quvfv31VwBgc7n+k77w/XBWm92MSCmXXTvwa2LEflCreTzeunXrFixYQNWvRiaT9ezZ8969e2ZmZpmZmSYmJpQ0o5lwnmkI57nVwNe9qWFiYiIQCGJjY3NycoyNjXv16kVJM9hsdlBQkIuLy8WLF6USyZN7t54+SLZ26ynQ06ekPRQqL8g5uXrOw1uxAGBpaRkdHT1+/HiqOjUA+PLLLyMiIgBgz549PXr0oKoZzYTzTDc4z60JPp+mjFKp7N69e2pqqlAoTExMdHNzo7Axjx8/DgsLu3XrFgDwhbr+U77wHhHG5rSJyTgKmeTW0T/unNqjVMgBYMyYMbt37yb/aeCmoqOjhw8frlarx40bd+LECQpb0nw4zzSB89z64HGaSllZWT4+PmKx2MPD486dO1TdN0IUCsVPP/30ww8/KBQKADC3dx06///a2zpQ2CQSFD24G715WVXxEwDQ0dHZuHHj3LlzqW1SaWlpt27dSktLrays7t+/z6ArhDjPlMN5bpXwdW8qmZqampqanjt3rrS0VCwWBwUFUdgYNpvdv3//kSNH3r17t7i4uL6y7H7MsYaqCktHD55Ah8KGEaS27FnMtpV/710nqasGgEGDBp0/f/6DDz6gtlVqtTokJCQ1NZXFYp06dcrV1ZXa9rwTnGcK4Ty3Yvh8mnpjx45Fmw4dO3Zs/PjxVDcHlErl1q1bV6xYUV1dDQACPQP/yZ97Dg3lcEnda4E40oa6O6f3Jp7ep5BJAMDCwmLdunVhYWFUtwsA4Jdffvnyyy8BYNGiRRs3bqS6Oe8D55lkOM+tHh6nqVdRUeHt7V1QUCASiRISElxcXKhuEQBAeXn5ihUrdu7ciS4bGphZ9g6d5xY4ltE3+WQScfK5g3dO7ZHU1QCAjo7OokWLvvnmG5FIRHXTAACuXr06cOBApVLZrVu3hIQEaq8bvzecZ9LgPLcReJymhcTERH9/f5lM5ujomJCQYGhoSHWLXnjw4MEXX3xx+fJl9Ec9o3Y+o6Z5DQsV6BlQ27B31VBVfvfsgZTocGlDLQCwWKwxY8Zs2rTJ2tqa6qa9UFRU5OPj8/z5c2Nj46SkJDs7O6pb9P5wnomG89ym4HGaLnbt2jV79mwACA4OPnHiBIVPULzu8uXL33///c2bN9Ef+boij8Efug8KZsSsnOKs1LRLpzL+jlDIpOiVoKCgH374gVYPh8hksoCAgFu3brHZ7HPnzg0dOpTqFrUUzjNBcJ7bIDxO08jMmTP37t0LAGvWrFm2bBnVzXnVpUuX1q9fHxMTo3nFwsHDY/CHzgEj+EJdChv2RpK6mvQrp+/HnNBsTsxms4ODgxcvXuzr60tt2163ZMmSDRs2AMDKlStXrFhBdXO0A+dZi3Ce2zI8TtOIRCLx9/e/e/cui8X666+/Jk+eTHWL3iAlJWXDhg0nT56USl98nOcJhPa+A536DrXz6cfh8altnkxc/yjhctb16PyUePT8KACIRKJJkyYtXryYkr0H/tP27dvnzZsHAKNGjTpz5gytTj1bAue55XCeMcDjNN0UFRX5+fkVFRXx+fzo6OjAwECqW/RmlZWVBw8e3L17d1pamuZFgZ6+TTc/O5++nb376puak9meqmcFeXev5969VpiWIJdKNK/7+fnNnDkzJCSEJjNrXnf27Nng4GClUunr63vlyhVdXdqdybUEzvP7wXnGmsLjNO2kpaX17du3pqbG0NDw+vXr7u7uVLfobe7fvx8eHh4eHp6Xl9f0dRMrW0tHTwtHDysnL1Prrmxtb3eokEnL8rOfZqY8e3j/aVZK7fPipn/r6uoaGhoaEhJCzxMOjYSEhMDAQLFYbGNjk5iY2L59e6pbpH04z82B84y9BR6n6ejKlStDhw6VyWQdO3a8desWVZvQNZ9arU5KSrpw4UJ0dPSdO3eUSmXTv+Vwee2s7c06O5padzU0szLoYGVoZqVr+A7LEjVUldeUFtU8f1pT+vR5bmbZk4dVxfmqf1bh8/n+/v5DhgwZMmQIzQcDJC0trV+/ftXV1YwYwFoC5/kVOM/YO8HjNE0dOnQoLCxMrVbb29vHx8ebmZlR3aLmqqysvHjxYlxc3M2bNx88eKBSqd74bSw2R0ffUCgyFOob8oS6XB6f+3LDYLmkUamQyxsbGuuqJXU1jfU18C8p5XK53bp16927d//+/YOCgmh7MfB1jx496tOnT1lZma6ubmRkJG0vCGsLzjPOM/be8DhNX5s2bVq4cCEAuLu7X7161djYmOoWvbOampr7L6WlpT169Ki8vLwlBzQzM3NycvLw8PDw8PD09HRxcdHT09NWa0lTUFDQp08fdNf25MmTI0aMoLpFZMB5fh3OM9YceJymtTVr1nz33XcA4OvrGxsbq6/P+O35qqurc3JyHj9+XFZWVllZWVlZWV1dLRaLGxsbJZIX82V0dXUFAoGenp6xsbGJiYmJiUn79u27dOlib29vYMCw9SheV1pa6u/vn5OTw+FwDh06FBISQnWLyIPzjPOMvQ81Rm+oXwOAXr16VVVVUd0crEUKCgocHR0BgMVi7d69m+rmUADnuTXBeSYHHqcZYNGiRahr8/Lyev78OdXNwd5Tbm6ura0t6tQ2btxIdXMog/PcOuA8kwaP08ywdOlS1LU5OzsXFxdT3RzsnWVmZlpaWqJObdu2bVQ3h2I4z0yH80wmPE4zxk8//YS6Njs7u4cPH1LdHOwdxMXFoRnOHA5n//79VDeHFnCemQvnmWR4nGaSTZs2oUX4TExMrl+/TnVzsGY5cuQI2tGPz+cfPXqU6ubQCM4zE+E8kw+P0wxz7NgxoVAIAAKB4MiRI1Q3B/sPP//8MxqKjI2Nr1y5QnVzaAfnmVlwnimBx2nmuXHjhomJCboztGbNGpVKRXWLsDeQy+WffvopurRrY2OTkZFBdYtoCueZEXCeKYTHaUbKysrq3Lkzes+MGzeurq6O6hZh//D8+fOAgADNrGY8VertcJ5pDueZWnicZqpnz5717dsXvXNcXFyys7OpbhH2wp07dzp16oR+NaNHj66traW6RQyA80xbOM+Uw+M0g8nl8vnz56P3j6Gh4dmzZ6luEabes2cPuuHK4XDwVdx3gvNMQzjPdIDHacY7ePAg2uSVxWJ9/vnnjY2NVLeojaqqqgoNDUXDjImJSXR0NNUtYiScZ5rAeaYPPE63BikpKZrbe+7u7vfv36e6RW3OtWvXbGxsNDfwHj9+THWLGAznmXI4z7SCx+lWoumHX6FQuGXLFqVSSXWj2gS5XP7dd99xOBwAYLPZS5YskclkVDeK8XCeqYLzTEN4nG5V9u/fr9mBp1+/fngyDtESEhLc3d3RP7i5uXlMTAzVLWpVcJ5JhvNMT3icbm1ycnJ69eqF3mk6Ojpr166Vy+VUN6oVqqurW7BgAZvNRv/Uw4YNw1tKEAHnmRw4z3SGx+lWSCaT/fjjjzo6Ougt5+3tfffuXaob1apERUWhnYLQzOTt27fjq7LEwXkmGs4zzeFxutXKzs4eMGAAeu+x2ewZM2bg1Qla7uHDh0OGDIGXgoODnz59SnWj2gScZyLgPDMCHqdbM5VKtWfPHrQoIwAYGBhs2LBBKpVS3S5Gqqur++qrr/h8PvrHtLCwOHPmDNWNaltwnrUI55lB8Djd+pWVlc2bN4/L5aI3pL29/cGDB/F1reaTSqVbt261sLBA/4B8Pv/LL7+sqqqiul1tFM5zC+E8Mw4ep9uKjIyMphe43N3dIyIiqG4U3SmVyj///FPzLC8AjB079tGjR1S3C8N5fh84zwyFx+m25cKFC97e3pp3qa+v7/nz5/FagK+TyWRHjhxxcXHR/FsFBATExcVR3S7sH3CemwnnmdHwON3mqFSqY8eOOTk5ad6xLi4uu3fvlkgkVDeNFmpqatavX6/ZeAAAevTogR8kpS2c57fDeW4F8DjdRsnl8n379mmWBgQAc3PzNWvWVFRUUN00yhQVFS1evFizsAYAuLq6njp1Cp+f0R/O8+twnlsNPE63aTKZ7K+//vL09NS8k0Ui0fTp02/evEl108ijVCpjYmLGjx8vEAg0/w4DBgw4d+4c7tGYBedZjfPcGuFxGlOr1erY2NigoCAWi6V5Yzs7O//yyy9lZWVUN41ARUVFq1evbnoSxuVyQ0NDk5KSqG4a1iI4zzjPrQlLrVYDhgEAQHZ29r59+/bv319aWope4fP5AwcOHD9+/KhRo9q1a0dt87SluLj49OnTx48fv3HjhlKpRC/a2trOmDFj+vTpTe/kYYyG84zz3DrgcRp7lVwuj4qK2rVr18WLFzVvex6PN2DAgA8//HDo0KEdO3aktoXvJz8//9y5c8eOHYuPj1epVOhFgUAwatSo2bNnBwYGahY3xloTnGeM6fA4jf2rJ0+eHD58+Pjx4ykpKU1fd3d3HzJkyJAhQ/z9/TXrGdGTRCK5du3ahQsXoqOjs7KyNK+z2Ww/P78PP/wwNDTU3NycwhZipMF5xhgKj9PYf8vNzT1+/PixY8eSk5Obvq6vr++gLDLrAAAC9UlEQVTr69u7d28/Pz8/Pz9DQ0OqWthUZWXlrVu3bt26FR8fn5iY2NDQ0PRv+/TpExISMm7cOEtLS6paiFEL5xljFjxOY+8gPz//woULFy5cuHz5cn19fdO/YrPZrq6uPj4+rq6uHh4ebm5upHUcT548ycjISEtLS0tLS0lJyczMfCXVhoaGgwYNQudMDL3IiREB5xljBDxOY+9DJpPFx8dfv34dfdKvqal5/XtMTExcXV3t/qldu3Y8Hu/9ikql0oqKipycnNwmHjx48G/V0VlRv379/Pz8NMtBY9jrcJ4xOsPjNNZSKpXqwYMHN2/eTEpKSklJSU9Pl0gkb/l+fX19ExOTdu3amZqaokuLPB5PJBI1/Z66ujqFQgEAlZWVFRUV6L+vXPF7hUgk8vDw8PDw6NGjh5+fn5OTU9PHcjCsmXCeMbrB4zSmZQqFIisrKzU1NS0tLS8v78mTJ0+ePNE8GKMVLBbLwsLC1tbWxsbG1tbW09PT09PT3t4eT3DFtA7nGaMcHqcxMkgkkvz8/JKSkmfPnpWXl5eVlZWVlT1//ry2thYApFKpWCxu+v0ikQhdTjQyMurQoYOpqWn79u3NzMzMzMysrKysra1pPi8Xa91wnjEy4XEawzAMw+gLX1fBMAzDMPrC4zSGYRiG0RcepzEMwzCMvvA4jWEYhmH0hcdpDMMwDKMvPE5jGIZhGH3hcRrDMAzD6AuP0xiGYRhGX3icxjAMwzD6wuM0hmEYhtEXHqcxDMMwjL7wOI1hGIZh9IXHaQzDMAyjLzxOYxiGYRh94XEawzAMw+gLj9MYhmEYRl94nMYwDMMw+sLjNIZhGIbRFx6nMQzDMIy+8DiNYRiGYfSFx2kMwzAMoy88TmMYhmEYfeFxGsMwDMPoC4/TGIZhGEZfeJzGMAzDMPrC4zSGYRiG0RcepzEMwzCMvvA4jWEYhmH0hcdpDMMwDKMvPE5jGIZhGH3hcRrDMAzD6AuP0xiGYRhGX3icxjAMwzD6+n/0EMA5Rz+8QAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image('images/bias_variance.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose the center (red) of each diagram is the real function to learn. As we move away from the center the prediction gets worse and worse. Each dot in the picture is a realization of the model given a subsample of the dataset; each circle is a different model (whose particular realizations are the dots) and model's characteristics are described by the two corresponding labels (horizontal and vertical).\n", "\n", "Having a model (top left) with both Low Bias and Low Variance is practically impossible since, as we will see next, if we decrese one the other increase (in this case both generalization and approximation will be good and we could learn almost the real function); the hard part is hence finding the best possible balance between the two. In case of Low Bias and High Variance (top right), the model is capable of representing the correct function but the model may be too complex, and thus more supsceptible in variation on the dataset. For this reason each dot (function approximation) draw from this model may vary considerably from estimate to estimate, depending on the particular subsample used for training. For High Bias and Low Variance (bottom left) the model is constantly learning a substantially different function respect to the true one, but each run is independent from the particular subsample of data (it generalize well but it approximate poorly). If we have a model that has both High Varianche and High Bias (bottom right) the model si constantly learning a wrong model with high variability between subsamples and thus the probability of picking a good model is very low. \n", "\n", "One can think of Bias and Variance as urn that contains a bunch of candidate approximations of an unknown function $f$. If we have few candidates in the urn (think about degenerating and have only one function in it), but each candidate is far away from the true value of $f$; in this case the Bias is high and the Variance is low, no matter of the dataset we will always return the same function. If we have a bigger urn containing a lot of candidates the probability that it contains the true function is higher, but it is difficult to navigate through the candidates to find the right one. In this case the Bias is lower but the Variance is higher, we have so many varieties that depending on which sample we get the function differs.\n", "\n", "Next we will show what we mean by complexity of the model with some practical examples in order to further understand the Bias-Variance tradeoff." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from utilities import biasvariance\n", "from bokeh.models.ranges import Range1d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this figure, we use polynomials with different degrees `d` to fit the same data.\n", "\n", "For `d=1`, the model suffers from **high bias**: the model complexity is not enough to represent the data.\n", "\n", "At the other extreme, for `d=6` the model suffers from **high variance**: the mode overfit the data because it has too many free parameters. In this case a typical behaviour is that if any of the input points are varied slightly, it could result in a very different approximation. This kind of model will fit perfectly the training data while failing to do so on validation data.\n", "\n", "In the middle picture, for `d=2`, we have found a good model." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"37f4fd2a-bcc7-4d40-bda7-6cf7131dead5\":{\"roots\":{\"references\":[{\"attributes\":{\"source\":{\"id\":\"a56163df-8f53-4b18-9582-4e4ded4f4982\",\"type\":\"ColumnDataSource\"}},\"id\":\"da421b4d-34ef-493e-bca2-7734b421bbf0\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"size\":{\"units\":\"screen\",\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a7e781bf-e1d8-4d36-8389-e9ad293eb60b\",\"type\":\"X\"},{\"attributes\":{\"plot\":{\"id\":\"f729f5fd-29b2-463c-ac73-b6e92782122f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e7049549-74da-4225-8ca6-fbda0945098d\",\"type\":\"BasicTicker\"}},\"id\":\"93f8b81f-e674-49e9-88fb-6f8a65f2ed73\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"end\":1.2,\"start\":-0.2},\"id\":\"1683cb36-a40a-4769-948b-662d3f3aef71\",\"type\":\"Range1d\"},{\"attributes\":{\"axis_label\":\"house size\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"bc56314b-4848-47f3-8045-795ce5224521\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"f729f5fd-29b2-463c-ac73-b6e92782122f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e7049549-74da-4225-8ca6-fbda0945098d\",\"type\":\"BasicTicker\"}},\"id\":\"9afb7f31-64bb-435a-99d1-e656607bbcbe\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e7049549-74da-4225-8ca6-fbda0945098d\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"50598461-a5e1-4d51-850d-a071c878f6f1\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"f729f5fd-29b2-463c-ac73-b6e92782122f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b507256b-61cc-4448-9431-6f8afc11d976\",\"type\":\"BasicTicker\"}},\"id\":\"ec3bccfc-e4b5-4168-93c1-af8d14ddae42\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"04a34060-0611-407a-b2be-e80ee2f700d1\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"b507256b-61cc-4448-9431-6f8afc11d976\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"f729f5fd-29b2-463c-ac73-b6e92782122f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b507256b-61cc-4448-9431-6f8afc11d976\",\"type\":\"BasicTicker\"}},\"id\":\"21cf73f3-de4a-4388-92bb-46e8a48c9fde\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"fa965424-82c1-4477-a2be-9162377fd3b4\",\"type\":\"ColumnDataSource\"}},\"id\":\"c293df5f-c3d3-4879-a758-291320925ae7\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"47d533a0-318a-4b75-bbd8-d5cb9340b177\",\"type\":\"X\"},{\"attributes\":{},\"id\":\"bc56314b-4848-47f3-8045-795ce5224521\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"7d4f028c-7ddd-40a5-8215-56789397058b\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"plot\":{\"id\":\"58d6e4e5-49b6-46c7-8172-10f458960313\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"99b6dd55-d3f8-40aa-afaf-f39f9e9de6c7\",\"type\":\"BasicTicker\"}},\"id\":\"4db54fe1-9996-4931-bb63-90e1d7630aa3\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"248bae42-75f2-4e7f-a7a4-f16d5d8e19f8\",\"type\":\"PanTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"8cb74792-1c9a-4244-aefd-333137624cdc\",\"type\":\"PanTool\"},{\"id\":\"82d43561-f73e-45fc-b9b2-8fe2ab11a8bc\",\"type\":\"WheelZoomTool\"},{\"id\":\"a0dce7f8-e9d8-4c27-8df5-b7a876052848\",\"type\":\"BoxZoomTool\"},{\"id\":\"b6448281-63b3-4d4c-9a3f-bf062d5126dc\",\"type\":\"SaveTool\"},{\"id\":\"6c335f56-ce87-43b8-84c1-2779e2a13308\",\"type\":\"ResetTool\"},{\"id\":\"b312a26c-2295-4e28-ae18-60c1ba2fc143\",\"type\":\"HelpTool\"}]},\"id\":\"7e8652dc-4f9b-4f9a-94a0-b97e702d8a35\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"house size\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"be948805-d96b-4ccb-9422-49fcbe78d6b3\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"58d6e4e5-49b6-46c7-8172-10f458960313\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"99b6dd55-d3f8-40aa-afaf-f39f9e9de6c7\",\"type\":\"BasicTicker\"}},\"id\":\"42fac973-4411-4efa-af53-b42a947bfd94\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"fa965424-82c1-4477-a2be-9162377fd3b4\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"a7e781bf-e1d8-4d36-8389-e9ad293eb60b\",\"type\":\"X\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"47d533a0-318a-4b75-bbd8-d5cb9340b177\",\"type\":\"X\"},\"selection_glyph\":null,\"view\":{\"id\":\"c293df5f-c3d3-4879-a758-291320925ae7\",\"type\":\"CDSView\"}},\"id\":\"d5e7551c-284c-4a9f-9806-bea93b2cadcd\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"a82799b1-838f-417c-9505-db1aed3f70ef\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"99b6dd55-d3f8-40aa-afaf-f39f9e9de6c7\",\"type\":\"BasicTicker\"},{\"attributes\":{\"overlay\":{\"id\":\"7d4f028c-7ddd-40a5-8215-56789397058b\",\"type\":\"BoxAnnotation\"}},\"id\":\"bcc2d905-6d75-4ff9-837f-76f761a88738\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2f53c954-086a-4da7-9607-709810ffce4a\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"9ae85fb7-0bf0-4ae4-8bc9-5a81230b1835\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"8ccb8333-90e2-4f67-93d0-f2e7c262be7f\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"0ade2186-bf75-4083-b73f-8b738c22042b\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"b26d04e3-eea6-438a-ae95-fcb670069eea\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"price\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"04a34060-0611-407a-b2be-e80ee2f700d1\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"58d6e4e5-49b6-46c7-8172-10f458960313\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d0da7983-2315-4177-9e3b-b7c408c3dda1\",\"type\":\"BasicTicker\"}},\"id\":\"bd6943ac-c03d-44ec-9901-6ce18a3e77d1\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"d0da7983-2315-4177-9e3b-b7c408c3dda1\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"end\":12},\"id\":\"1605eea3-7be4-48fa-8a38-f999107108fc\",\"type\":\"Range1d\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"58d6e4e5-49b6-46c7-8172-10f458960313\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d0da7983-2315-4177-9e3b-b7c408c3dda1\",\"type\":\"BasicTicker\"}},\"id\":\"6e13ed50-360d-4de5-899d-065f4925e87e\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"50598461-a5e1-4d51-850d-a071c878f6f1\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2f021860-4f66-4807-af89-e4a1f551593d\",\"type\":\"X\"},{\"attributes\":{\"children\":[{\"id\":\"c7a1117b-0c60-4b22-9ffd-77b46c6b5478\",\"type\":\"ToolbarBox\"},{\"id\":\"7bb1302d-0821-4c57-aba8-1c70f8138af7\",\"type\":\"Column\"}]},\"id\":\"56c34867-3290-461d-bdd1-50502893bcb0\",\"type\":\"Column\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"edf6eb61-effe-4569-b740-ea27ea2c940d\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"8cb74792-1c9a-4244-aefd-333137624cdc\",\"type\":\"PanTool\"},{\"attributes\":{\"children\":[{\"id\":\"58d6e4e5-49b6-46c7-8172-10f458960313\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"a7950369-e04b-4465-b50b-6b9ba866dbb9\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"f729f5fd-29b2-463c-ac73-b6e92782122f\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"f0657079-7bcb-4d2f-b25f-a0f14d598db7\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"82d43561-f73e-45fc-b9b2-8fe2ab11a8bc\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"tools\":[{\"id\":\"8cb74792-1c9a-4244-aefd-333137624cdc\",\"type\":\"PanTool\"},{\"id\":\"82d43561-f73e-45fc-b9b2-8fe2ab11a8bc\",\"type\":\"WheelZoomTool\"},{\"id\":\"a0dce7f8-e9d8-4c27-8df5-b7a876052848\",\"type\":\"BoxZoomTool\"},{\"id\":\"b6448281-63b3-4d4c-9a3f-bf062d5126dc\",\"type\":\"SaveTool\"},{\"id\":\"6c335f56-ce87-43b8-84c1-2779e2a13308\",\"type\":\"ResetTool\"},{\"id\":\"b312a26c-2295-4e28-ae18-60c1ba2fc143\",\"type\":\"HelpTool\"},{\"id\":\"fb710561-f1c0-42c4-84cb-ccd7fd44694a\",\"type\":\"PanTool\"},{\"id\":\"86da2ac8-80dc-414f-af61-f61396bdc27f\",\"type\":\"WheelZoomTool\"},{\"id\":\"f0d044ea-0ffb-4f36-b722-e9647085f79a\",\"type\":\"BoxZoomTool\"},{\"id\":\"baf6b668-cc7f-4196-ac76-cff9f1e1d9e8\",\"type\":\"SaveTool\"},{\"id\":\"375f8909-e3d5-4295-966d-b85a130bc2b4\",\"type\":\"ResetTool\"},{\"id\":\"156c3b15-4e99-4e73-8e6b-4c583350d6fe\",\"type\":\"HelpTool\"},{\"id\":\"248bae42-75f2-4e7f-a7a4-f16d5d8e19f8\",\"type\":\"PanTool\"},{\"id\":\"a82799b1-838f-417c-9505-db1aed3f70ef\",\"type\":\"WheelZoomTool\"},{\"id\":\"bcc2d905-6d75-4ff9-837f-76f761a88738\",\"type\":\"BoxZoomTool\"},{\"id\":\"9ae85fb7-0bf0-4ae4-8bc9-5a81230b1835\",\"type\":\"SaveTool\"},{\"id\":\"8ccb8333-90e2-4f67-93d0-f2e7c262be7f\",\"type\":\"ResetTool\"},{\"id\":\"b26d04e3-eea6-438a-ae95-fcb670069eea\",\"type\":\"HelpTool\"}]},\"id\":\"80f53430-d06a-482e-bb06-0a289cd9ee46\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"edf6eb61-effe-4569-b740-ea27ea2c940d\",\"type\":\"BoxAnnotation\"}},\"id\":\"a0dce7f8-e9d8-4c27-8df5-b7a876052848\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"b6448281-63b3-4d4c-9a3f-bf062d5126dc\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"dd6cf6a0-66a7-48a3-924a-168a08e4a65b\",\"type\":\"ColumnDataSource\"}},\"id\":\"17bcfd1c-45be-4044-81a4-90eda6c2d10a\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"6c335f56-ce87-43b8-84c1-2779e2a13308\",\"type\":\"ResetTool\"},{\"attributes\":{\"data_source\":{\"id\":\"dd6cf6a0-66a7-48a3-924a-168a08e4a65b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"643bf746-a3d3-449c-8abc-d3348268060c\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"cc954ac3-c09a-4279-ae9d-c033ecc7cab5\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"17bcfd1c-45be-4044-81a4-90eda6c2d10a\",\"type\":\"CDSView\"}},\"id\":\"d83c77e8-b56b-41eb-88d6-e6e9f30e4be7\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"b312a26c-2295-4e28-ae18-60c1ba2fc143\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"cc954ac3-c09a-4279-ae9d-c033ecc7cab5\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"house size\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"0d698704-ed28-49af-a92b-5fa3ed838392\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"a7950369-e04b-4465-b50b-6b9ba866dbb9\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"591b4c5a-ad08-4b84-900d-24662cae4aaa\",\"type\":\"BasicTicker\"}},\"id\":\"50c5e292-5b91-42f0-a759-aa55485f1083\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"643bf746-a3d3-449c-8abc-d3348268060c\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"size\":{\"units\":\"screen\",\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"61123ae2-3051-4667-9099-c10018578a4c\",\"type\":\"X\"},{\"attributes\":{\"toolbar\":{\"id\":\"80f53430-d06a-482e-bb06-0a289cd9ee46\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"c7a1117b-0c60-4b22-9ffd-77b46c6b5478\",\"type\":\"ToolbarBox\"},{\"attributes\":{},\"id\":\"fa360afc-dda0-43fe-b5fa-a8c3a490f290\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"be948805-d96b-4ccb-9422-49fcbe78d6b3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}}},\"id\":\"dd6cf6a0-66a7-48a3-924a-168a08e4a65b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"plot\":{\"id\":\"a7950369-e04b-4465-b50b-6b9ba866dbb9\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"591b4c5a-ad08-4b84-900d-24662cae4aaa\",\"type\":\"BasicTicker\"}},\"id\":\"90baae20-6849-44b5-9080-574f228bb97c\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"4ed81c00-81ed-4d21-92d7-8fdd2ecb22c6\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2deff9a7-9e77-43d9-91cb-89035aeb5ea6\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"425e95ed-4f77-487f-8081-91b9324c77dc\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"22454807-2a74-4cd8-8bce-642497a43f6b\",\"type\":\"CDSView\"}},\"id\":\"1f1dd997-c437-47e9-9010-399591bbb44f\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"52f70a03-afce-452f-83e9-1d4aca75a9f5\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"end\":1.2,\"start\":-0.2},\"id\":\"77ca28e2-52de-4a1b-8d82-1fa6597ef273\",\"type\":\"Range1d\"},{\"attributes\":{\"callback\":null,\"end\":12},\"id\":\"7f9cf80a-55ba-4324-8cbd-302608287cb4\",\"type\":\"Range1d\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"fb710561-f1c0-42c4-84cb-ccd7fd44694a\",\"type\":\"PanTool\"},{\"id\":\"86da2ac8-80dc-414f-af61-f61396bdc27f\",\"type\":\"WheelZoomTool\"},{\"id\":\"f0d044ea-0ffb-4f36-b722-e9647085f79a\",\"type\":\"BoxZoomTool\"},{\"id\":\"baf6b668-cc7f-4196-ac76-cff9f1e1d9e8\",\"type\":\"SaveTool\"},{\"id\":\"375f8909-e3d5-4295-966d-b85a130bc2b4\",\"type\":\"ResetTool\"},{\"id\":\"156c3b15-4e99-4e73-8e6b-4c583350d6fe\",\"type\":\"HelpTool\"}]},\"id\":\"97a35056-78cc-4b14-bb15-69e7ee0df90d\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"57c3cba3-b20c-4f81-bfbd-6e2f0336417b\",\"type\":\"X\"},{\"attributes\":{\"below\":[{\"id\":\"50c5e292-5b91-42f0-a759-aa55485f1083\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"8b0e8017-0025-41e2-bd58-5367cbcbf53b\",\"type\":\"LinearAxis\"}],\"plot_height\":240,\"plot_width\":240,\"renderers\":[{\"id\":\"50c5e292-5b91-42f0-a759-aa55485f1083\",\"type\":\"LinearAxis\"},{\"id\":\"90baae20-6849-44b5-9080-574f228bb97c\",\"type\":\"Grid\"},{\"id\":\"8b0e8017-0025-41e2-bd58-5367cbcbf53b\",\"type\":\"LinearAxis\"},{\"id\":\"7060430d-d020-487f-8fa1-f2c65d5e90d9\",\"type\":\"Grid\"},{\"id\":\"10fa1185-a81b-4b5f-be44-29f0c0837443\",\"type\":\"BoxAnnotation\"},{\"id\":\"83edbe69-6be5-4a89-bc47-a403ff3c1ca8\",\"type\":\"GlyphRenderer\"},{\"id\":\"a4c281e1-6612-4ddc-a472-b5c9541e966c\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"abb5118c-04b0-4dad-a5d1-eba632b670c8\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"97a35056-78cc-4b14-bb15-69e7ee0df90d\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"77ca28e2-52de-4a1b-8d82-1fa6597ef273\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"fa360afc-dda0-43fe-b5fa-a8c3a490f290\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"7f9cf80a-55ba-4324-8cbd-302608287cb4\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"52f70a03-afce-452f-83e9-1d4aca75a9f5\",\"type\":\"LinearScale\"}},\"id\":\"a7950369-e04b-4465-b50b-6b9ba866dbb9\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"a63626fc-bc53-4f4f-b93f-1015a7a2df70\",\"type\":\"ColumnDataSource\"}},\"id\":\"e7ec9ffc-8434-4fcf-839f-34225f809db1\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":null,\"text\":\"d = 2\",\"text_font_size\":{\"value\":\"11pt\"}},\"id\":\"abb5118c-04b0-4dad-a5d1-eba632b670c8\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"591b4c5a-ad08-4b84-900d-24662cae4aaa\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"a56163df-8f53-4b18-9582-4e4ded4f4982\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"61123ae2-3051-4667-9099-c10018578a4c\",\"type\":\"X\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"57c3cba3-b20c-4f81-bfbd-6e2f0336417b\",\"type\":\"X\"},\"selection_glyph\":null,\"view\":{\"id\":\"da421b4d-34ef-493e-bca2-7734b421bbf0\",\"type\":\"CDSView\"}},\"id\":\"ac8130a0-7638-4aea-92aa-a6954ca6c286\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"7adcac87-81ca-4154-ac8d-fd8d4c136d25\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"a7950369-e04b-4465-b50b-6b9ba866dbb9\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"4967b0a1-663c-4aa8-9ce4-2190b1a18e15\",\"type\":\"BasicTicker\"}},\"id\":\"8b0e8017-0025-41e2-bd58-5367cbcbf53b\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4967b0a1-663c-4aa8-9ce4-2190b1a18e15\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"a7950369-e04b-4465-b50b-6b9ba866dbb9\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"4967b0a1-663c-4aa8-9ce4-2190b1a18e15\",\"type\":\"BasicTicker\"}},\"id\":\"7060430d-d020-487f-8fa1-f2c65d5e90d9\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"size\":{\"units\":\"screen\",\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1b0ca99d-bfaa-493b-8ff2-e5956747c3a8\",\"type\":\"X\"},{\"attributes\":{},\"id\":\"0d698704-ed28-49af-a92b-5fa3ed838392\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"exSuR+F6hD8qHSlQNcWTP7U4bubUFaM/NdvkMohssj8ESFBNGcnBP2JlpStUK9E/d9N4kQaT4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[8]},\"y\":{\"__ndarray__\":\"mFTPLeiE8j/9CkHYOsn4P+9CRWpgUAhAuf5G+DbJE0D01/ulsMoWQAHhRdOMqxxA1ilwpbpXIkDvQCA9AvMiQA==\",\"dtype\":\"float64\",\"shape\":[8]}}},\"id\":\"a63626fc-bc53-4f4f-b93f-1015a7a2df70\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"10fa1185-a81b-4b5f-be44-29f0c0837443\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"fb710561-f1c0-42c4-84cb-ccd7fd44694a\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"a63626fc-bc53-4f4f-b93f-1015a7a2df70\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1b0ca99d-bfaa-493b-8ff2-e5956747c3a8\",\"type\":\"X\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2f021860-4f66-4807-af89-e4a1f551593d\",\"type\":\"X\"},\"selection_glyph\":null,\"view\":{\"id\":\"e7ec9ffc-8434-4fcf-839f-34225f809db1\",\"type\":\"CDSView\"}},\"id\":\"83edbe69-6be5-4a89-bc47-a403ff3c1ca8\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"plot\":null,\"text\":\"d = 1 (under-fit; high bias)\",\"text_font_size\":{\"value\":\"11pt\"}},\"id\":\"8e667fbd-ef5d-43a7-90bb-d276d3073f36\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"86da2ac8-80dc-414f-af61-f61396bdc27f\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"10fa1185-a81b-4b5f-be44-29f0c0837443\",\"type\":\"BoxAnnotation\"}},\"id\":\"f0d044ea-0ffb-4f36-b722-e9647085f79a\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"baf6b668-cc7f-4196-ac76-cff9f1e1d9e8\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"4ed81c00-81ed-4d21-92d7-8fdd2ecb22c6\",\"type\":\"ColumnDataSource\"}},\"id\":\"22454807-2a74-4cd8-8bce-642497a43f6b\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"375f8909-e3d5-4295-966d-b85a130bc2b4\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}}},\"id\":\"4ed81c00-81ed-4d21-92d7-8fdd2ecb22c6\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"156c3b15-4e99-4e73-8e6b-4c583350d6fe\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1cb7e114-7d2b-410f-b242-4e0836ca8556\",\"type\":\"ColumnDataSource\"}},\"id\":\"f1d5cfb0-08b1-4994-b583-497f6cd0010b\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"248bae42-75f2-4e7f-a7a4-f16d5d8e19f8\",\"type\":\"PanTool\"},{\"id\":\"a82799b1-838f-417c-9505-db1aed3f70ef\",\"type\":\"WheelZoomTool\"},{\"id\":\"bcc2d905-6d75-4ff9-837f-76f761a88738\",\"type\":\"BoxZoomTool\"},{\"id\":\"9ae85fb7-0bf0-4ae4-8bc9-5a81230b1835\",\"type\":\"SaveTool\"},{\"id\":\"8ccb8333-90e2-4f67-93d0-f2e7c262be7f\",\"type\":\"ResetTool\"},{\"id\":\"b26d04e3-eea6-438a-ae95-fcb670069eea\",\"type\":\"HelpTool\"}]},\"id\":\"f8cc2b7e-4d9e-476e-af08-b3c9a95726e4\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"7adcac87-81ca-4154-ac8d-fd8d4c136d25\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"end\":1.2,\"start\":-0.2},\"id\":\"a9e13c63-7723-41fa-84d9-fae3ff41a9c2\",\"type\":\"Range1d\"},{\"attributes\":{\"below\":[{\"id\":\"9afb7f31-64bb-435a-99d1-e656607bbcbe\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"ec3bccfc-e4b5-4168-93c1-af8d14ddae42\",\"type\":\"LinearAxis\"}],\"plot_height\":240,\"plot_width\":240,\"renderers\":[{\"id\":\"9afb7f31-64bb-435a-99d1-e656607bbcbe\",\"type\":\"LinearAxis\"},{\"id\":\"93f8b81f-e674-49e9-88fb-6f8a65f2ed73\",\"type\":\"Grid\"},{\"id\":\"ec3bccfc-e4b5-4168-93c1-af8d14ddae42\",\"type\":\"LinearAxis\"},{\"id\":\"21cf73f3-de4a-4388-92bb-46e8a48c9fde\",\"type\":\"Grid\"},{\"id\":\"7d4f028c-7ddd-40a5-8215-56789397058b\",\"type\":\"BoxAnnotation\"},{\"id\":\"d5e7551c-284c-4a9f-9806-bea93b2cadcd\",\"type\":\"GlyphRenderer\"},{\"id\":\"d83c77e8-b56b-41eb-88d6-e6e9f30e4be7\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"f85a9096-be73-4b59-8a1a-1064061a0dfb\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"f8cc2b7e-4d9e-476e-af08-b3c9a95726e4\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"a9e13c63-7723-41fa-84d9-fae3ff41a9c2\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"7b229fc0-c9bc-4bd8-99a3-d6f9c426ef33\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"4667a856-35d6-47c4-830b-ea20d41931e9\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"9bc46b60-05b9-45bb-b404-46b2cc011527\",\"type\":\"LinearScale\"}},\"id\":\"f729f5fd-29b2-463c-ac73-b6e92782122f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"end\":12},\"id\":\"4667a856-35d6-47c4-830b-ea20d41931e9\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"9bc46b60-05b9-45bb-b404-46b2cc011527\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"425e95ed-4f77-487f-8081-91b9324c77dc\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"7b229fc0-c9bc-4bd8-99a3-d6f9c426ef33\",\"type\":\"LinearScale\"},{\"attributes\":{\"data_source\":{\"id\":\"1cb7e114-7d2b-410f-b242-4e0836ca8556\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"129b9126-af6f-44c3-889f-064ecf1c350b\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"abea7784-135b-42f8-b2cf-310e8a09f56f\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"f1d5cfb0-08b1-4994-b583-497f6cd0010b\",\"type\":\"CDSView\"}},\"id\":\"a4c281e1-6612-4ddc-a472-b5c9541e966c\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"f0657079-7bcb-4d2f-b25f-a0f14d598db7\",\"type\":\"Row\"}]},\"id\":\"7bb1302d-0821-4c57-aba8-1c70f8138af7\",\"type\":\"Column\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"exSuR+F6hD8qHSlQNcWTP7U4bubUFaM/NdvkMohssj8ESFBNGcnBP2JlpStUK9E/d9N4kQaT4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[8]},\"y\":{\"__ndarray__\":\"mFTPLeiE8j/9CkHYOsn4P+9CRWpgUAhAuf5G+DbJE0D01/ulsMoWQAHhRdOMqxxA1ilwpbpXIkDvQCA9AvMiQA==\",\"dtype\":\"float64\",\"shape\":[8]}}},\"id\":\"fa965424-82c1-4477-a2be-9162377fd3b4\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"abea7784-135b-42f8-b2cf-310e8a09f56f\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"42fac973-4411-4efa-af53-b42a947bfd94\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"bd6943ac-c03d-44ec-9901-6ce18a3e77d1\",\"type\":\"LinearAxis\"}],\"plot_height\":240,\"plot_width\":240,\"renderers\":[{\"id\":\"42fac973-4411-4efa-af53-b42a947bfd94\",\"type\":\"LinearAxis\"},{\"id\":\"4db54fe1-9996-4931-bb63-90e1d7630aa3\",\"type\":\"Grid\"},{\"id\":\"bd6943ac-c03d-44ec-9901-6ce18a3e77d1\",\"type\":\"LinearAxis\"},{\"id\":\"6e13ed50-360d-4de5-899d-065f4925e87e\",\"type\":\"Grid\"},{\"id\":\"edf6eb61-effe-4569-b740-ea27ea2c940d\",\"type\":\"BoxAnnotation\"},{\"id\":\"ac8130a0-7638-4aea-92aa-a6954ca6c286\",\"type\":\"GlyphRenderer\"},{\"id\":\"1f1dd997-c437-47e9-9010-399591bbb44f\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"8e667fbd-ef5d-43a7-90bb-d276d3073f36\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"7e8652dc-4f9b-4f9a-94a0-b97e702d8a35\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1683cb36-a40a-4769-948b-662d3f3aef71\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"2f53c954-086a-4da7-9607-709810ffce4a\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1605eea3-7be4-48fa-8a38-f999107108fc\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"0ade2186-bf75-4083-b73f-8b738c22042b\",\"type\":\"LinearScale\"}},\"id\":\"58d6e4e5-49b6-46c7-8172-10f458960313\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"129b9126-af6f-44c3-889f-064ecf1c350b\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"exSuR+F6hD8qHSlQNcWTP7U4bubUFaM/NdvkMohssj8ESFBNGcnBP2JlpStUK9E/d9N4kQaT4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[8]},\"y\":{\"__ndarray__\":\"mFTPLeiE8j/9CkHYOsn4P+9CRWpgUAhAuf5G+DbJE0D01/ulsMoWQAHhRdOMqxxA1ilwpbpXIkDvQCA9AvMiQA==\",\"dtype\":\"float64\",\"shape\":[8]}}},\"id\":\"a56163df-8f53-4b18-9582-4e4ded4f4982\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2deff9a7-9e77-43d9-91cb-89035aeb5ea6\",\"type\":\"Line\"},{\"attributes\":{\"plot\":null,\"text\":\"d = 6 (over-fit; high variance)\",\"text_font_size\":{\"value\":\"11pt\"}},\"id\":\"f85a9096-be73-4b59-8a1a-1064061a0dfb\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}}},\"id\":\"1cb7e114-7d2b-410f-b242-4e0836ca8556\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"56c34867-3290-461d-bdd1-50502893bcb0\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"37f4fd2a-bcc7-4d40-bda7-6cf7131dead5\",\"elementid\":\"0abf9384-d673-4100-adf1-293f015f58e8\",\"modelid\":\"56c34867-3290-461d-bdd1-50502893bcb0\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "56c34867-3290-461d-bdd1-50502893bcb0" } }, "output_type": "display_data" } ], "source": [ "biasvariance.plot_bias_variance(8, random_seed=42, err=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Bias-Variance Tradeoff explained with a regression example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section we will explore a simple **linear regression** problem.\n", "This can be accomplished within scikit-learn with the `sklearn.linear_model` module.\n", "\n", "We consider the situation where we have only 2 data points: " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"d94563c4-6b5d-4c09-928e-ac89af196d32\":{\"roots\":{\"references\":[{\"attributes\":{\"formatter\":{\"id\":\"6a4b3a40-00c4-42e2-b876-dda64a865be0\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"078a7c98-8429-4b49-a912-fc3660d85210\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e0385473-8bbe-4809-bf89-c053898d5a67\",\"type\":\"BasicTicker\"}},\"id\":\"012cec6a-9510-48c2-bcad-d3f8669bc1b1\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e0385473-8bbe-4809-bf89-c053898d5a67\",\"type\":\"BasicTicker\"},{\"attributes\":{\"formatter\":{\"id\":\"a475abc2-2b70-4d16-a72d-cd13071d39dc\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"078a7c98-8429-4b49-a912-fc3660d85210\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ea09be7f-da5d-4cfa-a39e-878db5ce2cd5\",\"type\":\"BasicTicker\"}},\"id\":\"b1f0a4a9-be36-4713-b50d-055095f45383\",\"type\":\"LinearAxis\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1659dc99-d425-4c9b-ac58-1e4760e98b67\",\"type\":\"PanTool\"},{\"id\":\"e2b57148-2e7f-4f24-ae5b-fd7e7337cb63\",\"type\":\"WheelZoomTool\"},{\"id\":\"327c692b-3a9a-413e-8b4d-1689ce25cb63\",\"type\":\"BoxZoomTool\"},{\"id\":\"404bc7dd-4266-4053-9362-71088c844e81\",\"type\":\"SaveTool\"},{\"id\":\"266dede3-c4b2-4877-bfee-3ce8c67d144d\",\"type\":\"ResetTool\"},{\"id\":\"89f9cdb5-f827-4799-afca-c4d163b8427a\",\"type\":\"HelpTool\"}]},\"id\":\"553660e1-8536-4a47-847f-e74367109f09\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"ea09be7f-da5d-4cfa-a39e-878db5ce2cd5\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"078a7c98-8429-4b49-a912-fc3660d85210\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ea09be7f-da5d-4cfa-a39e-878db5ce2cd5\",\"type\":\"BasicTicker\"}},\"id\":\"10226596-4273-4eff-bee4-3a4da43693e2\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"2e78d9a1-ef21-4984-b38f-1f1ea6e811b9\",\"type\":\"ColumnDataSource\"}},\"id\":\"8392a0e1-8b7f-4025-9a3d-e735d441d919\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"0c152d94-a9e6-4c5d-83f4-5691c50726de\",\"type\":\"ColumnDataSource\"}},\"id\":\"8edd2830-0a4f-4278-90e9-1e4db07a2bfe\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAAsDz+////////Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"2e78d9a1-ef21-4984-b38f-1f1ea6e811b9\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4142e944-e77a-4776-ab67-04cf88d342be\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e45e519f-69ca-4faa-999c-df2a87f527af\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null},\"id\":\"00372a15-8d23-43b6-a295-cafeb2dfa319\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"cb531b8c-d03b-490f-b507-1ea447d7339a\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"0c152d94-a9e6-4c5d-83f4-5691c50726de\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"96e4317b-8a10-42d0-a4d3-6997c235b579\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1659dc99-d425-4c9b-ac58-1e4760e98b67\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"6a4b3a40-00c4-42e2-b876-dda64a865be0\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"012cec6a-9510-48c2-bcad-d3f8669bc1b1\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"b1f0a4a9-be36-4713-b50d-055095f45383\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"012cec6a-9510-48c2-bcad-d3f8669bc1b1\",\"type\":\"LinearAxis\"},{\"id\":\"0b185cd4-a77d-42ea-83f0-4668ed6955c4\",\"type\":\"Grid\"},{\"id\":\"b1f0a4a9-be36-4713-b50d-055095f45383\",\"type\":\"LinearAxis\"},{\"id\":\"10226596-4273-4eff-bee4-3a4da43693e2\",\"type\":\"Grid\"},{\"id\":\"96e4317b-8a10-42d0-a4d3-6997c235b579\",\"type\":\"BoxAnnotation\"},{\"id\":\"cae28993-9430-47cd-94e1-3772cd98294e\",\"type\":\"GlyphRenderer\"},{\"id\":\"22b1eee1-cd92-47d3-8707-6b28b4b8cc27\",\"type\":\"GlyphRenderer\"}],\"title\":null,\"toolbar\":{\"id\":\"553660e1-8536-4a47-847f-e74367109f09\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"a1008ef7-8342-42e7-91a7-465d81d17f59\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"cb531b8c-d03b-490f-b507-1ea447d7339a\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"00372a15-8d23-43b6-a295-cafeb2dfa319\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"edf566a1-addc-435c-b782-365acc3a9849\",\"type\":\"LinearScale\"}},\"id\":\"078a7c98-8429-4b49-a912-fc3660d85210\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"a1008ef7-8342-42e7-91a7-465d81d17f59\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"e2b57148-2e7f-4f24-ae5b-fd7e7337cb63\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"96e4317b-8a10-42d0-a4d3-6997c235b579\",\"type\":\"BoxAnnotation\"}},\"id\":\"327c692b-3a9a-413e-8b4d-1689ce25cb63\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a36ae381-288e-433a-891b-e1f931c22e60\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"404bc7dd-4266-4053-9362-71088c844e81\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"266dede3-c4b2-4877-bfee-3ce8c67d144d\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"edf566a1-addc-435c-b782-365acc3a9849\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"89f9cdb5-f827-4799-afca-c4d163b8427a\",\"type\":\"HelpTool\"},{\"attributes\":{\"data_source\":{\"id\":\"2e78d9a1-ef21-4984-b38f-1f1ea6e811b9\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2a8b7a53-ee8f-4a23-82bd-6835e43b7379\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"4142e944-e77a-4776-ab67-04cf88d342be\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"8392a0e1-8b7f-4025-9a3d-e735d441d919\",\"type\":\"CDSView\"}},\"id\":\"22b1eee1-cd92-47d3-8707-6b28b4b8cc27\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"0c152d94-a9e6-4c5d-83f4-5691c50726de\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"a36ae381-288e-433a-891b-e1f931c22e60\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"e45e519f-69ca-4faa-999c-df2a87f527af\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"8edd2830-0a4f-4278-90e9-1e4db07a2bfe\",\"type\":\"CDSView\"}},\"id\":\"cae28993-9430-47cd-94e1-3772cd98294e\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"a475abc2-2b70-4d16-a72d-cd13071d39dc\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"plot\":{\"id\":\"078a7c98-8429-4b49-a912-fc3660d85210\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e0385473-8bbe-4809-bf89-c053898d5a67\",\"type\":\"BasicTicker\"}},\"id\":\"0b185cd4-a77d-42ea-83f0-4668ed6955c4\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2a8b7a53-ee8f-4a23-82bd-6835e43b7379\",\"type\":\"Line\"}],\"root_ids\":[\"078a7c98-8429-4b49-a912-fc3660d85210\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"d94563c4-6b5d-4c09-928e-ac89af196d32\",\"elementid\":\"5bf83cd5-5f59-4ccb-abac-eaeb0eedaca4\",\"modelid\":\"078a7c98-8429-4b49-a912-fc3660d85210\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "078a7c98-8429-4b49-a912-fc3660d85210" } }, "output_type": "display_data" } ], "source": [ "from sklearn import linear_model\n", "X = np.array([0.5, 1.0]).reshape(2,1)\n", "y = np.array([0.5, 1.0])\n", "X_test = np.array([0.0, 2.0]).reshape(2,1)\n", "regr = linear_model.LinearRegression()\n", "regr.fit(X, y)\n", "fig = bk.figure(plot_width=400, plot_height=300, title=None)\n", "fig.circle(X[:,0], y, size=5)\n", "fig.line(X_test[:,0], regr.predict(X_test), color='green')\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In real life situation, we have noise (e.g. measurement noise) in our data:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import seaborn as sns\n", "import addutils.palette as pal\n", "import random\n", "cat_colors = list(map(pal.to_hex, sns.color_palette('bright', 6)))\n", "random.shuffle(cat_colors)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"e06d7e27-520a-4104-9602-a38e346b3b97\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"4661d043-d57c-4985-81ca-974c6dc8c5c2\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"#03ed3a\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c69b779a-f6ad-48d8-b21f-c6dfc69680b7\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b75c58bf-2234-4616-8a2d-bce5249e5792\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"#e8000b\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"37b4dd52-4f95-4f90-8bc1-a06241b12846\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"70c75fb9-9bb9-46e3-b795-b4996215c55d\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"bbb145e7-0c88-4fde-90b3-ebe6a43c36ab\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"ca5a9dbd-2e10-4452-b4a5-ba6850d3fc2f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c69b779a-f6ad-48d8-b21f-c6dfc69680b7\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"b75c58bf-2234-4616-8a2d-bce5249e5792\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"70339f6b-2862-4b72-8c61-35e334512dce\",\"type\":\"CDSView\"}},\"id\":\"f7de7490-d45f-49a0-a4f3-d28d996fa80f\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"a4a34b13-cc0f-4d5d-9107-4d6ee12921c8\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"70c75fb9-9bb9-46e3-b795-b4996215c55d\",\"type\":\"BoxAnnotation\"}},\"id\":\"45687356-7c7c-411f-adcb-2008b8865094\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"a858b60c-ecca-4890-8147-f6799cff4c6f\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"814107cb-afd7-4dd8-b4d3-758d275f25d4\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"ca5a9dbd-2e10-4452-b4a5-ba6850d3fc2f\",\"type\":\"ColumnDataSource\"}},\"id\":\"70339f6b-2862-4b72-8c61-35e334512dce\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"03b2ecf2-9f47-4e64-951a-99423a622512\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"#03ed3a\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"82902c62-4f3d-4b27-8063-778774628066\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"cd569a42-c940-4409-8260-d0755da04276\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#00d7ff\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"72f925cb-6327-43ec-a6d2-751e9ab06837\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"423bc9eb-f2fb-49c0-a237-0b87660584a0\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"82902c62-4f3d-4b27-8063-778774628066\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"cd569a42-c940-4409-8260-d0755da04276\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"fa980543-271c-4935-83f6-8b8cf985c8e2\",\"type\":\"CDSView\"}},\"id\":\"aed5252c-5373-4843-a9b4-1edbfdd6c653\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"e0d275f3-0974-4ba1-82e8-6a5a7ffa1ff7\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"37b4dd52-4f95-4f90-8bc1-a06241b12846\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2115c819-956f-4f8f-97b7-8c3a75636996\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"6227e72b-c69d-4677-b815-a7752f950099\",\"type\":\"CDSView\"}},\"id\":\"6975136e-fd05-490a-b879-4e09c880f804\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"CBD0PiSH27+pmB0Ugo8CQA==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"423bc9eb-f2fb-49c0-a237-0b87660584a0\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"423bc9eb-f2fb-49c0-a237-0b87660584a0\",\"type\":\"ColumnDataSource\"}},\"id\":\"fa980543-271c-4935-83f6-8b8cf985c8e2\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#e8000b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e4fab903-5778-4822-ab2d-4cfffcfd1497\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"#00d7ff\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"71de7941-4d72-4418-a7eb-8c452a67d610\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2115c819-956f-4f8f-97b7-8c3a75636996\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"ec44eade-2a8f-480b-86f0-03b8af7c0b98\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e4fab903-5778-4822-ab2d-4cfffcfd1497\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"dd75cb39-759e-4771-9b7e-3546c3842708\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5496ac23-a151-4769-9a4b-852648cd7cb7\",\"type\":\"CDSView\"}},\"id\":\"95783551-3924-46e4-81d6-4390962d3014\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"e0d275f3-0974-4ba1-82e8-6a5a7ffa1ff7\",\"type\":\"ColumnDataSource\"}},\"id\":\"6227e72b-c69d-4677-b815-a7752f950099\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"YAzELycslz+8ObGnken5Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"ec44eade-2a8f-480b-86f0-03b8af7c0b98\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#003fff\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c88409bf-dde6-40f9-9e14-153ae51ee8e3\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"dd75cb39-759e-4771-9b7e-3546c3842708\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"a8372622-ba04-4c8d-8152-0ea5dff858ab\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"71de7941-4d72-4418-a7eb-8c452a67d610\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"fb50ea5d-122a-4c6d-a628-fb06f3310e20\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"74e262f5-4b8d-4a4f-9093-e68f74ca28fe\",\"type\":\"CDSView\"}},\"id\":\"79257f9b-e673-4f4d-8183-d10e5e8bc17c\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"ec44eade-2a8f-480b-86f0-03b8af7c0b98\",\"type\":\"ColumnDataSource\"}},\"id\":\"5496ac23-a151-4769-9a4b-852648cd7cb7\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"xXIjTOf55T9Z2FX5ad/sPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"a8372622-ba04-4c8d-8152-0ea5dff858ab\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"#003fff\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"48aeca58-0311-4384-ba30-8c5ee8f83a9d\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"fb50ea5d-122a-4c6d-a628-fb06f3310e20\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"02956f0f-6a61-4bcc-80f3-f50180ca8652\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"72f925cb-6327-43ec-a6d2-751e9ab06837\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"53a1370c-8602-46b7-bf93-a8b44e4b8d89\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"ee5a4ec9-1be0-4226-b395-f1cd4f510d91\",\"type\":\"CDSView\"}},\"id\":\"75a9cfa3-4506-477e-8cf2-5636d8d139ec\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"a8372622-ba04-4c8d-8152-0ea5dff858ab\",\"type\":\"ColumnDataSource\"}},\"id\":\"74e262f5-4b8d-4a4f-9093-e68f74ca28fe\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"U/b/uRJ+8b+QnqpOuF8MQA==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"02956f0f-6a61-4bcc-80f3-f50180ca8652\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#8a2be2\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"61626644-05ca-46aa-bf6e-cddfb7a339cf\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"53a1370c-8602-46b7-bf93-a8b44e4b8d89\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"a56ceca4-10af-419e-9843-7d7840cb49fe\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"48aeca58-0311-4384-ba30-8c5ee8f83a9d\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"94ef6edc-30c4-4933-b6e5-50da88893849\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"ccbf0af1-c4bf-4fae-aaf5-a45a7d502258\",\"type\":\"CDSView\"}},\"id\":\"4a5399a5-4c45-4d5c-a86e-a1614dc53e72\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"02956f0f-6a61-4bcc-80f3-f50180ca8652\",\"type\":\"ColumnDataSource\"}},\"id\":\"ee5a4ec9-1be0-4226-b395-f1cd4f510d91\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"/g6F+08K4z+yHMEXAoTvPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"a56ceca4-10af-419e-9843-7d7840cb49fe\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"#8a2be2\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e9095004-1d35-4c05-b189-a931ecf14895\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"94ef6edc-30c4-4933-b6e5-50da88893849\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"a008faf4-d564-4194-bf3e-99697723e264\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c88409bf-dde6-40f9-9e14-153ae51ee8e3\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"b9e5d75d-1afd-4c4c-9f37-8dea457e4197\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5543d7df-d68a-432d-b83f-abf94c6b6039\",\"type\":\"CDSView\"}},\"id\":\"58078aad-8242-427c-bb6b-6ca844fcebbf\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"a56ceca4-10af-419e-9843-7d7840cb49fe\",\"type\":\"ColumnDataSource\"}},\"id\":\"ccbf0af1-c4bf-4fae-aaf5-a45a7d502258\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null},\"id\":\"2c37ec4b-ed59-445d-bba2-56f36ce36635\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"zLieGd/W0L+kdxfPXmoCQA==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"a008faf4-d564-4194-bf3e-99697723e264\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#ffc400\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ff1406ae-668b-4d08-a12b-0890e657c198\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b9e5d75d-1afd-4c4c-9f37-8dea457e4197\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"c074a475-bdb5-4974-8766-3da04ed82205\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e9095004-1d35-4c05-b189-a931ecf14895\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"fb9eb9aa-c026-4233-b5d1-13f35f150b85\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"4f98e541-2811-4f91-8681-e84e3fd066ad\",\"type\":\"CDSView\"}},\"id\":\"31a28488-18e3-43e5-8b25-5b261001c012\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"a008faf4-d564-4194-bf3e-99697723e264\",\"type\":\"ColumnDataSource\"}},\"id\":\"5543d7df-d68a-432d-b83f-abf94c6b6039\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"sS4u4OJW3z/WLZxfLqjwPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"c074a475-bdb5-4974-8766-3da04ed82205\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"#ffc400\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8863d107-a2a2-4709-91b8-e28d6e55a613\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"3b599f42-8eb4-4beb-b60f-68c6f50b088d\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"fb9eb9aa-c026-4233-b5d1-13f35f150b85\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"afb2c093-56ae-4dcd-8820-2378d87dfb31\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"61626644-05ca-46aa-bf6e-cddfb7a339cf\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5ac75162-443c-42d2-a739-1f313ee15fec\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"c0d7b71b-b74a-478f-bb1a-f80c18432762\",\"type\":\"CDSView\"}},\"id\":\"7d7236df-40ed-4879-9d85-eeb8bb7cddc7\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"c074a475-bdb5-4974-8766-3da04ed82205\",\"type\":\"ColumnDataSource\"}},\"id\":\"4f98e541-2811-4f91-8681-e84e3fd066ad\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"gHhEUPSlrD8oy4nay+n9Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"afb2c093-56ae-4dcd-8820-2378d87dfb31\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"VPYtlxyl5T8IHUWG56PwPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"ca5a9dbd-2e10-4452-b4a5-ba6850d3fc2f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5ac75162-443c-42d2-a739-1f313ee15fec\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"543a30e0-dd64-4bd6-9b2a-bec646acfaa2\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"8863d107-a2a2-4709-91b8-e28d6e55a613\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"6823d710-967e-42f9-9b2a-0e1031b260df\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"5f9a1b5e-a60f-41f2-a61a-2b2b94174dbc\",\"type\":\"CDSView\"}},\"id\":\"fd78b320-e98f-407e-89b8-d7710f1088f8\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"f073142a-cf28-49ed-8d53-a497d854334f\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"301257f4-1a8e-4a0c-9ef7-a5ac39dc54a1\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"f073142a-cf28-49ed-8d53-a497d854334f\",\"type\":\"LinearAxis\"},{\"id\":\"5c56a44f-64be-439c-95eb-47289766d035\",\"type\":\"Grid\"},{\"id\":\"301257f4-1a8e-4a0c-9ef7-a5ac39dc54a1\",\"type\":\"LinearAxis\"},{\"id\":\"c22fa5ba-d7f8-4554-8bf8-3b1f9d77e3d0\",\"type\":\"Grid\"},{\"id\":\"70c75fb9-9bb9-46e3-b795-b4996215c55d\",\"type\":\"BoxAnnotation\"},{\"id\":\"f7de7490-d45f-49a0-a4f3-d28d996fa80f\",\"type\":\"GlyphRenderer\"},{\"id\":\"aed5252c-5373-4843-a9b4-1edbfdd6c653\",\"type\":\"GlyphRenderer\"},{\"id\":\"6975136e-fd05-490a-b879-4e09c880f804\",\"type\":\"GlyphRenderer\"},{\"id\":\"95783551-3924-46e4-81d6-4390962d3014\",\"type\":\"GlyphRenderer\"},{\"id\":\"79257f9b-e673-4f4d-8183-d10e5e8bc17c\",\"type\":\"GlyphRenderer\"},{\"id\":\"75a9cfa3-4506-477e-8cf2-5636d8d139ec\",\"type\":\"GlyphRenderer\"},{\"id\":\"4a5399a5-4c45-4d5c-a86e-a1614dc53e72\",\"type\":\"GlyphRenderer\"},{\"id\":\"58078aad-8242-427c-bb6b-6ca844fcebbf\",\"type\":\"GlyphRenderer\"},{\"id\":\"31a28488-18e3-43e5-8b25-5b261001c012\",\"type\":\"GlyphRenderer\"},{\"id\":\"7d7236df-40ed-4879-9d85-eeb8bb7cddc7\",\"type\":\"GlyphRenderer\"},{\"id\":\"fd78b320-e98f-407e-89b8-d7710f1088f8\",\"type\":\"GlyphRenderer\"},{\"id\":\"49036576-7835-410c-b38e-ce03b75a0aed\",\"type\":\"GlyphRenderer\"}],\"title\":null,\"toolbar\":{\"id\":\"17a73d37-d3ac-46f1-b5fb-ffe689806836\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"2c37ec4b-ed59-445d-bba2-56f36ce36635\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"e2dc96cb-10c1-4062-b2a3-0a9df416449e\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"6dca23ef-e93c-4e10-a1f3-f8118dad30b5\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"48dd5d9b-eef0-4b16-8b13-b94252291c4d\",\"type\":\"LinearScale\"}},\"id\":\"4e4034bb-f47e-4d48-b4be-dd0b96ae0f16\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"afb2c093-56ae-4dcd-8820-2378d87dfb31\",\"type\":\"ColumnDataSource\"}},\"id\":\"c0d7b71b-b74a-478f-bb1a-f80c18432762\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"bbb145e7-0c88-4fde-90b3-ebe6a43c36ab\",\"type\":\"PanTool\"},{\"id\":\"a4a34b13-cc0f-4d5d-9107-4d6ee12921c8\",\"type\":\"WheelZoomTool\"},{\"id\":\"45687356-7c7c-411f-adcb-2008b8865094\",\"type\":\"BoxZoomTool\"},{\"id\":\"3b599f42-8eb4-4beb-b60f-68c6f50b088d\",\"type\":\"SaveTool\"},{\"id\":\"472ef16c-53f6-479f-8921-bfa162f08e83\",\"type\":\"ResetTool\"},{\"id\":\"a858b60c-ecca-4890-8147-f6799cff4c6f\",\"type\":\"HelpTool\"}]},\"id\":\"17a73d37-d3ac-46f1-b5fb-ffe689806836\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"2XhXIAB24D/M8zKhq1PyPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"543a30e0-dd64-4bd6-9b2a-bec646acfaa2\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"+OBpO8gh4z/cCceu3pXzPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"e0d275f3-0974-4ba1-82e8-6a5a7ffa1ff7\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"472ef16c-53f6-479f-8921-bfa162f08e83\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"6823d710-967e-42f9-9b2a-0e1031b260df\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null},\"id\":\"6dca23ef-e93c-4e10-a1f3-f8118dad30b5\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"f23b2a3d-450b-4595-870c-00b33aea21d5\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ff1406ae-668b-4d08-a12b-0890e657c198\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"d0076743-e726-41d8-bd04-e6ca375edc49\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5fea4796-cd56-48a3-abc9-2505ded3c4c4\",\"type\":\"CDSView\"}},\"id\":\"49036576-7835-410c-b38e-ce03b75a0aed\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"formatter\":{\"id\":\"814107cb-afd7-4dd8-b4d3-758d275f25d4\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4e4034bb-f47e-4d48-b4be-dd0b96ae0f16\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"4661d043-d57c-4985-81ca-974c6dc8c5c2\",\"type\":\"BasicTicker\"}},\"id\":\"301257f4-1a8e-4a0c-9ef7-a5ac39dc54a1\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"543a30e0-dd64-4bd6-9b2a-bec646acfaa2\",\"type\":\"ColumnDataSource\"}},\"id\":\"5f9a1b5e-a60f-41f2-a61a-2b2b94174dbc\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"e2dc96cb-10c1-4062-b2a3-0a9df416449e\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"qB+PCNGntz/MpSIiidX6Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"f23b2a3d-450b-4595-870c-00b33aea21d5\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"4e4034bb-f47e-4d48-b4be-dd0b96ae0f16\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"4661d043-d57c-4985-81ca-974c6dc8c5c2\",\"type\":\"BasicTicker\"}},\"id\":\"c22fa5ba-d7f8-4554-8bf8-3b1f9d77e3d0\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"d0076743-e726-41d8-bd04-e6ca375edc49\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"48dd5d9b-eef0-4b16-8b13-b94252291c4d\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"4e4034bb-f47e-4d48-b4be-dd0b96ae0f16\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"27acc78c-fe6a-4101-909e-6e676dca03f4\",\"type\":\"BasicTicker\"}},\"id\":\"5c56a44f-64be-439c-95eb-47289766d035\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"f23b2a3d-450b-4595-870c-00b33aea21d5\",\"type\":\"ColumnDataSource\"}},\"id\":\"5fea4796-cd56-48a3-abc9-2505ded3c4c4\",\"type\":\"CDSView\"},{\"attributes\":{\"formatter\":{\"id\":\"03b2ecf2-9f47-4e64-951a-99423a622512\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4e4034bb-f47e-4d48-b4be-dd0b96ae0f16\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"27acc78c-fe6a-4101-909e-6e676dca03f4\",\"type\":\"BasicTicker\"}},\"id\":\"f073142a-cf28-49ed-8d53-a497d854334f\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"27acc78c-fe6a-4101-909e-6e676dca03f4\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"4e4034bb-f47e-4d48-b4be-dd0b96ae0f16\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"e06d7e27-520a-4104-9602-a38e346b3b97\",\"elementid\":\"bcee1596-4fd4-4fdd-ae43-8173f44b19d3\",\"modelid\":\"4e4034bb-f47e-4d48-b4be-dd0b96ae0f16\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "4e4034bb-f47e-4d48-b4be-dd0b96ae0f16" } }, "output_type": "display_data" } ], "source": [ "np.random.seed(0)\n", "fig = bk.figure(plot_width=400, plot_height=300, title=None)\n", "\n", "for i in range(6):\n", " noise = np.random.normal(loc=0, scale=.1, size=X.shape)\n", " noisy_X = X + noise\n", " regr.fit(noisy_X, y)\n", " \n", " fig.circle(noisy_X[:,0], y, size=8, fill_color=cat_colors[i], line_color='black')\n", " fig.line(X_test[:,0], regr.predict(X_test), color=cat_colors[i])\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, our linear model captures and amplifies the noise in the data. It displays a lot of variance. This means that if we subsample the data and we fit a different model to each subsample (each pair of points) we obtain a model that differ substantially from the true model. There are several techniques to reduce variance. **Regularization** is one of those, it is a way to change the tradeoff between Bias and Variance by putting more weights on either one. We will briefly use it in this example while we leave a more detailed explanation for the next section.\n", "\n", "We can use another linear estimator that uses **regularization**: the Ridge estimator. This estimator regularizes the coefficients by shrinking them to zero, under the assumption that very high correlations are often spurious. High alphas give high regularization (shrinkage):" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"e0b9fa4b-7f8a-4ce3-b223-6b210a7d7617\":{\"roots\":{\"references\":[{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"XvkMu/Ao0j8qLDaxw0X4Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"68338ab0-125e-447e-814b-3ecf1f85fe6b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"05b92d5e-e5f1-4327-a79d-e09a9ac4491a\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"afe2d015-eb36-4751-9eff-1e37a8a1d9be\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#003fff\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3a321fa4-e255-4abf-9eac-b95315004bef\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"bbb185b8-e7e7-4849-b5f0-883841596a99\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"cd4ae352-e83e-4839-a59c-0efc679ae654\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"05b92d5e-e5f1-4327-a79d-e09a9ac4491a\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"ee8b345d-b245-450b-a7e4-f9f3c321710a\",\"type\":\"CDSView\"}},\"id\":\"2defd689-1e01-4fed-ab9b-ef7331514ff4\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"bbb185b8-e7e7-4849-b5f0-883841596a99\",\"type\":\"ColumnDataSource\"}},\"id\":\"ee8b345d-b245-450b-a7e4-f9f3c321710a\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4424ba2d-9a24-4224-a05e-ea96f0439af5\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"4044889d-57fd-40e7-a73e-2844229d70db\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3a321fa4-e255-4abf-9eac-b95315004bef\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"afe2d015-eb36-4751-9eff-1e37a8a1d9be\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"8310cf79-9642-4f47-8f3d-03b56a95b4db\",\"type\":\"CDSView\"}},\"id\":\"b4670143-9355-4cef-93ef-589943abb923\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"39c7da0f-4619-42d2-b34b-6bcdaebefdbd\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"4044889d-57fd-40e7-a73e-2844229d70db\",\"type\":\"ColumnDataSource\"}},\"id\":\"8310cf79-9642-4f47-8f3d-03b56a95b4db\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"+1PBQIpc2z9m1rnxHZj2Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"889266e0-d41d-4740-b3ae-1cdcb9081b9f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"de866f8f-33cd-415b-999a-257f15609330\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"#8a2be2\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"15ac5ee7-6ca0-479b-80af-0dafe0231f60\",\"type\":\"Circle\"},{\"attributes\":{\"line_color\":\"#8a2be2\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"9ba2dd72-482c-4e85-a859-06bee271d67f\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"12ff6050-9e60-4b98-8433-0fea5e965ea5\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"15ac5ee7-6ca0-479b-80af-0dafe0231f60\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"4424ba2d-9a24-4224-a05e-ea96f0439af5\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"4f50b879-7610-4088-be2d-27047b053714\",\"type\":\"CDSView\"}},\"id\":\"6058487f-801c-4501-9308-59365482d1e6\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"12ff6050-9e60-4b98-8433-0fea5e965ea5\",\"type\":\"ColumnDataSource\"}},\"id\":\"4f50b879-7610-4088-be2d-27047b053714\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"410eb8fe-85a0-4531-a372-3f9838c22ca9\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"889266e0-d41d-4740-b3ae-1cdcb9081b9f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"9ba2dd72-482c-4e85-a859-06bee271d67f\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"de866f8f-33cd-415b-999a-257f15609330\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"a79d3097-6c41-467a-8e9d-2655a8aa08d4\",\"type\":\"CDSView\"}},\"id\":\"fed01c75-2dc2-4ad7-bfea-46ea8810c894\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"57689af9-e5a3-4c64-9f18-222eada37ffe\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"38cc5242-7bf6-4d94-ab50-cb74afd4d4b7\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"57689af9-e5a3-4c64-9f18-222eada37ffe\",\"type\":\"LinearAxis\"},{\"id\":\"47973ffd-471e-4687-9d57-7f8e69bb66f0\",\"type\":\"Grid\"},{\"id\":\"38cc5242-7bf6-4d94-ab50-cb74afd4d4b7\",\"type\":\"LinearAxis\"},{\"id\":\"d8114a75-99d4-460e-9e29-e9126f99abcc\",\"type\":\"Grid\"},{\"id\":\"ed82b9fb-0441-4436-b732-2451cfa012f9\",\"type\":\"BoxAnnotation\"},{\"id\":\"2972ecb2-3034-4d64-8296-fcfa8ed1e8a2\",\"type\":\"GlyphRenderer\"},{\"id\":\"a07a4440-871d-4184-8798-0b5d77417228\",\"type\":\"GlyphRenderer\"},{\"id\":\"d92f8357-8c67-447e-bc78-9cd06c8c34d1\",\"type\":\"GlyphRenderer\"},{\"id\":\"6e1c7c70-c6f1-431b-aa2c-b38ae940f6fd\",\"type\":\"GlyphRenderer\"},{\"id\":\"6d5f7d7e-efe7-4271-b13c-bc8c68c12094\",\"type\":\"GlyphRenderer\"},{\"id\":\"fb6006c2-68e4-4595-9fb6-ab3e7a8c2455\",\"type\":\"GlyphRenderer\"},{\"id\":\"2defd689-1e01-4fed-ab9b-ef7331514ff4\",\"type\":\"GlyphRenderer\"},{\"id\":\"b4670143-9355-4cef-93ef-589943abb923\",\"type\":\"GlyphRenderer\"},{\"id\":\"6058487f-801c-4501-9308-59365482d1e6\",\"type\":\"GlyphRenderer\"},{\"id\":\"fed01c75-2dc2-4ad7-bfea-46ea8810c894\",\"type\":\"GlyphRenderer\"},{\"id\":\"885e6e65-70a5-417b-81f7-e43cfce30e33\",\"type\":\"GlyphRenderer\"},{\"id\":\"b6719b42-d629-4dca-ae3c-aeeca43ad902\",\"type\":\"GlyphRenderer\"}],\"title\":null,\"toolbar\":{\"id\":\"e183b95f-42bf-4cc7-89cd-e2061ee97762\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"deb5b421-4873-48a2-8505-f1cdbd61395e\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"7cdbc0b4-38fd-407e-ad9a-122f63b0c1b8\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"30f41c6a-3c78-438b-95d1-78f9ff06e8d5\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"6d07d81e-59b3-4e19-9c76-88d72da6ca2f\",\"type\":\"LinearScale\"}},\"id\":\"0d108fcf-bb73-4fc4-8873-3cf3a5635611\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"889266e0-d41d-4740-b3ae-1cdcb9081b9f\",\"type\":\"ColumnDataSource\"}},\"id\":\"a79d3097-6c41-467a-8e9d-2655a8aa08d4\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"2HQLaSXE4j9qLt22BKDtPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"d8a68858-59bc-4d69-ae19-64ae8c518672\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"79fd8021-cedf-445a-b214-936c6b986791\",\"type\":\"Line\"},{\"attributes\":{\"plot\":{\"id\":\"0d108fcf-bb73-4fc4-8873-3cf3a5635611\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"cde0c8a9-0644-4dbb-b8b4-892012fb11ff\",\"type\":\"BasicTicker\"}},\"id\":\"47973ffd-471e-4687-9d57-7f8e69bb66f0\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"d5dcfd58-aa64-416f-9eb7-1a0834410a4c\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"#ffc400\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a4dcc71e-d6ae-4fc3-a509-37feb9054d5e\",\"type\":\"Circle\"},{\"attributes\":{\"line_color\":\"#ffc400\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"29d3b4f6-4d3a-4806-956c-aa29a0896a37\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"#03ed3a\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ccafea11-a3d2-4f54-9179-6b329f420b35\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"d8a68858-59bc-4d69-ae19-64ae8c518672\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"a4dcc71e-d6ae-4fc3-a509-37feb9054d5e\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"410eb8fe-85a0-4531-a372-3f9838c22ca9\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"5859b8fa-12a7-4267-8146-bad614109eab\",\"type\":\"CDSView\"}},\"id\":\"885e6e65-70a5-417b-81f7-e43cfce30e33\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"d8a68858-59bc-4d69-ae19-64ae8c518672\",\"type\":\"ColumnDataSource\"}},\"id\":\"5859b8fa-12a7-4267-8146-bad614109eab\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"313865fa-cb0a-4d49-becf-87973c352f4f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"34f1f214-9a77-4023-9b21-b8dacd8f718b\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"97a69e4d-769e-4dc2-9f46-f3cb22c8345b\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5e973e1e-aa21-428a-8ada-42dbf697430d\",\"type\":\"CDSView\"}},\"id\":\"fb6006c2-68e4-4595-9fb6-ab3e7a8c2455\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"ArHBLXFv4j/shdqM1jHwPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"6f303ebb-b27b-4485-a7fc-7f01f6a19650\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"ExRADncA4T81jCYkU0TtPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"bbb185b8-e7e7-4849-b5f0-883841596a99\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#e8000b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"f8a30436-f358-4c9e-aa38-eb2cddd7117c\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"68338ab0-125e-447e-814b-3ecf1f85fe6b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"29d3b4f6-4d3a-4806-956c-aa29a0896a37\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"79fd8021-cedf-445a-b214-936c6b986791\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"04de1fbc-9997-4eb4-aaa2-3fe6219af1e5\",\"type\":\"CDSView\"}},\"id\":\"b6719b42-d629-4dca-ae3c-aeeca43ad902\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"68338ab0-125e-447e-814b-3ecf1f85fe6b\",\"type\":\"ColumnDataSource\"}},\"id\":\"04de1fbc-9997-4eb4-aaa2-3fe6219af1e5\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"7cdbc0b4-38fd-407e-ad9a-122f63b0c1b8\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"30f41c6a-3c78-438b-95d1-78f9ff06e8d5\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"4116908f-29bd-4923-a4c4-6e79911d35db\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"8d923155-a3d8-4532-85e8-b883aa3a553c\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"d5dcfd58-aa64-416f-9eb7-1a0834410a4c\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"c3b5a7e6-9dc0-4607-bf2a-8f289498b9bf\",\"type\":\"CDSView\"}},\"id\":\"6d5f7d7e-efe7-4271-b13c-bc8c68c12094\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"deb5b421-4873-48a2-8505-f1cdbd61395e\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"h60ltCgS0T93i2dR9973Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"311d242f-6434-4d10-9388-378673417e5a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"#00d7ff\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8d923155-a3d8-4532-85e8-b883aa3a553c\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"20dcfe3f-7db5-46ff-8b93-2d0aa69228cf\",\"type\":\"ColumnDataSource\"}},\"id\":\"24135ed3-e4d7-49c5-b122-8aed14229d8d\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"d68dc210-4a1a-41e4-abf9-82760f9f60b7\",\"type\":\"PanTool\"},{\"id\":\"c9c662c2-4282-45f0-be61-6c71d50bbfb8\",\"type\":\"WheelZoomTool\"},{\"id\":\"1274ffaf-6a66-4596-a5ff-28fa1d35dc61\",\"type\":\"BoxZoomTool\"},{\"id\":\"e1da84d9-ccda-4160-8046-57573a7060be\",\"type\":\"SaveTool\"},{\"id\":\"1fd08f0d-818a-4392-8843-9051fd9eddaf\",\"type\":\"ResetTool\"},{\"id\":\"017e5d32-e897-4d4c-8f86-ab41f460bc0b\",\"type\":\"HelpTool\"}]},\"id\":\"e183b95f-42bf-4cc7-89cd-e2061ee97762\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"20dcfe3f-7db5-46ff-8b93-2d0aa69228cf\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"639d4d4f-43c7-4aea-a5c8-af4b7fbf6c79\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"39c7da0f-4619-42d2-b34b-6bcdaebefdbd\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"24135ed3-e4d7-49c5-b122-8aed14229d8d\",\"type\":\"CDSView\"}},\"id\":\"d92f8357-8c67-447e-bc78-9cd06c8c34d1\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"6d07d81e-59b3-4e19-9c76-88d72da6ca2f\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"#e8000b\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"639d4d4f-43c7-4aea-a5c8-af4b7fbf6c79\",\"type\":\"Circle\"},{\"attributes\":{\"formatter\":{\"id\":\"6f75d865-1433-45c5-a012-a94c1b520244\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"0d108fcf-bb73-4fc4-8873-3cf3a5635611\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"731d98d3-f9a1-4c70-ba82-1f2700ff2b12\",\"type\":\"BasicTicker\"}},\"id\":\"38cc5242-7bf6-4d94-ab50-cb74afd4d4b7\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"#003fff\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"cd4ae352-e83e-4839-a59c-0efc679ae654\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"017e5d32-e897-4d4c-8f86-ab41f460bc0b\",\"type\":\"HelpTool\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"0d108fcf-bb73-4fc4-8873-3cf3a5635611\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"731d98d3-f9a1-4c70-ba82-1f2700ff2b12\",\"type\":\"BasicTicker\"}},\"id\":\"d8114a75-99d4-460e-9e29-e9126f99abcc\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"#03ed3a\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"291c0f73-9f49-4e35-bea6-46d704013068\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"d68dc210-4a1a-41e4-abf9-82760f9f60b7\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"731d98d3-f9a1-4c70-ba82-1f2700ff2b12\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"cde0c8a9-0644-4dbb-b8b4-892012fb11ff\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"998cab19-b1b7-4731-845e-3b5305df849a\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"ed82b9fb-0441-4436-b732-2451cfa012f9\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"c9c662c2-4282-45f0-be61-6c71d50bbfb8\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"formatter\":{\"id\":\"715e601c-b299-45eb-8334-9cd661c714bb\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"0d108fcf-bb73-4fc4-8873-3cf3a5635611\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"cde0c8a9-0644-4dbb-b8b4-892012fb11ff\",\"type\":\"BasicTicker\"}},\"id\":\"57689af9-e5a3-4c64-9f18-222eada37ffe\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1fd08f0d-818a-4392-8843-9051fd9eddaf\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"e1da84d9-ccda-4160-8046-57573a7060be\",\"type\":\"SaveTool\"},{\"attributes\":{\"overlay\":{\"id\":\"ed82b9fb-0441-4436-b732-2451cfa012f9\",\"type\":\"BoxAnnotation\"}},\"id\":\"1274ffaf-6a66-4596-a5ff-28fa1d35dc61\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"eddda94e-c3dd-4fdf-95ce-03e0c8705b23\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"313865fa-cb0a-4d49-becf-87973c352f4f\",\"type\":\"ColumnDataSource\"}},\"id\":\"5e973e1e-aa21-428a-8ada-42dbf697430d\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"eMuwkkFa0D9sXt7kiwP4Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"f59467a6-f9d9-43a9-9d17-359edf63f032\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"MA9yw68D0D9OkIT416P3Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"313865fa-cb0a-4d49-becf-87973c352f4f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"sVLb3Zxr4T9ZvQVKrIjwPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"20dcfe3f-7db5-46ff-8b93-2d0aa69228cf\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"97a69e4d-769e-4dc2-9f46-f3cb22c8345b\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"6f303ebb-b27b-4485-a7fc-7f01f6a19650\",\"type\":\"ColumnDataSource\"}},\"id\":\"7b12f154-57f5-429c-a551-cda333863a7c\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"4116908f-29bd-4923-a4c4-6e79911d35db\",\"type\":\"ColumnDataSource\"}},\"id\":\"c3b5a7e6-9dc0-4607-bf2a-8f289498b9bf\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"6f303ebb-b27b-4485-a7fc-7f01f6a19650\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ccafea11-a3d2-4f54-9179-6b329f420b35\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"998cab19-b1b7-4731-845e-3b5305df849a\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"7b12f154-57f5-429c-a551-cda333863a7c\",\"type\":\"CDSView\"}},\"id\":\"2972ecb2-3034-4d64-8296-fcfa8ed1e8a2\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#00d7ff\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"34f1f214-9a77-4023-9b21-b8dacd8f718b\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"715e601c-b299-45eb-8334-9cd661c714bb\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"Wo6/Kb8b0z9YEJxjRsL4Pw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"4044889d-57fd-40e7-a73e-2844229d70db\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"311d242f-6434-4d10-9388-378673417e5a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"f8a30436-f358-4c9e-aa38-eb2cddd7117c\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"401525e5-4ff2-4ea0-8b96-ef6822e0f765\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"42fc55d6-a0e2-499a-bec0-9757d714c591\",\"type\":\"CDSView\"}},\"id\":\"6e1c7c70-c6f1-431b-aa2c-b38ae940f6fd\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"cut1F/PH5D+IMJUx71fvPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"4116908f-29bd-4923-a4c4-6e79911d35db\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"f59467a6-f9d9-43a9-9d17-359edf63f032\",\"type\":\"ColumnDataSource\"}},\"id\":\"c4d838d0-2feb-432b-8d44-2ceb76de8624\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"311d242f-6434-4d10-9388-378673417e5a\",\"type\":\"ColumnDataSource\"}},\"id\":\"42fc55d6-a0e2-499a-bec0-9757d714c591\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"6f75d865-1433-45c5-a012-a94c1b520244\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"401525e5-4ff2-4ea0-8b96-ef6822e0f765\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"f59467a6-f9d9-43a9-9d17-359edf63f032\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"291c0f73-9f49-4e35-bea6-46d704013068\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"eddda94e-c3dd-4fdf-95ce-03e0c8705b23\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"c4d838d0-2feb-432b-8d44-2ceb76de8624\",\"type\":\"CDSView\"}},\"id\":\"a07a4440-871d-4184-8798-0b5d77417228\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"Ctay61xSzz+sW5LguAvxPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"AAAAAAAA4D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"12ff6050-9e60-4b98-8433-0fea5e965ea5\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"0d108fcf-bb73-4fc4-8873-3cf3a5635611\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"e0b9fa4b-7f8a-4ce3-b223-6b210a7d7617\",\"elementid\":\"416e8b67-4ca2-4470-994d-7d5445b48536\",\"modelid\":\"0d108fcf-bb73-4fc4-8873-3cf3a5635611\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "0d108fcf-bb73-4fc4-8873-3cf3a5635611" } }, "output_type": "display_data" } ], "source": [ "regr = linear_model.Ridge(alpha=0.08)\n", "\n", "fig = bk.figure(plot_width=400, plot_height=300, title=None)\n", "for i in range(6):\n", " noise = np.random.normal(loc=0, scale=.1, size=X.shape)\n", " noisy_X = X + noise\n", " regr.fit(noisy_X, y)\n", " fig.circle(noisy_X[:,0], y, size=8, color=cat_colors[i], line_color='black')\n", " fig.line(X_test[:,0], regr.predict(X_test), color=cat_colors[i])\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, the estimator displays much less variance. However it systematically under-estimates the coefficient. It displays a biased behavior. As explained earlier we changed the tradeoff between Bias and Variance with regularization. Changing one quantity (for example decreasing Variance) inevitably increases the other (Bias). \n", "\n", "With the next examples we will try to answer the following question: **If our estimator is underperforming, how should we move forward?**\n", "\n", "- Do I need a Simple or more Complicated Model ?\n", "- Do I need More Training Samples ?\n", "- Do I need more features for each observed data point ?\n", "\n", "The answer is often counter-intuitive. In particular, **Sometimes using a more complicated model will give _worse_ results.** Also, **Sometimes adding training data will not improve your results.** The ability to determine what steps will improve your model is what separates the successful machine learning practitioners from the unsuccessful." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 Regularization: what it is and why it is necessary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**The core idea behind regularization is that we are going to prefer models that are simpler**, even if they lead to more errors on the training set. We start by defining a 9th order polynomial function. This represents our 'ground truth'. You can imagine it like a signal measured at diffrent times:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "f = lambda t: 1.2*t**2 + 0.1*t**3 - 0.6*t**5 - 0.8*t**9\n", "gt_coeff = [0, 0, 1.2, 0.1, 0., -0.6, 0., 0., 0., -0.8]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Unfortunately in real life situation every signal is affected by a measurement error; in this example we simulate it with the variable `noise_level`. Our ground truth is a 9th order polynomial.\n", "\n", "At first it would seem an obvius choice to use a 9th order polynomial to fit the signal. If you play a little with the following code you will discover that not using a regularization technique (`LinearRegression` doesn't allow any regularization), most of the time could be a bad choice, and a simpler (lower-order) model it is much better to avoid overfitting.\n", "\n", "Try to change the following variables:\n", "\n", "* `orders`: orders of the polynomials to fit\n", "* `n_samples`: when the number of the samples is small it's difficult to fit a high-order model and you have overfitting\n", "* `noise_level`: whit very low noise it's easier to fit higher-order polynomials\n", "\n", "*Keep in mind that we didn't fix the random generator seed, so every time you run the cell you'll have a different noise distribution on the samples*.\n", "\n", "**As you can see we use a linear algorithm to fit a nonlinear function, this is possible because we use the linear algorithm to fit the nonlinear coefficients that we define in the regressors**." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ground Truth coeff.: +0.0 +0.0 +1.2 +0.1 +0.0 -0.6 +0.0 +0.0 +0.0 -0.8\n", "LinReg coefficients: +0.0 -0.9 +4.3 +11.6 -18.2 -42.8 +35.3 +61.7 -21.4 -31.9\n" ] }, { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"7e360d4b-a806-474d-8c95-31f439164fa5\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"90290384-d67d-4113-ab48-161a7e6eb770\",\"type\":\"ResetTool\"},{\"attributes\":{\"label\":{\"value\":\"linreg order: 04\"},\"renderers\":[{\"id\":\"ff6fb2fc-fa16-4abe-9369-fc8c74d28595\",\"type\":\"GlyphRenderer\"}]},\"id\":\"85caadf2-39b6-42b4-8020-d1e9d66cade0\",\"type\":\"LegendItem\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"6fe13bf5-874f-4a65-8b22-215227781098\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"59408f6a-4e73-46f3-87ca-30e1e4f41b04\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"70be2ba7-641b-40ca-aef2-afb9c386199b\",\"type\":\"ColumnDataSource\"}},\"id\":\"5207ab94-7eb0-4261-b91b-2707b057a787\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"b85bf97e-41cb-4731-98c4-874ee219bfea\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"6fe13bf5-874f-4a65-8b22-215227781098\",\"type\":\"BoxAnnotation\"}},\"id\":\"13584c01-6dec-4805-aa31-7e17e2654cbc\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"d183f8ab-573b-4d0c-b040-9d9e7d79e457\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":4.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"6229d2af-4593-465e-ab69-6be0cc331023\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"25262ff8-93bf-435c-bede-dea46e29ce75\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"9fa7425f-c104-438e-a86f-5fb45274ef4d\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":4.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c1b2c5dc-1fb8-498b-9198-f7028fe909d2\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"royalblue\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ccf17c14-22dd-48dd-ba2a-cc2781ad7d9b\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}}},\"id\":\"756f120f-2278-406f-96d5-2ff893801f96\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"0b0cd27e-23b8-4c24-abe4-17c427999d56\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"efd3ba06-3839-4ae2-b9a8-5316e5a639f0\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"4939c3f2-88dd-47e8-9ccb-a4ce0541aff1\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2fd63498-a3df-4bb6-98ef-333c2f38ee3b\",\"type\":\"CDSView\"}},\"id\":\"ff6fb2fc-fa16-4abe-9369-fc8c74d28595\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4939c3f2-88dd-47e8-9ccb-a4ce0541aff1\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"green\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"efd3ba06-3839-4ae2-b9a8-5316e5a639f0\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"0b0cd27e-23b8-4c24-abe4-17c427999d56\",\"type\":\"ColumnDataSource\"}},\"id\":\"2fd63498-a3df-4bb6-98ef-333c2f38ee3b\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0764ecba-eb3d-4a92-bd40-b80233e86bbe\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"MCewAjMBEEDafA/jPNMOQKOxClkRrA1AD5YQxcGMDEBke8fILHULQLNavUkxZQpA5NRnca5cCUDPMiStg1sIQBllN66QYQdARQTOabVuBkCxUPwY0oIFQJ8yvjjHnQRAJzr3iXW/A0A/n3IRvucCQLRB4xeCFgJANqnjKaNLAUBRBfYXA4cAQNBaCO0Hkf8/dEG/OxAg/j/PDINU5Lr8P9dalfdJYfs/NBkHbQcT+j9HhbiE48/4Py8sWZall/c/xOpngRVq9j+N7TKt+0b1P86w1wghLvQ/hABDC08f8z9n+DCzTxryP+QDLYftHvE/G96RlfMs8D/YIxPpWojuP9zzGoTOyOw/4IDMR9sa6z/gvlePG37pP2ZBi8Uq8uc/XDvUZKV25j8cfz73KAvlP3J+dBZUr+M/mkq/a8Zi4j9JlAawICXhPy5XoVcJ7N8/HwCFbiqq3T9rQT907IPbP/R3lFeZeNk/cD+GJn2H1z96clMO5q/VP5gqeFsk8dM/MMCteYpK0j97yurzbLvQPzA/xuhEhs4/HKkPiQfCyz+Ieg6a1yjJP+/YmStvucY/lWcDjIxyxD+MRxdI8lLCP6cXHCtnWcA/1OilfWwJvT838O6WXae5P6d1f69IirY/y6S4Ud2vsz+/pPCE0xWxPzww5ZrXc60/Mjr9WN4zqT/QmpNAXmelP1Z8/EcLCqI/UADsvlQvnj9sfVDiIhiZP9COSsJOxpQ/aEHSGsgxkT8gIGc3QaWMP6DHHNEXQog/YCetMb8qhT9wyadvJlCDP9ATRImAo4I/AElhZEQWgz9gh4bOLJqEP0DJ4nw4IYc/MOVMDKqdij/wjUMBCAKPP/Co9mOOIJI/AE4MWvsmlT+g2Z0A9I2YPzBdOmlDT5w/GmyiTGsyoD8eHPpEXmSiP3asKRSTuqQ/9oGgKjMypz9i+LfyeMipP6Zis9Cveqw/ogrAIjRGrz+dmHqgORSxPyoHqr51j7I/cujjEZYTtD92zxK9ap+1P69KFmDMMbc/GuTCF5zJuD8+IeJ9w2W6PyCDMqk0Bbw/U4ZnLeqmvT/Poikb50m/PxYmC4CbdsA/wfhf8/ZHwT+p/lYrlBjCP99qLqoF6MI/Le6eMOK1wz8it9u9xIHEPxFyko9MS8U/AEnrIR0Sxj/H44gv3tXGP/1niLE7lsc/7HiB3+VSyD+uN4YvkQvJPxxDI1b2v8k/y7dfRtJvyj8aML0x5hrLPx7EN4j3wMs/tAlG+M9hzD9+FNluPf3MP9R1XBcSk80/2Dy2WyQjzj9u9kbkTq3OPzit6ZdwMc8/nOnzm2yvzz/d2BoqlRPQP77EfLFKTNA/RjmC1M6B0D8p9sqiG7TQP/v5M0st49A/MoLXGwIP0T8oCw2CmjfRPxJQaQr5XNE/Bku+YCJ/0T8ANRtQHZ7RP9iFzMLyudE/SfRbwq3S0T/sdZB3W+jRPz4/bioL+9E/msM2Qs4K0j88tWhFuBfSP0QFwNneIdI/rOM1xFkp0j9WvwDpQi7SPwBGlEu2MNI/S2ShDtIw0j+2RRZ0ti7SP6JUHt2FKtI/UzoiymQk0j/s3sfaeRzSP25p8s3tEtI/vT/CgesH0j+gBpXzn/vRP7uhBUA67tE/lDPsouvf0T+QHV5359DRP/j/rTdjwdE/9LlrfZax0T+OaWQBu6HRP6xropsMktE/GlxtQ8mC0T+BFUoPMXTRP2+x+jSGZtE/T4h+CQ1a0T9rMRIBDE/RP/KCL6/LRdE/9JGNxpY+0T9csiAZujnRP/x2GpiEN9E/grHpU0c40T+Acjp8VTzRP2YJ9l8ERNE/iQRDbatP0T8YMYUxpF/RPySbXVlKdNE/qI2qsPuN0T90kociGK3RPz5yTbkB0tE/mzSSnhz90T8CICkbzy7SP8y5IpeBZ9I/LsbMmZ6n0j9GSLLJku/SPwaCm+zMP9M/TvSN572Y0z/SXsy+2PrTPzDA1pWSZtQ/6FVqr2Lc1D9TnIFtwlzVP65OVFEt6NU/FGdX+yB/1j+QHj0rHSLXP+rs9L+j0dc/+oirtziO2D9Y6MovYljZP3o/+mSoMNo/1QEes5UX2z+U4VeVtg3cP/jPBqaZE90/8PzGns8p3j9b13FY61DfPw==\",\"dtype\":\"float64\",\"shape\":[200]}}},\"id\":\"0b0cd27e-23b8-4c24-abe4-17c427999d56\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2a1c5018-237b-4296-90a3-2e9ed25c50b3\",\"type\":\"Circle\"},{\"attributes\":{\"items\":[{\"id\":\"85caadf2-39b6-42b4-8020-d1e9d66cade0\",\"type\":\"LegendItem\"},{\"id\":\"433eb8fb-d75d-4e37-8295-8b6c9f3c10fc\",\"type\":\"LegendItem\"},{\"id\":\"6fb88e1a-f102-46f2-ad8d-06637082b34e\",\"type\":\"LegendItem\"}],\"label_text_font_size\":{\"value\":\"14pt\"},\"location\":\"top_left\",\"plot\":{\"id\":\"5063f909-5c87-49e9-82ac-138ff39ec358\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"4a0cb48f-be11-497a-ad3b-fc054f8f8086\",\"type\":\"Legend\"},{\"attributes\":{\"below\":[{\"id\":\"a19a7e90-3930-4687-8793-a53a9a510651\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"f42178c3-2bfb-4742-a14e-7571d7392221\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":700,\"renderers\":[{\"id\":\"a19a7e90-3930-4687-8793-a53a9a510651\",\"type\":\"LinearAxis\"},{\"id\":\"c9b0956f-adab-4235-8ccd-71df77f3c64e\",\"type\":\"Grid\"},{\"id\":\"f42178c3-2bfb-4742-a14e-7571d7392221\",\"type\":\"LinearAxis\"},{\"id\":\"f759448a-fe44-4f7a-97cf-f99dc448f2be\",\"type\":\"Grid\"},{\"id\":\"6fe13bf5-874f-4a65-8b22-215227781098\",\"type\":\"BoxAnnotation\"},{\"id\":\"4fd548dd-082e-4056-8482-760d838f631c\",\"type\":\"GlyphRenderer\"},{\"id\":\"4a0cb48f-be11-497a-ad3b-fc054f8f8086\",\"type\":\"Legend\"},{\"id\":\"ff6fb2fc-fa16-4abe-9369-fc8c74d28595\",\"type\":\"GlyphRenderer\"},{\"id\":\"64fb8438-31d0-449d-b91e-1ee34be1d6a6\",\"type\":\"GlyphRenderer\"},{\"id\":\"8ab42959-c9f9-428b-bc3b-8b5649fb4ad0\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"81740e06-eb88-49ef-91b0-ff83fa2921b6\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"edc362cd-c71b-4526-ac40-902a454313b3\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"8c384935-23b8-4f22-85fe-0d72ceb86188\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"942ef8eb-26d3-4697-8fe1-451ceef585ed\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"67fe609a-ffea-48e6-be85-cb6f8fe8bc56\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"b8a3882b-4b84-4139-9fe6-43461ee43962\",\"type\":\"LinearScale\"}},\"id\":\"5063f909-5c87-49e9-82ac-138ff39ec358\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}}},\"id\":\"8363086f-e951-4cf1-af01-e0e96b9f2804\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"UGpLI1m0zL+IJBFmX2naP/6j3L6dmPG/ALqdfTnE3b/btmpwh1bpvyn+d0Gu/uy/nDwkp+2u5r/Q9CU/5vTXvwBvSEAPE9G/oBxYq8AioD+MJUYK2h7Mv9jGnEWJsdU/7jITkfd15b9oSIfZOs/nP4j/WtsFrvC/LF70LPm10z886Dxa46DMv/CXJEBswLI/GrNPbRjE6b+q80JwOOPlv67SNkErnOI/8D++Xv/d7T98ewo0mkbcv2x4tMjtpdY/hvAQdH+x5z8=\",\"dtype\":\"float64\",\"shape\":[25]},\"y\":{\"__ndarray__\":\"t8XmNxdKxT+5FyFE0b/HP8movBszMhJAF9TBh20X1T9BXYVrp3PzP7BjiAUsF/Y/yWtVbNFO4T8J3K6WbwPXP2adJoyl6aQ/X1cWd//XoD8YZaq8Nq3NP4i9FUDv470/xkfUXqHw2T/tx6p2oOXTP2BCAv70DAdA5cN0+mCHzz8yp0BGZO+nP9VtzKQc19W/89xyvT8D8T8wjY3N7azgPwr+Fxmg0ds/qBecwXhpqz9Kds309T29P6cU2mAkNss/qs2G+Ysx6z8=\",\"dtype\":\"float64\",\"shape\":[25]}}},\"id\":\"70be2ba7-641b-40ca-aef2-afb9c386199b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"756f120f-2278-406f-96d5-2ff893801f96\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c1b2c5dc-1fb8-498b-9198-f7028fe909d2\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"6229d2af-4593-465e-ab69-6be0cc331023\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"0080f78f-5229-45a0-8c2f-ee90409a5672\",\"type\":\"CDSView\"}},\"id\":\"8ab42959-c9f9-428b-bc3b-8b5649fb4ad0\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"70be2ba7-641b-40ca-aef2-afb9c386199b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"0764ecba-eb3d-4a92-bd40-b80233e86bbe\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2a1c5018-237b-4296-90a3-2e9ed25c50b3\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"5207ab94-7eb0-4261-b91b-2707b057a787\",\"type\":\"CDSView\"}},\"id\":\"4fd548dd-082e-4056-8482-760d838f631c\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"27774670-17c9-494e-9089-1fb5053ab3e8\",\"type\":\"Line\"},{\"attributes\":{\"plot\":null,\"text\":\"4th and a 9th order polynomial with Ground truth\"},\"id\":\"81740e06-eb88-49ef-91b0-ff83fa2921b6\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"6bbc298b-c2ee-4cf9-ae63-ffe5614eca14\",\"type\":\"SaveTool\"},{\"attributes\":{\"label\":{\"value\":\"linreg order: 09\"},\"renderers\":[{\"id\":\"64fb8438-31d0-449d-b91e-1ee34be1d6a6\",\"type\":\"GlyphRenderer\"}]},\"id\":\"433eb8fb-d75d-4e37-8295-8b6c9f3c10fc\",\"type\":\"LegendItem\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"59408f6a-4e73-46f3-87ca-30e1e4f41b04\",\"type\":\"PanTool\"},{\"id\":\"b85bf97e-41cb-4731-98c4-874ee219bfea\",\"type\":\"WheelZoomTool\"},{\"id\":\"13584c01-6dec-4805-aa31-7e17e2654cbc\",\"type\":\"BoxZoomTool\"},{\"id\":\"6bbc298b-c2ee-4cf9-ae63-ffe5614eca14\",\"type\":\"SaveTool\"},{\"id\":\"90290384-d67d-4113-ab48-161a7e6eb770\",\"type\":\"ResetTool\"},{\"id\":\"d183f8ab-573b-4d0c-b040-9d9e7d79e457\",\"type\":\"HelpTool\"}]},\"id\":\"edc362cd-c71b-4526-ac40-902a454313b3\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"942ef8eb-26d3-4697-8fe1-451ceef585ed\",\"type\":\"LinearScale\"},{\"attributes\":{\"data_source\":{\"id\":\"8363086f-e951-4cf1-af01-e0e96b9f2804\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ccf17c14-22dd-48dd-ba2a-cc2781ad7d9b\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"27774670-17c9-494e-9089-1fb5053ab3e8\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"4602e724-f4f5-471a-956f-4ecece981e17\",\"type\":\"CDSView\"}},\"id\":\"64fb8438-31d0-449d-b91e-1ee34be1d6a6\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"67fe609a-ffea-48e6-be85-cb6f8fe8bc56\",\"type\":\"DataRange1d\"},{\"attributes\":{\"formatter\":{\"id\":\"9fa7425f-c104-438e-a86f-5fb45274ef4d\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"5063f909-5c87-49e9-82ac-138ff39ec358\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2ada7e1e-b11f-42b5-acb3-81a7fb2db415\",\"type\":\"BasicTicker\"}},\"id\":\"f42178c3-2bfb-4742-a14e-7571d7392221\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"8363086f-e951-4cf1-af01-e0e96b9f2804\",\"type\":\"ColumnDataSource\"}},\"id\":\"4602e724-f4f5-471a-956f-4ecece981e17\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"b8a3882b-4b84-4139-9fe6-43461ee43962\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"756f120f-2278-406f-96d5-2ff893801f96\",\"type\":\"ColumnDataSource\"}},\"id\":\"0080f78f-5229-45a0-8c2f-ee90409a5672\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":{\"id\":\"5063f909-5c87-49e9-82ac-138ff39ec358\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8b46390b-a1f2-4359-8c6a-af263f541a20\",\"type\":\"BasicTicker\"}},\"id\":\"c9b0956f-adab-4235-8ccd-71df77f3c64e\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"25262ff8-93bf-435c-bede-dea46e29ce75\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"5063f909-5c87-49e9-82ac-138ff39ec358\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8b46390b-a1f2-4359-8c6a-af263f541a20\",\"type\":\"BasicTicker\"}},\"id\":\"a19a7e90-3930-4687-8793-a53a9a510651\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"8b46390b-a1f2-4359-8c6a-af263f541a20\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"8c384935-23b8-4f22-85fe-0d72ceb86188\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2ada7e1e-b11f-42b5-acb3-81a7fb2db415\",\"type\":\"BasicTicker\"},{\"attributes\":{\"label\":{\"value\":\"truth\"},\"renderers\":[{\"id\":\"8ab42959-c9f9-428b-bc3b-8b5649fb4ad0\",\"type\":\"GlyphRenderer\"}]},\"id\":\"6fb88e1a-f102-46f2-ad8d-06637082b34e\",\"type\":\"LegendItem\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"5063f909-5c87-49e9-82ac-138ff39ec358\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2ada7e1e-b11f-42b5-acb3-81a7fb2db415\",\"type\":\"BasicTicker\"}},\"id\":\"f759448a-fe44-4f7a-97cf-f99dc448f2be\",\"type\":\"Grid\"}],\"root_ids\":[\"5063f909-5c87-49e9-82ac-138ff39ec358\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"7e360d4b-a806-474d-8c95-31f439164fa5\",\"elementid\":\"c569e149-c487-44cc-84ec-872fc0049a27\",\"modelid\":\"5063f909-5c87-49e9-82ac-138ff39ec358\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "5063f909-5c87-49e9-82ac-138ff39ec358" } }, "output_type": "display_data" } ], "source": [ "tmin, tmax = -1.1, 1.0\n", "n_samples = 25\n", "noise_level = 0.2\n", "orders = [4, 9]\n", "np.random.seed(1)\n", "t = tmin + np.random.rand(n_samples) * (tmax-tmin) # Sample points\n", "y_noisy = f(t) + noise_level*np.random.normal(size=n_samples) # Noisy measure\n", "\n", "fig = bk.figure(plot_width=700, plot_height=400,\n", " title='4th and a 9th order polynomial with Ground truth')\n", "fig.circle(t, y_noisy, size=8, fill_alpha=0.4)\n", "\n", "p = np.linspace(tmin, tmax, 200) # Array to calc. the prediction\n", "colors = ['royalblue', 'green']\n", "for order in orders:\n", " X = np.array([t**i for i in range(order+1)]).T # Regressor\n", " Xp = np.array([p**i for i in range(order+1)]).T # Regressor for prediction\n", " poly_linreg = linear_model.LinearRegression().fit(X, y_noisy)\n", " fig.line(p, poly_linreg.predict(Xp), legend='linreg order: %02i' % order,\n", " color=colors.pop(), line_width=3.0)\n", "\n", "fig.line(p, f(p), legend=\"truth\", color='red', line_width=4.0)\n", "fig.legend.label_text_font_size = '14pt'\n", "fig.legend.location = 'top_left'\n", "np.set_printoptions(precision=2)\n", "print('Ground Truth coeff.: ', ' '.join(['%+5.1f' %n for n in gt_coeff]))\n", "print('LinReg coefficients: ', ' '.join(['%+5.1f' %n for n in poly_linreg.coef_]))\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we compare the previous `LinearRegression` algorithm with the `Lasso` algorithm.\n", "\n", "`Lasso` (least absolute shrinkage and selection operator) is an alternative regularized version of least squares: it is a **shrinkage estimator**: unlike `ridge regression`, as the penalty term increases, lasso sets more coefficients to zero, this means that the lasso estimator produces smaller models." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ground Truth coeff.: +0.0 +0.0 +1.2 +0.1 +0.0 -0.6 +0.0 +0.0 +0.0 -0.8\n", "LinReg coefficients: +0.0 -0.0 +1.0 -0.0 +0.0 -0.0 +0.0 -0.0 +0.0 -1.3\n" ] }, { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"433aad54-6a9c-4545-9599-9196d89eb250\":{\"roots\":{\"references\":[{\"attributes\":{\"line_color\":\"green\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"9ff3c510-93ac-46b1-8619-e838be3a83bd\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}}},\"id\":\"81fe6cf6-49be-4743-9b16-0cf8a174d896\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"linreg order: 09\"},\"renderers\":[{\"id\":\"3e435f02-9717-49c6-b2ec-c9c9efc3252d\",\"type\":\"GlyphRenderer\"}]},\"id\":\"0ffbcdf6-bb4b-4636-b511-2671e4a51424\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}}},\"id\":\"71025f68-9516-4fc5-9856-2612bba67b2b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"lasso order: 09\"},\"renderers\":[{\"id\":\"630dcb7d-4af9-4188-a357-ad284a617e02\",\"type\":\"GlyphRenderer\"}]},\"id\":\"be03eccd-56da-4bd0-9965-f862b0425709\",\"type\":\"LegendItem\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"ae60dcc7-69c4-470c-b1cd-fbb8bbf6c613\",\"type\":\"PanTool\"},{\"id\":\"4f187046-c0af-4df2-8abc-827745d871b0\",\"type\":\"WheelZoomTool\"},{\"id\":\"bd762a3c-3391-4dfc-9ab8-23688b612a47\",\"type\":\"BoxZoomTool\"},{\"id\":\"a40fd968-ed74-4d19-afba-2111abc2f202\",\"type\":\"SaveTool\"},{\"id\":\"0f9cf458-d2f2-49f5-9019-feda6f2caa6c\",\"type\":\"ResetTool\"},{\"id\":\"63af4325-574e-47d9-85ac-6a9a4b21dd69\",\"type\":\"HelpTool\"}]},\"id\":\"f94925df-31af-4490-ac63-8ad04ff1c877\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"316e79db-3ddd-43c1-8c4b-7be9f7e886b0\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"7fb87b0c-7304-4744-b320-1d936532ad5a\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"f2eb1e4a-467d-4318-b302-80e2609e59b7\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"e892fbf8-89eb-49d8-a15e-5a937e56ac83\",\"type\":\"CDSView\"}},\"id\":\"28e68b8f-0288-4717-a5e7-bd55facc35bc\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":4.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c5355e7e-25cc-446b-93b3-1e6953d1b655\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null},\"id\":\"9c92ee28-d75a-42d2-8825-79f5e6701ff8\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"71025f68-9516-4fc5-9856-2612bba67b2b\",\"type\":\"ColumnDataSource\"}},\"id\":\"cb91563c-5642-4f39-97f9-f4a4c762976d\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"81fe6cf6-49be-4743-9b16-0cf8a174d896\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"54c5a879-3730-4966-905a-131fffcd7a67\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"d0e290ac-5a79-482b-90c6-4779fe85f74b\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"055caf11-327e-4c4c-821c-c1b8a8aab74f\",\"type\":\"CDSView\"}},\"id\":\"3e435f02-9717-49c6-b2ec-c9c9efc3252d\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"e451e1f9-ebcd-4435-98ac-5c8183d35c83\",\"type\":\"ColumnDataSource\"}},\"id\":\"f159d018-e6e7-4bc8-885b-6934c5fda269\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}}},\"id\":\"e451e1f9-ebcd-4435-98ac-5c8183d35c83\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"905eba3d-939d-4454-b412-cd5bc65f35ad\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"9bfc94df-2738-40d7-878c-b7db6f3af3ff\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"e451e1f9-ebcd-4435-98ac-5c8183d35c83\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"9ff3c510-93ac-46b1-8619-e838be3a83bd\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"905eba3d-939d-4454-b412-cd5bc65f35ad\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"f159d018-e6e7-4bc8-885b-6934c5fda269\",\"type\":\"CDSView\"}},\"id\":\"630dcb7d-4af9-4188-a357-ad284a617e02\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":4.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0b8a174d-5a8a-470a-b1f5-4d410db457f2\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null},\"id\":\"23a00d57-2c14-4847-af57-d4b2b6a5f7bf\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"truth\"},\"renderers\":[{\"id\":\"fa46d400-e262-4a9c-b126-cacfc11c97c4\",\"type\":\"GlyphRenderer\"}]},\"id\":\"447bf311-310a-485b-afb9-2f1429880662\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"0f3b3b1f-49af-4b5f-abe5-00e58580bfbb\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4f187046-c0af-4df2-8abc-827745d871b0\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"71025f68-9516-4fc5-9856-2612bba67b2b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c5355e7e-25cc-446b-93b3-1e6953d1b655\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"0b8a174d-5a8a-470a-b1f5-4d410db457f2\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"cb91563c-5642-4f39-97f9-f4a4c762976d\",\"type\":\"CDSView\"}},\"id\":\"fa46d400-e262-4a9c-b126-cacfc11c97c4\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"formatter\":{\"id\":\"6b9c92b3-a965-42ce-bd63-4c6e5413a364\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"8e39e364-46e9-422e-b658-f179aca58bc4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a08a49b3-fbf2-4d60-8337-6ec651bbe2b6\",\"type\":\"BasicTicker\"}},\"id\":\"ce8634eb-5f24-4d36-b1cc-0e6dfc24a7b7\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"UGpLI1m0zL+IJBFmX2naP/6j3L6dmPG/ALqdfTnE3b/btmpwh1bpvyn+d0Gu/uy/nDwkp+2u5r/Q9CU/5vTXvwBvSEAPE9G/oBxYq8AioD+MJUYK2h7Mv9jGnEWJsdU/7jITkfd15b9oSIfZOs/nP4j/WtsFrvC/LF70LPm10z886Dxa46DMv/CXJEBswLI/GrNPbRjE6b+q80JwOOPlv67SNkErnOI/8D++Xv/d7T98ewo0mkbcv2x4tMjtpdY/hvAQdH+x5z8=\",\"dtype\":\"float64\",\"shape\":[25]},\"y\":{\"__ndarray__\":\"t8XmNxdKxT+5FyFE0b/HP8movBszMhJAF9TBh20X1T9BXYVrp3PzP7BjiAUsF/Y/yWtVbNFO4T8J3K6WbwPXP2adJoyl6aQ/X1cWd//XoD8YZaq8Nq3NP4i9FUDv470/xkfUXqHw2T/tx6p2oOXTP2BCAv70DAdA5cN0+mCHzz8yp0BGZO+nP9VtzKQc19W/89xyvT8D8T8wjY3N7azgPwr+Fxmg0ds/qBecwXhpqz9Kds309T29P6cU2mAkNss/qs2G+Ysx6z8=\",\"dtype\":\"float64\",\"shape\":[25]}}},\"id\":\"316e79db-3ddd-43c1-8c4b-7be9f7e886b0\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"5f8231b7-e9c8-498f-b6d3-8f5f13a14df8\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"f2eb1e4a-467d-4318-b302-80e2609e59b7\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"0dfc110c-78a7-4817-8c30-93d929ed9fa8\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"8e39e364-46e9-422e-b658-f179aca58bc4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a08a49b3-fbf2-4d60-8337-6ec651bbe2b6\",\"type\":\"BasicTicker\"}},\"id\":\"27c7e8d9-89c9-4b0d-b37d-c37173c83d66\",\"type\":\"Grid\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"8e39e364-46e9-422e-b658-f179aca58bc4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0f3b3b1f-49af-4b5f-abe5-00e58580bfbb\",\"type\":\"BasicTicker\"}},\"id\":\"c2c0b061-b8c5-4e8b-b20e-274d4f6c4690\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"a08a49b3-fbf2-4d60-8337-6ec651bbe2b6\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"81fe6cf6-49be-4743-9b16-0cf8a174d896\",\"type\":\"ColumnDataSource\"}},\"id\":\"055caf11-327e-4c4c-821c-c1b8a8aab74f\",\"type\":\"CDSView\"},{\"attributes\":{\"formatter\":{\"id\":\"9bfc94df-2738-40d7-878c-b7db6f3af3ff\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"8e39e364-46e9-422e-b658-f179aca58bc4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0f3b3b1f-49af-4b5f-abe5-00e58580bfbb\",\"type\":\"BasicTicker\"}},\"id\":\"19198baa-8731-47b9-8d0b-600cf8611689\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.4},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.4},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"7fb87b0c-7304-4744-b320-1d936532ad5a\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"52342a6b-9b2f-49b4-925c-db417c199221\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"ce8634eb-5f24-4d36-b1cc-0e6dfc24a7b7\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"19198baa-8731-47b9-8d0b-600cf8611689\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":700,\"renderers\":[{\"id\":\"ce8634eb-5f24-4d36-b1cc-0e6dfc24a7b7\",\"type\":\"LinearAxis\"},{\"id\":\"27c7e8d9-89c9-4b0d-b37d-c37173c83d66\",\"type\":\"Grid\"},{\"id\":\"19198baa-8731-47b9-8d0b-600cf8611689\",\"type\":\"LinearAxis\"},{\"id\":\"c2c0b061-b8c5-4e8b-b20e-274d4f6c4690\",\"type\":\"Grid\"},{\"id\":\"52342a6b-9b2f-49b4-925c-db417c199221\",\"type\":\"BoxAnnotation\"},{\"id\":\"28e68b8f-0288-4717-a5e7-bd55facc35bc\",\"type\":\"GlyphRenderer\"},{\"id\":\"f09cac3c-ebb6-4004-8993-14d31438df00\",\"type\":\"Legend\"},{\"id\":\"3e435f02-9717-49c6-b2ec-c9c9efc3252d\",\"type\":\"GlyphRenderer\"},{\"id\":\"630dcb7d-4af9-4188-a357-ad284a617e02\",\"type\":\"GlyphRenderer\"},{\"id\":\"fa46d400-e262-4a9c-b126-cacfc11c97c4\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"eb2df918-3dad-4398-af3b-c9c554d4132a\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"f94925df-31af-4490-ac63-8ad04ff1c877\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"23a00d57-2c14-4847-af57-d4b2b6a5f7bf\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5f8231b7-e9c8-498f-b6d3-8f5f13a14df8\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"9c92ee28-d75a-42d2-8825-79f5e6701ff8\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"0dfc110c-78a7-4817-8c30-93d929ed9fa8\",\"type\":\"LinearScale\"}},\"id\":\"8e39e364-46e9-422e-b658-f179aca58bc4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"316e79db-3ddd-43c1-8c4b-7be9f7e886b0\",\"type\":\"ColumnDataSource\"}},\"id\":\"e892fbf8-89eb-49d8-a15e-5a937e56ac83\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"royalblue\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"54c5a879-3730-4966-905a-131fffcd7a67\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"ae60dcc7-69c4-470c-b1cd-fbb8bbf6c613\",\"type\":\"PanTool\"},{\"attributes\":{\"items\":[{\"id\":\"0ffbcdf6-bb4b-4636-b511-2671e4a51424\",\"type\":\"LegendItem\"},{\"id\":\"be03eccd-56da-4bd0-9965-f862b0425709\",\"type\":\"LegendItem\"},{\"id\":\"447bf311-310a-485b-afb9-2f1429880662\",\"type\":\"LegendItem\"}],\"label_text_font_size\":{\"value\":\"15pt\"},\"location\":\"top_left\",\"plot\":{\"id\":\"8e39e364-46e9-422e-b658-f179aca58bc4\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"f09cac3c-ebb6-4004-8993-14d31438df00\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":3.0,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"d0e290ac-5a79-482b-90c6-4779fe85f74b\",\"type\":\"Line\"},{\"attributes\":{\"plot\":null,\"text\":\"9th order LinReg and Lasso with Ground truth\"},\"id\":\"eb2df918-3dad-4398-af3b-c9c554d4132a\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"52342a6b-9b2f-49b4-925c-db417c199221\",\"type\":\"BoxAnnotation\"}},\"id\":\"bd762a3c-3391-4dfc-9ab8-23688b612a47\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"a40fd968-ed74-4d19-afba-2111abc2f202\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"0f9cf458-d2f2-49f5-9019-feda6f2caa6c\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"6b9c92b3-a965-42ce-bd63-4c6e5413a364\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"63af4325-574e-47d9-85ac-6a9a4b21dd69\",\"type\":\"HelpTool\"}],\"root_ids\":[\"8e39e364-46e9-422e-b658-f179aca58bc4\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"433aad54-6a9c-4545-9599-9196d89eb250\",\"elementid\":\"25b33841-ed9f-4c4d-ba89-ba05f83890aa\",\"modelid\":\"8e39e364-46e9-422e-b658-f179aca58bc4\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "8e39e364-46e9-422e-b658-f179aca58bc4" } }, "output_type": "display_data" } ], "source": [ "order = 9\n", "np.random.seed(1)\n", "X = np.array([t**i for i in range(order+1)]).T\n", "Xp = np.array([p**i for i in range(order+1)]).T\n", "poly_linreg = linear_model.LinearRegression().fit(X, y_noisy)\n", "poly_lasso = linear_model.Lasso(alpha = 0.005).fit(X, y_noisy)\n", "\n", "fig = bk.figure(plot_width=700, plot_height=400)\n", "fig.circle(t, y_noisy, size=8, alpha=0.4)\n", "fig.line(p, poly_linreg.predict(Xp), legend='linreg order: %02i' % order,\n", " color='royalblue', line_width=3.0)\n", "fig.line(p, poly_lasso.predict(Xp), legend='lasso order: %02i' % order,\n", " line_width=3.0, color='green')\n", "fig.line(p, f(p), legend=\"truth\", color='red', line_width=4.0)\n", "\n", "fig.legend.label_text_font_size = '15pt'\n", "fig.legend.location = 'top_left'\n", "fig.title.text = '9th order LinReg and Lasso with Ground truth'\n", "\n", "np.set_printoptions(precision=2)\n", "print('Ground Truth coeff.: ', ' '.join(['%+5.1f' %n for n in gt_coeff]))\n", "print('LinReg coefficients: ', ' '.join(['%+5.1f' %n for n in poly_lasso.coef_]))\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Try by yourself: play a little with the code of the two previous cells by changing `n_samples` and `noise_level` to verify that:\n", "\n", "* When `n_samples` is very high (>1000) it's very unlikely to have overfitting. This means that with more data it's possible to fit more complex models without overfitting.\n", "* When `n_samples` is very low (<40) it's almost impossible to fit with Linear Regression without overfitting. In this case regularization is always required\n", "* When `n_samples` is very high (>1000) and `noise_level` is very low, the Lasso algorithm keeps just the coefficients actually used to calculate the ground truth function. This means that Lasso can deal with high dimesional problems where most of the features can be neglected producing compact linear models.\n", "\n", "Another way to look at the Bias-Variance tradeoff in previous examples is to consider how the model fits the data. As stated at the beginning of this section when model complexity increases Bias decrease while Variance increses. The optimal model performance is achieved when the level of complexity is such that an increase in Bias is equivalent in reduction of Variance. If the model complexity exceed this threshold we are overfitting (the model is to adapted to the data and does not generalize well) if the model is behind this threshold is said to be underfitting (the model does not fit well the data and it has a poor error for out of sample data)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3 Separate Training and Validation Sets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Fitting a model and testing it on the same data is a methodological mistake:** a model could have a perfect score but would fail to predict anything useful on yet-unseen data. This situation is called overfitting. To avoid it, it is common practice to hold out part of the available data as a **Validation Set** `X_valid, y_valid`." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)\n", "Model coefficient: 275.99550, and intercept: -145.41186\n", "Mean Squared Error: 23.04\n" ] } ], "source": [ "from sklearn import datasets, preprocessing, metrics\n", "X, y = datasets.samples_generator.make_regression(n_samples=70,\n", " n_features=1, n_informative=1,\n", " random_state=0, noise=5)\n", "scaler = preprocessing.MinMaxScaler()\n", "X_sc = scaler.fit_transform(X)\n", "\n", "lin = linear_model.LinearRegression(fit_intercept=True)\n", "lin.fit(X_sc, y)\n", "\n", "print(lin)\n", "print(\"Model coefficient: %.5f, and intercept: %.5f\" % (lin.coef_, lin.intercept_))\n", "err = metrics.mean_squared_error(lin.predict(X_sc), y)\n", "print(\"Mean Squared Error: %.2f\" % err)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In scikit-learn a random split into **Training** and **Validation** sets can be quickly computed with the `train_test_split` helper function:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean Squared Error: 23.34\n", "Model coefficient: 273.00288, and intercept: -143.70277\n" ] }, { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"2bac23c2-2aec-449f-a9df-7dc74617bd93\":{\"roots\":{\"references\":[{\"attributes\":{\"source\":{\"id\":\"93b2a141-a4bb-4bdd-9166-dcdc4500f77f\",\"type\":\"ColumnDataSource\"}},\"id\":\"2d107a59-df17-4564-a7ac-29b70d795eb6\",\"type\":\"CDSView\"},{\"attributes\":{\"items\":[{\"id\":\"cb9f105a-e204-45f0-8ca5-1ab6acad045e\",\"type\":\"LegendItem\"},{\"id\":\"f2f63af1-101c-4027-8072-782a07796fe1\",\"type\":\"LegendItem\"},{\"id\":\"3c788acf-f495-4178-ac55-12c88ea39cf2\",\"type\":\"LegendItem\"}],\"location\":\"bottom_right\",\"plot\":{\"id\":\"21710ddd-6649-4f38-bea8-6cd66ade32cc\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"98ad5d42-7b35-4d06-878d-10c559c7d3a9\",\"type\":\"Legend\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"68278c57-f32a-4929-8a1d-c942fbf0f8d3\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"5a568220-6a34-4f72-8277-9f2f9f6dc0dd\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2160dc0d-4026-488b-9e84-530df5cf5ef0\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"ebdf31ab-cc2e-467e-9ac6-e62b9c3331bb\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"68278c57-f32a-4929-8a1d-c942fbf0f8d3\",\"type\":\"BoxAnnotation\"}},\"id\":\"b2402c67-ad52-4e6d-8cf7-12cb47a439bd\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"lisXDJIozT9CCqfgVifjPwAAAAAAAAAAZvDQDikc6z+UHSXuKYzcP1P5ujzt9tM/38J5626w6j8wkXXz7h3iP6q/Gt7dENw/zNY7uPnO7z9F7UVqyBnbP2XNbZ8h+uE/IF6eJs+W6j8kvAd+zAfYP01MBxNZGuk/h+qEyUc+4T/W4jMuA3nGP45JjfekAuQ/AVK28cCB4z8IIhdi4X3IP0eTJJFEvdw/SgTUBpr02D/y+bTlCfHFP2CGNFD//tU/zubkZehy4z9sprxLAaXsP7AXcxqfG90/Y3Lfqjrl4T+1gxhCFxnWP9ZZ2Sfw6ug/MW+0767A4D8abVW0RJjjP4umvirA9+E/kk6aoagW1z/9wU9YDm/nP79+0UjN1tU/vgIblTYZ5j+U8Ak5ouzIP////////+8/VhYXjDlB4D8NMHozi4vWP/6gDiVhDt8/zLkZ+vERzj9fHgU4RP3lPz/iKRqC4uM/+Cx0VNJU7T+a5gbzODbSPwMUxZ5W8uI/zNquIMpI4T8=\",\"dtype\":\"float64\",\"shape\":[49]},\"y\":{\"__ndarray__\":\"xpRtyxvEU8DwK951GD02QPrzF2w5y2HArZqwqQ/VVEAiiBJS+/U4wDWg0kuMYkrALv6xn05/V0CEbO9MiesyQIdIxT5VBjrA5AWqUQRfYEDDc4CX7048wHTaPQpx3vg/Hg5wvLLYVkCcxi0+qtpEwCi7IBd0YFBAmVeLfGirFkBWRAxSK/RWwAcS65kLkDZA+TX6+gHHN0BHVRGG8MpVwDjyE7j7SDPAX5nTjYM3SMB/0pqS2mFZwHcvCYFnQEvARmNgK/8LNkAQspkDWCRZQOgamcrj9yrA9H8um7yDMUBr6MX0Iv1GwEAgo8QeDVFAJJYSR1Oh/b+sBxsnMn05QHWfnnsG4B5Al+pCVC3vRsAxBAVZ1hZKQMveFg7G60nAOJgoZaZpQUBJMVbgNCBXwG77dXMqB2FAzPW/JPwY9b8Tyrc0aw9KwClFxYBbWyfAOyYFfOwdUsBcXJmhUE1CQHfJasQbNjlAg4sGVNamWUCZoYGhnnRQwGAMd06S2zJAaz0zkUe1C8A=\",\"dtype\":\"float64\",\"shape\":[49]}}},\"id\":\"93b2a141-a4bb-4bdd-9166-dcdc4500f77f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"a73bfbc6-6860-4181-bb22-87383fb3caed\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"17b2d3ea-fd73-40c6-b775-9bfd5ad3962d\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"67b806f5-b4f1-4bf9-be26-80112fab1fe9\",\"type\":\"HelpTool\"},{\"attributes\":{\"label\":{\"value\":\"Validation Set\"},\"renderers\":[{\"id\":\"0a62df5b-00d3-4b71-a2ac-b2cb291a5d89\",\"type\":\"GlyphRenderer\"}]},\"id\":\"f2f63af1-101c-4027-8072-782a07796fe1\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"272a17c4-95fb-4f95-90d1-4a5eaefd9dbe\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"orangered\"},\"line_alpha\":{\"value\":0.85},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"70c946f2-db79-489d-b812-d42db39d89c8\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"55115ff4-4d2c-4976-9cd6-b227fb5f83a2\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"da89098f-5129-4aac-b69b-b55422dab84e\",\"type\":\"ColumnDataSource\"}},\"id\":\"630c7233-9d6c-4dc3-ac0a-a30f607e2e63\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"Training Set\"},\"renderers\":[{\"id\":\"21fa83ab-7d53-4dba-89da-7fbe466eb01b\",\"type\":\"GlyphRenderer\"}]},\"id\":\"cb9f105a-e204-45f0-8ca5-1ab6acad045e\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[2]},\"y\":{\"__ndarray__\":\"y7T4GH32YcBvxIaGmilgQA==\",\"dtype\":\"float64\",\"shape\":[2]}}},\"id\":\"da89098f-5129-4aac-b69b-b55422dab84e\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"77635339-ba4f-4de1-aba1-ffa3610b48d7\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"ff02a4e1-9b4f-455d-b64f-1533a4685a25\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"70c946f2-db79-489d-b812-d42db39d89c8\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"55115ff4-4d2c-4976-9cd6-b227fb5f83a2\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"3fd169cb-f5ff-4e6a-8e72-2b140990be91\",\"type\":\"CDSView\"}},\"id\":\"0a62df5b-00d3-4b71-a2ac-b2cb291a5d89\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"plot\":null,\"text\":\"Training and Validation Sets\"},\"id\":\"04aaf8c2-ead7-47bd-98ff-a6f4319af5f9\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"ff02a4e1-9b4f-455d-b64f-1533a4685a25\",\"type\":\"ColumnDataSource\"}},\"id\":\"3fd169cb-f5ff-4e6a-8e72-2b140990be91\",\"type\":\"CDSView\"},{\"attributes\":{\"formatter\":{\"id\":\"272a17c4-95fb-4f95-90d1-4a5eaefd9dbe\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"21710ddd-6649-4f38-bea8-6cd66ade32cc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"77635339-ba4f-4de1-aba1-ffa3610b48d7\",\"type\":\"BasicTicker\"}},\"id\":\"5bd38d44-b99c-46bf-a777-0fb447625717\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b98e9279-7bf2-4a18-a4ad-92378a2ce841\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"93b2a141-a4bb-4bdd-9166-dcdc4500f77f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5da7f710-3b99-4ff8-a0c0-e5d72c6e60c3\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"28df4bd4-f6af-4987-a45e-8dd38c7361e3\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"2d107a59-df17-4564-a7ac-29b70d795eb6\",\"type\":\"CDSView\"}},\"id\":\"21fa83ab-7d53-4dba-89da-7fbe466eb01b\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"Linear Regression\"},\"renderers\":[{\"id\":\"20594f51-6ffe-4444-a9db-7de6854f6955\",\"type\":\"GlyphRenderer\"}]},\"id\":\"3c788acf-f495-4178-ac55-12c88ea39cf2\",\"type\":\"LegendItem\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"28df4bd4-f6af-4987-a45e-8dd38c7361e3\",\"type\":\"Circle\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"9b8d4744-ea34-4fbb-b8b6-2b0f4707dedb\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null},\"id\":\"5d4d5645-cc8e-455e-b661-9bd31803621e\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_alpha\":{\"value\":0.85},\"line_color\":{\"value\":\"darkgreen\"},\"size\":{\"units\":\"screen\",\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5da7f710-3b99-4ff8-a0c0-e5d72c6e60c3\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"da89098f-5129-4aac-b69b-b55422dab84e\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"9b8d4744-ea34-4fbb-b8b6-2b0f4707dedb\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"b98e9279-7bf2-4a18-a4ad-92378a2ce841\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"630c7233-9d6c-4dc3-ac0a-a30f607e2e63\",\"type\":\"CDSView\"}},\"id\":\"20594f51-6ffe-4444-a9db-7de6854f6955\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"YAjFGS3i7T9XeZSI6d7fPwT2MVkd3t0/t5KhDwGq4z9zL7svEUHRP2Z6cqkqdtk/EYnKIbMd2z+Wj6IqIyjfP37mQVkgyOM/ED0IvIBfvj+dbHyhimHhPw+NuzBkPuc/Dxl0puas5j9mDyyFyhDdP7DLqGvNRuU/wbF6YDNl3z9KNWaiEOnUP8I3BHNs2uo/TCVBKlYE4z+4xXLJO7/hP2xx5TMrQ90/\",\"dtype\":\"float64\",\"shape\":[21]},\"y\":{\"__ndarray__\":\"qk9BquS2XUAQdeVNj/EtwChV8/1VIDrAq4xPJNUfM0AolOpHYD5TwMfwaz+fXUHAWH7zJyHDOMClguZOoN0ewEDqdjBL6zhA6logX/cdXsBk23/Iehfrv2Il4fLGNkxAJ/HVjNNTS0Dmf6Lh6NkywKJYsTSaL0JAMnEDfkGLJcDylGRtKZlJwLlwgWJZGlZA0IICQZGRNkCrYWZDiskhQMLJ7MLUsi/A\",\"dtype\":\"float64\",\"shape\":[21]}}},\"id\":\"ff02a4e1-9b4f-455d-b64f-1533a4685a25\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5a568220-6a34-4f72-8277-9f2f9f6dc0dd\",\"type\":\"PanTool\"},{\"id\":\"ebdf31ab-cc2e-467e-9ac6-e62b9c3331bb\",\"type\":\"WheelZoomTool\"},{\"id\":\"b2402c67-ad52-4e6d-8cf7-12cb47a439bd\",\"type\":\"BoxZoomTool\"},{\"id\":\"a73bfbc6-6860-4181-bb22-87383fb3caed\",\"type\":\"SaveTool\"},{\"id\":\"17b2d3ea-fd73-40c6-b775-9bfd5ad3962d\",\"type\":\"ResetTool\"},{\"id\":\"67b806f5-b4f1-4bf9-be26-80112fab1fe9\",\"type\":\"HelpTool\"}]},\"id\":\"6146fe02-2fac-406c-83a6-676f4761cb11\",\"type\":\"Toolbar\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"21710ddd-6649-4f38-bea8-6cd66ade32cc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"77635339-ba4f-4de1-aba1-ffa3610b48d7\",\"type\":\"BasicTicker\"}},\"id\":\"d8486e66-183e-48d8-acc8-ceefaee05225\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"8e07ef74-8fe3-4056-9be5-cd2c9e487b52\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"25ad361c-b5ac-4fca-ab11-4553924547ca\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"598b2a98-896d-41d5-a341-febb1caa6a52\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"5bd38d44-b99c-46bf-a777-0fb447625717\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":700,\"renderers\":[{\"id\":\"598b2a98-896d-41d5-a341-febb1caa6a52\",\"type\":\"LinearAxis\"},{\"id\":\"e30ea84d-c228-4a15-9337-d6452b8652b3\",\"type\":\"Grid\"},{\"id\":\"5bd38d44-b99c-46bf-a777-0fb447625717\",\"type\":\"LinearAxis\"},{\"id\":\"d8486e66-183e-48d8-acc8-ceefaee05225\",\"type\":\"Grid\"},{\"id\":\"68278c57-f32a-4929-8a1d-c942fbf0f8d3\",\"type\":\"BoxAnnotation\"},{\"id\":\"98ad5d42-7b35-4d06-878d-10c559c7d3a9\",\"type\":\"Legend\"},{\"id\":\"21fa83ab-7d53-4dba-89da-7fbe466eb01b\",\"type\":\"GlyphRenderer\"},{\"id\":\"0a62df5b-00d3-4b71-a2ac-b2cb291a5d89\",\"type\":\"GlyphRenderer\"},{\"id\":\"20594f51-6ffe-4444-a9db-7de6854f6955\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"04aaf8c2-ead7-47bd-98ff-a6f4319af5f9\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"6146fe02-2fac-406c-83a6-676f4761cb11\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5d4d5645-cc8e-455e-b661-9bd31803621e\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"8e07ef74-8fe3-4056-9be5-cd2c9e487b52\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"25ad361c-b5ac-4fca-ab11-4553924547ca\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"83f47635-9da8-4a95-8a2f-439d22b1890a\",\"type\":\"LinearScale\"}},\"id\":\"21710ddd-6649-4f38-bea8-6cd66ade32cc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"83f47635-9da8-4a95-8a2f-439d22b1890a\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"21710ddd-6649-4f38-bea8-6cd66ade32cc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e6c8a390-0c95-4af9-b305-5adf6267fac9\",\"type\":\"BasicTicker\"}},\"id\":\"e30ea84d-c228-4a15-9337-d6452b8652b3\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"2160dc0d-4026-488b-9e84-530df5cf5ef0\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"21710ddd-6649-4f38-bea8-6cd66ade32cc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e6c8a390-0c95-4af9-b305-5adf6267fac9\",\"type\":\"BasicTicker\"}},\"id\":\"598b2a98-896d-41d5-a341-febb1caa6a52\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e6c8a390-0c95-4af9-b305-5adf6267fac9\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"21710ddd-6649-4f38-bea8-6cd66ade32cc\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"2bac23c2-2aec-449f-a9df-7dc74617bd93\",\"elementid\":\"395e65b9-9f7b-4a64-888a-33f355f75031\",\"modelid\":\"21710ddd-6649-4f38-bea8-6cd66ade32cc\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "21710ddd-6649-4f38-bea8-6cd66ade32cc" } }, "output_type": "display_data" } ], "source": [ "from sklearn import model_selection\n", "X_tr, X_valid, y_tr, y_valid = model_selection.train_test_split(X_sc, y,\n", " test_size=0.30, \n", " random_state=0)\n", "lin.fit(X_tr, y_tr)\n", "MSE = metrics.mean_squared_error(lin.predict(X_valid), y_valid)\n", "print(\"Mean Squared Error: %.2f\" % MSE)\n", "print(\"Model coefficient: %.5f, and intercept: %.5f\" % (lin.coef_, lin.intercept_))\n", "\n", "X_predicted = np.linspace(0, 1, 2)[:, np.newaxis]\n", "y_predicted = lin.predict(X_predicted)\n", "fig = bk.figure(title='Training and Validation Sets', \n", " plot_width=700, plot_height=400)\n", "fig.circle(X_tr.squeeze(), y_tr,\n", " size=5, line_alpha=0.85, fill_color='green', line_color='darkgreen',\n", " legend='Training Set')\n", "fig.circle(X_valid.squeeze(), y_valid, \n", " size=5, line_alpha=0.85, fill_color='orangered', legend='Validation Set')\n", "fig.line(X_predicted.ravel(), y_predicted, line_color='blue', legend='Linear Regression')\n", "fig.legend.location = 'bottom_right'\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 Example: Do a Regression Analysis on MATLAB® data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data are generated with the following MATLAB code:\n", "\n", " % Generate Regression Test Data 02 ----------------------------------------\n", " samples = 100; features = 5;\n", " \n", " X = rand(samples, features)\n", " for i = 1:samples\n", " X(i,:) = (X(i,:)*i)+i+0.1;\n", " end\n", " % Calculate y as a linear combination of features with coeff. 1.5, 2.5, ...\n", " % and add some noise\n", " noise = 0.1;\n", " lin_comb = (1:features) + 0.5\n", " y = (X+rand(samples, features)*noise)*lin_comb'\n", " % Define feature names as 'F001', ... , 'Fnnn' up to 9999 features\n", " feat_names = sprintf('F%04i',1);\n", " for i = 2:features\n", " feat_names = strvcat(feat_names, sprintf('F%04i',i));\n", " end\n", " \n", " save ('matlab_test_data_02', 'X','y', 'feat_names')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn import preprocessing, linear_model\n", "mat = scipy.io.loadmat('example_data/matlab_test_data_02.mat')\n", "col = [s.strip() for s in list(mat['feat_names'])]" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Xt,Xv,yt,yv = model_selection.train_test_split(mat['X'], mat['y'],test_size=0.30,\n", " random_state=0)\n", "Xt = pd.DataFrame(Xt, columns=col)\n", "Xv = pd.DataFrame(Xv, columns=col)\n", "yt = pd.DataFrame(yt, columns=['measured'])\n", "yv = pd.DataFrame(yv, columns=['measured'])" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
F0001F0002F0003F0004F0005F0006
0131.391611178.588071191.836028206.928031188.601869195.879822
1137.77163091.46264376.438656104.585583123.26509073.587835
2789.737369671.934539835.830887515.921167901.167154813.659391
\n", "
" ], "text/plain": [ " F0001 F0002 F0003 F0004 F0005 F0006\n", "0 131.391611 178.588071 191.836028 206.928031 188.601869 195.879822\n", "1 137.771630 91.462643 76.438656 104.585583 123.265090 73.587835\n", "2 789.737369 671.934539 835.830887 515.921167 901.167154 813.659391" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Xt.head(3)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 2.46, 0.88, 1.49, 2.39, 2.1 , 2.5 ],\n", " [ 0.5 , 0.64, 0.64, 0.54, 0.43, 0.96],\n", " [-0.75, -0.93, -0.81, -0.61, -0.44, -0.83],\n", " ...,\n", " [ 1.24, 2.17, 0.7 , 2.22, 1.78, 2.63],\n", " [ 0.4 , -0.15, -0.38, 0.05, -0.17, 0.4 ],\n", " [-1.53, -1.55, -1.55, -1.55, -1.58, -1.55]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Scaler is fitted only on training data\n", "Xts = Xt.copy()\n", "Xvs = Xv.copy()\n", "scaler = preprocessing.StandardScaler(copy=False, with_mean=True, with_std=True).fit(Xt)\n", "scaler.transform(Xts)\n", "scaler.transform(Xv)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
F0001F0002F0003F0004F0005F0006
0-1.294851-1.210162-1.171325-1.148142-1.198971-1.160278
1-1.281377-1.399557-1.416333-1.371187-1.344097-1.424161
20.095500-0.1377160.195982-0.4747230.3837820.172776
\n", "
" ], "text/plain": [ " F0001 F0002 F0003 F0004 F0005 F0006\n", "0 -1.294851 -1.210162 -1.171325 -1.148142 -1.198971 -1.160278\n", "1 -1.281377 -1.399557 -1.416333 -1.371187 -1.344097 -1.424161\n", "2 0.095500 -0.137716 0.195982 -0.474723 0.383782 0.172776" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Xts.head(3)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 708.82 1153.81 1647.24 2066.73 2474.24 3011.71]]\n", "[17692.81]\n" ] } ], "source": [ "model = linear_model.LinearRegression(fit_intercept=True, normalize=True)\n", "model.fit(Xts, yt)\n", "# NOTICE: coefficients are much different from 1.5, 2.5, ... when fitting on scaled data\n", "print(model.coef_)\n", "print(model.intercept_)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"fdbd75b7-148f-40ef-b9c2-7d2f465a9479\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"6fd886c8-4e19-45ea-bd93-7791582126aa\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"9a6241df-127b-4136-a088-6b53c0c90ce0\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"2c138828-0770-44fd-91df-971d5ba946bb\",\"type\":\"PanTool\"},{\"id\":\"d4a81e82-6170-4b83-8da9-c52f6ac9ec8d\",\"type\":\"WheelZoomTool\"},{\"id\":\"92bf23c9-ecac-46b5-a69f-bd569bcf232e\",\"type\":\"BoxZoomTool\"},{\"id\":\"0ea385be-168f-40a8-85d6-2a429214424e\",\"type\":\"SaveTool\"},{\"id\":\"c64e35bf-e24f-4157-b04e-db6acb39e4d0\",\"type\":\"ResetTool\"},{\"id\":\"6fd886c8-4e19-45ea-bd93-7791582126aa\",\"type\":\"HelpTool\"}]},\"id\":\"c39d9144-dc96-48c6-8a3c-55c83e5ad57d\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"y pred\",\"formatter\":{\"id\":\"add50283-e398-4746-acbd-e7305544809e\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"bba7b548-83ba-4ab0-b0e2-aa811ce96680\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e645317f-d258-4722-9703-3394f4aa78f9\",\"type\":\"BasicTicker\"}},\"id\":\"f9e38f4a-e390-4f01-8267-061ca1726249\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e645317f-d258-4722-9703-3394f4aa78f9\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.2},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"7ff280bc-f8bc-4de8-b366-9265d2bfc78c\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"a2346b20-6133-4224-8419-72b90d42b888\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[300]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[300]}}},\"id\":\"f9c23e4b-02df-4b4a-b186-9c19a2b5d0aa\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"f9c23e4b-02df-4b4a-b186-9c19a2b5d0aa\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"7ff280bc-f8bc-4de8-b366-9265d2bfc78c\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"cb039b2a-26d1-4744-87b6-f52958d4f919\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"cce1bfeb-77c7-47b0-a60c-64f945f7a216\",\"type\":\"CDSView\"}},\"id\":\"0902008c-32e1-4cff-8f4c-4fc9d3c1ad91\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"bba7b548-83ba-4ab0-b0e2-aa811ce96680\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e645317f-d258-4722-9703-3394f4aa78f9\",\"type\":\"BasicTicker\"}},\"id\":\"982ba6f7-4996-4ac1-845b-d0f836fecb5b\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":null,\"text\":\"Measured Values VS Predicted Values\"},\"id\":\"5262aaea-ed3a-4146-9920-f4aa3fd6c343\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"cb039b2a-26d1-4744-87b6-f52958d4f919\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"c64e35bf-e24f-4157-b04e-db6acb39e4d0\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"262435d6-1409-42c5-a1bc-0a99e47d191c\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"f9c23e4b-02df-4b4a-b186-9c19a2b5d0aa\",\"type\":\"ColumnDataSource\"}},\"id\":\"cce1bfeb-77c7-47b0-a60c-64f945f7a216\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"d4a81e82-6170-4b83-8da9-c52f6ac9ec8d\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"9a6241df-127b-4136-a088-6b53c0c90ce0\",\"type\":\"BoxAnnotation\"}},\"id\":\"92bf23c9-ecac-46b5-a69f-bd569bcf232e\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null},\"id\":\"27055410-1fbc-45d8-afcf-e39b878db17f\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2c138828-0770-44fd-91df-971d5ba946bb\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"0ea385be-168f-40a8-85d6-2a429214424e\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"eba34825-8baa-4a9e-a0de-edd9ef00d595\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"6add2c7b-e981-4f85-a404-d3e1dca4fde6\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"y val\",\"formatter\":{\"id\":\"f65d7145-5416-4a81-a2de-43952898d1e9\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"bba7b548-83ba-4ab0-b0e2-aa811ce96680\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"262435d6-1409-42c5-a1bc-0a99e47d191c\",\"type\":\"BasicTicker\"}},\"id\":\"19ced1db-214a-48a9-9f97-87b94137dbbc\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"add50283-e398-4746-acbd-e7305544809e\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"plot\":{\"id\":\"bba7b548-83ba-4ab0-b0e2-aa811ce96680\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"262435d6-1409-42c5-a1bc-0a99e47d191c\",\"type\":\"BasicTicker\"}},\"id\":\"97cbea3a-b518-4c9d-8a7b-fd6dd2a19a42\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"f65d7145-5416-4a81-a2de-43952898d1e9\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"19ced1db-214a-48a9-9f97-87b94137dbbc\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"f9e38f4a-e390-4f01-8267-061ca1726249\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"renderers\":[{\"id\":\"19ced1db-214a-48a9-9f97-87b94137dbbc\",\"type\":\"LinearAxis\"},{\"id\":\"97cbea3a-b518-4c9d-8a7b-fd6dd2a19a42\",\"type\":\"Grid\"},{\"id\":\"f9e38f4a-e390-4f01-8267-061ca1726249\",\"type\":\"LinearAxis\"},{\"id\":\"982ba6f7-4996-4ac1-845b-d0f836fecb5b\",\"type\":\"Grid\"},{\"id\":\"9a6241df-127b-4136-a088-6b53c0c90ce0\",\"type\":\"BoxAnnotation\"},{\"id\":\"0902008c-32e1-4cff-8f4c-4fc9d3c1ad91\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"5262aaea-ed3a-4146-9920-f4aa3fd6c343\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"c39d9144-dc96-48c6-8a3c-55c83e5ad57d\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"27055410-1fbc-45d8-afcf-e39b878db17f\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"a2346b20-6133-4224-8419-72b90d42b888\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"6add2c7b-e981-4f85-a404-d3e1dca4fde6\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"eba34825-8baa-4a9e-a0de-edd9ef00d595\",\"type\":\"LinearScale\"}},\"id\":\"bba7b548-83ba-4ab0-b0e2-aa811ce96680\",\"subtype\":\"Figure\",\"type\":\"Plot\"}],\"root_ids\":[\"bba7b548-83ba-4ab0-b0e2-aa811ce96680\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"fdbd75b7-148f-40ef-b9c2-7d2f465a9479\",\"elementid\":\"74368436-dc55-4918-967d-24cc7e0a1f1f\",\"modelid\":\"bba7b548-83ba-4ab0-b0e2-aa811ce96680\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "bba7b548-83ba-4ab0-b0e2-aa811ce96680" } }, "output_type": "display_data" } ], "source": [ "# Plot the data and the model prediction\n", "yp = model.predict(Xvs)\n", "fig = bk.figure(title='Measured Values VS Predicted Values',\n", " x_axis_label='y val', y_axis_label='y pred',\n", " plot_width=600, plot_height=400)\n", "fig.circle(yv['measured'], yp[:,0], size=8,\n", " fill_color='blue', fill_alpha=0.5, line_color='black', alpha=0.2)\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Example: Training and a Validation Sets on a Classification Problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The K-neighbors is an instance-based classifier that predicts the label of an unknown point based on the labels of the *K* nearest points in the parameter space:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[178 0 0 0 0 0 0 0 0 0]\n", " [ 0 182 0 0 0 0 0 0 0 0]\n", " [ 0 0 177 0 0 0 0 0 0 0]\n", " [ 0 0 0 183 0 0 0 0 0 0]\n", " [ 0 0 0 0 181 0 0 0 0 0]\n", " [ 0 0 0 0 0 182 0 0 0 0]\n", " [ 0 0 0 0 0 0 181 0 0 0]\n", " [ 0 0 0 0 0 0 0 179 0 0]\n", " [ 0 0 0 0 0 0 0 0 174 0]\n", " [ 0 0 0 0 0 0 0 0 0 180]]\n", "\n", "F1 Score: 1.0\n" ] } ], "source": [ "from sklearn import neighbors\n", "digits = datasets.load_digits()\n", "X, y = digits.data, digits.target\n", "\n", "clf = neighbors.KNeighborsClassifier(n_neighbors=1)\n", "clf.fit(X, y)\n", "y_pred = clf.predict(X)\n", "print(metrics.confusion_matrix(y_pred, y))\n", "print('\\nF1 Score: ', metrics.f1_score(y_pred, y, average='weighted'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apparently, we've found a perfect classifier! But this is misleading for the reasons we saw before: the classifier essentially \"memorizes\" all the samples it has already seen. To really test how well this algorithm does, we need to try some samples it *hasn't* yet seen.\n", "\n", "Here we split the original data in **Training** and **Validation** sets and run again the previous algorithm. In this case we see that we still have a good classifier but the precision is reduced:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[60 0 0 0 0 0 0 0 0 0]\n", " [ 0 73 0 0 0 0 0 0 0 0]\n", " [ 0 0 71 0 0 0 0 0 0 0]\n", " [ 0 0 0 70 0 0 0 0 0 0]\n", " [ 0 0 0 0 63 0 0 0 0 0]\n", " [ 0 0 0 0 0 87 1 0 0 1]\n", " [ 0 0 0 0 0 0 76 0 0 0]\n", " [ 0 0 0 0 0 0 0 65 0 0]\n", " [ 0 2 0 1 0 0 0 0 74 1]\n", " [ 0 0 0 2 0 1 0 0 0 71]]\n", "\n", "F1 Score: 0.9874410807522929\n" ] } ], "source": [ "X_tr, X_valid, y_tr, y_valid = model_selection.train_test_split(X, \n", " y,\n", " test_size=0.40, \n", " random_state=0)\n", "clf = neighbors.KNeighborsClassifier(n_neighbors=1).fit(X_tr, y_tr)\n", "y_pred = clf.predict(X_valid)\n", "print(metrics.confusion_matrix(y_valid, y_pred))\n", "print('\\nF1 Score: ', metrics.f1_score(y_valid, y_pred, average='weighted'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4 Do I need a Simple or a Complex Model?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to show the relation between the size of the training dataset and the complexity of the model we generate some example data in the same way we did in the very first example but with more than ten times the number of samples. The we fit a polynomial model and we plot the error w.r.t. the degree of polynomial.\n", "\n", "Here **Training Data** are plotted in **Blue** while **Validation Data** are **Red**:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"c9a5ad6f-6c56-492f-bfbd-36ffc0d57e52\":{\"roots\":{\"references\":[{\"attributes\":{\"source\":{\"id\":\"529752d7-c8d0-4102-ba08-4d2cf7986c72\",\"type\":\"ColumnDataSource\"}},\"id\":\"682e020c-c883-4e76-a781-14f784aa95f7\",\"type\":\"CDSView\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"7dfd4722-ce2e-41cf-9935-45a46d3e0391\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"6694646f-2fe1-49d7-b6c7-ce7801f2cd6b\",\"type\":\"BasicTicker\"}},\"id\":\"5f8f780a-9e7c-4d94-8c4d-416d183dc71b\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"f7554382-ca7b-4e19-84fc-8ce01786e757\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"b45d165f-d50b-425b-a2ce-c4dc6cf16539\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ccff9474-e70d-44c5-b01c-d3d3aa3c481b\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"0045b4fd-3d8d-4b0d-b876-43529883d8bc\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"8a0d66bd-1682-419d-bfcc-b7cfbfabfa9c\",\"type\":\"CDSView\"}},\"id\":\"cefd0d76-19de-4619-a518-8b41b64b5fb3\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"REh0vGNbyT+KlYE6FdTaPy6MX2Vt89o/TC3aon9G0T/0CP63alnTP6nlp0d4dOU/PAXHo+XIwj8MYhjHfSvKP+dwxO8qguI/UfC68+UM5z94pYJBJtbpP06P7KRrZOY/HG8uOBAm4T/nnq5OvhnsPzTUrETvdd8/0P9YAgVtuj8LCbl9yeDhP+j7e2ejZNk/3sd1Q2EL7D+AKLSK7tSTP55047jGQek/P6x04itf4j/uGRu2WVTWP86jW72qHdY/UDKRTqEWyz+y3apLBbnlP+MLUSeeoOw/TtYJ0+ke2j+slCh52yPmP18n3RKzn+k/EMqwjICjtz8Q5zfkVVKrP7cBf6YuAeg/C1KIEw/F4j8iGjr/ksrSP8hKyqSwD+E/arf0QOlq0j8GPPoPfbDaPz+EHsgeOu4/7myRvMtB1j8=\",\"dtype\":\"float64\",\"shape\":[40]},\"y\":{\"__ndarray__\":\"tA6USt4GGEBweF/zYosgQIDAjoQzgCBA0GjnXrhBHUBmq7gOWK8gQCJUqqDDqSNAlvoKScS1GED6Od4L0y0YQFZGfM+ZeiFAQojTvPoIG0DvhPETWwgjQKoQQIyumSJAEhN1C67yIECCMXWZeCQjQGtVQsT4cBxARL/3RZvNGECKbi/ef1UhQP6dDCzbWCBAzsZCsS22IEAgmySyLSXOv6lbFXT0CR1ADJyHf9urIEAPwmHM8pweQCVrOzAyOB5A7Ezjil/WIEDKnLY4hucjQF52wLSdYiNAUvhmHAlyJECT55GTIfEgQNtVthRpoCJAwLYx31pAFkAUstSnE18RQDo/ObNa2x9A2OSoXXWWIkDwa0+2s7waQBJRm6wj3h1Ai/6Uls9jIUANRRaEUcMgQHyyezy60iNA0IJnDtFTFUA=\",\"dtype\":\"float64\",\"shape\":[40]}}},\"id\":\"529752d7-c8d0-4102-ba08-4d2cf7986c72\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0045b4fd-3d8d-4b0d-b876-43529883d8bc\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"b2ca4432-e64f-40c6-acee-b25702cac451\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"blue\"},\"size\":{\"units\":\"screen\",\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ccff9474-e70d-44c5-b01c-d3d3aa3c481b\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"388a8858-9cd6-4216-89d1-4c9dfcede3a8\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"62fc707d-1546-49dd-b581-994ebc67bb28\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"b57aa586-01c3-414b-a48d-c1e49610d756\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"6694646f-2fe1-49d7-b6c7-ce7801f2cd6b\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"615ad209-2036-4110-9e19-61cfedc2e6a6\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"0ab8ce8e-bacd-4f83-8696-6ecaa0f7c43a\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"b45d165f-d50b-425b-a2ce-c4dc6cf16539\",\"type\":\"ColumnDataSource\"}},\"id\":\"8a0d66bd-1682-419d-bfcc-b7cfbfabfa9c\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"b2ca4432-e64f-40c6-acee-b25702cac451\",\"type\":\"BoxAnnotation\"}},\"id\":\"29ab8c8c-7c02-4364-884e-870b2cb11b7a\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"6cef2683-a5bb-4d70-a006-26c10e1ee1b3\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1cff5f1f-8594-4c25-b734-09f74959f07f\",\"type\":\"SaveTool\"},{\"attributes\":{\"formatter\":{\"id\":\"20432383-cec4-43e4-8f26-5b92fbc6c22e\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"7dfd4722-ce2e-41cf-9935-45a46d3e0391\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"6694646f-2fe1-49d7-b6c7-ce7801f2cd6b\",\"type\":\"BasicTicker\"}},\"id\":\"8fb97df3-2d6a-45a4-aa3d-fe95c0cbd65e\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"083d31f1-7634-4227-9ccd-d9d091595d8b\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"840eb543-3b1e-4d62-a64e-2128a6a5e013\",\"type\":\"HelpTool\"},{\"attributes\":{\"data_source\":{\"id\":\"529752d7-c8d0-4102-ba08-4d2cf7986c72\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"a2582bd2-3bca-4231-a08d-e91ec91bf9a6\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"f7554382-ca7b-4e19-84fc-8ce01786e757\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"682e020c-c883-4e76-a781-14f784aa95f7\",\"type\":\"CDSView\"}},\"id\":\"983809f0-a00d-4aff-8ad6-71dad35041f1\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"formatter\":{\"id\":\"62fc707d-1546-49dd-b581-994ebc67bb28\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"7dfd4722-ce2e-41cf-9935-45a46d3e0391\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b57aa586-01c3-414b-a48d-c1e49610d756\",\"type\":\"BasicTicker\"}},\"id\":\"0150956d-8437-4177-b6c5-99ec54437d2f\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"2e5bfc51-921a-4049-9418-40dd008d826b\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"20432383-cec4-43e4-8f26-5b92fbc6c22e\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a2582bd2-3bca-4231-a08d-e91ec91bf9a6\",\"type\":\"Circle\"},{\"attributes\":{\"plot\":{\"id\":\"7dfd4722-ce2e-41cf-9935-45a46d3e0391\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b57aa586-01c3-414b-a48d-c1e49610d756\",\"type\":\"BasicTicker\"}},\"id\":\"d95b5d6a-0963-47c8-b262-5817d17c1901\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null},\"id\":\"60147017-c9ee-4c0e-ba75-9b70de900c4d\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"0150956d-8437-4177-b6c5-99ec54437d2f\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"8fb97df3-2d6a-45a4-aa3d-fe95c0cbd65e\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":700,\"renderers\":[{\"id\":\"0150956d-8437-4177-b6c5-99ec54437d2f\",\"type\":\"LinearAxis\"},{\"id\":\"d95b5d6a-0963-47c8-b262-5817d17c1901\",\"type\":\"Grid\"},{\"id\":\"8fb97df3-2d6a-45a4-aa3d-fe95c0cbd65e\",\"type\":\"LinearAxis\"},{\"id\":\"5f8f780a-9e7c-4d94-8c4d-416d183dc71b\",\"type\":\"Grid\"},{\"id\":\"b2ca4432-e64f-40c6-acee-b25702cac451\",\"type\":\"BoxAnnotation\"},{\"id\":\"cefd0d76-19de-4619-a518-8b41b64b5fb3\",\"type\":\"GlyphRenderer\"},{\"id\":\"983809f0-a00d-4aff-8ad6-71dad35041f1\",\"type\":\"GlyphRenderer\"}],\"title\":null,\"toolbar\":{\"id\":\"aff28551-5181-41aa-9e46-f2d151e32133\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"2e5bfc51-921a-4049-9418-40dd008d826b\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"0ab8ce8e-bacd-4f83-8696-6ecaa0f7c43a\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"60147017-c9ee-4c0e-ba75-9b70de900c4d\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"6cef2683-a5bb-4d70-a006-26c10e1ee1b3\",\"type\":\"LinearScale\"}},\"id\":\"7dfd4722-ce2e-41cf-9935-45a46d3e0391\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"2Jc0FZVb4j/YtC75/V+9PwiUZbjGpMA/opmcsKa/4z9E7SpnxZjBP9hrK7v4eeA/uKul8Qen7j/k4TTmX9fHPwDuSBeDg2c/neT4rYY45j+QAhLRljK6Pyp5ma/kf9o/IADBm0mq3D8ikEts7uTjP5VwpuVAteo/MLX98H+TqT/z2gKTGavsPxAGNrP/++4/YcQpIqvo7D9YHIwadcW1P/aukVvL8tE/Ej4LSZfb4j8C8ws8+N/uP8CsZ0R+C5w/8NBvilMqxT+asU6MiXPZPwEljRqnBug/XCZTxOmB2j+guV+EKbqSP9yqBv8y+ME/sX2kAsCk7z+wWIEgYDvnP55Ll2of9eM/ShbrvIkZ7D/9xMIiC0TsP/yo8tAAvcU/QDBGrs7TwT+QpnkR/f6jP/t6YuA2E+0/8PwMl9hl2z8AwGFmkPsdP/8cFit86Ow/4A8jeWgx1D/dmkFMN2LuP4hk+hJCLbk//lqoMx+12j8wHSLL0PflPycjGXJR7eU/Am9qbbgH6D9o7nF5Jq7tP00Q/qnpOuU/VPhNfwDIwj/AqDEZ+fDnP1SfYpf8PeE/eDVkarf+0D+s6zRs5lbOP/Ss10Jcy9w/R1OPRM495T9YDr5IJA/UP5SWEsKBJ+Y/\",\"dtype\":\"float64\",\"shape\":[60]},\"y\":{\"__ndarray__\":\"bMFaU47VIkBYJsL0q1oXQBrjPviweh5AYBbTvsG2IEDmuSTD97QXQADov1M8iyBAFowrsy6XI0AbyorHKyMZQH7zfalzdQZAXXi2DAaGIkDvUgj352YXQKup2uyAuR1AGnvQct4qIUA4c7DxraIgQAwVKHiMfSJAooIV+1GIEECziR2q0n4fQD84n5NQSCJAnDmMdtIQI0AuSU7jU5gQQML49qfIVB1AYEW7Cd5GHUBLQ4DpsiAgQOBbmzOSLAJA4qKeifCnG0CHuq7VQXIgQF/g5qYZuiNAGwnFzaukG0DXDtBwTSMDQNiVI83o2xVAwdTBcUPdIkA3wLyZ4PMlQIBVv8Y3CSFAKm6Drtu1IkBkQqdESdkiQF22ZQYzyhpAjypkSh6YF0C0825J5CEQQKvRSW/C9yFAPJWQrG9bHkBYub8+q93SvyVt7c2AtiBA26OdSf2AHkBtwuUUsr4hQDFf8OBF6A5A/v8WxBmIIkAmkaRp9WsdQD539KzisCFATSDtV3RgIUCkYwFz7W4hQDJKTuO84CFAXLeci0ZfFUDHAggU6QgeQCRJavF2sCFAQKc2CtdoHkCqL1lDy4sUQABAxB7yVSJAGDdvlyMCIUCq7jzUBPMcQLDgc8MekCFA\",\"dtype\":\"float64\",\"shape\":[60]}}},\"id\":\"b45d165f-d50b-425b-a2ce-c4dc6cf16539\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"388a8858-9cd6-4216-89d1-4c9dfcede3a8\",\"type\":\"PanTool\"},{\"id\":\"615ad209-2036-4110-9e19-61cfedc2e6a6\",\"type\":\"WheelZoomTool\"},{\"id\":\"29ab8c8c-7c02-4364-884e-870b2cb11b7a\",\"type\":\"BoxZoomTool\"},{\"id\":\"1cff5f1f-8594-4c25-b734-09f74959f07f\",\"type\":\"SaveTool\"},{\"id\":\"083d31f1-7634-4227-9ccd-d9d091595d8b\",\"type\":\"ResetTool\"},{\"id\":\"840eb543-3b1e-4d62-a64e-2128a6a5e013\",\"type\":\"HelpTool\"}]},\"id\":\"aff28551-5181-41aa-9e46-f2d151e32133\",\"type\":\"Toolbar\"}],\"root_ids\":[\"7dfd4722-ce2e-41cf-9935-45a46d3e0391\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"c9a5ad6f-6c56-492f-bfbd-36ffc0d57e52\",\"elementid\":\"3c5d0475-8d84-4fb5-8585-6efc2c8b2111\",\"modelid\":\"7dfd4722-ce2e-41cf-9935-45a46d3e0391\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "7dfd4722-ce2e-41cf-9935-45a46d3e0391" } }, "output_type": "display_data" } ], "source": [ "from sklearn import model_selection\n", "N = 100\n", "test_size = 0.40\n", "error = 1.0\n", "np.random.seed(1)\n", "x = np.random.random(N)\n", "y = biasvariance.test_func(x, error)\n", "x_tr, x_valid, y_tr, y_valid = model_selection.train_test_split(x, y, test_size=test_size)\n", "fig = bk.figure(plot_width=700, plot_height=400, title=None)\n", "fig.circle(x_tr, y_tr, color='blue', size=6, alpha=0.5)\n", "fig.circle(x_valid, y_valid, color='red', size=6, alpha=0.5)\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The **model parameters** *(in our case, the coefficients of the polynomials)* are learned using the **training set**.\n", "\n", "The **meta-parameters** *(in our case, the degree of the polynomial)* are adjusted so that this **validation error** is minimized.\n", "\n", "Finally, the labels are predicted for the **test set**.\n", "\n", "The **validation error** of our polynomial classifier can be visualized by plotting the error as a function of the polynomial degree:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"42daf68a-e850-45bd-9c18-15cf2793b442\":{\"roots\":{\"references\":[{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"34c63288-ac1f-4fb8-a215-057eeeb599b4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"6aa6f290-e91d-4d8c-943e-b32a669e0226\",\"type\":\"BasicTicker\"}},\"id\":\"ae35706f-5c22-4612-8d38-979cb662a1df\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"a4a7fb10-ee7c-48e7-b6cc-ebb6199db69f\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"d0c76cec-8268-484e-9ca4-d462493fa481\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"9757c978-9abb-4cc4-a062-c48b4b6df617\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],\"y\":{\"__ndarray__\":\"P1dp/luKAUAZEvIUYuH0Pz3LCcCX2+4/GQHqbXpf6z8M01mk+QbqP7SyDSmihuk/qcQmSV1g6T835yGu9vnoP0X+xuVr3Og/f9H08hfZ6D/1u5V1arroP9oFMI2Pr+g/utnC2Ryp6D+HfhkuznHoP6iNyDGpTug/NLVtlDtF6D9w4DK8CeznP1kH+1K/2+c/arUsu1Db5z+TBphnG9vnP3pP6TXfbec/PyWb36aY5z/xAOUVfrTnPwd31b0TkeY/d+C3OSW+5j/R1UjEvu3mP8ZgAQifgOY/E+1BUpCS5j+kN+/6cqXmP9hxRHW6t+Y/kWbRQOKU5j8SWMwI+aTmPzuBUl9qteY/TbVwECbF5j+a2j/uNNPmP2AKvGCgUuY/vh4WT95w5j9D7LUyXI/mP6KvRd5ArOY/gONz0rrF5j9bEyXe6LflPw==\",\"dtype\":\"float64\",\"shape\":[41]}}},\"id\":\"cc76583a-c3c1-442d-b87b-d798ba28660b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"5d8472d5-8f08-4c2a-b417-ea3b0295a1dc\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"678978d6-fa44-4fb9-880f-670840c6bef0\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"93e0968a-a592-4216-8ac1-817de1f1b0ef\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"c2b2b1ce-e5a2-473f-b76b-1f6687d11513\",\"type\":\"CDSView\"}},\"id\":\"f445a9fd-ba06-42e4-b759-4657d7dc5698\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"d5aec8de-9dca-4f73-bad3-b6b5167c0a66\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1f3e728a-a277-4161-9c0f-5245147ccd4e\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"6958a950-0924-4f12-bc7f-7ae1f50e66ad\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"93e0968a-a592-4216-8ac1-817de1f1b0ef\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"royalblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"678978d6-fa44-4fb9-880f-670840c6bef0\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"5d8472d5-8f08-4c2a-b417-ea3b0295a1dc\",\"type\":\"ColumnDataSource\"}},\"id\":\"c2b2b1ce-e5a2-473f-b76b-1f6687d11513\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"cce4cb97-35a8-4e60-8ef4-245dfbe73731\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"a91d2e0f-71ce-4a0e-8b05-441543ab453e\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1f3e728a-a277-4161-9c0f-5245147ccd4e\",\"type\":\"BoxAnnotation\"}},\"id\":\"b6839ca5-5fa6-42fd-b1bc-998072ab56a4\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"57d16e99-0a61-476d-ac1f-b090ed22ce3c\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"18dc489f-e3b5-4fcd-809b-b8bb76a5d6a1\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"4f8259ab-c349-4347-9527-d9fc0ae923ff\",\"type\":\"HelpTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],\"y\":{\"__ndarray__\":\"qC7ypKIP/z/P297JjFz3P/sGX/3aPfM/j9zC4g9L8T+PFcSjysXwP92c+POhi/A/1T8cn+Zl8D9WHZkX2MDwP+/4RsRr7fA/gziIXYXu8D+gZrGz9GHxP9lGduyNX/E/lIEUksJu8T8VE6RWTRzyPyEKaIQTSfI/lyCpg79f8j9LRSaKzH/yPzKx+G1RkvI/uBpR8f+b8j9JAJ+wp3ryP3VVMuXbwvI/8IA84dC18j9WLY9U8aHyP7JMgekzm/M/LZ4dAEy48z8oWGOrzrrzPxdX5P0HIfM/FBoZnagy8z/CNT98Pk3zP2goKnUbcvM/rS42OPT78j9HqyUKq/zyP+xNHy/NBvM/zL2JCHoh8z91W4gn1E/zPwckQjZA/PU/5+4TOtZn9T/g0fUhJNr0P2hujxKcZvQ/6DOCqc4Y9D+Zy+6zfLD6Pw==\",\"dtype\":\"float64\",\"shape\":[41]}}},\"id\":\"5d8472d5-8f08-4c2a-b417-ea3b0295a1dc\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"c7f6b7f4-2b5c-4db5-abb1-457ee864f2e0\",\"type\":\"ColumnDataSource\"}},\"id\":\"db8baa2f-f126-4657-bd29-0721ff55d6a0\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"dc2b92b3-42bd-430c-a550-d2e601abc9f6\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"a1633580-c2bd-4a48-b4d1-064db074b390\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"9da814e1-fef7-43be-93d5-7b0cae0769fe\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":700,\"renderers\":[{\"id\":\"a1633580-c2bd-4a48-b4d1-064db074b390\",\"type\":\"LinearAxis\"},{\"id\":\"ae35706f-5c22-4612-8d38-979cb662a1df\",\"type\":\"Grid\"},{\"id\":\"9da814e1-fef7-43be-93d5-7b0cae0769fe\",\"type\":\"LinearAxis\"},{\"id\":\"40da9ba8-a596-4749-960d-d504d0d33718\",\"type\":\"Grid\"},{\"id\":\"1f3e728a-a277-4161-9c0f-5245147ccd4e\",\"type\":\"BoxAnnotation\"},{\"id\":\"8aae53c8-af06-48c5-a777-e4bca70dcf31\",\"type\":\"Legend\"},{\"id\":\"f445a9fd-ba06-42e4-b759-4657d7dc5698\",\"type\":\"GlyphRenderer\"},{\"id\":\"ca06b48c-c0b0-4500-bb25-4b3a084760c7\",\"type\":\"GlyphRenderer\"},{\"id\":\"f6cfff4f-a721-4ff0-bf2e-9f6e9149a3fb\",\"type\":\"GlyphRenderer\"}],\"title\":null,\"toolbar\":{\"id\":\"82b6d72a-192c-40db-be0d-dc741c629bb9\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"d5aec8de-9dca-4f73-bad3-b6b5167c0a66\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"9757c978-9abb-4cc4-a062-c48b4b6df617\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"d0c76cec-8268-484e-9ca4-d462493fa481\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"a4a7fb10-ee7c-48e7-b6cc-ebb6199db69f\",\"type\":\"LinearScale\"}},\"id\":\"34c63288-ac1f-4fb8-a215-057eeeb599b4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"label\":{\"value\":\"cross-validation error\"},\"renderers\":[{\"id\":\"f445a9fd-ba06-42e4-b759-4657d7dc5698\",\"type\":\"GlyphRenderer\"}]},\"id\":\"d1ecaf27-ee55-4bd1-99f6-b618201e8e70\",\"type\":\"LegendItem\"},{\"attributes\":{\"label\":{\"value\":\"training error\"},\"renderers\":[{\"id\":\"ca06b48c-c0b0-4500-bb25-4b3a084760c7\",\"type\":\"GlyphRenderer\"}]},\"id\":\"7ae01c1a-eb80-41c8-9cdf-e75a4554ef7b\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"cc76583a-c3c1-442d-b87b-d798ba28660b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"44693815-6b59-4568-9e11-596554945cc9\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"03b89918-3262-4e14-b785-5bb1a1610ed4\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1bcc8d03-8d26-47f9-80da-d511f04c480b\",\"type\":\"CDSView\"}},\"id\":\"ca06b48c-c0b0-4500-bb25-4b3a084760c7\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"03b89918-3262-4e14-b785-5bb1a1610ed4\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"green\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"44693815-6b59-4568-9e11-596554945cc9\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[0,20],\"y\":[1.0,1.0]}},\"id\":\"c7f6b7f4-2b5c-4db5-abb1-457ee864f2e0\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"cc76583a-c3c1-442d-b87b-d798ba28660b\",\"type\":\"ColumnDataSource\"}},\"id\":\"1bcc8d03-8d26-47f9-80da-d511f04c480b\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[6],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a552c7fe-2275-472c-9813-d805282d1ef0\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_dash\":[6],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"83218de6-2585-48d3-a0a5-c77009161d23\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"6aa6f290-e91d-4d8c-943e-b32a669e0226\",\"type\":\"BasicTicker\"},{\"attributes\":{\"items\":[{\"id\":\"d1ecaf27-ee55-4bd1-99f6-b618201e8e70\",\"type\":\"LegendItem\"},{\"id\":\"7ae01c1a-eb80-41c8-9cdf-e75a4554ef7b\",\"type\":\"LegendItem\"},{\"id\":\"982c1c11-780e-4cd7-b757-ee5cbefbae63\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"34c63288-ac1f-4fb8-a215-057eeeb599b4\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"8aae53c8-af06-48c5-a777-e4bca70dcf31\",\"type\":\"Legend\"},{\"attributes\":{\"data_source\":{\"id\":\"c7f6b7f4-2b5c-4db5-abb1-457ee864f2e0\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"a552c7fe-2275-472c-9813-d805282d1ef0\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"83218de6-2585-48d3-a0a5-c77009161d23\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"db8baa2f-f126-4657-bd29-0721ff55d6a0\",\"type\":\"CDSView\"}},\"id\":\"f6cfff4f-a721-4ff0-bf2e-9f6e9149a3fb\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"rms error\",\"formatter\":{\"id\":\"dc2b92b3-42bd-430c-a550-d2e601abc9f6\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"34c63288-ac1f-4fb8-a215-057eeeb599b4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d1c728eb-4926-4f38-b4e4-f0a4dcb758dd\",\"type\":\"BasicTicker\"}},\"id\":\"9da814e1-fef7-43be-93d5-7b0cae0769fe\",\"type\":\"LinearAxis\"},{\"attributes\":{\"label\":{\"value\":\"intrinsic error\"},\"renderers\":[{\"id\":\"f6cfff4f-a721-4ff0-bf2e-9f6e9149a3fb\",\"type\":\"GlyphRenderer\"}]},\"id\":\"982c1c11-780e-4cd7-b757-ee5cbefbae63\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"d1c728eb-4926-4f38-b4e4-f0a4dcb758dd\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"34c63288-ac1f-4fb8-a215-057eeeb599b4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d1c728eb-4926-4f38-b4e4-f0a4dcb758dd\",\"type\":\"BasicTicker\"}},\"id\":\"40da9ba8-a596-4749-960d-d504d0d33718\",\"type\":\"Grid\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"6958a950-0924-4f12-bc7f-7ae1f50e66ad\",\"type\":\"PanTool\"},{\"id\":\"a91d2e0f-71ce-4a0e-8b05-441543ab453e\",\"type\":\"WheelZoomTool\"},{\"id\":\"b6839ca5-5fa6-42fd-b1bc-998072ab56a4\",\"type\":\"BoxZoomTool\"},{\"id\":\"57d16e99-0a61-476d-ac1f-b090ed22ce3c\",\"type\":\"SaveTool\"},{\"id\":\"18dc489f-e3b5-4fcd-809b-b8bb76a5d6a1\",\"type\":\"ResetTool\"},{\"id\":\"4f8259ab-c349-4347-9527-d9fc0ae923ff\",\"type\":\"HelpTool\"}]},\"id\":\"82b6d72a-192c-40db-be0d-dc741c629bb9\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"degree of fit\",\"formatter\":{\"id\":\"cce4cb97-35a8-4e60-8ef4-245dfbe73731\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"34c63288-ac1f-4fb8-a215-057eeeb599b4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"6aa6f290-e91d-4d8c-943e-b32a669e0226\",\"type\":\"BasicTicker\"}},\"id\":\"a1633580-c2bd-4a48-b4d1-064db074b390\",\"type\":\"LinearAxis\"}],\"root_ids\":[\"34c63288-ac1f-4fb8-a215-057eeeb599b4\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"42daf68a-e850-45bd-9c18-15cf2793b442\",\"elementid\":\"cd2186dc-34d2-4462-8709-475d1b7f0dde\",\"modelid\":\"34c63288-ac1f-4fb8-a215-057eeeb599b4\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "34c63288-ac1f-4fb8-a215-057eeeb599b4" } }, "output_type": "display_data" } ], "source": [ "import warnings\n", "warnings.filterwarnings('ignore', message='Polyfit*')\n", "\n", "degrees = np.arange(41)\n", "train_err = np.zeros(len(degrees))\n", "validation_err = np.zeros(len(degrees))\n", "\n", "for i, d in enumerate(degrees):\n", " p = np.polyfit(x_tr, y_tr, d)\n", " train_err[i] = biasvariance.compute_error(x_tr, y_tr, p)\n", " validation_err[i] = biasvariance.compute_error(x_valid, y_valid, p)\n", "\n", "fig = bk.figure(plot_width=700, plot_height=400, title=None)\n", "\n", "fig.line(degrees, validation_err,\n", " line_width=2, legend='cross-validation error', color='royalblue')\n", "fig.line(degrees, train_err, line_width=2, legend='training error', color='green')\n", "fig.line([0, 20], [error, error], line_dash='dashed', legend='intrinsic error', color='black')\n", "\n", "fig.xaxis.axis_label = 'degree of fit'\n", "fig.yaxis.axis_label = 'rms error'\n", "\n", "fig.grid.grid_line_color = None\n", "\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this toy dataset, error = 1.0 is the best we can hope to obtain. Choosing `d=6` in this case gets us very close to the optimal error.\n", "\n", "Notice that in the above plot, `d=6` gives the best results. But in the very first example, we found that `d=6` vastly over-fits the data. What’s going on here? The difference is the **number of training points** used:\n", "\n", "**As a general rule of thumb, the more the training points, the more complex the model can be.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5 Do I need More Training Samples?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to exploit the relationship outlined above, between the complexity of the model and the number of examples, we use a tool called **Learning Curves**. Learning Curves works by plotting the training error and validation (or test) error as a **function of the number of training points**:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def plot_learning_curve(d, N=100, y_range=None):\n", " test_size = 0.40\n", " n_sizes = 50 # Number of testing point in which to split the size\n", " n_runs = 20 # Number of times to run the test for each training set size\n", " sizes = np.linspace(2, N, n_sizes).astype(int)\n", " train_err = np.zeros((n_runs, n_sizes))\n", " validation_err = np.zeros((n_runs, n_sizes))\n", " for run in range(n_runs):\n", " for nsize, size in enumerate(sizes):\n", " x_tr, x_valid, y_tr, y_valid = model_selection.train_test_split(x, y,\n", " test_size=test_size, random_state=run)\n", " # Train on only the first `size` points\n", " p = np.polyfit(x_tr[:size], y_tr[:size], d)\n", " # Validation error is on the *entire* validation set\n", " validation_err[run, nsize] = biasvariance.compute_error(x_valid, y_valid, p)\n", " # Training error is on only the points used for training\n", " train_err[run, nsize] = biasvariance.compute_error(x_tr[:size], y_tr[:size], p)\n", "\n", " fig = bk.figure(plot_width=400, plot_height=300, title='d = %i' % d,\n", " x_range=(0, N-1)) \n", " fig.title.text_font_size = '11pt'\n", " fig.xaxis.axis_label_text_font_size = '9pt'\n", " fig.yaxis.axis_label_text_font_size = '9pt'\n", " \n", " fig.line(sizes, validation_err.mean(axis=0), \n", " line_width=2, legend='mean validation error', color='royalblue')\n", " fig.line(sizes, train_err.mean(axis=0),\n", " line_width=2, legend='mean training error', color='green')\n", " fig.line([0, N], [error, error],\n", " line_dash='dashed', legend='intrinsic error', color='black')\n", " \n", " fig.xaxis.axis_label = 'traning set size'\n", " fig.yaxis.axis_label = 'rms error'\n", " fig.legend.location = 'top_right'\n", " \n", " if y_range:\n", " fig.y_range = Range1d(y_range[0], y_range[1])\n", "\n", " fig.grid.grid_line_color = None\n", " bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we look at the behavior of $E_{train}$ and $E_{test}$.\n", "\n", "As we increase $N$, $E_{test}$ decreases until the limit of the algorithm, that is its $Bias$.\n", "\n", "As we increase $N$, $E_{train}$ increases, because with few datapoints the task is simpler, while adding more data increase the difficulty of the algorithm to fit them.\n", "\n", "The discrepancy of the two curves is the **generalization error**. It should shrink and get tighter as generalization increases." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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AQjZGvM58EmbOvP55U/m+0yV2w2M3RiT1bhw1xyG/3fg2JfWMz9wlV8SRevcpiOXbjWZc/p/qwakbvzhOZe9fvvjXy1cRtfHlr7LA4OOvNMrdGythXz21KbZyFsbFWNNOwuyJ6JAisx8coFo26z/fcdLHzT2cTQJl2ZcTWpl99zQ461tt/7s3K/FjFOXYw428F3bp5ubqZjC0608e96ffzZ1ILP9aX0F2fwVQZvk71dpbfS0U0ao8jNHKtszsPPP43ckv55785vGnezkkbxNabMcmnggjdY1bzTjXuk2qWpECAIgYFwECvoj+Gr4auP6/KO3IGDgBPj6sA88xADL7l9c2B54o/OtS/tbfTdQsVHmPu3h8VTqauDdg/kgAAIgUCMIwFfXiGFEJ0AABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABMpOgMYfsR9qIXsgiiLt+GfkJ5RSoaRaEvb062siirmi2C1z82PaUJU3cUfvAbwOmcu0iLMp1FkVX54w6dDobjaiqBStR8QfSaN1ylNH4TL5+8ntLLLJrXPcmna9Ney9ZSsPhmU2LcxBl/0rbBuOQQAEaiaB/H6nJvpXSgNM1nSR/yv5/nYrrlyn1FqbkaT3ltd7ThTjRVFOu/4W/mlhf6tNHSXlgb8uiQ7SQKCGEdCVo9UllsoWsr4/XZsXFRXlFBkZ6ci3mJgw1zsXDrZZO/flWd6imCKJ3FoTHh+Mox667BfqAgEQMC4CxuBfadKu2kOsZPe532z29a1FTJTKShplSu+YfddcPMTzWw7efvAOpWYl5UcaCFQ1gRI/wFVtDNqrOgLF/QLmTu36xplDBrV0vGAqzeRa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\n", "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image('images/learning_curves.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the left picture (simple model) we can see that the model \"true\" error (the best the model can do) is high and pretty soon (that is for lower values of $N$) we reach the point were both $E_{train}$ and $E_{test}$ are closer. In the right picture (complex model) we can see that, since it is more complex, it has a better approximation of the target function and thus can achieve (in principle) a lower $E_{test}$ error. The function is so complex that with few data points it fits them perfectly reaching a training error of zero. However if we look at the corresponding $E_{test}$ we can see that it is very high, we haven't learn anything. As the number of examples grows, $E_{test}$ starts lowering and it gets lower than the other model, but the discrepancy between the two errors remains higher than that of the previous example. \n", "\n", "Let's see a practical example:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"44c3ae55-b088-4fe0-8206-bfa3f6041ce7\":{\"roots\":{\"references\":[{\"attributes\":{\"dimension\":1,\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"41c03625-310f-4d40-8665-43b8bc1b6762\",\"type\":\"BasicTicker\"}},\"id\":\"a800e273-2012-4cbf-b8c7-ce0e66181b73\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"41c03625-310f-4d40-8665-43b8bc1b6762\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"83b80ad7-aedf-42cf-b952-94a48287e6cf\",\"type\":\"ColumnDataSource\"}},\"id\":\"2154a4aa-3e39-423e-9435-ced0d4e74599\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"02bd4c42-2187-4a36-bf9b-cd2e64910a70\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null},\"id\":\"9a49dc4b-1be3-488d-a4ae-d6c2b3a79d2e\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"rms error\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"63e152b0-8a75-44a2-b5a1-21e53700c3ca\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"41c03625-310f-4d40-8665-43b8bc1b6762\",\"type\":\"BasicTicker\"}},\"id\":\"e2669746-9d26-4095-8e6d-741fae339c0d\",\"type\":\"LinearAxis\"},{\"attributes\":{\"label\":{\"value\":\"mean training error\"},\"renderers\":[{\"id\":\"611fb704-412a-46a7-877b-ca38f84e37c6\",\"type\":\"GlyphRenderer\"}]},\"id\":\"e88636be-dc18-424c-940c-62a65d67bb1b\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null,\"end\":99},\"id\":\"2ad8b1cd-6347-4649-8b1a-db6c10e9116e\",\"type\":\"Range1d\"},{\"attributes\":{\"source\":{\"id\":\"7b8976f1-ef1b-44d3-9d0c-5802ff120711\",\"type\":\"ColumnDataSource\"}},\"id\":\"5ee7dc7a-a80a-4c5b-9af3-962c228cc497\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"123f7fc1-74de-4cb9-9132-e719851cb69f\",\"type\":\"ColumnDataSource\"}},\"id\":\"0cec2a45-b5e0-40d4-8dc1-29364017c51e\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"6437798d-b172-485c-98e2-3c5cd7f1192b\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"e2669746-9d26-4095-8e6d-741fae339c0d\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"6437798d-b172-485c-98e2-3c5cd7f1192b\",\"type\":\"LinearAxis\"},{\"id\":\"79833dab-4bd6-4984-a9f9-e1232784be22\",\"type\":\"Grid\"},{\"id\":\"e2669746-9d26-4095-8e6d-741fae339c0d\",\"type\":\"LinearAxis\"},{\"id\":\"a800e273-2012-4cbf-b8c7-ce0e66181b73\",\"type\":\"Grid\"},{\"id\":\"58b4551b-b53e-4402-9e96-74c500c1025b\",\"type\":\"BoxAnnotation\"},{\"id\":\"09a5f9e6-3676-4c1b-9b30-319a2dd2cf2d\",\"type\":\"Legend\"},{\"id\":\"40706c4f-729d-4f90-8880-d04389b2bf30\",\"type\":\"GlyphRenderer\"},{\"id\":\"611fb704-412a-46a7-877b-ca38f84e37c6\",\"type\":\"GlyphRenderer\"},{\"id\":\"c1fcae91-701a-4ee6-a1a7-1028e18c2cb9\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"60564328-9cc9-4026-b7e9-ab514d69e8a1\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"527fe4e0-7a28-4344-b0d6-b99b796edf11\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"2ad8b1cd-6347-4649-8b1a-db6c10e9116e\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"4da88b1c-80ef-4abe-8e95-96d952324a28\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"9a49dc4b-1be3-488d-a4ae-d6c2b3a79d2e\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"51578834-7898-4435-86ef-a32d023555d9\",\"type\":\"LinearScale\"}},\"id\":\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"label\":{\"value\":\"intrinsic error\"},\"renderers\":[{\"id\":\"c1fcae91-701a-4ee6-a1a7-1028e18c2cb9\",\"type\":\"GlyphRenderer\"}]},\"id\":\"27393245-2ff4-4777-9222-18806c16efca\",\"type\":\"LegendItem\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"58b4551b-b53e-4402-9e96-74c500c1025b\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"ab98f9b6-3452-4f3d-ab13-dc7a534e2dc5\",\"type\":\"HelpTool\"},{\"attributes\":{\"data_source\":{\"id\":\"123f7fc1-74de-4cb9-9132-e719851cb69f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ba160d3e-73aa-42f0-88ce-bd61a1ef3608\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5fc5441b-2bf8-4564-a68d-6979f4c1aa2f\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"0cec2a45-b5e0-40d4-8dc1-29364017c51e\",\"type\":\"CDSView\"}},\"id\":\"c1fcae91-701a-4ee6-a1a7-1028e18c2cb9\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"green\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"f4e94d8e-ec55-40f4-8617-f9671d74dc0c\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"21c409bf-1e80-4eb2-8d80-9aa8109b9420\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_color\":\"royalblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c3b912ab-4723-4a3d-a7b4-2947c765298a\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"83b80ad7-aedf-42cf-b952-94a48287e6cf\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"f4e94d8e-ec55-40f4-8617-f9671d74dc0c\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"6ac2d8b6-5025-44b5-92c9-db0dec077d2a\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2154a4aa-3e39-423e-9435-ced0d4e74599\",\"type\":\"CDSView\"}},\"id\":\"611fb704-412a-46a7-877b-ca38f84e37c6\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"4490f040-ef31-4e96-a6c3-7419270467fc\",\"type\":\"BasicTicker\"}},\"id\":\"79833dab-4bd6-4984-a9f9-e1232784be22\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"7b8976f1-ef1b-44d3-9d0c-5802ff120711\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c3b912ab-4723-4a3d-a7b4-2947c765298a\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"ed43a82f-f706-4e1f-bd3b-1aa9984985f2\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5ee7dc7a-a80a-4c5b-9af3-962c228cc497\",\"type\":\"CDSView\"}},\"id\":\"40706c4f-729d-4f90-8880-d04389b2bf30\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4490f040-ef31-4e96-a6c3-7419270467fc\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[0,100],\"y\":[1.0,1.0]}},\"id\":\"123f7fc1-74de-4cb9-9132-e719851cb69f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"b01e5ff1-413b-478c-924a-f5397b4de03e\",\"type\":\"PanTool\"},{\"id\":\"02bd4c42-2187-4a36-bf9b-cd2e64910a70\",\"type\":\"WheelZoomTool\"},{\"id\":\"463ae0b4-ba0e-46fa-b967-4a1e2ba93036\",\"type\":\"BoxZoomTool\"},{\"id\":\"21c409bf-1e80-4eb2-8d80-9aa8109b9420\",\"type\":\"SaveTool\"},{\"id\":\"085135e7-cf4c-48fa-ad44-1c7255330758\",\"type\":\"ResetTool\"},{\"id\":\"ab98f9b6-3452-4f3d-ab13-dc7a534e2dc5\",\"type\":\"HelpTool\"}]},\"id\":\"527fe4e0-7a28-4344-b0d6-b99b796edf11\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ed43a82f-f706-4e1f-bd3b-1aa9984985f2\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"ebc35ba6-023c-432a-b3ab-0cfe6dd1b55f\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_dash\":[6],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ba160d3e-73aa-42f0-88ce-bd61a1ef3608\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"58b4551b-b53e-4402-9e96-74c500c1025b\",\"type\":\"BoxAnnotation\"}},\"id\":\"463ae0b4-ba0e-46fa-b967-4a1e2ba93036\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_dash\":[6],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5fc5441b-2bf8-4564-a68d-6979f4c1aa2f\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"51578834-7898-4435-86ef-a32d023555d9\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"63e152b0-8a75-44a2-b5a1-21e53700c3ca\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"items\":[{\"id\":\"ce5c8932-ed76-444a-bf4c-2943da30c02a\",\"type\":\"LegendItem\"},{\"id\":\"e88636be-dc18-424c-940c-62a65d67bb1b\",\"type\":\"LegendItem\"},{\"id\":\"27393245-2ff4-4777-9222-18806c16efca\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"09a5f9e6-3676-4c1b-9b30-319a2dd2cf2d\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"4da88b1c-80ef-4abe-8e95-96d952324a28\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"traning set size\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"ebc35ba6-023c-432a-b3ab-0cfe6dd1b55f\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"4490f040-ef31-4e96-a6c3-7419270467fc\",\"type\":\"BasicTicker\"}},\"id\":\"6437798d-b172-485c-98e2-3c5cd7f1192b\",\"type\":\"LinearAxis\"},{\"attributes\":{\"plot\":null,\"text\":\"d = 1\",\"text_font_size\":{\"value\":\"11pt\"}},\"id\":\"60564328-9cc9-4026-b7e9-ab514d69e8a1\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100],\"y\":{\"__ndarray__\":\"rnbVA+FUE0BY4ndMQXP+P8LPsJ0iX/k/+rRoW2pw+D/BYD+9xN73P06ZndZ///c/houwoRrv9z8YslrGnez3P0t2oq6rzvc/7JTEV09r9z97NffbUWH3P7Lk3yN+gvc/r5WNy4VL9z9vr2DG6VD3PzWQQlAfXPc/YQxYxKxY9z8oLrXzTBr3PyXuNDE+CPc/SpFLYUcF9z9C49iN/fb2P/0yDIEg/vY/iv82Aun/9j846zWyH+D2Px6+rPkM2fY/++mj00rV9j8TTjMk8772PzSZoldowvY//k6lcSHH9j9uGV2qBbn2P+MdGRrbtfY/4x0ZGtu19j/jHRka27X2P+MdGRrbtfY/4x0ZGtu19j/jHRka27X2P+MdGRrbtfY/4x0ZGtu19j/jHRka27X2P+MdGRrbtfY/4x0ZGtu19j/jHRka27X2P+MdGRrbtfY/4x0ZGtu19j/jHRka27X2P+MdGRrbtfY/4x0ZGtu19j/jHRka27X2P+MdGRrbtfY/4x0ZGtu19j/jHRka27X2Pw==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"7b8976f1-ef1b-44d3-9d0c-5802ff120711\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"085135e7-cf4c-48fa-ad44-1c7255330758\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"b01e5ff1-413b-478c-924a-f5397b4de03e\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"6ac2d8b6-5025-44b5-92c9-db0dec077d2a\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100],\"y\":{\"__ndarray__\":\"/klTvtb75DxppHmMVG3mP2N9rHp6Cu8/Q0e8xzW47z83PBdEiafwP66+RJr3EPE/wq0+Rt9a8j+vEOyDhdLyPxMggfWYvfI/mtpAviPR8j8+Yu8bsXTzPwb/Z7/cxvM/JlTIz4mm9D+e3WZ0Bw71P3CBA3+3EfU/fKh5wIDd9D9vdurvCjr1P6p/BuTXFPU/OiBJy4rx9D+CDXywgwz1P2ItK7tE4/Q/61zHet3R9D+yltYv2Yj1PxrntT/RV/U/Sdzgm0tF9T8DNr0whlv1P/a+jxYeavU/L6dhXUZH9T+QKqyJPT31P9F/hZggFfU/0X+FmCAV9T/Rf4WYIBX1P9F/hZggFfU/0X+FmCAV9T/Rf4WYIBX1P9F/hZggFfU/0X+FmCAV9T/Rf4WYIBX1P9F/hZggFfU/0X+FmCAV9T/Rf4WYIBX1P9F/hZggFfU/0X+FmCAV9T/Rf4WYIBX1P9F/hZggFfU/0X+FmCAV9T/Rf4WYIBX1P9F/hZggFfU/0X+FmCAV9T/Rf4WYIBX1Pw==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"83b80ad7-aedf-42cf-b952-94a48287e6cf\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"mean validation error\"},\"renderers\":[{\"id\":\"40706c4f-729d-4f90-8880-d04389b2bf30\",\"type\":\"GlyphRenderer\"}]},\"id\":\"ce5c8932-ed76-444a-bf4c-2943da30c02a\",\"type\":\"LegendItem\"}],\"root_ids\":[\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"44c3ae55-b088-4fe0-8206-bfa3f6041ce7\",\"elementid\":\"ff58fdf6-9df9-4742-b2fd-42e6576a00ce\",\"modelid\":\"570c4051-e5f0-4fb4-92d4-77d1ea0b114a\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "570c4051-e5f0-4fb4-92d4-77d1ea0b114a" } }, "output_type": "display_data" } ], "source": [ "plot_learning_curve(d=1, N=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A polynomial model with `d=1` is a **high-biased estimator** which under-fits the data. This is indicated by the fact that **both the training and validation errors are very high**.\n", "\n", "*Adding more data WON'T work in this case.*\n", "\n", "**When both TRAINING and VALIDATION curves converge to an high error, we have a HIGH BIAS model.** In this situation we can try one of the following actions:\n", "\n", "* Using a more sophisticated model (i.e. in this case, increase ``d``)\n", "* Gather more features for each sample.\n", "* Decrease regularlization.\n", "\n", "Now let's look at a model with higher degree (and thus higher variance):" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"aa61d426-45a3-4617-b70b-6b69d183e726\":{\"roots\":{\"references\":[{\"attributes\":{\"source\":{\"id\":\"02a06188-666d-4113-a0f9-745016385621\",\"type\":\"ColumnDataSource\"}},\"id\":\"44b963d4-8c51-4d28-b8dc-63853dcba058\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[6],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"7f38de5c-62c6-4e9c-b3a2-aaab94bd147c\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"8668a7ed-6dee-4bce-8498-8cfad39895d6\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"e1026709-f45d-4270-95bb-43403cdb4c52\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"8668a7ed-6dee-4bce-8498-8cfad39895d6\",\"type\":\"LinearAxis\"},{\"id\":\"43760ae1-b3e9-4d9b-b1ec-be06f9ceeb53\",\"type\":\"Grid\"},{\"id\":\"e1026709-f45d-4270-95bb-43403cdb4c52\",\"type\":\"LinearAxis\"},{\"id\":\"b42b056d-0e6b-4eb5-970c-8747b6e02100\",\"type\":\"Grid\"},{\"id\":\"020ce9ae-6ac9-45ce-af84-27f9e6b55595\",\"type\":\"BoxAnnotation\"},{\"id\":\"8785a429-84f9-4326-bd37-ba9a4d662fe5\",\"type\":\"Legend\"},{\"id\":\"13ff9447-074a-44f8-af50-f5b0cd23866f\",\"type\":\"GlyphRenderer\"},{\"id\":\"35fced97-e9e2-4ea2-951d-f6c45b8d3a0a\",\"type\":\"GlyphRenderer\"},{\"id\":\"b3c3358c-7dca-472b-9df8-b98a24b07965\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"2ceaa93c-1243-4f25-b52b-6bafdb374b60\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"fa6847b3-42e3-43de-9fd1-b981705d548b\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"81e1052c-5fba-4842-8f5e-4ac147001581\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"7edaac2d-91c3-46a7-ab76-a6fd37c1fbe6\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"53e531e2-51d0-48bc-8c4b-bbf40155c3e8\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"76a69381-8fdd-491b-9865-d74fc418c1d4\",\"type\":\"LinearScale\"}},\"id\":\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"300f164d-776c-43b9-9291-302ade162c3c\",\"type\":\"BasicTicker\"}},\"id\":\"43760ae1-b3e9-4d9b-b1ec-be06f9ceeb53\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_dash\":[6],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"cc30f813-692c-470f-b88d-42df9b5b5d5f\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"263a6164-47c7-4ead-bd76-16dec29dde20\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"7f38de5c-62c6-4e9c-b3a2-aaab94bd147c\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"cc30f813-692c-470f-b88d-42df9b5b5d5f\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"35f69412-21ca-43dd-92dc-ba911e9aa072\",\"type\":\"CDSView\"}},\"id\":\"b3c3358c-7dca-472b-9df8-b98a24b07965\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"intrinsic error\"},\"renderers\":[{\"id\":\"b3c3358c-7dca-472b-9df8-b98a24b07965\",\"type\":\"GlyphRenderer\"}]},\"id\":\"9f9f2cb3-1e37-4a98-845d-175cdd4e4138\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"6fbad3e0-e55a-49e8-bd13-1148eb159b28\",\"type\":\"ColumnDataSource\"}},\"id\":\"16ea45be-1894-4555-a971-f8f2b540dc58\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"royalblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0248f382-f409-4856-85ae-1152b17efc1b\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100],\"y\":{\"__ndarray__\":\"jnGMHuP35zzmIafsQR4tPYadzKDv6o09BkJdVgSw8D01WrVxcv5hPiZrEdrz3c4/5eHBUFZ+2D/Y6/T7lMjgP6qNTx8G7eI/6iHSr3pM5D9z5aUuF3blP3WH5mpPduY/onz8ydWL5z+qNbwTsb3oPwzA70faA+k/4Oo2QS9x6T+9Yuut5tzpP30ntzhOEeo/aLyOwamV6j/K65WgBnrqP+3EKEhSguo/NrrWAKua6j8lYUtBZ8rqP1AVKo8A/uo/AvmZGYch6z+dSVd3PXDrP/4ueZhekes/89OP8Tdt6z+Nmyrwxl/rP0YA/sOyZOs/RgD+w7Jk6z9GAP7DsmTrP0YA/sOyZOs/RgD+w7Jk6z9GAP7DsmTrP0YA/sOyZOs/RgD+w7Jk6z9GAP7DsmTrP0YA/sOyZOs/RgD+w7Jk6z9GAP7DsmTrP0YA/sOyZOs/RgD+w7Jk6z9GAP7DsmTrP0YA/sOyZOs/RgD+w7Jk6z9GAP7DsmTrP0YA/sOyZOs/RgD+w7Jk6z9GAP7DsmTrPw==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"02a06188-666d-4113-a0f9-745016385621\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"cc7247b8-fdf1-4d43-a4a3-2b9aaebd00c2\",\"type\":\"PanTool\"},{\"id\":\"018d88b1-2084-469b-ac62-20bc7210f9e4\",\"type\":\"WheelZoomTool\"},{\"id\":\"cd7ff870-25dd-4eee-a888-2817fb523632\",\"type\":\"BoxZoomTool\"},{\"id\":\"b0fbbe3c-0120-4e93-acc2-39471e95fe88\",\"type\":\"SaveTool\"},{\"id\":\"df80fefe-cfd5-43ea-be7f-6368885b014b\",\"type\":\"ResetTool\"},{\"id\":\"9b303542-b041-4eaf-8b3a-7f8be5e605c0\",\"type\":\"HelpTool\"}]},\"id\":\"fa6847b3-42e3-43de-9fd1-b981705d548b\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[0,100],\"y\":[1.0,1.0]}},\"id\":\"263a6164-47c7-4ead-bd76-16dec29dde20\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"02a06188-666d-4113-a0f9-745016385621\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"17bab124-ae3f-4f43-b19e-69d2e27879ef\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"3b95d7ef-e21f-4838-a4ff-399061e742cf\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"44b963d4-8c51-4d28-b8dc-63853dcba058\",\"type\":\"CDSView\"}},\"id\":\"35fced97-e9e2-4ea2-951d-f6c45b8d3a0a\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"522e4e81-523c-4cbe-baff-6a86db54502a\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"end\":99},\"id\":\"81e1052c-5fba-4842-8f5e-4ac147001581\",\"type\":\"Range1d\"},{\"attributes\":{\"label\":{\"value\":\"mean validation error\"},\"renderers\":[{\"id\":\"13ff9447-074a-44f8-af50-f5b0cd23866f\",\"type\":\"GlyphRenderer\"}]},\"id\":\"4789acd7-f972-44f4-9b4e-7af37f9f57df\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100],\"y\":{\"__ndarray__\":\"EqziHKreT0Gy781Tmol0QFYFPNDF6sBAFPas5Y5M40DlwUFHm9YxQYXg1Zv4zT9B6sPiRfNbvkD2ioeiz0eMQKrP2YwXX39A2ok+SwBVZkCusvrxoBkiQNa8+SbcDRVA2m39vUsyDkBmFkaTR5QGQKtu115wEwNAfk/N6swJAEDvqenJZJr4P5YMAJlCK/g/ZnW4mkqj9j9ewtvzqFb2PzqS16S3H/U/HVZuwJDr9D86eHn25eLyP5gAVqoK2PI/ARulwbxO8j/lUE2ctVLyP062aqmoOvI/9zFSyNOh8T87Rcq1QGnxP0AhsVQpDPE/QCGxVCkM8T9AIbFUKQzxP0AhsVQpDPE/QCGxVCkM8T9AIbFUKQzxP0AhsVQpDPE/QCGxVCkM8T9AIbFUKQzxP0AhsVQpDPE/QCGxVCkM8T9AIbFUKQzxP0AhsVQpDPE/QCGxVCkM8T9AIbFUKQzxP0AhsVQpDPE/QCGxVCkM8T9AIbFUKQzxP0AhsVQpDPE/QCGxVCkM8T9AIbFUKQzxPw==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"6fbad3e0-e55a-49e8-bd13-1148eb159b28\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"green\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"17bab124-ae3f-4f43-b19e-69d2e27879ef\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"end\":12},\"id\":\"53e531e2-51d0-48bc-8c4b-bbf40155c3e8\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"7edaac2d-91c3-46a7-ab76-a6fd37c1fbe6\",\"type\":\"LinearScale\"},{\"attributes\":{\"label\":{\"value\":\"mean training error\"},\"renderers\":[{\"id\":\"35fced97-e9e2-4ea2-951d-f6c45b8d3a0a\",\"type\":\"GlyphRenderer\"}]},\"id\":\"a93bba0b-2a62-4d01-88ca-d160fa4f0580\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"9b303542-b041-4eaf-8b3a-7f8be5e605c0\",\"type\":\"HelpTool\"},{\"attributes\":{\"plot\":null,\"text\":\"d = 10\",\"text_font_size\":{\"value\":\"11pt\"}},\"id\":\"2ceaa93c-1243-4f25-b52b-6bafdb374b60\",\"type\":\"Title\"},{\"attributes\":{\"data_source\":{\"id\":\"6fbad3e0-e55a-49e8-bd13-1148eb159b28\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"0248f382-f409-4856-85ae-1152b17efc1b\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"eac42c45-e8bb-4d0b-ae6c-55fc2981c7c9\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"16ea45be-1894-4555-a971-f8f2b540dc58\",\"type\":\"CDSView\"}},\"id\":\"13ff9447-074a-44f8-af50-f5b0cd23866f\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"cc7247b8-fdf1-4d43-a4a3-2b9aaebd00c2\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3b95d7ef-e21f-4838-a4ff-399061e742cf\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"b0fbbe3c-0120-4e93-acc2-39471e95fe88\",\"type\":\"SaveTool\"},{\"attributes\":{\"overlay\":{\"id\":\"020ce9ae-6ac9-45ce-af84-27f9e6b55595\",\"type\":\"BoxAnnotation\"}},\"id\":\"cd7ff870-25dd-4eee-a888-2817fb523632\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"items\":[{\"id\":\"4789acd7-f972-44f4-9b4e-7af37f9f57df\",\"type\":\"LegendItem\"},{\"id\":\"a93bba0b-2a62-4d01-88ca-d160fa4f0580\",\"type\":\"LegendItem\"},{\"id\":\"9f9f2cb3-1e37-4a98-845d-175cdd4e4138\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"8785a429-84f9-4326-bd37-ba9a4d662fe5\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"e77f268c-b3c9-488e-8321-429fbd19bc72\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"300f164d-776c-43b9-9291-302ade162c3c\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"rms error\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"e77f268c-b3c9-488e-8321-429fbd19bc72\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9ff90a00-dbfd-4215-8aeb-5ce78dff9914\",\"type\":\"BasicTicker\"}},\"id\":\"e1026709-f45d-4270-95bb-43403cdb4c52\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"76a69381-8fdd-491b-9865-d74fc418c1d4\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"eac42c45-e8bb-4d0b-ae6c-55fc2981c7c9\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"df80fefe-cfd5-43ea-be7f-6368885b014b\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"traning set size\",\"axis_label_text_font_size\":{\"value\":\"9pt\"},\"formatter\":{\"id\":\"522e4e81-523c-4cbe-baff-6a86db54502a\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"300f164d-776c-43b9-9291-302ade162c3c\",\"type\":\"BasicTicker\"}},\"id\":\"8668a7ed-6dee-4bce-8498-8cfad39895d6\",\"type\":\"LinearAxis\"},{\"attributes\":{\"dimension\":1,\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9ff90a00-dbfd-4215-8aeb-5ce78dff9914\",\"type\":\"BasicTicker\"}},\"id\":\"b42b056d-0e6b-4eb5-970c-8747b6e02100\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"9ff90a00-dbfd-4215-8aeb-5ce78dff9914\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"018d88b1-2084-469b-ac62-20bc7210f9e4\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"263a6164-47c7-4ead-bd76-16dec29dde20\",\"type\":\"ColumnDataSource\"}},\"id\":\"35f69412-21ca-43dd-92dc-ba911e9aa072\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"020ce9ae-6ac9-45ce-af84-27f9e6b55595\",\"type\":\"BoxAnnotation\"}],\"root_ids\":[\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"aa61d426-45a3-4617-b70b-6b69d183e726\",\"elementid\":\"c2b98a62-a7d0-4921-b1b8-1ea0e2ca96c0\",\"modelid\":\"d3cab941-c056-4a8d-af6e-d8454b4cafdc\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "d3cab941-c056-4a8d-af6e-d8454b4cafdc" } }, "output_type": "display_data" } ], "source": [ "plot_learning_curve(d=10, N=100, y_range=(0,12))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example it is possible to see that with `d=10` a **high-variance** estimator may **overfit data** when the number of samples is not sufficent. It is possible to note it by looking at the discrepancy between the two curves. When the number of samples is low we have a low training error, but the corresponding test error is really high. As the number of samples increase the test error decrease and converge to the model error but it may be to slow to converge and still have an higher discrepancy between the two curves.\n", "\n", "**When the learning curves does not converge using the full training set, it indicates a HIGH VARIANCE model, and the model is OVERFITTING the data.**\n", "\n", "A high-variance model can be improved by:\n", "\n", "* Gathering more training samples.\n", "* Using a less-sophisticated model (i.e. in this case, make `d` smaller)\n", "* Increase regularization.\n", "\n", "*In particular, gathering more features for each sample will not help the results.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6 Do the right thing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.1 High Bias" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If our algorithm shows high **bias**, the following actions might help:\n", "\n", "- **Add more features**. In our example of predicting home prices,\n", " it may be helpful to make use of information such as the neighborhood\n", " the house is in, the year the house was built, the size of the lot, etc.\n", " Adding these features to the training and test sets can improve\n", " a high-bias estimator\n", "- **Use a more sophisticated model**. Adding complexity to the model can\n", " help improve on bias. For a polynomial fit, this can be accomplished\n", " by increasing the degree d. Each learning technique has its own\n", " methods of adding complexity.\n", "- **Use fewer samples**. Though this will not improve the classification,\n", " a high-bias algorithm can attain nearly the same error with a smaller\n", " training sample. For algorithms which are computationally expensive,\n", " reducing the training sample size can lead to very large improvements\n", " in speed.\n", "- **Decrease regularization**. Regularization is a technique used to impose\n", " simplicity in some machine learning models, by adding a penalty term that\n", " depends on the characteristics of the parameters. If a model has high bias,\n", " decreasing the effect of regularization can lead to better results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.2 High Variance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If our algorithm shows **high variance**, the following actions might help:\n", "\n", "- **Use fewer features**. Using a feature selection technique may be\n", " useful, and decrease the over-fitting of the estimator.\n", "- **Use a simpler model**. Model complexity and over-fitting go hand-in-hand.\n", "- **Use more training samples**. Adding training samples can reduce\n", " the effect of over-fitting, and lead to improvements in a high\n", " variance estimator.\n", "- **Increase Regularization**. Regularization is designed to prevent\n", " over-fitting. In a high-variance model, increasing regularization\n", " can lead to better results.\n", "\n", "These choices become very important in real-world situations. For example,\n", "due to limited telescope time, astronomers must seek a balance between\n", "observing a large number of objects, and observing a large number of\n", "features for each object. Determining which is more important for a\n", "particular learning task can inform the observing strategy that the\n", "astronomer employs. In a later exercise, we will explore the use of\n", "learning curves for the photometric redshift problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.3 More Sophisticate Methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a lot more options for performing validation and model testing.\n", "In particular, there are several schemes for cross-validation, in which\n", "the model is fit multiple times with different training and test sets.\n", "The details are different, but the principles are the same as what we've\n", "seen here.\n", "\n", "For more information see the ``sklearn.model_selection`` module documentation,\n", "and the information on the scikit-learn website." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.4 One Last Caution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using validation schemes to determine hyper-parameters means that we are\n", "fitting the hyper-parameters to the particular validation set. In the same\n", "way that parameters can be over-fit to the training set, hyperparameters can\n", "be over-fit to the validation set. Because of this, the validation error\n", "tends to under-predict the classification error of new data.\n", "\n", "For this reason, it is recommended to split the data into three sets:\n", "\n", "- The **training set**, used to train the model (usually ~60% of the data)\n", "- The **validation set**, used to validate the model (usually ~20% of the data)\n", "- The **test set**, used to evaluate the expected error of the validated model (usually ~20% of the data)\n", "\n", "*This may seem excessive, and many machine learning practitioners ignore the need\n", "for a test set. But if your goal is to predict the error of a model on unknown\n", "data, using a test set is vital*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7 Cross Validation (CV)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By partitioning the available data into **Training** and **Validation** sets, we reduce the number of samples which can be used for learning the model.\n", "\n", "By using cross-validation **(CV)** the *validation set is defined automatically by the CV algoritm. * The training set is split into k smaller sets and:\n", "\n", "* A model is trained using k-1 of the folds as training data\n", "* The resulting model is validated on the remaining part of the data" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image('images/k-fold.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we first calculate the Mean Squared Error on the Train DatasetSet (which is a methodological error) and then we calculate again the same MSE using a KFold CV. The MSE calculated with Cv is much larger:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE Calculated on the Training Set: 19.58765452634401\n", "MSE Calculated with Cross Validation: 49.85 (+/- 80.06)\n" ] } ], "source": [ "X, y = datasets.samples_generator.make_regression(n_samples=7,\n", " n_features=1, n_informative=1,\n", " random_state=0, noise=5)\n", "lin = linear_model.LinearRegression(fit_intercept=True)\n", "lin.fit(X, y)\n", "MSE = metrics.mean_squared_error(lin.predict(X), y)\n", "print('MSE Calculated on the Training Set: ', MSE)\n", "MSE_CV = model_selection.cross_val_score(lin, X, y, cv=5, scoring='neg_mean_squared_error')\n", "print(\"MSE Calculated with Cross Validation: %0.2f (+/- %0.2f)\"\n", " % (abs(MSE_CV).mean(), abs(MSE_CV).std() * 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When the `cv` argument is an integer like `cv=10`, `cross_val_score` uses the `KFold` or `StratifiedKFold` strategies. It is also possible to use other cross validation strategies by passing a cross validation iterator instead, for instance we can use `model_selection.ShuffleSplit` where `n_iter` is the number of re-shuffling and splitting operations:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE Calculated with Cross Validation: 31.07 (+/- 36.74)\n" ] } ], "source": [ "n_samples = X.shape[0]\n", "cv_iter = model_selection.ShuffleSplit(n_samples, test_size=0.2, random_state=0)\n", "MSE_CV = model_selection.cross_val_score(lin, X, y, cv=cv_iter, scoring='neg_mean_squared_error')\n", "print(\"MSE Calculated with Cross Validation: %0.2f (+/- %0.2f)\"\n", " % (abs(MSE_CV).mean(), abs(MSE_CV).std() * 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.1 Cross Validation: test many estimators on the same dataset:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example *we use the \"diabetes\" dataset* to fit tree different linear models. For each model the default CV score is calculated and displayed:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LinearRegression : 0.4887027672471189\n", "Ridge : 0.40942743830329875\n", "Lasso : 0.35380008329932017\n" ] } ], "source": [ "data = datasets.load_diabetes()\n", "X, y = data.data, data.target\n", "\n", "for Model in [linear_model.LinearRegression,\n", " linear_model.Ridge,\n", " linear_model.Lasso]:\n", " model = Model()\n", " print(Model.__name__, ': ', model_selection.cross_val_score(model, X, y).mean())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2 Cross Validation: test many hyperparamaters and estimators on the same dataset:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Lasso` and `Ridge` accept a regularization parameter `alpha`. Here we plot the CV Score for different values of alpha" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"3b02df22-c1e2-4e7e-a24d-9ece4a50e841\":{\"roots\":{\"references\":[{\"attributes\":{\"label\":{\"value\":\"Ridge\"},\"renderers\":[{\"id\":\"e48eb4db-cac1-4213-a07f-557e505ce6ed\",\"type\":\"GlyphRenderer\"}]},\"id\":\"5c022faf-6520-4302-831e-879c8d4b7235\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"f353c221-4a01-46d9-833f-d9dbb17c4d3c\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"f43bf1b9-08c7-4e0f-8403-826fee139b5c\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"70384c58-8988-475c-93ed-9f76ff772356\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"01b1fba9-e381-439e-975d-d5b975060bb6\",\"type\":\"ColumnDataSource\"}},\"id\":\"23189bc3-9ac5-4e9e-b183-24d6acb2cebb\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"232be000-13dc-4ae0-9dfe-159c05e5cfcd\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"end\":0.1,\"start\":0.0001},\"id\":\"ab4b7ac4-a7f9-4dae-b248-4dfa35d9ae26\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"bc6a054b-d058-4208-aae1-1918ffba78b7\",\"type\":\"LinearScale\"},{\"attributes\":{\"overlay\":{\"id\":\"f43bf1b9-08c7-4e0f-8403-826fee139b5c\",\"type\":\"BoxAnnotation\"}},\"id\":\"c27ef03e-b00d-43f3-9fb1-c129fde67da0\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":[0.4823231384163484,0.48232328486322984,0.4823234343437866,0.48232358681895865,0.48232374223859775,0.4823239005404606,0.48232406164913294,0.48232422547487763,0.4823243919124029,0.4823245608395461,0.4823247321158702,0.4823249055811646,0.48232508105384736,0.48232525832926376,0.48232543717787435,0.4823256173433281,0.48232579854041296,0.48232598045288116,0.4823261627311388,0.48232634498979665,0.48232652680507615,0.48232670771205993,0.482326887201786,0.4823270647181747,0.48232723965478375,0.4823274113513851,0.4823275790903562,0.4823277420928795,0.48232789951494504,0.48232805044314964,0.48232819389028714,0.48232832879072374,0.482328453995556,0.48232856826754544,0.4823286702758273,0.48232875859039026,0.48232883167632623,0.482328887887849,0.4823289254620818,0.48232894251261804,0.4823289370228556,0.48232890683911045,0.4823288496635187,0.4823287630467341,0.48232864438043144,0.48232849088963226,0.482328299624867,0.4823280674541938,0.4823277910550961,0.4823274669062859,0.4823270912794409,0.48232666023091025,0.482326169593425,0.48232561496785814,0.4823249917150766,0.482324294947942,0.48232351952351216,0.4823226600355074,0.48232171080710984,0.48232066588416717,0.48231951902888,0.48231826371405717,0.48231689311802955,0.48231540012031865,0.4823137772981596,0.48231201692398845,0.4823101109640035,0.48230805107791924,0.4823058286200331,0.4823034346417322,0.4823008598955666,0.4822980948410214,0.4822951296521204,0.48229195422699433,0.4822885581995452,0.48228493095334,0.48228106163785966,0.4822769391872262,0.4822725523415256,0.4822678896708335,0.48226293960204336,0.4822576904485816,0.48225213044308307,0.48224624777308234,0.48224003061975795,0.4822334671997467,0.4822265458100225,0.48221925487580786,0.48221158300146055,0.4822035190242513,0.48219505207091035,0.4821861716167987,0.48217686754751715,0.48216713022273766,0.4821569505420043,0.4821463200122128,0.48213523081644905,0.48212367588382155,0.4821116489598998,0.4820991446773282,0.4820861586261609,0.4820726874234298,0.48205872878143835,0.4820442815742429,0.48202934590177604,0.4820139231510436,0.4819980160538243,0.48198162874029415,0.48196476678799993,0.48194743726561773,0.48192964877093897,0.48191141146255206,0.48189273708471153,0.48187363898491586,0.48185413212375555,0.4818342330766311,0.48181396002699295,0.48179333275080094,0.48177237259196176,0.48175110242855707,0.48172954662973666,0.48170773100321773,0.48168568273338447,0.481663430310057,0.48164100344805094,0.48161843299771423,0.4815957508466827,0.48157298981314955,0.4815501835309945,0.48152736632716076,0.4815045730917055,0.4814818391409862,0.48145920007446286,0.48143669162562325,0.4814143495075406,0.4813922092535833,0.48137030605378894,0.48134867458740355,0.48132734885206985,0.48130636199012305,0.48128574611241837,0.48126553212007794,0.4812457495245046,0.48122642626595413,0.4812075885309108,0.48118926056845435,0.48117146450574316,0.4811542201626783,0.48113754486575305,0.4811214532610223,0.4811059571260648,0.4810910651807472,0.4810767828965325,0.481063112304016,0.48105005179830973,0.4810375959418403,0.4810257352640681,0.48101445605758714,0.4810037401700134,0.48099356479102956,0.48098390223391013,0.48097471971082156,0.4809659791011561,0.48095763671213776,0.4809496430309176,0.4809419424673612,0.4809344730867252,0.4809271663314171,0.48091994673103555,0.48091273159990544,0.48090543072133307,0.48089794601783986,0.4808901712066616,0.48088199143984395,0.4808732829283164,0.48086391254938177,0.48085373743712934,0.4808426045553581,0.48083035025267806,0.48081679979956304,0.4808017669072296,0.4807850532283398,0.48076644783965394,0.48074572670690047,0.48072265213228516,0.4806969721852246,0.48066842011706595,0.4806367137607432,0.48060155491652,0.48056262872517913,0.48051960303023994,0.4804721277310173,0.4804198341285775,0.48036233426689295,0.48029922027175764,0.48023006369028814,0.4801544148341005,0.4800718021295253,0.4799817314784969,0.47988368563401884]}},\"id\":\"01b1fba9-e381-439e-975d-d5b975060bb6\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"d764ed57-51dc-4cac-805d-a4eb24261180\",\"type\":\"SaveTool\"},{\"attributes\":{\"data_source\":{\"id\":\"b7ca0dc3-95a3-4c31-b3b0-1eeae7e5fe0c\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"eddd8b50-c57b-484d-9e27-6dfc9f81997e\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"df0cee4c-3142-435f-b97f-8ef34ec70397\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1f27f3fd-4106-414d-922e-310bface42d3\",\"type\":\"CDSView\"}},\"id\":\"11a87fc5-a607-4ef1-9f66-3f8b2cb36de9\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"14a7b98c-b426-4562-841d-99cfb4cad267\",\"type\":\"ResetTool\"},{\"attributes\":{\"items\":[{\"id\":\"5c022faf-6520-4302-831e-879c8d4b7235\",\"type\":\"LegendItem\"},{\"id\":\"ea67a60d-8008-4aac-b730-85ccc3e3e4c2\",\"type\":\"LegendItem\"}],\"location\":\"bottom_left\",\"plot\":{\"id\":\"85aca2c1-9f99-4132-8977-91fb187fb5e0\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"8d098d94-b8a1-4136-83c7-828108ee7ec9\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"ffb0726f-8e43-4084-9a2f-13e6518fd1b3\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"73e9bb28-74a0-47ec-bfed-e7cae9fbdbcf\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"01b1fba9-e381-439e-975d-d5b975060bb6\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"70384c58-8988-475c-93ed-9f76ff772356\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"ecc87143-4fdd-43ac-b053-09704dc20c9b\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"23189bc3-9ac5-4e9e-b183-24d6acb2cebb\",\"type\":\"CDSView\"}},\"id\":\"e48eb4db-cac1-4213-a07f-557e505ce6ed\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"ad8af7f8-a5ea-4953-9c14-669667cdc291\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"c7af7a6f-34d6-4702-9bc0-ead6615ac6dc\",\"type\":\"LogScale\"},{\"attributes\":{\"below\":[{\"id\":\"925732db-406d-4d49-90b8-00f27fbd13b2\",\"type\":\"LogAxis\"}],\"left\":[{\"id\":\"02270e2f-17ee-4db3-89d7-e9fe5b6d6701\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":700,\"renderers\":[{\"id\":\"925732db-406d-4d49-90b8-00f27fbd13b2\",\"type\":\"LogAxis\"},{\"id\":\"e68a4e68-8c84-4e2d-899e-d04c8420e7a8\",\"type\":\"Grid\"},{\"id\":\"02270e2f-17ee-4db3-89d7-e9fe5b6d6701\",\"type\":\"LinearAxis\"},{\"id\":\"17d9cbf0-b7c8-4c98-bf19-51e778b05694\",\"type\":\"Grid\"},{\"id\":\"f43bf1b9-08c7-4e0f-8403-826fee139b5c\",\"type\":\"BoxAnnotation\"},{\"id\":\"8d098d94-b8a1-4136-83c7-828108ee7ec9\",\"type\":\"Legend\"},{\"id\":\"e48eb4db-cac1-4213-a07f-557e505ce6ed\",\"type\":\"GlyphRenderer\"},{\"id\":\"11a87fc5-a607-4ef1-9f66-3f8b2cb36de9\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"f9464854-a5b1-40ac-814c-58c7c6b3ff40\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5691f149-95ee-45cf-b9fa-0ec87c8d586e\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"ab4b7ac4-a7f9-4dae-b248-4dfa35d9ae26\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"c7af7a6f-34d6-4702-9bc0-ead6615ac6dc\",\"type\":\"LogScale\"},\"y_range\":{\"id\":\"e9fd9ec3-3c0f-4d18-ab77-05adb194f753\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"bc6a054b-d058-4208-aae1-1918ffba78b7\",\"type\":\"LinearScale\"}},\"id\":\"85aca2c1-9f99-4132-8977-91fb187fb5e0\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"e9fd9ec3-3c0f-4d18-ab77-05adb194f753\",\"type\":\"DataRange1d\"},{\"attributes\":{\"formatter\":{\"id\":\"73e9bb28-74a0-47ec-bfed-e7cae9fbdbcf\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"85aca2c1-9f99-4132-8977-91fb187fb5e0\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ad8af7f8-a5ea-4953-9c14-669667cdc291\",\"type\":\"BasicTicker\"}},\"id\":\"02270e2f-17ee-4db3-89d7-e9fe5b6d6701\",\"type\":\"LinearAxis\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"f353c221-4a01-46d9-833f-d9dbb17c4d3c\",\"type\":\"PanTool\"},{\"id\":\"232be000-13dc-4ae0-9dfe-159c05e5cfcd\",\"type\":\"WheelZoomTool\"},{\"id\":\"c27ef03e-b00d-43f3-9fb1-c129fde67da0\",\"type\":\"BoxZoomTool\"},{\"id\":\"d764ed57-51dc-4cac-805d-a4eb24261180\",\"type\":\"SaveTool\"},{\"id\":\"14a7b98c-b426-4562-841d-99cfb4cad267\",\"type\":\"ResetTool\"},{\"id\":\"ffb0726f-8e43-4084-9a2f-13e6518fd1b3\",\"type\":\"HelpTool\"}]},\"id\":\"5691f149-95ee-45cf-b9fa-0ec87c8d586e\",\"type\":\"Toolbar\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"5bd87b1b-80c6-4a4b-ab93-fc6c5dbedb17\",\"type\":\"LogTicker\"},{\"attributes\":{\"source\":{\"id\":\"b7ca0dc3-95a3-4c31-b3b0-1eeae7e5fe0c\",\"type\":\"ColumnDataSource\"}},\"id\":\"1f27f3fd-4106-414d-922e-310bface42d3\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":{\"id\":\"85aca2c1-9f99-4132-8977-91fb187fb5e0\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"5bd87b1b-80c6-4a4b-ab93-fc6c5dbedb17\",\"type\":\"LogTicker\"}},\"id\":\"e68a4e68-8c84-4e2d-899e-d04c8420e7a8\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":null,\"text\":\"Alpha sensitiveness on different models\"},\"id\":\"f9464854-a5b1-40ac-814c-58c7c6b3ff40\",\"type\":\"Title\"},{\"attributes\":{\"label\":{\"value\":\"Lasso\"},\"renderers\":[{\"id\":\"11a87fc5-a607-4ef1-9f66-3f8b2cb36de9\",\"type\":\"GlyphRenderer\"}]},\"id\":\"ea67a60d-8008-4aac-b730-85ccc3e3e4c2\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"df0cee4c-3142-435f-b97f-8ef34ec70397\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"LUMc6+I2Gj8+3xNi7SMbP9jYq0NXGRw/Rd+ARWwXHT9Xw8fJeh4eP0jWe/fTLh8/8fez6WUkID/s6gitXLYgP5ABSE17TSE/DAspafDpIT9SPPJE7IsiP2oQXNmgMyM/ZM374kHhIz9XbznyBJUkP5Ll1XshTyU/o7sG6tAPJj+jdCyuTtcmPycQKVPYpSc/5WBckK17KD8pEExdEFkpPydf/QVFPio/fewGQJIrKz+l/mBAQSEsP7UN+9GdHy0/woMdbfYmLj9E655PnDcvPycB+srxKDA/ZDeRqhG7MD9NCs/aWlIxP4urjAf87jE/am2ogiWRMj/71O1SCTkzP1p2hEPb5jM/kF7q89CaND8t+H7oIVU1P9qFo5sHFjY/tXp2j73dNj96KS9ggaw3Pw10H9eSgjg/Olhh/jNgOT8ubDY1qUU6P22TH0U5Mzs/w22zdy0pPD+HPTqt0Sc9P9Q9FnR0Lz4/W6L/IGdAPz/W3A30fi1APyp4e/vHv0A/Bty0xztXQT9AT7gRCfRBP7oVADlglkI/RrVuUnM+Qz+0KsI3duxDP7zTkpeeoEQ/W/ziBSRbRT9CLEQNQBxGP7d9l0Au5EY/XnhuTSyzRz8zGxIPeolIPxT0NaJZZ0k/LFldeQ9NSj+5Dvlx4jpLP4PcQ+obMUw/RdLk1wcwTT+lNV7f9DdOP1hVUGw0SU8/Pt5LZQ0yUD9WQyegf8RQPyZtXBQeXFE/eGsSiBf5UT8ASWNonJtSPzaETNjeQ1M/e54mwBLyUz8Fh6jdbaZUP7vSe9QnYVU/jN1mP3oiVj9WIRLCoOpWP809bhvZuVc/VF7AOGOQWD/03VpJgW5ZP0g/CNN3VFo/v8Qux41CWz+ALrOYDDlcP1ZeoVJAOF0/0t+hr3dAXj9AkEMyBFJfP6ByEB+dNmA/60n0mDjJYD/5zyjBAWFhP1eSAWsn/mE/3Tg8EdqgYj+0M/XkS0ljP6ulI92w92M/uVGhxj6sZD8/fsNULWdlP/DriTK2KGY/DC5pFBXxZj/V4LXKh8BnP91stlROl2g/4jhh9Kp1aT/tYc1C4ltqP75HXEU7Sms/kXSig/9AbD8LoxYee0BtP4fhjeX8SG4/YRGMc9Zabz9HIbghLjtwP+FXQubyzXA/sjJ9zuZlcT/icuy6OANyP9k09TMZpnI/ltTWeLpOcz9hNCuPUP1zP1wu81IRsnQ/OSQ0hzRtdT89zSvn8y52PyaRHziL93Y/q+7MWzjHdz+3nYBjO554P8lQ2qPWfHk/2C5DyU5jej+aVR3t6lF7P//ssqv0SHw/rJDrOrhIfT+VEM+BhFF+P2LJ3DCrY38/ioufbcA/gD8rVHGIrtKAP3LfvDzNaoE/Ddk5eEsIgj9tqvjQWauCP6eWX5QqVIM/z16v1vEChD+oOBSD5beEP2YMSGw9c4U/3hrLXTM1hj/SXLgtA/6GP64aO8/qzYc/UW+rZSqliD9+mldYBISJPyY+AGe9aoo/MdgNv5xZiz9tA4YR7FCMP4VGx6n3UI0/f3MShQ5ajj9O2+hqgmyPP9tsIwNURJA/vUDhf2vXkD9TPEsMtW+RP7+tUKNfDZI/DCWx6Juwkj/LyP03nFmTP0BZIrSUCJQ/nq16V7u9lD/hoHkESHmVP+eR5pZ0O5Y/Ksi29XwElz92Pogln9SXP6yHw1sbrJg/0LNqEjSLmT9eUpscLnKaP0blybtQYZs/EFG9teVYnD/2ElFrOVmdP2xBBfCaYp4/p5xjIlx1nz/HmqDi6EigP5c68swp3KA/a8uLPZ50oT/Y9pc8dRKiPy1OiXvftaI/8tgfZA9foz86ePYnOQ6kP4nrnNCSw6Q/Um5DUFR/pT8dE/2St0GmPzwvnpD4Cqc/4Vk8X1Xbpz9ntFVGDrOoP45jpdJlkqk/elir6qB5qj+Ovu3jBmmrP4Sc+pjhYKw/fXMwgH1hrT9l4lTDKWuuP2+VAFg4fq8/AQV0DH9NsD/KeQRw6eCwP9kq4tCIebE/QNd2RIwXsj9O7euJJLuyPyZUNBmEZLM/bjCeMt8TtD8OcvHua8m0P98jIFBihbU/A6ONUvxHtj8TE/L+dRG3Px2T33wN4rc/yOruJQO6uD+amZmZmZm5Pw==\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":[0.4823198719804238,0.48231991884559233,0.48231996700377405,0.48232001435008465,0.4823200641088565,0.48232011438925626,0.4823201651660526,0.48232021628554095,0.4823202688235386,0.48232031506480577,0.4823203646383532,0.4823204159736383,0.48232046553209856,0.482320516352849,0.4823205652553114,0.4823206147625639,0.4823206609496345,0.48232070830886675,0.4823207512358609,0.482320797206757,0.4823208395067294,0.48232086987668144,0.4823209035572457,0.48232093772119244,0.4823209701433882,0.4823209937028287,0.4823210121764812,0.48232102938033955,0.4823210383036353,0.4823210382246398,0.4823210367267542,0.48232102291351353,0.48232100188189336,0.4823209750026871,0.4823209277652788,0.48232087933243156,0.48232080072971284,0.4823207262236314,0.48232062869260883,0.4823205123628167,0.48232038389357185,0.48232023409844027,0.4823200606957142,0.4823198630682636,0.4823196435370619,0.48231939042330474,0.4823191108923064,0.48231878968779507,0.48231843884325176,0.48231805021518487,0.482317618820265,0.48231712705368307,0.48231660577889623,0.4823160117270618,0.4823153648336954,0.48231465857648625,0.4823138863846255,0.48231304096732464,0.4823121039781089,0.48231108218033364,0.48230996012143973,0.4823087455313269,0.48230741896421864,0.482305978413876,0.482304406454792,0.4823027044475654,0.48230545853492474,0.48231236488885987,0.48232198419781025,0.48233192592164953,0.4823420813307693,0.48235254829327623,0.48236328171946086,0.48237432164243293,0.48238559388143454,0.48239721511385414,0.48240912808098085,0.4824213411520935,0.4824338789446873,0.48244661269627176,0.48245976034662946,0.4824682457515436,0.48247049879835613,0.4824726143270068,0.48247456686107026,0.48247632449469985,0.4824778429299572,0.48247920875228684,0.4824802464699305,0.4824810677509467,0.48248142894293655,0.4824815421097517,0.48248688644729876,0.48249238411036577,0.48249777820428585,0.48250292043971843,0.4825077757035716,0.4825123092297484,0.4825165537139525,0.4825202985083378,0.4825236486196308,0.48252651183548184,0.482528745396613,0.48253037056428844,0.48253113755992205,0.4825312510779879,0.48252725863151724,0.482519124511132,0.4825095818562354,0.4824991672498397,0.482487143299243,0.4824732775368445,0.48245738377572556,0.4824355164872955,0.48238751971959815,0.48233330431589894,0.4822766797802669,0.4822171802659293,0.48215421786198903,0.4820878622482356,0.48201796066394687,0.4819445464894012,0.4818668451908086,0.4817850519347996,0.48169878203634753,0.4816077538268825,0.4815119907254619,0.48141173238577817,0.48131684493045856,0.48125683521420565,0.4812150218369049,0.48116892423598606,0.4811179249238876,0.4810983464073743,0.4810991293643679,0.48111933133830787,0.48115650678595134,0.4811802956093871,0.4811998162709455,0.4812176290120428,0.48123329144705396,0.48124695209799845,0.4812844503876915,0.48134172073405673,0.4814039306194536,0.48146432253306076,0.48152029004309665,0.48157635653669484,0.4816320306416987,0.481687577177062,0.481717153147682,0.4817349085093469,0.4817519852888578,0.4817686187602728,0.48178530060589253,0.4818002392200416,0.4818144922628632,0.4818275421949744,0.481840393524093,0.4818499462414998,0.4818827756845915,0.4819158961621567,0.48194828087696584,0.4819797313850289,0.4820098554769894,0.482038668903985,0.48206586949108116,0.48208595408295735,0.4820995110582837,0.4821082651529761,0.4821152713189608,0.48211654452643826,0.48211416669872625,0.48210766275813344,0.4820967786702234,0.48208085909182874,0.4820630346952136,0.48204909514844074,0.4820428973029266,0.4820423170478307,0.48203535099700207,0.48202268559982053,0.48200295920617026,0.4819759672586835,0.4819411629935084,0.4818878476797265,0.48181757338938336,0.48173951676780763,0.4816510140889866,0.4815350476045719,0.48140495190257815,0.4812627586024198,0.4811058827242256,0.4809344025096175,0.48074660077664505,0.4805416840899059,0.48031758713672235,0.4800731162349868,0.4798063836521422,0.4795161392064994]}},\"id\":\"b7ca0dc3-95a3-4c31-b3b0-1eeae7e5fe0c\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"formatter\":{\"id\":\"149ad33f-8861-4ace-898d-047aba844f45\",\"type\":\"LogTickFormatter\"},\"plot\":{\"id\":\"85aca2c1-9f99-4132-8977-91fb187fb5e0\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"5bd87b1b-80c6-4a4b-ab93-fc6c5dbedb17\",\"type\":\"LogTicker\"}},\"id\":\"925732db-406d-4d49-90b8-00f27fbd13b2\",\"type\":\"LogAxis\"},{\"attributes\":{\"ticker\":null},\"id\":\"149ad33f-8861-4ace-898d-047aba844f45\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"eddd8b50-c57b-484d-9e27-6dfc9f81997e\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ecc87143-4fdd-43ac-b053-09704dc20c9b\",\"type\":\"Line\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"85aca2c1-9f99-4132-8977-91fb187fb5e0\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ad8af7f8-a5ea-4953-9c14-669667cdc291\",\"type\":\"BasicTicker\"}},\"id\":\"17d9cbf0-b7c8-4c98-bf19-51e778b05694\",\"type\":\"Grid\"}],\"root_ids\":[\"85aca2c1-9f99-4132-8977-91fb187fb5e0\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"3b02df22-c1e2-4e7e-a24d-9ece4a50e841\",\"elementid\":\"dbf4b613-54fd-46e3-bbd1-29ecd058d79b\",\"modelid\":\"85aca2c1-9f99-4132-8977-91fb187fb5e0\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "85aca2c1-9f99-4132-8977-91fb187fb5e0" } }, "output_type": "display_data" } ], "source": [ "from bokeh.models.axes import LogAxis\n", "\n", "alphas = np.logspace(-4, -1, 200)\n", "fig = bk.figure(title='Alpha sensitiveness on different models',\n", " plot_width=700, plot_height=300,\n", " x_axis_type='log', \n", " x_range=(min(alphas), max(alphas)))\n", "\n", "for Model, color in [(linear_model.Ridge, 'blue'), (linear_model.Lasso, 'green')]:\n", " scores = [model_selection.cross_val_score(Model(alpha=a), X, y, cv=5).mean()\n", " for a in alphas]\n", " fig.line(alphas, scores, line_color=color, legend=Model.__name__)\n", "\n", "fig.legend.location = 'bottom_left'\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.3 Model specific Cross Validation:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some models can fit data for a range of parameters almost as efficiently as fitting for a single parameter. The most common parameter amenable to this strategy is the strength of the regularizer. In this case we say that we compute the regularization path of the estimator.\n", "\n", "This is a particular case of what we are going to see in the next paragraph: **Grid Search**.\n", "\n", "Model Specific Cross Validation is supported by the following models:\n", "\n", "* **RidgeCV**\n", "* **RidgeClassifierCV**\n", "* **LarsCV**\n", "* **LassoLarsCV**\n", "* **LassoCV**\n", "* **ElasticNetCV**" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RidgeCV : 0.0003739937302478798\n", "LassoCV : 0.003827494478516311\n" ] } ], "source": [ "for Model in [linear_model.RidgeCV, linear_model.LassoCV]:\n", " model = Model(alphas=alphas, cv=5).fit(X, y)\n", " print(Model.__name__, ': ', model.alpha_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.4 Cross-validation iterators" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* **K-fold** - divide all samples in *K* groups, if *K=n* it is equivalent to leave-one-out.\n", "* **Statified K-fold** - each set contains the same prercentage of the target classes as the whole set\n", "* **Leave-One-Out (LOO)** - all samples except one\n", "* **Leave-P-Out (LPO)** - create all possible training sets by removing *p* samples from the whole set\n", "* **Leave-One-Label-Out (LOLO)** - holds out the samples according to a third-party provided label\n", "* **ShuffleSplit** - shuffles then split data in train and test sets\n", "* **StratifiedShuffleSplit** - ShuffleSplits by preserving percentage\n", "* **Bootstrap** - generate independent splits and then resample with replacement each split" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "X = np.arange(20).reshape(10,2)\n", "y = np.arange(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**KFold** split dataset into k consecutive folds (without shuffling):" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2 3 4 5 6 7 8 9] [0 1]\n", "[0 1 4 5 6 7 8 9] [2 3]\n", "[0 1 2 3 6 7 8 9] [4 5]\n", "[0 1 2 3 4 5 8 9] [6 7]\n", "[0 1 2 3 4 5 6 7] [8 9]\n" ] } ], "source": [ "kf = model_selection.KFold(n_splits=5)\n", "for train, test in kf.split(X):\n", " print(train, test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**ShuffleSplit** do not guarantee that all folds will be different:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5 3 9 8 0 7 1 4] [6 2]\n", "[1 9 2 3 5 8 7 4] [0 6]\n", "[4 3 6 2 9 5 7 0] [8 1]\n", "[9 5 8 7 2 0 1 6] [4 3]\n", "[5 8 2 3 1 6 4 7] [9 0]\n" ] } ], "source": [ "ss = model_selection.ShuffleSplit(n_splits=5, test_size=0.2)\n", "for train, test in ss.split(X):\n", " print(train, test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Bootstrap** example:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3 4 5 6 7 8 9] [0]\n", "[0 2 3 4 5 6 7 8 9] [1]\n", "[0 1 3 4 5 6 7 8 9] [2]\n", "[0 1 2 4 5 6 7 8 9] [3]\n", "[0 1 2 3 5 6 7 8 9] [4]\n", "[0 1 2 3 4 6 7 8 9] [5]\n", "[0 1 2 3 4 5 7 8 9] [6]\n", "[0 1 2 3 4 5 6 8 9] [7]\n", "[0 1 2 3 4 5 6 7 9] [8]\n", "[0 1 2 3 4 5 6 7 8] [9]\n" ] } ], "source": [ "bs = model_selection.LeaveOneOut()\n", "for train, test in bs.split(X):\n", " print(train, test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8 Grid Search: Searching for estimator hyperparameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`GridSearchCV` can optimize any parameter provided by `estimator.get_params()` by exhaustively fitting the model with any parameter combination.\n", "\n", "When evaluating different settings (“hyperparameters”) for estimators.\n", "\n", "`GridSearchCV` will optimize the hyperparameters on the **TRAINING set** (whereas the **VALIDATION set** is generated by CV). After the optimization has been done, the performances of the estimator can be evaluated on a third set called **TEST set**:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.1 Exhaustive Grid Search" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll pass to `GridSearchCV` a dictionary of parameters containing a list of hyperparameters to be searched. In this case we set `verbose=2` to see an output about all the searches done by the algorithm:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 5 folds for each of 4 candidates, totalling 20 fits\n", "[CV] C=1, kernel=linear ..............................................\n", "[CV] C=1, kernel=linear ..............................................\n", "[CV] C=1, kernel=linear ..............................................\n", "[CV] ............................... C=1, kernel=linear, total= 0.0s\n", "[CV] ............................... C=1, kernel=linear, total= 0.0s\n", "[CV] C=1, kernel=linear ..............................................\n", "[CV] C=10, kernel=linear .............................................\n", "[CV] ............................... C=1, kernel=linear, total= 0.0s\n", "[CV] C=10, kernel=linear .............................................\n", "[CV] C=10, kernel=linear .............................................\n", "[CV] C=2, gamma=0.1, kernel=rbf ......................................\n", "[CV] C=2, gamma=0.1, kernel=rbf ......................................\n", "[CV] C=2, gamma=0.1, kernel=rbf ......................................\n", "[CV] ............................... C=1, kernel=linear, total= 0.0s\n", "[CV] .............................. C=10, kernel=linear, total= 0.0s\n", "[CV] C=2, gamma=0.1, kernel=rbf ......................................\n", "[CV] .............................. C=10, kernel=linear, total= 0.0s\n", "[CV] .............................. C=10, kernel=linear, total= 0.0s\n", "[CV] ....................... C=2, gamma=0.1, kernel=rbf, total= 0.0s\n", "[CV] C=2, gamma=0.01, kernel=rbf .....................................\n", "[CV] ....................... C=2, gamma=0.1, kernel=rbf, total= 0.0s\n", "[CV] ....................... C=2, gamma=0.1, kernel=rbf, total= 0.0s\n", "[CV] C=2, gamma=0.1, kernel=rbf ......................................\n", "[CV] C=2, gamma=0.01, kernel=rbf .....................................\n", "[CV] C=2, gamma=0.01, kernel=rbf .....................................\n", "[CV] C=2, gamma=0.01, kernel=rbf .....................................\n", "[CV] C=2, gamma=0.01, kernel=rbf .....................................\n", "[CV] ...................... C=2, gamma=0.01, kernel=rbf, total= 0.0s\n", "[CV] ...................... C=2, gamma=0.01, kernel=rbf, total= 0.0s\n", "[CV] ...................... C=2, gamma=0.01, kernel=rbf, total= 0.0s\n", "[CV] ....................... C=2, gamma=0.1, kernel=rbf, total= 0.0s\n", "[CV] ....................... C=2, gamma=0.1, kernel=rbf, total= 0.0s\n", "[CV] ...................... C=2, gamma=0.01, kernel=rbf, total= 0.0s\n", "[CV] ...................... C=2, gamma=0.01, kernel=rbf, total= 0.0s\n", "[CV] C=1, kernel=linear ..............................................\n", "[CV] ............................... C=1, kernel=linear, total= 0.0s\n", "[CV] C=10, kernel=linear .............................................\n", "[CV] .............................. C=10, kernel=linear, total= 0.0s\n", "[CV] C=10, kernel=linear .............................................\n", "[CV] .............................. C=10, kernel=linear, total= 0.0s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[Parallel(n_jobs=-1)]: Done 8 out of 20 | elapsed: 0.0s remaining: 0.0s\n", "[Parallel(n_jobs=-1)]: Done 20 out of 20 | elapsed: 0.0s finished\n" ] }, { "data": { "text/plain": [ "GridSearchCV(cv=5, error_score='raise',\n", " estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False),\n", " fit_params=None, iid=True, n_jobs=-1,\n", " param_grid=[{'C': [1, 10], 'kernel': ['linear']}, {'C': [2], 'gamma': [0.1, 0.01], 'kernel': ['rbf']}],\n", " pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n", " scoring=None, verbose=2)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import svm\n", "# Standardize the data\n", "iris = datasets.load_iris()\n", "scaler = preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)\n", "X = scaler.fit_transform(iris.data)\n", "# Keep out the Test Set\n", "X_tr, X_test, y_tr, y_test = model_selection.train_test_split(X, iris.target,\n", " test_size=0.30, random_state=0)\n", "# Define the Search Grid\n", "param_grid = [{'C': [1, 10], 'kernel': ['linear']},\n", " {'C': [2], 'gamma': [0.1, 0.01], 'kernel': ['rbf']}]\n", "# GridSearchCV\n", "clf = model_selection.GridSearchCV(svm.SVC(), param_grid, cv=5, n_jobs=-1, verbose=2)\n", "clf.fit(X_tr, y_tr)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "mean: 0.943, std: 0.0348, params: {'C': 1, 'kernel': 'linear'}\n", "mean: 0.933, std: 0.0469, params: {'C': 10, 'kernel': 'linear'}\n", "mean: 0.943, std: 0.0348, params: {'C': 2, 'gamma': 0.1, 'kernel': 'rbf'}\n", "mean: 0.895, std: 0.0981, params: {'C': 2, 'gamma': 0.01, 'kernel': 'rbf'}\n" ] } ], "source": [ "for a,b,c in zip(clf.cv_results_['mean_test_score'], \n", " clf.cv_results_['std_test_score'], \n", " clf.cv_results_['params']):\n", " print('mean: {:.3f}, std: {:.4f}, params: {}'.format(a,b,c))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we can check the accuracy on the **Test Set**:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best estimator: SVC(C=1, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False)\n", "Accuracy: 0.91 (+/- 0.22)\n" ] } ], "source": [ "best = clf.best_estimator_\n", "print('Best estimator: ', best)\n", "scores = model_selection.cross_val_score(best, X_test, y_test, cv=10)\n", "print(\"Accuracy: %0.2f (+/- %0.2f)\" % (scores.mean(), scores.std() * 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Different `score` metrics can be used while doing `GridSearchCV`:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PRECISION: fraction of retrieved instances that are relevant\n", "RECALL: fraction of relevant instances that are retrieved\n", "\n", "Tuning hyper-parameters for: precision_weighted\n", "\n", "Best parameters set found on development (training) set:\n", "SVC(C=0.5, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False)\n", "\n", "Grid Scores on development set:\n", "mean: 0.920, std: 0.0815, params: {'C': 0.125, 'kernel': 'linear'}\n", "mean: 0.953, std: 0.0648, params: {'C': 0.25, 'kernel': 'linear'}\n", "mean: 0.987, std: 0.0267, params: {'C': 0.5, 'kernel': 'linear'}\n", "mean: 0.974, std: 0.0340, params: {'C': 1.0, 'kernel': 'linear'}\n", "mean: 0.941, std: 0.0617, params: {'C': 1, 'gamma': 0.1, 'kernel': 'rbf'}\n", "mean: 0.974, std: 0.0340, params: {'C': 10, 'gamma': 0.1, 'kernel': 'rbf'}\n", "\n", "Detailed classification report (on Testing Set)\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 26\n", " 1 0.89 1.00 0.94 33\n", " 2 1.00 0.87 0.93 31\n", "\n", "avg / total 0.96 0.96 0.96 90\n", "\n", "-----------------------------------------------------\n", "\n", "Tuning hyper-parameters for: recall_weighted\n", "\n", "Best parameters set found on development (training) set:\n", "SVC(C=0.5, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False)\n", "\n", "Grid Scores on development set:\n", "mean: 0.917, std: 0.0810, params: {'C': 0.125, 'kernel': 'linear'}\n", "mean: 0.950, std: 0.0659, params: {'C': 0.25, 'kernel': 'linear'}\n", "mean: 0.983, std: 0.0333, params: {'C': 0.5, 'kernel': 'linear'}\n", "mean: 0.967, std: 0.0441, params: {'C': 1.0, 'kernel': 'linear'}\n", "mean: 0.933, std: 0.0637, params: {'C': 1, 'gamma': 0.1, 'kernel': 'rbf'}\n", "mean: 0.967, std: 0.0441, params: {'C': 10, 'gamma': 0.1, 'kernel': 'rbf'}\n", "\n", "Detailed classification report (on Testing Set)\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 26\n", " 1 0.89 1.00 0.94 33\n", " 2 1.00 0.87 0.93 31\n", "\n", "avg / total 0.96 0.96 0.96 90\n", "\n", "-----------------------------------------------------\n" ] } ], "source": [ "X_tr, X_test, y_tr, y_test = model_selection.train_test_split(X, \n", " iris.target,\n", " test_size=0.60, \n", " random_state=0)\n", "scores = ['precision_weighted', 'recall_weighted']\n", "param_grid = [{'C': np.logspace(-3,0,4, base=2), 'kernel': ['linear']},\n", " {'C': [1, 10], 'gamma': [0.1], 'kernel': ['rbf']}]\n", "print('PRECISION: fraction of retrieved instances that are relevant')\n", "print('RECALL: fraction of relevant instances that are retrieved')\n", "for score in scores:\n", " print('\\nTuning hyper-parameters for: %s' % score)\n", " clf = model_selection.GridSearchCV(svm.SVC(), param_grid, cv=5, scoring=score)\n", " clf.fit(X_tr, y_tr)\n", " print('\\nBest parameters set found on development (training) set:')\n", " print(clf.best_estimator_)\n", " print('\\nGrid Scores on development set:')\n", " for a,b,c in zip(clf.cv_results_['mean_test_score'], \n", " clf.cv_results_['std_test_score'], \n", " clf.cv_results_['params']):\n", " print('mean: {:.3f}, std: {:.4f}, params: {}'.format(a,b,c))\n", " print('\\nDetailed classification report (on Testing Set)')\n", " y_true, y_pred = y_test, clf.predict(X_test)\n", " print(metrics.classification_report(y_true, y_pred))\n", " print('-----------------------------------------------------')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.2 Randomized Parameter Optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`RandomizedSearchCV` implements a randomized search over parameters, where each setting is sampled from a distribution over possible parameter values. This has two main benefits:\n", "\n", "* A budget can be chosen independent of the number of parameters and possible values.\n", "* Adding parameters that do not influence the performance does not decrease efficiency.\n", "\n", "Specifying how parameters should be sampled is done using a dictionary. The number of sampling iterations, is specified using the `n_iter` parameter. For each parameter, either a distribution over possible values or a list of discrete choices (which will be sampled uniformly) can be specified. This is a little example of the many statistical distributions available in `scipy`:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"84f5f526-3519-41de-9d90-f270e8f3f58e\":{\"roots\":{\"references\":[{\"attributes\":{\"data_source\":{\"id\":\"775dc31a-f2fe-4961-b9f2-6a27134a4772\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"59069d9e-2e7f-41b5-ad87-f823049b35fc\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"f36b2f19-81a6-4b88-8eb9-81c25782e421\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"a399ba08-526a-4fc8-9bf9-eda6e7a842b7\",\"type\":\"CDSView\"}},\"id\":\"28dbf96d-c24a-4f85-bdf6-eb92b7c699ca\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"bea9fded-56d8-4670-887d-f87c0a4a5bf7\",\"type\":\"PanTool\"},{\"id\":\"3e90ed5f-eff3-4b32-b536-28f750e2b6af\",\"type\":\"WheelZoomTool\"},{\"id\":\"588563b2-5cfa-4752-b6c2-12b338da0f10\",\"type\":\"BoxZoomTool\"},{\"id\":\"9e913702-e88a-433a-b691-d0c803d992bd\",\"type\":\"SaveTool\"},{\"id\":\"9d0f3dd3-0e80-4696-b726-ebfd96e4672b\",\"type\":\"ResetTool\"},{\"id\":\"c3090fec-f9d3-482e-9dc0-2e0a46f8d46d\",\"type\":\"HelpTool\"}]},\"id\":\"6d5b28f6-990c-44ec-9106-49b07cd74aa7\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"95532058-f552-4094-b1be-4d58cfca9d66\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"fdb5e0cc-9187-42d6-8f64-230548ea68a1\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":{\"id\":\"998419a7-4fd4-44bf-b513-2ac7e522ded1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3b633d16-65d9-4bc9-9b7c-539d59149a47\",\"type\":\"BasicTicker\"}},\"id\":\"d4547ac6-b112-4975-bcb8-dedd48d8c069\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"left\",\"right\",\"top\"],\"data\":{\"left\":{\"__ndarray__\":\"31vQaNToNEBIERLI7+I2QLDGUycL3ThAGXyVhibXOkCBMdflQdE8QOrmGEVdyz5AKU4tUrxiQEDeKM4Byl9BQJIDb7HXXEJARt4PYeVZQ0D6uLAQ81ZEQK6TUcAAVEVAY27ybw5RRkAXSZMfHE5HQMwjNM8pS0hAgP7UfjdISUA02XUuRUVKQOizFt5SQktAnI63jWA/TEBQaVg9bjxNQAZE+ex7OU5Auh6anIk2T0C3fB2myxlQQBHq7X1SmFBAa1e+VdkWUUDFxI4tYJVRQB8yXwXnE1JAep8v3W2SUkDUDAC19BBTQC560Ix7j1NAiOegZAIOVEDiVHE8iYxUQDzCQRQQC1VAly8S7JaJVUDxnOLDHQhWQEsKs5ukhlZApXeDcysFV0D/5FNLsoNXQFlSJCM5AlhAs7/0+r+AWEAOLcXSRv9YQGialarNfVlAwgdmglT8WUAcdTZa23paQHbiBjJi+VpA0E/XCel3W0Aqvafhb/ZbQIUqeLn2dFxA35dIkX3zXEA5BRlpBHJdQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"SBESyO/iNkCwxlMnC904QBl8lYYm1zpAgTHX5UHRPEDq5hhFXcs+QClOLVK8YkBA3ijOAcpfQUCSA2+x11xCQEbeD2HlWUNA+riwEPNWRECuk1HAAFRFQGNu8m8OUUZAF0mTHxxOR0DMIzTPKUtIQID+1H43SElANNl1LkVFSkDosxbeUkJLQJyOt41gP0xAUGlYPW48TUAGRPnsezlOQLoempyJNk9At3wdpssZUEAR6u19UphQQGtXvlXZFlFAxcSOLWCVUUAfMl8F5xNSQHqfL91tklJA1AwAtfQQU0AuetCMe49TQIjnoGQCDlRA4lRxPImMVEA8wkEUEAtVQJcvEuyWiVVA8Zziwx0IVkBLCrObpIZWQKV3g3MrBVdA/+RTS7KDV0BZUiQjOQJYQLO/9Pq/gFhADi3F0kb/WEBompWqzX1ZQMIHZoJU/FlAHHU2Wtt6WkB24gYyYvlaQNBP1wnpd1tAKr2n4W/2W0CFKni59nRcQN+XSJF981xAOQUZaQRyXUCTculAi/BdQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"La/NX/h9Tz++78UtsXljPxGX7mFDw2s/wk5RaCSTcD8/zG8PUsp2PyhVBdcp9nU/DyPe4J2gfT/e/0Nhn3iAPz+fC8tqBoI/f8do/A3Agj/Ne7WsC1eFP2suVQFIlYY/rGs3eR1YiD8K9nmcttyIP00zXBSMn4o/rGs3eR1YiD8aOGMn0KmOPy4j3uCdoI0/lSExhdxHjD8HDlmaa5eMPwZN6G0Cs48/WGDAWHNjjz9RmkgZxnSOP4j8LQu8P44/orqiz1I2kD/aDwb2LPCNP9Zx6+ciu40/zIMWd9ISjD90EbNR7kiPP+c0CXBN+Is/LiPe4J2gjT95cD6MYWKMPxczXBSMn4o/eXA+jGFijD8j9nmcttyIPzKCaRsRuoo/rGs3eR1YiD8UaoodXP+GP2rc7UJAyYM/SKJlgu23hD9PK/tJxeODP9NJjrZ/AX0/iPwtC7w/fj9+z8nG1Ht5P9eoGfHyGno/mnhb9Yilcj+s2kDnfnByP9eoGfHyGmo/VIqGhDj9YD/3wPjup9VNPw==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"e48aeb7d-8a68-47ba-9857-9d370342250f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"befebc97-201e-4ef4-96b8-5dced6f3c791\",\"type\":\"ColumnDataSource\"}},\"id\":\"70d5a646-d535-46d4-adaf-8744246c4f96\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"b7f0cf99-971d-41db-b433-2b904346046e\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"dc8775f1-7946-445b-8339-7ba658272ec1\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"8afab4f4-df19-41de-a39a-ea953b59074a\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"54ce0139-7f8c-4540-83d9-1e6b114deea1\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":350,\"renderers\":[{\"id\":\"8afab4f4-df19-41de-a39a-ea953b59074a\",\"type\":\"LinearAxis\"},{\"id\":\"e9c9e7b3-9104-4d55-bd7d-4cd297d3a9e6\",\"type\":\"Grid\"},{\"id\":\"54ce0139-7f8c-4540-83d9-1e6b114deea1\",\"type\":\"LinearAxis\"},{\"id\":\"bc7bdec7-3d60-4cb7-adb7-0f4a1369047a\",\"type\":\"Grid\"},{\"id\":\"8eb7c765-2936-499e-9b82-e91a125818ff\",\"type\":\"BoxAnnotation\"},{\"id\":\"f82b2876-312b-45f5-a05c-6e4f9e5043f2\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"b1afd6b3-481c-4e4b-9131-cd33891b4518\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"cc663dec-4ad9-4b0b-b8dd-d24f7406f1a0\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"e9c11520-6faf-4791-acd3-3140496dea5a\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"0be5a8c9-a949-42a6-916a-d6f5331eb799\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"d25dea18-a24d-4052-8447-ea914e334d57\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"519041f5-904c-4429-8f81-ce099c30b23a\",\"type\":\"LinearScale\"}},\"id\":\"b3363c35-27b9-40f9-a17e-60cfd0a7a256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"bc79cb0c-2dcf-42b0-8f17-dcdd4fde4d50\",\"type\":\"DataRange1d\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"9dcfef01-9e7f-4690-9f72-123de2788181\",\"type\":\"PanTool\"},{\"id\":\"9c0d95f3-f1de-4e28-82e7-ff94dcb8a327\",\"type\":\"WheelZoomTool\"},{\"id\":\"a10fa2b6-5c77-4611-ab25-03d9da1c3e5c\",\"type\":\"BoxZoomTool\"},{\"id\":\"e6540135-cf96-4aaf-b4a0-10de6996fbfc\",\"type\":\"SaveTool\"},{\"id\":\"1a223a75-7d6b-4bd4-bea5-cdb9d5152362\",\"type\":\"ResetTool\"},{\"id\":\"5064823b-4458-4661-a725-4762138cc5dd\",\"type\":\"HelpTool\"}]},\"id\":\"cc663dec-4ad9-4b0b-b8dd-d24f7406f1a0\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"775dc31a-f2fe-4961-b9f2-6a27134a4772\",\"type\":\"ColumnDataSource\"}},\"id\":\"a399ba08-526a-4fc8-9bf9-eda6e7a842b7\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"3ad41943-f999-4d0a-8f3b-65febd32d322\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"270d0b0b-5230-4d82-9116-22dbd6d7e021\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":350,\"renderers\":[{\"id\":\"3ad41943-f999-4d0a-8f3b-65febd32d322\",\"type\":\"LinearAxis\"},{\"id\":\"d4547ac6-b112-4975-bcb8-dedd48d8c069\",\"type\":\"Grid\"},{\"id\":\"270d0b0b-5230-4d82-9116-22dbd6d7e021\",\"type\":\"LinearAxis\"},{\"id\":\"21f4dd8b-2245-4563-93a6-dacc812eecec\",\"type\":\"Grid\"},{\"id\":\"ca6cad2f-a890-4499-a3ba-66c7d5318e60\",\"type\":\"BoxAnnotation\"},{\"id\":\"d2207658-7db7-49ec-91b6-b52940fbdf33\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"dcf1d20b-a4f0-40a9-a6a4-0b521f8bfd0d\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"0bdc5034-4e32-48a9-9e6f-20f0bf4c44c6\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"80402e76-06ed-424f-9d4a-299eb9544ce0\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"ce40ab2f-6cea-4ccb-bd07-9d280f0463b6\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"924bab9a-02db-4bd2-bad1-08cdaed1233a\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"c44c8099-a1fa-4d81-93a5-36a43f4592bf\",\"type\":\"LinearScale\"}},\"id\":\"998419a7-4fd4-44bf-b513-2ac7e522ded1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"c3090fec-f9d3-482e-9dc0-2e0a46f8d46d\",\"type\":\"HelpTool\"},{\"attributes\":{\"plot\":{\"id\":\"b3363c35-27b9-40f9-a17e-60cfd0a7a256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"75f66846-989b-49c7-b84d-344096bf2c90\",\"type\":\"BasicTicker\"}},\"id\":\"e9c9e7b3-9104-4d55-bd7d-4cd297d3a9e6\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"00a1550c-1fbc-4199-8d9a-a37fd8c1d787\",\"type\":\"Row\"},{\"id\":\"0a98ffda-bc30-401e-a4ce-4ea4ae931cac\",\"type\":\"Row\"}]},\"id\":\"8999286d-22fc-46b7-909f-6eebbbfe78a8\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"c62e5495-6adc-4ea6-8eef-520d19af177c\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"8a129276-d849-426d-9b2a-5a1f99810837\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"5064823b-4458-4661-a725-4762138cc5dd\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"2f5fa5c1-aa31-4eba-8533-72d8574c61ad\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"0e771e79-ccd2-44fd-8bdc-333cec2b37b8\",\"type\":\"Quad\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"b1afd6b3-481c-4e4b-9131-cd33891b4518\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null},\"id\":\"80402e76-06ed-424f-9d4a-299eb9544ce0\",\"type\":\"DataRange1d\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"9a0ada07-ddff-4a85-afcb-ecdc3907d734\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"770e5f4a-e0f1-4841-a924-7343759c51d5\",\"type\":\"BasicTicker\"}},\"id\":\"c89669c4-11f9-4070-8888-91deae3c9167\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"7ab25b99-cecc-4834-870a-e6b5b257f8c6\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null},\"id\":\"10cdefc9-d724-4d34-8840-84e401675308\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null},\"id\":\"e9c11520-6faf-4791-acd3-3140496dea5a\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2598a77a-9a34-417e-a2bb-ffe71c4be636\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"50a4bf03-c118-4e5f-96a6-5f0d5824785c\",\"type\":\"Quad\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"b3363c35-27b9-40f9-a17e-60cfd0a7a256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2598a77a-9a34-417e-a2bb-ffe71c4be636\",\"type\":\"BasicTicker\"}},\"id\":\"bc7bdec7-3d60-4cb7-adb7-0f4a1369047a\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null},\"id\":\"b54527bb-71c8-45c9-9eef-fb1f195d237d\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"c44c8099-a1fa-4d81-93a5-36a43f4592bf\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"e5fbfca7-d87a-4f3e-8d14-e55d0cb8615e\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"fa48d7c2-ccee-4ced-a4ee-113fc0726817\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":350,\"renderers\":[{\"id\":\"e5fbfca7-d87a-4f3e-8d14-e55d0cb8615e\",\"type\":\"LinearAxis\"},{\"id\":\"84e7484e-d4a2-437d-957c-e77df05c538d\",\"type\":\"Grid\"},{\"id\":\"fa48d7c2-ccee-4ced-a4ee-113fc0726817\",\"type\":\"LinearAxis\"},{\"id\":\"4db10062-88d0-4ede-b992-1148cbf78915\",\"type\":\"Grid\"},{\"id\":\"331ea5b0-402e-4455-9ae7-f1e47b8de438\",\"type\":\"BoxAnnotation\"},{\"id\":\"c03c8297-d30a-44b2-a7bb-0c8510a76c74\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"7ab25b99-cecc-4834-870a-e6b5b257f8c6\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"2aebf426-de18-4736-aae6-e38fb13ca3db\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"10cdefc9-d724-4d34-8840-84e401675308\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"9fb6d408-c50a-48ca-92f6-8d66da17038f\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"bc79cb0c-2dcf-42b0-8f17-dcdd4fde4d50\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"761432eb-da3b-4468-9b6a-1d70db8c98b0\",\"type\":\"LinearScale\"}},\"id\":\"7e3c75ab-850e-44b4-9b1b-7e38dc300857\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"0be5a8c9-a949-42a6-916a-d6f5331eb799\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"e6540135-cf96-4aaf-b4a0-10de6996fbfc\",\"type\":\"SaveTool\"},{\"attributes\":{\"formatter\":{\"id\":\"f40eef0a-b7f3-41b1-b2ea-bb1f634f050e\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"7e3c75ab-850e-44b4-9b1b-7e38dc300857\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fdb5e0cc-9187-42d6-8f64-230548ea68a1\",\"type\":\"BasicTicker\"}},\"id\":\"e5fbfca7-d87a-4f3e-8d14-e55d0cb8615e\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"d25dea18-a24d-4052-8447-ea914e334d57\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"761432eb-da3b-4468-9b6a-1d70db8c98b0\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"519041f5-904c-4429-8f81-ce099c30b23a\",\"type\":\"LinearScale\"},{\"attributes\":{\"formatter\":{\"id\":\"dc8775f1-7946-445b-8339-7ba658272ec1\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"b3363c35-27b9-40f9-a17e-60cfd0a7a256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2598a77a-9a34-417e-a2bb-ffe71c4be636\",\"type\":\"BasicTicker\"}},\"id\":\"54ce0139-7f8c-4540-83d9-1e6b114deea1\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"770e5f4a-e0f1-4841-a924-7343759c51d5\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"e48aeb7d-8a68-47ba-9857-9d370342250f\",\"type\":\"ColumnDataSource\"}},\"id\":\"59019f41-4127-43ae-bcda-bd0c158ab482\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3dcf8b24-3791-4b2e-899e-4e328c5cde0b\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"ce40ab2f-6cea-4ccb-bd07-9d280f0463b6\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"9e913702-e88a-433a-b691-d0c803d992bd\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null},\"id\":\"924bab9a-02db-4bd2-bad1-08cdaed1233a\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"f8479a41-50c3-4d01-95ef-f1f84f11074e\",\"type\":\"LinearScale\"},{\"attributes\":{\"overlay\":{\"id\":\"2f5fa5c1-aa31-4eba-8533-72d8574c61ad\",\"type\":\"BoxAnnotation\"}},\"id\":\"588563b2-5cfa-4752-b6c2-12b338da0f10\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"4ce5a2a6-7ea7-418e-b174-a0d79429d7ea\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"formatter\":{\"id\":\"c4646431-5222-47e8-8193-faa140759ac6\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"998419a7-4fd4-44bf-b513-2ac7e522ded1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3b633d16-65d9-4bc9-9b7c-539d59149a47\",\"type\":\"BasicTicker\"}},\"id\":\"3ad41943-f999-4d0a-8f3b-65febd32d322\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"331ea5b0-402e-4455-9ae7-f1e47b8de438\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"formatter\":{\"id\":\"4ce5a2a6-7ea7-418e-b174-a0d79429d7ea\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"7e3c75ab-850e-44b4-9b1b-7e38dc300857\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0c86be17-d7a8-448b-a56f-7bc3dfff887f\",\"type\":\"BasicTicker\"}},\"id\":\"fa48d7c2-ccee-4ced-a4ee-113fc0726817\",\"type\":\"LinearAxis\"},{\"attributes\":{\"plot\":{\"id\":\"9a0ada07-ddff-4a85-afcb-ecdc3907d734\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"95532058-f552-4094-b1be-4d58cfca9d66\",\"type\":\"BasicTicker\"}},\"id\":\"28788d72-2ebc-45de-a58a-35b143d0839a\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"75f66846-989b-49c7-b84d-344096bf2c90\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"b2e9c311-1004-4917-a8bd-916584dabf6b\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"2730b7c5-3b7a-4748-b240-67d56a30ba2f\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"a86c0ce1-084a-4df5-be05-760b9fdb13de\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"82d9084c-21fb-4dee-982e-975724b50dbb\",\"type\":\"Quad\"},{\"attributes\":{\"formatter\":{\"id\":\"3dcf8b24-3791-4b2e-899e-4e328c5cde0b\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"b3363c35-27b9-40f9-a17e-60cfd0a7a256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"75f66846-989b-49c7-b84d-344096bf2c90\",\"type\":\"BasicTicker\"}},\"id\":\"8afab4f4-df19-41de-a39a-ea953b59074a\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"c4646431-5222-47e8-8193-faa140759ac6\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"formatter\":{\"id\":\"a86c0ce1-084a-4df5-be05-760b9fdb13de\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"9a0ada07-ddff-4a85-afcb-ecdc3907d734\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"770e5f4a-e0f1-4841-a924-7343759c51d5\",\"type\":\"BasicTicker\"}},\"id\":\"1df03388-cbac-49f1-a5a8-c77736fa4aae\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"f40eef0a-b7f3-41b1-b2ea-bb1f634f050e\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"toolbar\":{\"id\":\"4be1ddf5-793c-4ff3-b03e-8a80c2736607\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"d3231094-c8e0-4374-807a-9ce6900efeff\",\"type\":\"ToolbarBox\"},{\"attributes\":{},\"id\":\"a10878aa-8c5a-49e6-807c-777ad4591de3\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"0c86be17-d7a8-448b-a56f-7bc3dfff887f\",\"type\":\"BasicTicker\"},{\"attributes\":{\"overlay\":{\"id\":\"331ea5b0-402e-4455-9ae7-f1e47b8de438\",\"type\":\"BoxAnnotation\"}},\"id\":\"68834281-6d57-4a8d-b518-1caa862ea773\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"formatter\":{\"id\":\"c62e5495-6adc-4ea6-8eef-520d19af177c\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"9a0ada07-ddff-4a85-afcb-ecdc3907d734\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"95532058-f552-4094-b1be-4d58cfca9d66\",\"type\":\"BasicTicker\"}},\"id\":\"2608ba41-4dc0-4340-8d1a-1dcacbcc7307\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"46a059a1-a5bb-4b38-91b8-67584670738a\",\"type\":\"PanTool\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"7e3c75ab-850e-44b4-9b1b-7e38dc300857\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0c86be17-d7a8-448b-a56f-7bc3dfff887f\",\"type\":\"BasicTicker\"}},\"id\":\"4db10062-88d0-4ede-b992-1148cbf78915\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"ca6cad2f-a890-4499-a3ba-66c7d5318e60\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"d549b79c-6363-442c-b487-c05fb6efb5e8\",\"type\":\"PanTool\"},{\"id\":\"a10878aa-8c5a-49e6-807c-777ad4591de3\",\"type\":\"WheelZoomTool\"},{\"id\":\"68834281-6d57-4a8d-b518-1caa862ea773\",\"type\":\"BoxZoomTool\"},{\"id\":\"cee79796-6737-4679-a683-261c0411f005\",\"type\":\"SaveTool\"},{\"id\":\"b7f0cf99-971d-41db-b433-2b904346046e\",\"type\":\"ResetTool\"},{\"id\":\"8a129276-d849-426d-9b2a-5a1f99810837\",\"type\":\"HelpTool\"}]},\"id\":\"2aebf426-de18-4736-aae6-e38fb13ca3db\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"2608ba41-4dc0-4340-8d1a-1dcacbcc7307\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"1df03388-cbac-49f1-a5a8-c77736fa4aae\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":350,\"renderers\":[{\"id\":\"2608ba41-4dc0-4340-8d1a-1dcacbcc7307\",\"type\":\"LinearAxis\"},{\"id\":\"28788d72-2ebc-45de-a58a-35b143d0839a\",\"type\":\"Grid\"},{\"id\":\"1df03388-cbac-49f1-a5a8-c77736fa4aae\",\"type\":\"LinearAxis\"},{\"id\":\"c89669c4-11f9-4070-8888-91deae3c9167\",\"type\":\"Grid\"},{\"id\":\"2f5fa5c1-aa31-4eba-8533-72d8574c61ad\",\"type\":\"BoxAnnotation\"},{\"id\":\"28dbf96d-c24a-4f85-bdf6-eb92b7c699ca\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"4af32888-e7a6-4ed5-95b3-18b4093f2ff7\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"6d5b28f6-990c-44ec-9106-49b07cd74aa7\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"b54527bb-71c8-45c9-9eef-fb1f195d237d\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"f8479a41-50c3-4d01-95ef-f1f84f11074e\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"b2e9c311-1004-4917-a8bd-916584dabf6b\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"bf9615d2-4425-4a64-80f3-7ffaedcc9ac5\",\"type\":\"LinearScale\"}},\"id\":\"9a0ada07-ddff-4a85-afcb-ecdc3907d734\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"a7028b68-f3f5-41f6-80d0-5eaed7effd3b\",\"type\":\"Quad\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"dcf1d20b-a4f0-40a9-a6a4-0b521f8bfd0d\",\"type\":\"Title\"},{\"attributes\":{\"data_source\":{\"id\":\"befebc97-201e-4ef4-96b8-5dced6f3c791\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"82d9084c-21fb-4dee-982e-975724b50dbb\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2730b7c5-3b7a-4748-b240-67d56a30ba2f\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"70d5a646-d535-46d4-adaf-8744246c4f96\",\"type\":\"CDSView\"}},\"id\":\"c03c8297-d30a-44b2-a7bb-0c8510a76c74\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"6b29682f-1e3f-4cdf-a224-69138ec26ff0\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"3e90ed5f-eff3-4b32-b536-28f750e2b6af\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1a223a75-7d6b-4bd4-bea5-cdb9d5152362\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"ece7fbf7-c45e-41e3-870e-9efef8e17e7f\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"ca6cad2f-a890-4499-a3ba-66c7d5318e60\",\"type\":\"BoxAnnotation\"}},\"id\":\"df6d610a-a6b6-4ddf-a59b-c41ee5dc4214\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"4d10ba9e-de43-4283-aa6d-e4c9eca799fc\",\"type\":\"Quad\"},{\"attributes\":{\"data_source\":{\"id\":\"98d0558f-381e-4b95-882c-c106caf447e1\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"0e771e79-ccd2-44fd-8bdc-333cec2b37b8\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"a7028b68-f3f5-41f6-80d0-5eaed7effd3b\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"9ee6096c-325e-4548-9bfd-7deca0b5b87f\",\"type\":\"CDSView\"}},\"id\":\"f82b2876-312b-45f5-a05c-6e4f9e5043f2\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"e48aeb7d-8a68-47ba-9857-9d370342250f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"50a4bf03-c118-4e5f-96a6-5f0d5824785c\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"4d10ba9e-de43-4283-aa6d-e4c9eca799fc\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"59019f41-4127-43ae-bcda-bd0c158ab482\",\"type\":\"CDSView\"}},\"id\":\"d2207658-7db7-49ec-91b6-b52940fbdf33\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"9dcfef01-9e7f-4690-9f72-123de2788181\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"f6f2acd6-bf0c-4830-a4bf-acfa38c390e0\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"f36b2f19-81a6-4b88-8eb9-81c25782e421\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"bea9fded-56d8-4670-887d-f87c0a4a5bf7\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"9c0d95f3-f1de-4e28-82e7-ff94dcb8a327\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"tools\":[{\"id\":\"bea9fded-56d8-4670-887d-f87c0a4a5bf7\",\"type\":\"PanTool\"},{\"id\":\"3e90ed5f-eff3-4b32-b536-28f750e2b6af\",\"type\":\"WheelZoomTool\"},{\"id\":\"588563b2-5cfa-4752-b6c2-12b338da0f10\",\"type\":\"BoxZoomTool\"},{\"id\":\"9e913702-e88a-433a-b691-d0c803d992bd\",\"type\":\"SaveTool\"},{\"id\":\"9d0f3dd3-0e80-4696-b726-ebfd96e4672b\",\"type\":\"ResetTool\"},{\"id\":\"c3090fec-f9d3-482e-9dc0-2e0a46f8d46d\",\"type\":\"HelpTool\"},{\"id\":\"d549b79c-6363-442c-b487-c05fb6efb5e8\",\"type\":\"PanTool\"},{\"id\":\"a10878aa-8c5a-49e6-807c-777ad4591de3\",\"type\":\"WheelZoomTool\"},{\"id\":\"68834281-6d57-4a8d-b518-1caa862ea773\",\"type\":\"BoxZoomTool\"},{\"id\":\"cee79796-6737-4679-a683-261c0411f005\",\"type\":\"SaveTool\"},{\"id\":\"b7f0cf99-971d-41db-b433-2b904346046e\",\"type\":\"ResetTool\"},{\"id\":\"8a129276-d849-426d-9b2a-5a1f99810837\",\"type\":\"HelpTool\"},{\"id\":\"9dcfef01-9e7f-4690-9f72-123de2788181\",\"type\":\"PanTool\"},{\"id\":\"9c0d95f3-f1de-4e28-82e7-ff94dcb8a327\",\"type\":\"WheelZoomTool\"},{\"id\":\"a10fa2b6-5c77-4611-ab25-03d9da1c3e5c\",\"type\":\"BoxZoomTool\"},{\"id\":\"e6540135-cf96-4aaf-b4a0-10de6996fbfc\",\"type\":\"SaveTool\"},{\"id\":\"1a223a75-7d6b-4bd4-bea5-cdb9d5152362\",\"type\":\"ResetTool\"},{\"id\":\"5064823b-4458-4661-a725-4762138cc5dd\",\"type\":\"HelpTool\"},{\"id\":\"46a059a1-a5bb-4b38-91b8-67584670738a\",\"type\":\"PanTool\"},{\"id\":\"f6f2acd6-bf0c-4830-a4bf-acfa38c390e0\",\"type\":\"WheelZoomTool\"},{\"id\":\"df6d610a-a6b6-4ddf-a59b-c41ee5dc4214\",\"type\":\"BoxZoomTool\"},{\"id\":\"6b29682f-1e3f-4cdf-a224-69138ec26ff0\",\"type\":\"SaveTool\"},{\"id\":\"c328e506-9c5e-458a-a875-e31b316ea092\",\"type\":\"ResetTool\"},{\"id\":\"08aa80ac-9f65-4aa7-a93b-58de5943bebe\",\"type\":\"HelpTool\"}]},\"id\":\"4be1ddf5-793c-4ff3-b03e-8a80c2736607\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"998419a7-4fd4-44bf-b513-2ac7e522ded1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"219253ea-029d-4ea4-b935-0e550c022a90\",\"type\":\"BasicTicker\"}},\"id\":\"21f4dd8b-2245-4563-93a6-dacc812eecec\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"b3363c35-27b9-40f9-a17e-60cfd0a7a256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"998419a7-4fd4-44bf-b513-2ac7e522ded1\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"0a98ffda-bc30-401e-a4ce-4ea4ae931cac\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"bf9615d2-4425-4a64-80f3-7ffaedcc9ac5\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"c328e506-9c5e-458a-a875-e31b316ea092\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"98d0558f-381e-4b95-882c-c106caf447e1\",\"type\":\"ColumnDataSource\"}},\"id\":\"9ee6096c-325e-4548-9bfd-7deca0b5b87f\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"08aa80ac-9f65-4aa7-a93b-58de5943bebe\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"8eb7c765-2936-499e-9b82-e91a125818ff\",\"type\":\"BoxAnnotation\"}},\"id\":\"a10fa2b6-5c77-4611-ab25-03d9da1c3e5c\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"cee79796-6737-4679-a683-261c0411f005\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"219253ea-029d-4ea4-b935-0e550c022a90\",\"type\":\"BasicTicker\"},{\"attributes\":{\"children\":[{\"id\":\"d3231094-c8e0-4374-807a-9ce6900efeff\",\"type\":\"ToolbarBox\"},{\"id\":\"8999286d-22fc-46b7-909f-6eebbbfe78a8\",\"type\":\"Column\"}]},\"id\":\"2f89ce43-f2b6-488f-9d23-a9b33ca1e9cb\",\"type\":\"Column\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"4af32888-e7a6-4ed5-95b3-18b4093f2ff7\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"left\",\"right\",\"top\"],\"data\":{\"left\":{\"__ndarray__\":\"/09DOfhNcz8DhVoA3f0xQOi6mJBC/UFATzMEoZb7SkDb1bdY9fxRQA+S7WAffFZAQk4jaUn7WkB1Cllxc3pfQFVjx7zO/GFAb0HiwGM8ZECJH/3E+HtmQKL9F8mNu2hAvNsyzSL7akDWuU3RtzptQO+XaNVMem9ABLvB7PDccEARKs9uu/xxQB6Z3PCFHHNAKwjqclA8dEA4d/f0Glx1QEXmBHfle3ZAUVUS+a+bd0BexB97ert4QGszLf1E23lAeKI6fw/7ekCFEUgB2hp8QJKAVYOkOn1An+9iBW9afkCrXnCHOXp/QN3mvgQCTYBAY57FRefcgEDqVcyGzGyBQHAN08ex/IFA9sTZCJeMgkB9fOBJfByDQAM054phrINAiuvty0Y8hEAQo/QMLMyEQJda+00RXIVAHRICj/brhUCkyQjQ23uGQCqBDxHBC4dAsDgWUqabh0A38ByTiyuIQL2nI9Rwu4hARF8qFVZLiUDKFjFWO9uJQFHON5cga4pA14U+2AX7ikBdPUUZ64qLQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"A4VaAN39MUDoupiQQv1BQE8zBKGW+0pA29W3WPX8UUAPku1gH3xWQEJOI2lJ+1pAdQpZcXN6X0BVY8e8zvxhQG9B4sBjPGRAiR/9xPh7ZkCi/RfJjbtoQLzbMs0i+2pA1rlN0bc6bUDvl2jVTHpvQAS7wezw3HBAESrPbrv8cUAemdzwhRxzQCsI6nJQPHRAOHf39BpcdUBF5gR35Xt2QFFVEvmvm3dAXsQfe3q7eEBrMy39RNt5QHiiOn8P+3pAhRFIAdoafECSgFWDpDp9QJ/vYgVvWn5Aq15whzl6f0Dd5r4EAk2AQGOexUXn3IBA6lXMhsxsgUBwDdPHsfyBQPbE2QiXjIJAfXzgSXwcg0ADNOeKYayDQIrr7ctGPIRAEKP0DCzMhECXWvtNEVyFQB0SAo/264VApMkI0Nt7hkAqgQ8RwQuHQLA4FlKmm4dAN/Ack4sriEC9pyPUcLuIQERfKhVWS4lAyhYxVjvbiUBRzjeXIGuKQNeFPtgF+4pAXT1FGeuKi0Dk9Eta0BqMQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"1pd2glCsgj9/gfhFSUWAPz85V1pdjHg/zU+OnGBodj82wK2ULn5zP3F8DF25gmw/37+5QexHaz86ir1g8P5kP7HxXjgb5mE//GXRiyEOXD8JtzeStIBYPwylO1FuI1g/mOwzc7DJTj8cS1cqOIJLP7R8BD+QUUc/3zQUO3fcRT+6v73QgOA9P5yOAIDWrjc/Itsn9hcKND88ty90i08zPz0w3chO9io/cW8/cHLaMT/FWAy9A5cmP5o5S62fwiA/f11DLyx9IT+f47VSDZseP3TE9EKpxhg/VwzlRsI7Cj9gXUMvLH0BP+6bxU70Jf0+pxVTKxMIED/um8VO9CX9Pu6bxU70Jf0+Au0jN15nBD++fAQ/kFHXPpV8BD+QUQc/vnwEP5BR5z6VfAQ/kFHnPr58BD+QUdc+lXwEP5BR1z4AAAAAAAAAAL58BD+QUec+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVfAQ/kFHXPgAAAAAAAAAAAAAAAAAAAACVfAQ/kFHXPg==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"775dc31a-f2fe-4961-b9f2-6a27134a4772\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"left\",\"right\",\"top\"],\"data\":{\"left\":{\"__ndarray__\":\"iS8SuNkBNEC17so5vgE2QOKtg7uiAThADm08PYcBOkA6LPW+awE8QGfrrUBQAT5ASlUzYZoAQEDgtA+ijABBQHYU7OJ+AEJADHTII3EAQ0Ci06RkYwBEQDgzgaVVAEVAzpJd5kcARkBl8jknOgBHQPtRFmgsAEhAkrHyqB4ASUAoEc/pEABKQL5wqyoDAEtAVNCHa/X/S0DqL2Ss5/9MQICPQO3Z/01AFu8cLsz/TkCsTvluvv9PQCHX6lfYf1BA7AZZeNH/UEC4NseYyn9RQINmNbnD/1FATpaj2bx/UkAZxhH6tf9SQOT1fxqvf1NAryXuOqj/U0B6VVxboX9UQEWFynua/1RAELU4nJN/VUDb5Ka8jP9VQKYUFd2Ff1ZAcUSD/X7/VkA8dPEdeH9XQAikXz5x/1dA09PNXmp/WECeAzx/Y/9YQGkzqp9cf1lANGMYwFX/WUD/kobgTn9aQMrC9ABI/1pAlfJiIUF/W0BgItFBOv9bQCtSP2Izf1xA9oGtgiz/XEDCsRujJX9dQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"te7KOb4BNkDirYO7ogE4QA5tPD2HATpAOiz1vmsBPEBn661AUAE+QEpVM2GaAEBA4LQPoowAQUB2FOzifgBCQAx0yCNxAENAotOkZGMAREA4M4GlVQBFQM6SXeZHAEZAZfI5JzoAR0D7URZoLABIQJKx8qgeAElAKBHP6RAASkC+cKsqAwBLQFTQh2v1/0tA6i9krOf/TECAj0Dt2f9NQBbvHC7M/05ArE75br7/T0Ah1+pX2H9QQOwGWXjR/1BAuDbHmMp/UUCDZjW5w/9RQE6Wo9m8f1JAGcYR+rX/UkDk9X8ar39TQK8l7jqo/1NAelVcW6F/VEBFhcp7mv9UQBC1OJyTf1VA2+SmvIz/VUCmFBXdhX9WQHFEg/1+/1ZAPHTxHXh/V0AIpF8+cf9XQNPTzV5qf1hAngM8f2P/WEBpM6qfXH9ZQDRjGMBV/1lA/5KG4E5/WkDKwvQASP9aQJXyYiFBf1tAYCLRQTr/W0ArUj9iM39cQPaBrYIs/1xAwrEboyV/XUCN4YnDHv9dQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"tfpestbQhT9Pl7X8US2EP8edsfuUb4I/jFPJ37c5hj8iFtnBYIiGP0+XtfxRLYQ/FDhP0C2ChT+oC5o5vU2FP6zl4KGPW4M/fIq9/suohz8tFtnBYIiGP1a9bpR/H4Y/qa7sgnvsgT/uagBm4fiDP8ih9IT1Z4U/WZe1/FEthD+41KUaqd6DP8TDapPCYYQ/qAuaOb1NhT+CPkvPcMSDP39kBGeetoU/4Xs77cd1gz92T4ZWV0GDPzDwHyozloQ/kNSlGqnegz+s5eChj1uDPzDwHyozloQ/0bIvDNzkhD/Ew2qTwmGEP87Y6KMJ14Y/FxKWOACQgz8w8B8qM5aEP6zl4KGPW4M/FxKWOACQgz+SB1ewXFWCP0yo8IM4qoM/FxKWOACQgz/RWcXe+nuEP5/2Gyl22II/f2QEZ562hT/3f352KG6GP/FER86zBoI/8URHzrMGgj9KzqkbZpyFPzDwHyozloQ/f2QEZ562hT8HSYpXFP+EP7jUpRqp3oM/B/AfKjOWhD893+SiTBmFPw==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"98d0558f-381e-4b95-882c-c106caf447e1\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"left\",\"right\",\"top\"],\"data\":{\"left\":{\"__ndarray__\":\"QH4HNYH7/r8Y+3IhaUfSv7QATqTM1/U/GGB8yLkgCEDq32ifxqoSQMiPk1owRRlAqD++FZrfH0DDd3ToAT0jQLLPCcY2iiZAoSefo2vXKUCQfzSBoCQtQMDrZK/qODBAuJcvHoXfMUCvQ/qMH4YzQKfvxPu5LDVAnpuPalTTNkCWR1rZ7nk4QI7zJEiJIDpAhZ/vtiPHO0B9S7olvm09QHT3hJRYFD9AttGngXldQECyJw25xjBBQK59cvATBEJAqtPXJ2HXQkClKT1frqpDQKF/opb7fURAndUHzkhRRUCZK20FliRGQJWB0jzj90ZAkNc3dDDLR0CMLZ2rfZ5IQIiDAuPKcUlAhNlnGhhFSkCAL81RZRhLQHuFMomy60tAd9uXwP++TEBzMf33TJJNQG+HYi+aZU5Aat3HZuc4T0CzmRZPGgZQQLFEyerAb1BAr+97hmfZUECtmi4iDkNRQKtF4b20rFFAqfCTWVsWUkCnm0b1AYBSQKVG+ZCo6VJAo/GrLE9TU0CgnF7I9bxTQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"GPtyIWlH0r+0AE6kzNf1PxhgfMi5IAhA6t9on8aqEkDIj5NaMEUZQKg/vhWa3x9Aw3d06AE9I0CyzwnGNoomQKEnn6Nr1ylAkH80gaAkLUDA62Sv6jgwQLiXLx6F3zFAr0P6jB+GM0Cn78T7uSw1QJ6bj2pU0zZAlkda2e55OECO8yRIiSA6QIWf77YjxztAfUu6Jb5tPUB094SUWBQ/QLbRp4F5XUBAsicNucYwQUCufXLwEwRCQKrT1ydh10JApSk9X66qQ0Chf6KW+31EQJ3VB85IUUVAmSttBZYkRkCVgdI84/dGQJDXN3Qwy0dAjC2dq32eSECIgwLjynFJQITZZxoYRUpAgC/NUWUYS0B7hTKJsutLQHfbl8D/vkxAczH990ySTUBvh2IvmmVOQGrdx2bnOE9As5kWTxoGUECxRMnqwG9QQK/ve4Zn2VBArZouIg5DUUCrReG9tKxRQKnwk1lbFlJAp5tG9QGAUkClRvmQqOlSQKPxqyxPU1NAoJxeyPW8U0CeRxFknCZUQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"gkt6137CDz8AAAAAAAAAAIBLetd+wg8/AAAAAAAAAACDS3rXfsIPP3tLetd+wi8/Mm+sRo/ZMz+juJsh39FHP8ymAupWxk0/FAKL/C7KWz9n1EbzQshcP27PPSbVUmc/gMo0WWfdcT/X2o4oUBN3P5qED+PlhH4/iEFoPaPXhD9ktfeGWKyKP14abGnEIJA/gzTF7WSElj+8EICZMLCYPw4h2mgZ5p0/aYhJP6o2oT91yjRZZ92hP2iRn00AG6M/2E1i5n/hoz9C1DMOHwujP3z/fCPmMKQ/mpD2pp7Roz/rF3F1n0SiP7iqPEYbeKA/jJGyMiTYnD/oMnOgofGXP153Wa6DdJY/ZXJQ4RX/kD+hRnEKEU2KP8NjW0QUGYQ/Z9RG80LIfD/4ilcY8894P4rURvNCyGw/5BMkNLfVZT/rDhtnSWBgP/iKVxjzz1g/5BMkNLfVRT91yjRZZ91BPy1vrEaP2TM/LW+sRo/ZMz97S3rXfsIPP3tLetd+wg8/yEt6137CDz97S3rXfsIPPw==\",\"dtype\":\"float64\",\"shape\":[50]}}},\"id\":\"befebc97-201e-4ef4-96b8-5dced6f3c791\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"3b633d16-65d9-4bc9-9b7c-539d59149a47\",\"type\":\"BasicTicker\"},{\"attributes\":{\"formatter\":{\"id\":\"ece7fbf7-c45e-41e3-870e-9efef8e17e7f\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"998419a7-4fd4-44bf-b513-2ac7e522ded1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"219253ea-029d-4ea4-b935-0e550c022a90\",\"type\":\"BasicTicker\"}},\"id\":\"270d0b0b-5230-4d82-9116-22dbd6d7e021\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"9d0f3dd3-0e80-4696-b726-ebfd96e4672b\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"8eb7c765-2936-499e-9b82-e91a125818ff\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"children\":[{\"id\":\"9a0ada07-ddff-4a85-afcb-ecdc3907d734\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"7e3c75ab-850e-44b4-9b1b-7e38dc300857\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"00a1550c-1fbc-4199-8d9a-a37fd8c1d787\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"d549b79c-6363-442c-b487-c05fb6efb5e8\",\"type\":\"PanTool\"},{\"attributes\":{\"plot\":{\"id\":\"7e3c75ab-850e-44b4-9b1b-7e38dc300857\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fdb5e0cc-9187-42d6-8f64-230548ea68a1\",\"type\":\"BasicTicker\"}},\"id\":\"84e7484e-d4a2-437d-957c-e77df05c538d\",\"type\":\"Grid\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"59069d9e-2e7f-41b5-ad87-f823049b35fc\",\"type\":\"Quad\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"46a059a1-a5bb-4b38-91b8-67584670738a\",\"type\":\"PanTool\"},{\"id\":\"f6f2acd6-bf0c-4830-a4bf-acfa38c390e0\",\"type\":\"WheelZoomTool\"},{\"id\":\"df6d610a-a6b6-4ddf-a59b-c41ee5dc4214\",\"type\":\"BoxZoomTool\"},{\"id\":\"6b29682f-1e3f-4cdf-a224-69138ec26ff0\",\"type\":\"SaveTool\"},{\"id\":\"c328e506-9c5e-458a-a875-e31b316ea092\",\"type\":\"ResetTool\"},{\"id\":\"08aa80ac-9f65-4aa7-a93b-58de5943bebe\",\"type\":\"HelpTool\"}]},\"id\":\"0bdc5034-4e32-48a9-9e6f-20f0bf4c44c6\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"9fb6d408-c50a-48ca-92f6-8d66da17038f\",\"type\":\"LinearScale\"}],\"root_ids\":[\"2f89ce43-f2b6-488f-9d23-a9b33ca1e9cb\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.13\"}};\n", " var render_items = [{\"docid\":\"84f5f526-3519-41de-9d90-f270e8f3f58e\",\"elementid\":\"26af3b13-435f-4d46-91c3-a7b2ed9716d1\",\"modelid\":\"2f89ce43-f2b6-488f-9d23-a9b33ca1e9cb\"}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "2f89ce43-f2b6-488f-9d23-a9b33ca1e9cb" } }, "output_type": "display_data" } ], "source": [ "import scipy.stats\n", "\n", "w, h = 350, 300\n", "\n", "dists = [\n", " scipy.stats.expon(scale=100), # the frozed uniform distribution\n", " scipy.stats.norm(loc=40, scale=10), # the frozed uniform distribution\n", " scipy.stats.uniform(loc=20, scale=100), # the frozed uniform distribution\n", " scipy.stats.beta(2,2,loc=20, scale=100) # the frozed uniform distribution\n", "]\n", "\n", "figs = []\n", "for dist in dists:\n", " hist, edges = np.histogram(dist.rvs(int(1e4)), density=True, bins=50)\n", " p = bk.figure(plot_width=w, plot_height=h)\n", " p.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:])\n", " figs.append(p)\n", "\n", "bk.show(bk.gridplot([[figs[0], figs[1]],\n", " [figs[2], figs[3]] \n", " ]))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 5 folds for each of 10 candidates, totalling 50 fits\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear ....\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear ....\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear ....\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear, total= 0.0s\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear .....\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear, total= 0.0s\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear ...\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear, total= 0.0s\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear ...\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear .....\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear .....\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear, total= 0.0s\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear, total= 0.0s\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear, total= 0.0s\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear ...\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear, total= 0.0s\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear ...\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear ....\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear ...\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear, total= 0.0s\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear ....\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear, total= 0.0s\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear, total= 0.0s\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear, total= 0.0s\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear, total= 0.0s\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear .....\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear ....\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear ....\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf .........\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf .........\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear, total= 0.0s\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf .........\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear ....\n", "[CV] C=17.155859565449827, gamma=1.6913486247050757, kernel=linear, total= 0.0s\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf .........\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf, total= 0.0s\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear, total= 0.0s\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear .....\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf .........\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear, total= 0.0s\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf .......\n", "[CV] C=93.31554616176741, gamma=1.3888061075606983, kernel=linear, total= 0.0s\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf, total= 0.0s\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf, total= 0.0s\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf, total= 0.0s\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf, total= 0.0s\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear ....\n", "[CV] C=55.93446930891519, gamma=3.894385938747857, kernel=linear, total= 0.0s\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear .....\n", "[CV] C=48.06153787597535, gamma=8.83503861242045, kernel=rbf, total= 0.0s\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf .......\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear, total= 0.0s\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear .....\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf, total= 0.0s\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear, total= 0.0s\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear .....\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear, total= 0.0s\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear, total= 0.0s\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear .....\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear, total= 0.0s\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear .....\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear ....\n", "[CV] C=66.95572367936933, gamma=9.537084781812451, kernel=linear, total= 0.0s\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf .........\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf, total= 0.0s\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf .........\n", "[CV] C=26.414479945822865, gamma=8.461920981407586, kernel=linear, total= 0.0s\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf, total= 0.0s\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf .........\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf, total= 0.0s\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf .........\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf, total= 0.0s\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf .........\n", "[CV] C=83.3401698120732, gamma=6.423318313980214, kernel=rbf, total= 0.0s\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf ..........\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf, total= 0.0s\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf ..........\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf, total= 0.0s\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf ..........\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf, total= 0.0s\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf ..........\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf, total= 0.0s\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf ..........\n", "[CV] C=68.48252946299827, gamma=9.5154416062423, kernel=rbf, total= 0.0s\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear ......\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear, total= 0.0s\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear ......\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear, total= 0.0s\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear ......\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear, total= 0.0s\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear ......\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear, total= 0.0s\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear ......\n", "[CV] C=60.95882351047934, gamma=8.31572018382552, kernel=linear, total= 0.0s\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf .......\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf, total= 0.0s\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf .......\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf, total= 0.0s\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf .......\n", "[CV] C=3.4384495595874522, gamma=5.027487326691249, kernel=rbf, total= 0.0s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[Parallel(n_jobs=-1)]: Done 50 out of 50 | elapsed: 0.1s finished\n" ] }, { "data": { "text/plain": [ "RandomizedSearchCV(cv=5, error_score='raise',\n", " estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False),\n", " fit_params=None, iid=True, n_iter=10, n_jobs=-1,\n", " param_distributions={'C': , 'kernel': ['linear', 'rbf'], 'gamma': },\n", " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", " return_train_score='warn', scoring=None, verbose=2)" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Standardize the data\n", "iris = datasets.load_iris()\n", "scaler = preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)\n", "X = scaler.fit_transform(iris.data)\n", "# Keep out the Test Set\n", "X_tr, X_test, y_tr, y_test = model_selection.train_test_split(X, iris.target,\n", " test_size=0.30, random_state=0)\n", "# Define the Search Grid\n", "param_grid = {'C': scipy.stats.uniform(loc=1, scale=100), 'kernel': ['linear','rbf'], \n", " 'gamma': scipy.stats.uniform(loc=0.01, scale=10)}\n", "# GridSearchCV\n", "clf = model_selection.RandomizedSearchCV(svm.SVC(), param_grid, cv=5, n_jobs=-1, verbose=2, n_iter=10)\n", "clf.fit(X_tr, y_tr)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "mean: 0.962, std: 0.0360, params: {'C': 26.414479945822865, 'gamma': 8.461920981407586, 'kernel': 'linear'}\n", "mean: 0.962, std: 0.0360, params: {'C': 55.93446930891519, 'gamma': 3.894385938747857, 'kernel': 'linear'}\n", "mean: 0.943, std: 0.0348, params: {'C': 17.155859565449827, 'gamma': 1.6913486247050757, 'kernel': 'linear'}\n", "mean: 0.962, std: 0.0360, params: {'C': 93.31554616176741, 'gamma': 1.3888061075606983, 'kernel': 'linear'}\n", "mean: 0.857, std: 0.0813, params: {'C': 48.06153787597535, 'gamma': 8.83503861242045, 'kernel': 'rbf'}\n", "mean: 0.962, std: 0.0360, params: {'C': 66.95572367936933, 'gamma': 9.537084781812451, 'kernel': 'linear'}\n", "mean: 0.895, std: 0.0676, params: {'C': 83.3401698120732, 'gamma': 6.423318313980214, 'kernel': 'rbf'}\n", "mean: 0.857, std: 0.0813, params: {'C': 68.48252946299827, 'gamma': 9.5154416062423, 'kernel': 'rbf'}\n", "mean: 0.962, std: 0.0360, params: {'C': 60.95882351047934, 'gamma': 8.31572018382552, 'kernel': 'linear'}\n", "mean: 0.895, std: 0.0738, params: {'C': 3.4384495595874522, 'gamma': 5.027487326691249, 'kernel': 'rbf'}\n" ] } ], "source": [ "for a,b,c in zip(clf.cv_results_['mean_test_score'], \n", " clf.cv_results_['std_test_score'], \n", " clf.cv_results_['params']):\n", " print('mean: {:.3f}, std: {:.4f}, params: {}'.format(a,b,c))" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best estimator: SVC(C=26.414479945822865, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma=8.461920981407586,\n", " kernel='linear', max_iter=-1, probability=False, random_state=None,\n", " shrinking=True, tol=0.001, verbose=False)\n", "Accuracy: 0.96 (+/- 0.18)\n" ] } ], "source": [ "best = clf.best_estimator_\n", "print('Best estimator: ', best)\n", "scores = model_selection.cross_val_score(best, X_test, y_test, cv=10)\n", "print(\"Accuracy: %0.2f (+/- %0.2f)\" % (scores.mean(), scores.std() * 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 9 Pipelines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we applied different preprocessing techniques, such as standardization for feature scaling or principal component analysis you learned that we have to reuse the parameters that were obtained during the fitting of the training data to scale and compress any new data, for example, the samples in the separate test dataset.\n", "\n", "In this section, you will learn about an extremely handy tool, the Pipeline class in scikit-learn. It allows us to fit a model including an arbitrary number of transformation steps and apply it to make predictions about new data.\n", "\n", "In this chapter, we will be working with the Breast Cancer Wisconsin dataset, which contains 569 samples of malignant and benign tumor cells. The first two columns in the dataset store the unique ID numbers of the samples and the corresponding diagnosis (M=malignant, B=benign), respectively. The columns 3-32 contain 30 real-value features that have been computed from digitized images of the cell nuclei, which can be used to build a model to predict whether a tumor is benign or malignant. The Breast Cancer Wisconsin dataset has been deposited on the UCI\n", "machine learning repository and more detailed information about this dataset can be found at [https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)](https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic))\n", "\n", "In this section we will read in the dataset, and split it into training and test datasets in three simple steps.\n", "\n", "- We will start by reading in the dataset directly from the UCI website using pandas:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd\n", "df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data', \n", " header=None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Next, we assign the 30 features to a NumPy array X . Using LabelEncoder, we transform the class labels from their original string representation ( M and B ) into integers:" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.preprocessing import LabelEncoder\n", "X = df.loc[:, 2:].values\n", "y = df.loc[:, 1].values\n", "le = LabelEncoder()\n", "y = le.fit_transform(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After encoding the class labels (diagnosis) in an array y , the malignant\n", "tumors are now represented as class 1 , and the benign tumors are\n", "represented as class 0 , respectively, which we can illustrate by calling\n", "the transform method of LabelEncoder on two dummy class labels:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 0])" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "le.transform(['M', 'B'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Before we construct our first model pipeline in the following subsection, let's divide the dataset into a separate training dataset (80 percent of the data) and a separate test dataset (20 percent of the data):" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Many learning algorithms require input features on the same scale for optimal performance. Thus, we need to standardize the columns in the Breast Cancer Wisconsin dataset before we can feed them to a linear classifier, such as logistic regression. Furthermore, let's assume that we want to compress our data from the initial 30 dimensions onto a lower two-dimensional subspace via principal component analysis (PCA). Instead of going through the fitting and transformation steps for the training and test dataset separately, we can chain the StandardScaler, PCA , and LogisticRegression objects in a pipeline:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test Accuracy: 0.947\n" ] } ], "source": [ "from sklearn.preprocessing import StandardScaler\n", "from sklearn.decomposition import PCA\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.pipeline import Pipeline\n", "pipe_lr = Pipeline([('scl', StandardScaler()), ('pca', PCA(n_components=2)), \n", " ('clf', LogisticRegression(random_state=1))])\n", "pipe_lr.fit(X_train, y_train)\n", "print('Test Accuracy: %.3f' % pipe_lr.score(X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The intermediate steps in a pipeline constitute scikit-learn transformers, and the last step is an estimator. In the preceding code example, we built a pipeline that consisted of two intermediate steps, a StandardScaler and a PCA transformer, and a logistic regression classifier as a final estimator. When we executed the fit method on the pipeline pipe_lr , the StandardScaler performed fit and transform on the training data, and the transformed training data was then passed onto the next object in the pipeline, the PCA. Similar to the previous step, PCA also executed fit and transform on the scaled input data and passed it to the final element of the pipeline, the estimator. We should note that there is no limit to the number of intermediate steps in this pipeline. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 10 Performance Metrics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the previous sections and chapters, we evaluated our models using the mean squared error, which is a useful metric to quantify the performance of a model in general. However, there are several other performance metrics that can be used to measure a model's relevance, such as precision, recall, and the F1-score.\n", "\n", "Before we get into the details of different scoring metrics, let's print a so-called confusion matrix, a matrix that lays out the performance of a learning algorithm. The confusion matrix is simply a square matrix that reports the counts of the true positive, true negative, false positive, and false negative predictions of a classifier.\n", "\n", "Although these metrics can be easily computed manually by comparing the true and predicted class labels, cikit-learn provides a convenient confusion_matrix function that we can use as follows:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[71 1]\n", " [ 5 37]]\n" ] } ], "source": [ "from sklearn.metrics import confusion_matrix\n", "y_pred = pipe_lr.predict(X_test)\n", "confmat = confusion_matrix(y_true=y_test, y_pred=y_pred)\n", "print(confmat)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The array that was returned after executing the preceding code provides us with information about the different types of errors the classifier made on the test dataset that we can map onto the confusion matrix illustration in the previous figure using matplotlib's matshow function:" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVgAAAFYCAYAAAAWbORAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAEMJJREFUeJzt3XuwHQV9wPHvj5vyDIRHkmLkYcRABESUQBFCMIWQgCiiaIkwiqCMhWrVWsXRYqltrR3aStWqQRiYqlDQtlIQ5VEQCa8kKi+BkQJKjEAAgZAaSeDXP7KJt5Hce8LcXzZn+X5mmLtnz56zvzA33+zdc/bcyEwkSSNvo7YHkKSuMrCSVMTASlIRAytJRQysJBUxsJJUxMD2mYiYFRH3RMS9EXFa2/Oo/0XEuRHxSETc0fYsXWNg+0hEDABfBA4HdgdmR8Tu7U6lDjgPmNX2EF1kYPvLfsC9mXlfZj4DXAgc1fJM6nOZeR3weNtzdJGB7S8vBR4cdHths07SBsjA9pd4nnVe6yxtoAxsf1kI7Djo9g7AopZmkTQMA9tf5gGTImJiRGwMHAtc0vJMktbCwPaRzFwB/AnwPeAu4KLMvLPdqdTvIuIC4EZgt4hYGBEntT1TV4QfVyhJNTyClaQiBlaSihhYSSpiYCWpiIGVpCIGtg9FxMltz6Du8ftq5BnY/uRfBFXw+2qEGVhJKrJBXWgwZuttcvz2E9oeY4P35BO/YszW27Q9Rl8YM3qztkfoG4sXL2bcuHFtj9EXFixY8GhmDvs/a9T6GKZX47efwFlzLmx7DHXIzKmvansEddCogfhZL9t5ikCSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIqPaHkBDW/jz+/m7Mz66+vZDixZy/ImnsN3Y3+cb532JB392H//05W8wafIeLU6pfvaek07ksssuZfz48dx62x1tj9MppUewETErIu6JiHsj4rTKfXXVDjtN5AvnXMwXzrmYs+ZcyCabbsoBBx3CzhNfwSc+/Y/s+ep92h5Rfe6d7zqBy77z3bbH6KSyI9iIGAC+CMwAFgLzIuKSzPxJ1T677tYf3sxLJuzI+O0ntD2KOmTatGk88MADbY/RSZVHsPsB92bmfZn5DHAhcFTh/jrvuqu/y8GHHN72GJJ6VBnYlwIPDrq9sFmnF2D58uXcfMO1TH39YW2PIqlHlYGN51mXv7NRxMkRMT8i5j/5xK8Kx+lv82++nl0mvZJttt2u7VEk9agysAuBHQfd3gFYtOZGmTknM6dk5pQxW29TOE5/u+7qyz09IPWZysDOAyZFxMSI2Bg4FrikcH+dtWzZr/nR/Bs5YNohq9fdcN3VvPOYQ7nrzlv5y9NO5S8+8r4WJ1Q/O+4ds5l64Ou455572HmnHTj3nHPaHqkzIvN3fmofuSePOAL4HDAAnJuZfzPU9pMm75FnzbmwbB69+Myc+qq2R1AHjRqIBZk5ZdjtKofIzO8A36nchyRtqLxUVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJamIgZWkIgZWkooYWEkqYmAlqYiBlaQiBlaSihhYSSpiYCWpiIGVpCKj1nZHRCwBctXN5ms2y5mZWxXPJkl9ba2Bzcwt1+cgktQ1PZ0iiIipEfHuZnlsREysHUuS+t+wgY2ITwEfAz7erNoY+FrlUJLUBb0cwR4NvAlYCpCZiwBPH0jSMHoJ7DOZmTQveEXEFrUjSVI39BLYiyLiK8DWEfFe4Crg7NqxJKn/rfVdBKtk5pkRMQN4CtgVOD0zryyfTJL63LCBbdwObMbK0wS3140jSd3Ry7sI3gPcArwFOAa4KSJOrB5MkvpdL0ewfw68JjMfA4iI7YAbgHMrB5OkftfLi1wLgSWDbi8BHqwZR5K6Y6jPIvhws/gL4OaI+DYrz8EexcpTBpKkIQx1imDVxQT/0/y3yrfrxpGk7hjqw17OWJ+DSFLXDPsiV0SMAz4K7AFsump9Zv5h4VyS1Pd6eZHr68DdwETgDOABYF7hTJLUCb0EdrvMPAdYnpnfz8wTgf2L55KkvtfL+2CXN19/GRFvABYBO9SNJEnd0Etg/zoixgB/Bnwe2Ar4UOlUktQBvXzYy6XN4pPA9NpxJKk7hrrQ4PP89pce/o7M/MBID7PVFptx6AF7jPTT6kXszoeWDL+RVGSoI9j5620KSeqgoS40OH99DiJJXdPTb5WVJK07AytJRQysJBXp5Tca7BoRV0fEHc3tvSLik/WjSVJ/6+UI9mzg4zRXdGXmbcCxlUNJUhf0EtjNM3PND9heUTGMJHVJL4F9NCJ2obnoICKOAX5ZOpUkdUAvn0VwKjAHmBwRvwDuB44vnUqSOqCXzyK4Dzg0IrYANspMrz2UpB708hsNTl/jNgCZ+VdFM0lSJ/RyimDpoOVNgSOBu2rGkaTu6OUUwT8Mvh0RZwKXlE0kSR3xQq7k2hx4+UgPIkld08s52Nv57efCDgDjAM+/StIwejkHe+Sg5RXAw5nphQaSNIwhAxsRGwGXZeae62keSeqMIc/BZuZzwK0RsdN6mkeSOqOXUwQvAe6MiFsY9JatzHxT2VSS1AG9BPaM8ikkqYN6CewRmfmxwSsi4rPA92tGkqRu6OV9sDOeZ93hIz2IJHXNWo9gI+KPgVOAl0fEbYPu2hKYWz2YJPW7oU4RfAO4HPgMcNqg9Usy8/HSqSSpA9Ya2Mx8EngSmL3+xpGk7vC3ykpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUZ1fYAWje7vuLljB69JQMDA4waNYobb76l7ZHUZ36zbBnvfusslv/mGVY8u4IZbziKUz7yCU44eib/+/TTADz+2GL23HsfPnfuBS1P29/KAhsR5wJHAo9k5p5V+3kxuuKqqxk7dmzbY6hPbbzJJnz1okvZfIvRLF++nBOOPoyp02dw3n98b/U2H37v8Uw/7IgWp+yGylME5wGzCp9f0gsQEWy+xWgAVqxYzorlKyBi9f1Ln17CLXOvY/qsI9sasTPKApuZ1wGPVz3/i1YEbzh8Fvvvty9fPXtO29OoTz377LO8fcaBTN9rF/afNp29Xrvv6vv++/L/4g8OPJjRW27V4oTd4DnYPnPt93/AhAkTeOSRRzhi1kx2mzyZgw6a1vZY6jMDAwNcdOVcnnryCT500nH89O6fMGny7gBc/u1v8pbZ72p5wm5o/V0EEXFyRMyPiPmPPrq47XE2eBMmTABg/PjxHPXmNzNv3ryWJ1I/22rM1ux7wFRuuPYqAJ54/DHu+NECDjpkZsuTdUPrgc3MOZk5JTOnjB07ru1xNmhLly5lyZIlq5evuvJK9thjj5anUr95/LFHeerJJwBY9utfc9MPruVlu0wC4IpL/5Nph85ik003bXPEzvAUQR95+OGHefsxbwVgxbMrOPbY2cyc6euIWjePPvwQn/zg+3juuWd57rnnOOyNR3PwjMMB+N4l3+LEUz/U8oTdEZlZ88QRFwCvB8YCDwOfysxzhnrMPvtMSd/XqZF09yNL2x5BHfTql261IDOnDLdd2RFsZs6uem5J6getn4OVpK4ysJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVMTASlIRAytJRQysJBUxsJJUxMBKUhEDK0lFDKwkFTGwklTEwEpSEQMrSUUMrCQVMbCSVCQys+0ZVouIxcDP2p6jD4wFHm17CHWO31e92zkzxw230QYVWPUmIuZn5pS251C3+H018jxFIElFDKwkFTGw/WlO2wOsLxHxdPN1QkR8c5htPxgRm6/j878+Ii7tdf0a25wQEV9Yx/09EBFj1+Ux69GL5vtqfTGwfSgz+/ovQkQMrOtjMnNRZh4zzGYfBNYpsPqtfv++2hAZWI2YiHhZRNwdEedHxG0R8c1VR5TNkdvpEXE98LaI2CUivhsRCyLiBxExudluYkTcGBHzIuLTazz3Hc3yQEScGRG3N/t5f0R8AJgAXBMR1zTbHdY81w8j4uKIGN2sn9XMeT3wlh7+XPtFxA0R8aPm626D7t6x+XPcExGfGvSY4yPiloj4cUR85YX8o6L+Z2A10nYD5mTmXsBTwCmD7luWmVMz80JW/jj6/szcB/gI8C/NNmcBX8rMfYGH1rKPk4GJwGua/Xw9M/8ZWARMz8zpzY/hnwQOzczXAvOBD0fEpsDZwBuBg4Dte/gz3Q1My8zXAKcDfzvovv2A44C9WfkPx5SIeCXwR8CBmbk38GyzjV5kRrU9gDrnwcyc2yx/DfgAcGZz+98AmiPJA4CLI2LV4zZpvh4IvLVZ/lfgs8+zj0OBL2fmCoDMfPx5ttkf2B2Y2+xjY+BGYDJwf2b+tJnla6wM9lDGAOdHxCQggd8bdN+VmflY81z/DkwFVgD7APOafW8GPDLMPtRBBlYjbc03Vg++vbT5uhHwRHN018tzrCl63ObKzJz9/1ZG7N3DY9f0aeCazDw6Il4GXDvovuf78wZwfmZ+fB33o47xFIFG2k4R8bpmeTZw/ZobZOZTwP0R8TaAWOnVzd1zgWOb5bX9WH0F8L6IGNU8fttm/RJgy2b5JuDAiHhFs83mEbErK3/cnxgRuwyacThjgF80yyescd+MiNg2IjYD3tzMfzVwTESMXzVfROzcw37UMQZWI+0u4F0RcRuwLfCltWx3HHBSRNwK3Akc1az/U+DUiJjHyrA9n68CPwduax7/jmb9HODyiLgmMxezMoYXNLPcBEzOzGWsPCVwWfMiVy+XZv898JmImAus+WLV9aw8lfFj4FuZOT8zf8LK879XNPu+EnhJD/tRx3iprEZM8+PzpZm5Z8ujSBsEj2AlqYhHsJJUxCNYSSpiYCWpiIGVpCIGVpKKGFhJKmJgJanI/wGvVlNNTBFl+AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(5.5, 5.5))\n", "ax.matshow(confmat, cmap=plt.cm.Blues, alpha=0.3)\n", "for i in range(confmat.shape[0]):\n", " for j in range(confmat.shape[1]):\n", " ax.text(x=j, y=i,\n", " s=confmat[i, j],\n", " va='center', ha='center')\n", "plt.xlabel('predicted label')\n", "plt.ylabel('true label')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assuming that class 1 (malignant) is the positive class in this example, our model correctly classified 71 of the samples that belong to class 0 (false negatives) and 37 samples that belong to class 1 (true positives), respectively. However, our model also incorrectly misclassified 5 samples from class 0 as class 1 (false negatives), and it predicted that 1 sample is benign although it is a malignant tumor (false positive). In the next section, we will learn how we can use this information to calculate various different error metrics.\n", "\n", "Both the prediction error (ERR) and accuracy (ACC) provide general information about how many samples are misclassified. The error can be understood as the sum of all false predictions divided by the number of total predictions, and the accuracy is calculated as the sum of correct predictions divided by the total number\n", "of predictions, respectively:\n", "\n", "$$ERR = \\frac{FP + FN}{Total}$$\n", "\n", "The prediction accuracy can then be calculated directly from the error:\n", "\n", "$$ACC = \\frac{TP + TN}{Total} = 1 − ERR$$\n", "\n", "In tumor diagnosis, for example, we are more concerned about the detection of malignant tumors in order to help a patient with the appropriate treatment. However, it is also important to decrease the number of benign tumors that were incorrectly classified as malignant (false positives) to not unnecessarily concern a patient. \n", "\n", "Precision (P) is defined as the number of true positives ($T_p$) over the number of true positives plus the number of false positives ($F_p$).\n", "\n", "$$P = \\frac{T_p}{T_p+F_p}$$\n", "\n", "Recall (R) is defined as the number of true positives ($T_p$) over the number of true positives plus the number of false negatives ($F_n$).\n", "\n", "$$R = \\frac{T_p}{T_p + F_n}$$\n", "\n", "These quantities are also related to the ($F_1$) score, which is defined as the harmonic mean of precision and recall.\n", "\n", "$$F_1 = 2\\frac{P \\times R}{P+R}$$\n", "\n", "It is important to note that the precision may not decrease with recall. The definition of precision ($\\frac{T_p}{T_p + F_p}$) shows that lowering the threshold of a classifier may increase the denominator, by increasing the number of results returned. If the threshold was previously set too high, the new results may all be true positives, which will increase precision. If the previous threshold was about right or too low, further lowering the threshold will introduce false positives, decreasing precision.\n", "\n", "Recall is defined as $\\frac{T_p}{T_p+F_n}$, where $T_p+F_n$ does not depend on the classifier threshold. This means that lowering the classifier threshold may increase recall, by increasing the number of true positive results. It is also possible that lowering the threshold may leave recall unchanged, while the precision fluctuates.\n", "\n", "These scoring metrics are all implemented in scikit-learn and can be imported from the sklearn.metrics module:" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision: 0.974\n", "Recall: 0.881\n", "F1: 0.925\n" ] } ], "source": [ "from sklearn.metrics import precision_score\n", "from sklearn.metrics import recall_score, f1_score\n", "print('Precision: %.3f' % precision_score(y_true=y_test, y_pred=y_pred))\n", "print('Recall: %.3f' % recall_score(y_true=y_test, y_pred=y_pred))\n", "print('F1: %.3f' % f1_score(y_true=y_test, y_pred=y_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "Visit [www.add-for.com]() for more tutorials and updates.\n", "\n", "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda env:addfor_tutorials]", "language": "python", "name": "conda-env-addfor_tutorials-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" } }, "nbformat": 4, "nbformat_minor": 1 }