├── LICENSE
├── README.md
├── VennABERS.py
└── test
└── VennABERS_test.ipynb
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Paolo Toccaceli, Royal Holloway, Univ. of London
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Venn-ABERS Predictor
2 | *(Preliminary documentation)*
3 |
4 | The `VennABERS.py` file is a pure Python implementation of the fast Venn-ABERS Predictor described in
5 | [Vovk2015](http://alrw.net/articles/13.pdf).
6 |
7 | A Venn-ABERS predictor outputs two probability predictions for every test object.
8 | In particular, the Venn-ABERS predictor implemented here is the inductive form of probability predictor, which relies on a calibration set.
9 | In a nutshell, the Venn-ABERS predictor can be viewed as a distribution-free calibration function that maps scores output by a *scoring classifier* to well-calibrated probabilities.
10 | A gentle introduction can be found in this [tutorial](https://cml.rhul.ac.uk/people/ptocca/HomePage/Toccaceli_CP___Venn_Tutorial.pdf).
11 |
12 | The function that implements the Venn-ABERS Predictor is `ScoresToMultiProbs()`.
13 |
14 | ```python
15 | p0,p1 = ScoresToMultiProbs(calibrPts,testScores)
16 | ```
17 |
18 | calibrPts: a list of pairs (score,label) corresponding to the scores and labels of the calibration examples. The score is a float and the label is an integer meant to take values 0 or 1.
19 |
20 | testScores: a list of floats corresponding to the scores for the test objects.
21 |
22 | The function returns a pair of Numpy arrays with the probabilistic predictions.
23 |
24 | ## Version History
25 | - 0.1 - Initial implementation
26 | - 0.2 - 2020-07 Fixed bug affecting p_0 calculation, added test notebook
27 |
28 | ## Acknowlegdements
29 | * Work done with funding from the European Union`s Horizon 2020 Research and Innovation programme under Grant Agreement no. 671555 (ExCAPE).
30 | * We are grateful for the help in conducting experiments to the Ministry of Education, Youth and Sports (Czech Republic) that supports the Large Infrastructures for Research, Experimental Development and Innovations project "IT4Innovations National Supercomputing Center - LM2015070".
31 |
--------------------------------------------------------------------------------
/VennABERS.py:
--------------------------------------------------------------------------------
1 | # Straight-forward implementation of IVAP algorithm described in:
2 | # Large-scale probabilistic prediction with and without validity guarantees, Vovk et al.
3 | # https://arxiv.org/pdf/1511.00213.pdf
4 | #
5 | # Paolo Toccaceli
6 | #
7 | # https://github.com/ptocca/VennABERS
8 | #
9 | # 2020-07-09: Fixed bug in p0 calculation
10 |
11 | import numpy as np
12 |
13 | # Some elementary functions to speak the same language as the paper
14 | # (at some point we'll just replace the occurrence of the calls with the function body itself)
15 | def push(x,stack):
16 | stack.append(x)
17 |
18 |
19 | def pop(stack):
20 | return stack.pop()
21 |
22 |
23 | def top(stack):
24 | return stack[-1]
25 |
26 |
27 | def nextToTop(stack):
28 | return stack[-2]
29 |
30 |
31 | # perhaps inefficient but clear implementation
32 | def nonleftTurn(a,b,c):
33 | d1 = b-a
34 | d2 = c-b
35 | return np.cross(d1,d2)<=0
36 |
37 |
38 | def nonrightTurn(a,b,c):
39 | d1 = b-a
40 | d2 = c-b
41 | return np.cross(d1,d2)>=0
42 |
43 |
44 | def slope(a,b):
45 | ax,ay = a
46 | bx,by = b
47 | return (by-ay)/(bx-ax)
48 |
49 |
50 | def notBelow(t,p1,p2):
51 | p1x,p1y = p1
52 | p2x,p2y = p2
53 | tx,ty = t
54 | m = (p2y-p1y)/(p2x-p1x)
55 | b = (p2x*p1y - p1x*p2y)/(p2x-p1x)
56 | return (ty >= tx*m+b)
57 |
58 | kPrime = None
59 |
60 | # Because we cannot have negative indices in Python (they have another meaning), I use a dictionary
61 |
62 | def algorithm1(P):
63 | global kPrime
64 |
65 | S = []
66 | P[-1] = np.array((-1,-1))
67 | push(P[-1],S)
68 | push(P[0],S)
69 | for i in range(1,kPrime+1):
70 | while len(S)>1 and nonleftTurn(nextToTop(S),top(S),P[i]):
71 | pop(S)
72 | push(P[i],S)
73 | return S
74 |
75 |
76 | def algorithm2(P,S):
77 | global kPrime
78 |
79 | Sprime = S[::-1] # reverse the stack
80 |
81 | F1 = np.zeros((kPrime+1,))
82 | for i in range(1,kPrime+1):
83 | F1[i] = slope(top(Sprime),nextToTop(Sprime))
84 | P[i-1] = P[i-2]+P[i]-P[i-1]
85 | if notBelow(P[i-1],top(Sprime),nextToTop(Sprime)):
86 | continue
87 | pop(Sprime)
88 | while len(Sprime)>1 and nonleftTurn(P[i-1],top(Sprime),nextToTop(Sprime)):
89 | pop(Sprime)
90 | push(P[i-1],Sprime)
91 | return F1
92 |
93 |
94 | def algorithm3(P):
95 | global kPrime
96 |
97 | S = []
98 | push(P[kPrime+1],S)
99 | push(P[kPrime],S)
100 | for i in range(kPrime-1,0-1,-1): # k'-1,k'-2,...,0
101 | while len(S)>1 and nonrightTurn(nextToTop(S),top(S),P[i]):
102 | pop(S)
103 | push(P[i],S)
104 | return S
105 |
106 |
107 | def algorithm4(P,S):
108 | global kPrime
109 |
110 | Sprime = S[::-1] # reverse the stack
111 |
112 | F0 = np.zeros((kPrime+1,))
113 | for i in range(kPrime,1-1,-1): # k',k'-1,...,1
114 | F0[i] = slope(top(Sprime),nextToTop(Sprime))
115 | P[i] = P[i-1]+P[i+1]-P[i]
116 | if notBelow(P[i],top(Sprime),nextToTop(Sprime)):
117 | continue
118 | pop(Sprime)
119 | while len(Sprime)>1 and nonrightTurn(P[i],top(Sprime),nextToTop(Sprime)):
120 | pop(Sprime)
121 | push(P[i],Sprime)
122 | return F0
123 |
124 |
125 | def prepareData(calibrPoints):
126 | global kPrime
127 |
128 | ptsSorted = sorted(calibrPoints)
129 |
130 | xs = np.fromiter((p[0] for p in ptsSorted),float)
131 | ys = np.fromiter((p[1] for p in ptsSorted),float)
132 | ptsUnique,ptsIndex,ptsInverse,ptsCounts = np.unique(xs,
133 | return_index=True,
134 | return_counts=True,
135 | return_inverse=True)
136 | a = np.zeros(ptsUnique.shape)
137 | np.add.at(a,ptsInverse,ys)
138 | # now a contains the sums of ys for each unique value of the objects
139 |
140 | w = ptsCounts
141 | yPrime = a/w
142 | yCsd = np.cumsum(w*yPrime) # Might as well do just np.cumsum(a)
143 | xPrime = np.cumsum(w)
144 | kPrime = len(xPrime)
145 |
146 | return yPrime,yCsd,xPrime,ptsUnique
147 |
148 |
149 | def computeF(xPrime,yCsd):
150 | global kPrime
151 | P = {0:np.array((0,0))}
152 | P.update({i+1:np.array((k,v)) for i,(k,v) in enumerate(zip(xPrime,yCsd))})
153 |
154 | S = algorithm1(P)
155 | F1 = algorithm2(P,S)
156 |
157 | P = {0:np.array((0,0))}
158 | P.update({i+1:np.array((k,v)) for i,(k,v) in enumerate(zip(xPrime,yCsd))})
159 | P[kPrime+1] = P[kPrime] + np.array((1.0,0.0)) # The paper says (1,1)
160 |
161 | S = algorithm3(P)
162 | F0 = algorithm4(P,S)
163 |
164 | return F0,F1
165 |
166 |
167 | def getFVal(F0,F1,ptsUnique,testObjects):
168 | pos0 = np.searchsorted(ptsUnique,testObjects,side='left')
169 | pos1 = np.searchsorted(ptsUnique[:-1],testObjects,side='right')+1
170 | return F0[pos0],F1[pos1]
171 |
172 |
173 | def ScoresToMultiProbs(calibrPoints,testObjects):
174 | # sort the points, transform into unique objects, with weights and updated values
175 | yPrime,yCsd,xPrime,ptsUnique = prepareData(calibrPoints)
176 |
177 | # compute the F0 and F1 functions from the CSD
178 | F0,F1 = computeF(xPrime,yCsd)
179 |
180 | # compute the values for the given test objects
181 | p0,p1 = getFVal(F0,F1,ptsUnique,testObjects)
182 |
183 | return p0,p1
184 |
--------------------------------------------------------------------------------
/test/VennABERS_test.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Test of VennABERS fast implementation\n",
8 | "\n",
9 | "The notebook documents a test on the VennABERS implementation.\n",
10 | "\n",
11 | "The correctness is tested against the slower implementation of Venn-ABERS predictors as per the definition."
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 1,
17 | "metadata": {
18 | "ExecuteTime": {
19 | "end_time": "2020-07-09T17:31:25.395925Z",
20 | "start_time": "2020-07-09T17:31:25.345564Z"
21 | }
22 | },
23 | "outputs": [],
24 | "source": [
25 | "import numpy as np"
26 | ]
27 | },
28 | {
29 | "cell_type": "code",
30 | "execution_count": 2,
31 | "metadata": {
32 | "ExecuteTime": {
33 | "end_time": "2020-07-09T17:31:25.657895Z",
34 | "start_time": "2020-07-09T17:31:25.397149Z"
35 | }
36 | },
37 | "outputs": [],
38 | "source": [
39 | "from bokeh.plotting import figure, show\n",
40 | "from bokeh.io import output_notebook"
41 | ]
42 | },
43 | {
44 | "cell_type": "code",
45 | "execution_count": 3,
46 | "metadata": {
47 | "ExecuteTime": {
48 | "end_time": "2020-07-09T17:31:25.664465Z",
49 | "start_time": "2020-07-09T17:31:25.659249Z"
50 | }
51 | },
52 | "outputs": [
53 | {
54 | "data": {
55 | "text/html": [
56 | "\n",
57 | "
\n",
58 | "
\n",
59 | "
Loading BokehJS ...\n",
60 | "
"
61 | ]
62 | },
63 | "metadata": {},
64 | "output_type": "display_data"
65 | },
66 | {
67 | "data": {
68 | "application/javascript": [
69 | "\n",
70 | "(function(root) {\n",
71 | " function now() {\n",
72 | " return new Date();\n",
73 | " }\n",
74 | "\n",
75 | " var force = true;\n",
76 | "\n",
77 | " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
78 | " root._bokeh_onload_callbacks = [];\n",
79 | " root._bokeh_is_loading = undefined;\n",
80 | " }\n",
81 | "\n",
82 | " var JS_MIME_TYPE = 'application/javascript';\n",
83 | " var HTML_MIME_TYPE = 'text/html';\n",
84 | " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
85 | " var CLASS_NAME = 'output_bokeh rendered_html';\n",
86 | "\n",
87 | " /**\n",
88 | " * Render data to the DOM node\n",
89 | " */\n",
90 | " function render(props, node) {\n",
91 | " var script = document.createElement(\"script\");\n",
92 | " node.appendChild(script);\n",
93 | " }\n",
94 | "\n",
95 | " /**\n",
96 | " * Handle when an output is cleared or removed\n",
97 | " */\n",
98 | " function handleClearOutput(event, handle) {\n",
99 | " var cell = handle.cell;\n",
100 | "\n",
101 | " var id = cell.output_area._bokeh_element_id;\n",
102 | " var server_id = cell.output_area._bokeh_server_id;\n",
103 | " // Clean up Bokeh references\n",
104 | " if (id != null && id in Bokeh.index) {\n",
105 | " Bokeh.index[id].model.document.clear();\n",
106 | " delete Bokeh.index[id];\n",
107 | " }\n",
108 | "\n",
109 | " if (server_id !== undefined) {\n",
110 | " // Clean up Bokeh references\n",
111 | " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
112 | " cell.notebook.kernel.execute(cmd, {\n",
113 | " iopub: {\n",
114 | " output: function(msg) {\n",
115 | " var id = msg.content.text.trim();\n",
116 | " if (id in Bokeh.index) {\n",
117 | " Bokeh.index[id].model.document.clear();\n",
118 | " delete Bokeh.index[id];\n",
119 | " }\n",
120 | " }\n",
121 | " }\n",
122 | " });\n",
123 | " // Destroy server and session\n",
124 | " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
125 | " cell.notebook.kernel.execute(cmd);\n",
126 | " }\n",
127 | " }\n",
128 | "\n",
129 | " /**\n",
130 | " * Handle when a new output is added\n",
131 | " */\n",
132 | " function handleAddOutput(event, handle) {\n",
133 | " var output_area = handle.output_area;\n",
134 | " var output = handle.output;\n",
135 | "\n",
136 | " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
137 | " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n",
138 | " return\n",
139 | " }\n",
140 | "\n",
141 | " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
142 | "\n",
143 | " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
144 | " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
145 | " // store reference to embed id on output_area\n",
146 | " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
147 | " }\n",
148 | " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
149 | " var bk_div = document.createElement(\"div\");\n",
150 | " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
151 | " var script_attrs = bk_div.children[0].attributes;\n",
152 | " for (var i = 0; i < script_attrs.length; i++) {\n",
153 | " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
154 | " }\n",
155 | " // store reference to server id on output_area\n",
156 | " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
157 | " }\n",
158 | " }\n",
159 | "\n",
160 | " function register_renderer(events, OutputArea) {\n",
161 | "\n",
162 | " function append_mime(data, metadata, element) {\n",
163 | " // create a DOM node to render to\n",
164 | " var toinsert = this.create_output_subarea(\n",
165 | " metadata,\n",
166 | " CLASS_NAME,\n",
167 | " EXEC_MIME_TYPE\n",
168 | " );\n",
169 | " this.keyboard_manager.register_events(toinsert);\n",
170 | " // Render to node\n",
171 | " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
172 | " render(props, toinsert[toinsert.length - 1]);\n",
173 | " element.append(toinsert);\n",
174 | " return toinsert\n",
175 | " }\n",
176 | "\n",
177 | " /* Handle when an output is cleared or removed */\n",
178 | " events.on('clear_output.CodeCell', handleClearOutput);\n",
179 | " events.on('delete.Cell', handleClearOutput);\n",
180 | "\n",
181 | " /* Handle when a new output is added */\n",
182 | " events.on('output_added.OutputArea', handleAddOutput);\n",
183 | "\n",
184 | " /**\n",
185 | " * Register the mime type and append_mime function with output_area\n",
186 | " */\n",
187 | " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
188 | " /* Is output safe? */\n",
189 | " safe: true,\n",
190 | " /* Index of renderer in `output_area.display_order` */\n",
191 | " index: 0\n",
192 | " });\n",
193 | " }\n",
194 | "\n",
195 | " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
196 | " if (root.Jupyter !== undefined) {\n",
197 | " var events = require('base/js/events');\n",
198 | " var OutputArea = require('notebook/js/outputarea').OutputArea;\n",
199 | "\n",
200 | " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
201 | " register_renderer(events, OutputArea);\n",
202 | " }\n",
203 | " }\n",
204 | "\n",
205 | " \n",
206 | " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
207 | " root._bokeh_timeout = Date.now() + 5000;\n",
208 | " root._bokeh_failed_load = false;\n",
209 | " }\n",
210 | "\n",
211 | " var NB_LOAD_WARNING = {'data': {'text/html':\n",
212 | " \"\\n\"+\n",
213 | " \"
\\n\"+\n",
214 | " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
215 | " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
216 | " \"
\\n\"+\n",
217 | " \"
\\n\"+\n",
218 | " \"- re-rerun `output_notebook()` to attempt to load from CDN again, or
\\n\"+\n",
219 | " \"- use INLINE resources instead, as so:
\\n\"+\n",
220 | " \"
\\n\"+\n",
221 | " \"
\\n\"+\n",
222 | " \"from bokeh.resources import INLINE\\n\"+\n",
223 | " \"output_notebook(resources=INLINE)\\n\"+\n",
224 | " \"
\\n\"+\n",
225 | " \"
\"}};\n",
226 | "\n",
227 | " function display_loaded() {\n",
228 | " var el = document.getElementById(\"1001\");\n",
229 | " if (el != null) {\n",
230 | " el.textContent = \"BokehJS is loading...\";\n",
231 | " }\n",
232 | " if (root.Bokeh !== undefined) {\n",
233 | " if (el != null) {\n",
234 | " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
235 | " }\n",
236 | " } else if (Date.now() < root._bokeh_timeout) {\n",
237 | " setTimeout(display_loaded, 100)\n",
238 | " }\n",
239 | " }\n",
240 | "\n",
241 | "\n",
242 | " function run_callbacks() {\n",
243 | " try {\n",
244 | " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
245 | " if (callback != null)\n",
246 | " callback();\n",
247 | " });\n",
248 | " } finally {\n",
249 | " delete root._bokeh_onload_callbacks\n",
250 | " }\n",
251 | " console.debug(\"Bokeh: all callbacks have finished\");\n",
252 | " }\n",
253 | "\n",
254 | " function load_libs(css_urls, js_urls, callback) {\n",
255 | " if (css_urls == null) css_urls = [];\n",
256 | " if (js_urls == null) js_urls = [];\n",
257 | "\n",
258 | " root._bokeh_onload_callbacks.push(callback);\n",
259 | " if (root._bokeh_is_loading > 0) {\n",
260 | " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
261 | " return null;\n",
262 | " }\n",
263 | " if (js_urls == null || js_urls.length === 0) {\n",
264 | " run_callbacks();\n",
265 | " return null;\n",
266 | " }\n",
267 | " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
268 | " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
269 | "\n",
270 | " function on_load() {\n",
271 | " root._bokeh_is_loading--;\n",
272 | " if (root._bokeh_is_loading === 0) {\n",
273 | " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
274 | " run_callbacks()\n",
275 | " }\n",
276 | " }\n",
277 | "\n",
278 | " function on_error() {\n",
279 | " console.error(\"failed to load \" + url);\n",
280 | " }\n",
281 | "\n",
282 | " for (var i = 0; i < css_urls.length; i++) {\n",
283 | " var url = css_urls[i];\n",
284 | " const element = document.createElement(\"link\");\n",
285 | " element.onload = on_load;\n",
286 | " element.onerror = on_error;\n",
287 | " element.rel = \"stylesheet\";\n",
288 | " element.type = \"text/css\";\n",
289 | " element.href = url;\n",
290 | " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
291 | " document.body.appendChild(element);\n",
292 | " }\n",
293 | "\n",
294 | " for (var i = 0; i < js_urls.length; i++) {\n",
295 | " var url = js_urls[i];\n",
296 | " var element = document.createElement('script');\n",
297 | " element.onload = on_load;\n",
298 | " element.onerror = on_error;\n",
299 | " element.async = false;\n",
300 | " element.src = url;\n",
301 | " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
302 | " document.head.appendChild(element);\n",
303 | " }\n",
304 | " };var element = document.getElementById(\"1001\");\n",
305 | " if (element == null) {\n",
306 | " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n",
307 | " return false;\n",
308 | " }\n",
309 | "\n",
310 | " function inject_raw_css(css) {\n",
311 | " const element = document.createElement(\"style\");\n",
312 | " element.appendChild(document.createTextNode(css));\n",
313 | " document.body.appendChild(element);\n",
314 | " }\n",
315 | "\n",
316 | " \n",
317 | " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n",
318 | " var css_urls = [];\n",
319 | " \n",
320 | "\n",
321 | " var inline_js = [\n",
322 | " function(Bokeh) {\n",
323 | " Bokeh.set_log_level(\"info\");\n",
324 | " },\n",
325 | " function(Bokeh) {\n",
326 | " \n",
327 | " \n",
328 | " }\n",
329 | " ];\n",
330 | "\n",
331 | " function run_inline_js() {\n",
332 | " \n",
333 | " if (root.Bokeh !== undefined || force === true) {\n",
334 | " \n",
335 | " for (var i = 0; i < inline_js.length; i++) {\n",
336 | " inline_js[i].call(root, root.Bokeh);\n",
337 | " }\n",
338 | " if (force === true) {\n",
339 | " display_loaded();\n",
340 | " }} else if (Date.now() < root._bokeh_timeout) {\n",
341 | " setTimeout(run_inline_js, 100);\n",
342 | " } else if (!root._bokeh_failed_load) {\n",
343 | " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
344 | " root._bokeh_failed_load = true;\n",
345 | " } else if (force !== true) {\n",
346 | " var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n",
347 | " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
348 | " }\n",
349 | "\n",
350 | " }\n",
351 | "\n",
352 | " if (root._bokeh_is_loading === 0) {\n",
353 | " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
354 | " run_inline_js();\n",
355 | " } else {\n",
356 | " load_libs(css_urls, js_urls, function() {\n",
357 | " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
358 | " run_inline_js();\n",
359 | " });\n",
360 | " }\n",
361 | "}(window));"
362 | ],
363 | "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(\"1001\");\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) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"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.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"1001\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n var css_urls = [];\n \n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\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(\"1001\")).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.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
364 | },
365 | "metadata": {},
366 | "output_type": "display_data"
367 | }
368 | ],
369 | "source": [
370 | "output_notebook()"
371 | ]
372 | },
373 | {
374 | "cell_type": "code",
375 | "execution_count": 4,
376 | "metadata": {
377 | "ExecuteTime": {
378 | "end_time": "2020-07-09T17:31:25.671588Z",
379 | "start_time": "2020-07-09T17:31:25.665871Z"
380 | }
381 | },
382 | "outputs": [],
383 | "source": [
384 | "np.random.seed(0)"
385 | ]
386 | },
387 | {
388 | "cell_type": "code",
389 | "execution_count": 5,
390 | "metadata": {
391 | "ExecuteTime": {
392 | "end_time": "2020-07-09T17:31:25.680448Z",
393 | "start_time": "2020-07-09T17:31:25.673202Z"
394 | }
395 | },
396 | "outputs": [],
397 | "source": [
398 | "def sigmoid(x):\n",
399 | " return np.exp(-np.logaddexp(0,-x))\n",
400 | "\n",
401 | "def thr(xs):\n",
402 | " return 0.5*(sigmoid((xs+4))+sigmoid(4*(xs-4)))\n",
403 | "\n",
404 | "def classAssignment(xs):\n",
405 | " global thr\n",
406 | " u = np.random.random(size=xs.shape[0])\n",
407 | " ys = u\n"
446 | ]
447 | },
448 | "metadata": {},
449 | "output_type": "display_data"
450 | },
451 | {
452 | "data": {
453 | "application/javascript": [
454 | "(function(root) {\n",
455 | " function embed_document(root) {\n",
456 | " \n",
457 | " var docs_json = {\"2f6f682d-d199-43d8-9aec-8beedad21b37\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1011\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1015\",\"type\":\"Grid\"},{\"id\":\"1020\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"1016\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"1037\",\"type\":\"GlyphRenderer\"},{\"id\":\"1042\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1045\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1027\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1003\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1007\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1005\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1009\",\"type\":\"LinearScale\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1021\",\"type\":\"PanTool\"},{\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"id\":\"1024\",\"type\":\"SaveTool\"},{\"id\":\"1025\",\"type\":\"ResetTool\"},{\"id\":\"1026\",\"type\":\"HelpTool\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1020\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1047\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"1003\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1035\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1036\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1051\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1050\",\"type\":\"UnionRenderers\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1039\",\"type\":\"ColumnDataSource\"}},\"id\":\"1043\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1039\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1040\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1041\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"1043\",\"type\":\"CDSView\"}},\"id\":\"1042\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1052\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1045\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1041\",\"type\":\"Scatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1054\",\"type\":\"BoxAnnotation\"}},\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1053\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1051\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,true,false,true,true,false,false,false,false,false,false,true,false,true,true,true,false,true,false,true,true,true,false,true,false,false,false,false,true,true,true,true,true,false,false,false,true,false,true,false,true,false,false,false,true,false,false,true,false,true,false,true,false,true,false,true,false,false,false,true,false,false,false,false,true,true,false,false,true,false,false,false,false,false,false,false,false,false,false,true,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,true,false,true,true,true,true,false,true,false,true,true,true,true,true,false,true,false,false,false,true,true,false,true,true,true,true,true,true,true,true,true,true,false,false,false,true,true,false,false,false,true,false,true,true,false,true,false,false,true,false,true,false,true,true,false,false,true,true,true,false,false,false,false,true,false,true,true,false,true,false,true,false,false,true,true,true,false,true,true,true,true,false,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,true,false,false,false,true,false,false,true,false,true,true,true,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,false,false,false,true,true,false,false,false,true,true,false,true,true,false,false,true,true,true,true,false,true,true,true,false,false,false,false,true,false,false,false,false,true,false,false,false,true,false,true,true,false,false,true,true,true,false,false,false,true,false,false,false,false,false,false,false,false,false,true,true,true,false,true,true,false,true,false,true,false,true,true,false,true,true,true,true,false,false,false,false,false,true,false,true,true,true,false,true,true,false,true,false,true,true,true,false,true,true,true,false,true,true,true,false,false,true,false,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,true,true,false,false,false,false,false,true,true,true,false,false,false,true,true,false,true,true,false,true,true,true,true,false,true,false,true,true,true,true,false,true,false,false,true,true,false,true,false,false,false,true,true,true,true,true,true,false,true,true,false,true,false,true,false,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]},\"selected\":{\"id\":\"1053\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1052\",\"type\":\"UnionRenderers\"}},\"id\":\"1039\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"formatter\":{\"id\":\"1049\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1011\",\"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},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1054\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1040\",\"type\":\"Scatter\"},{\"attributes\":{\"data_source\":{\"id\":\"1034\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1035\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1036\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1038\",\"type\":\"CDSView\"}},\"id\":\"1037\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1034\",\"type\":\"ColumnDataSource\"}},\"id\":\"1038\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1012\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1015\",\"type\":\"Grid\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n",
458 | " var render_items = [{\"docid\":\"2f6f682d-d199-43d8-9aec-8beedad21b37\",\"roots\":{\"1002\":\"7cc9228a-b9c2-40de-b9db-dd1c3afcfb7c\"}}];\n",
459 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
460 | "\n",
461 | " }\n",
462 | " if (root.Bokeh !== undefined) {\n",
463 | " embed_document(root);\n",
464 | " } else {\n",
465 | " var attempts = 0;\n",
466 | " var timer = setInterval(function(root) {\n",
467 | " if (root.Bokeh !== undefined) {\n",
468 | " clearInterval(timer);\n",
469 | " embed_document(root);\n",
470 | " } else {\n",
471 | " attempts++;\n",
472 | " if (attempts > 100) {\n",
473 | " clearInterval(timer);\n",
474 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
475 | " }\n",
476 | " }\n",
477 | " }, 10, root)\n",
478 | " }\n",
479 | "})(window);"
480 | ],
481 | "application/vnd.bokehjs_exec.v0+json": ""
482 | },
483 | "metadata": {
484 | "application/vnd.bokehjs_exec.v0+json": {
485 | "id": "1002"
486 | }
487 | },
488 | "output_type": "display_data"
489 | }
490 | ],
491 | "source": [
492 | "p = figure(plot_width=600, plot_height=600)\n",
493 | "p.line(xs,thr(xs),color='green')\n",
494 | "p.scatter(xs,ys)\n",
495 | "show(p)"
496 | ]
497 | },
498 | {
499 | "cell_type": "code",
500 | "execution_count": 8,
501 | "metadata": {
502 | "ExecuteTime": {
503 | "end_time": "2020-07-09T17:31:25.904606Z",
504 | "start_time": "2020-07-09T17:31:25.723297Z"
505 | }
506 | },
507 | "outputs": [],
508 | "source": [
509 | "from sklearn.isotonic import IsotonicRegression\n",
510 | "\n",
511 | "import VennABERS"
512 | ]
513 | },
514 | {
515 | "cell_type": "code",
516 | "execution_count": 9,
517 | "metadata": {
518 | "ExecuteTime": {
519 | "end_time": "2020-07-09T17:31:25.909463Z",
520 | "start_time": "2020-07-09T17:31:25.905732Z"
521 | }
522 | },
523 | "outputs": [],
524 | "source": [
525 | "def VennABERS_by_def(ds,test):\n",
526 | " p0,p1 = [],[]\n",
527 | " for x in test:\n",
528 | " ds0 = ds+[(x,0)]\n",
529 | " iso0 = IsotonicRegression().fit(*zip(*ds0))\n",
530 | " p0.append(iso0.predict([x]))\n",
531 | " \n",
532 | " ds1 = ds+[(x,1)]\n",
533 | " iso1 = IsotonicRegression().fit(*zip(*ds1))\n",
534 | " p1.append(iso1.predict([x]))\n",
535 | " return np.array(p0).flatten(),np.array(p1).flatten()"
536 | ]
537 | },
538 | {
539 | "cell_type": "code",
540 | "execution_count": 10,
541 | "metadata": {
542 | "ExecuteTime": {
543 | "end_time": "2020-07-09T17:31:25.915142Z",
544 | "start_time": "2020-07-09T17:31:25.910593Z"
545 | }
546 | },
547 | "outputs": [],
548 | "source": [
549 | "xs = np.random.uniform(low=-10,high=10,size=400)\n",
550 | "ys = classAssignment(xs)"
551 | ]
552 | },
553 | {
554 | "cell_type": "code",
555 | "execution_count": 11,
556 | "metadata": {
557 | "ExecuteTime": {
558 | "end_time": "2020-07-09T17:31:25.920508Z",
559 | "start_time": "2020-07-09T17:31:25.916272Z"
560 | }
561 | },
562 | "outputs": [],
563 | "source": [
564 | "xtest = np.linspace(-11,11,1000)"
565 | ]
566 | },
567 | {
568 | "cell_type": "code",
569 | "execution_count": 12,
570 | "metadata": {
571 | "ExecuteTime": {
572 | "end_time": "2020-07-09T17:31:26.743534Z",
573 | "start_time": "2020-07-09T17:31:25.921524Z"
574 | }
575 | },
576 | "outputs": [],
577 | "source": [
578 | "p0d,p1d = VennABERS_by_def(list(zip(xs,ys)),xtest)"
579 | ]
580 | },
581 | {
582 | "cell_type": "code",
583 | "execution_count": 13,
584 | "metadata": {
585 | "ExecuteTime": {
586 | "end_time": "2020-07-09T17:31:26.789602Z",
587 | "start_time": "2020-07-09T17:31:26.744641Z"
588 | }
589 | },
590 | "outputs": [],
591 | "source": [
592 | "p0,p1 = VennABERS.ScoresToMultiProbs(list(zip(xs,ys)),xtest)"
593 | ]
594 | },
595 | {
596 | "cell_type": "code",
597 | "execution_count": 14,
598 | "metadata": {
599 | "ExecuteTime": {
600 | "end_time": "2020-07-09T17:31:26.795813Z",
601 | "start_time": "2020-07-09T17:31:26.790942Z"
602 | }
603 | },
604 | "outputs": [
605 | {
606 | "name": "stdout",
607 | "output_type": "stream",
608 | "text": [
609 | "p0: there are 0 discrepancies\n",
610 | "p1: there are 0 discrepancies\n"
611 | ]
612 | }
613 | ],
614 | "source": [
615 | "discrepancies_p0 = np.argwhere(~np.isclose(p0.flatten(),p0d.flatten()))\n",
616 | "discrepancies_p1 = np.argwhere(~np.isclose(p1.flatten(),p1d.flatten()))\n",
617 | "\n",
618 | "print(\"p0: there are\", discrepancies_p0.shape[0], \"discrepancies\")\n",
619 | "print(\"p1: there are\", discrepancies_p1.shape[0], \"discrepancies\")"
620 | ]
621 | },
622 | {
623 | "cell_type": "code",
624 | "execution_count": 15,
625 | "metadata": {
626 | "ExecuteTime": {
627 | "end_time": "2020-07-09T17:31:26.804697Z",
628 | "start_time": "2020-07-09T17:31:26.796951Z"
629 | }
630 | },
631 | "outputs": [
632 | {
633 | "data": {
634 | "text/plain": [
635 | "False"
636 | ]
637 | },
638 | "execution_count": 15,
639 | "metadata": {},
640 | "output_type": "execute_result"
641 | }
642 | ],
643 | "source": [
644 | "np.any(p0>p1)"
645 | ]
646 | },
647 | {
648 | "cell_type": "markdown",
649 | "metadata": {},
650 | "source": [
651 | "### Success! No discrepancy between fast implementation and reference implementation\n",
652 | "\n",
653 | "Let's try with added duplicates (more than one point with the same score)"
654 | ]
655 | },
656 | {
657 | "cell_type": "code",
658 | "execution_count": 16,
659 | "metadata": {
660 | "ExecuteTime": {
661 | "end_time": "2020-07-09T17:31:26.809528Z",
662 | "start_time": "2020-07-09T17:31:26.805726Z"
663 | }
664 | },
665 | "outputs": [],
666 | "source": [
667 | "# Let's duplicate 1 in 10\n",
668 | "\n",
669 | "x_dups = xs[::10]\n",
670 | "y_dups = ~ys[::10] # Let's switch labels, just for extra fun"
671 | ]
672 | },
673 | {
674 | "cell_type": "code",
675 | "execution_count": 17,
676 | "metadata": {
677 | "ExecuteTime": {
678 | "end_time": "2020-07-09T17:31:26.815006Z",
679 | "start_time": "2020-07-09T17:31:26.810788Z"
680 | }
681 | },
682 | "outputs": [],
683 | "source": [
684 | "xs = np.r_[xs,x_dups]\n",
685 | "ys = np.r_[ys,y_dups]"
686 | ]
687 | },
688 | {
689 | "cell_type": "code",
690 | "execution_count": 18,
691 | "metadata": {
692 | "ExecuteTime": {
693 | "end_time": "2020-07-09T17:31:26.820732Z",
694 | "start_time": "2020-07-09T17:31:26.816103Z"
695 | }
696 | },
697 | "outputs": [
698 | {
699 | "data": {
700 | "text/plain": [
701 | "((440,), (440,))"
702 | ]
703 | },
704 | "execution_count": 18,
705 | "metadata": {},
706 | "output_type": "execute_result"
707 | }
708 | ],
709 | "source": [
710 | "xs.shape, ys.shape"
711 | ]
712 | },
713 | {
714 | "cell_type": "code",
715 | "execution_count": 19,
716 | "metadata": {
717 | "ExecuteTime": {
718 | "end_time": "2020-07-09T17:31:27.733555Z",
719 | "start_time": "2020-07-09T17:31:26.821549Z"
720 | }
721 | },
722 | "outputs": [],
723 | "source": [
724 | "p0d,p1d = VennABERS_by_def(list(zip(xs,ys)),xtest)\n",
725 | "p0f,p1f = VennABERS.ScoresToMultiProbs(list(zip(xs,ys)),xtest)"
726 | ]
727 | },
728 | {
729 | "cell_type": "code",
730 | "execution_count": 20,
731 | "metadata": {
732 | "ExecuteTime": {
733 | "end_time": "2020-07-09T17:31:27.737966Z",
734 | "start_time": "2020-07-09T17:31:27.734670Z"
735 | }
736 | },
737 | "outputs": [
738 | {
739 | "data": {
740 | "text/plain": [
741 | "False"
742 | ]
743 | },
744 | "execution_count": 20,
745 | "metadata": {},
746 | "output_type": "execute_result"
747 | }
748 | ],
749 | "source": [
750 | "np.any(p0f>p1f)"
751 | ]
752 | },
753 | {
754 | "cell_type": "code",
755 | "execution_count": 21,
756 | "metadata": {
757 | "ExecuteTime": {
758 | "end_time": "2020-07-09T17:31:27.747161Z",
759 | "start_time": "2020-07-09T17:31:27.739092Z"
760 | }
761 | },
762 | "outputs": [
763 | {
764 | "name": "stdout",
765 | "output_type": "stream",
766 | "text": [
767 | "p0f: there are 0 discrepancies\n",
768 | "p1f: there are 0 discrepancies\n"
769 | ]
770 | }
771 | ],
772 | "source": [
773 | "discrepancies_p0f = np.argwhere(~np.isclose(p0f,p0d))\n",
774 | "discrepancies_p1f = np.argwhere(~np.isclose(p1f,p1d))\n",
775 | "\n",
776 | "print(\"p0f: there are\", discrepancies_p0f.shape[0], \"discrepancies\")\n",
777 | "print(\"p1f: there are\", discrepancies_p1f.shape[0], \"discrepancies\")"
778 | ]
779 | },
780 | {
781 | "cell_type": "markdown",
782 | "metadata": {},
783 | "source": [
784 | "### Success!! No discrepancy between reference implementation and fast implementation\n",
785 | "\n",
786 | "Just out of curiosity, let's plot the calibrator."
787 | ]
788 | },
789 | {
790 | "cell_type": "code",
791 | "execution_count": 22,
792 | "metadata": {
793 | "ExecuteTime": {
794 | "end_time": "2020-07-09T17:31:27.783125Z",
795 | "start_time": "2020-07-09T17:31:27.748006Z"
796 | }
797 | },
798 | "outputs": [
799 | {
800 | "data": {
801 | "text/html": [
802 | "\n",
803 | "\n",
804 | "\n",
805 | "\n",
806 | "\n",
807 | "\n",
808 | " \n"
809 | ]
810 | },
811 | "metadata": {},
812 | "output_type": "display_data"
813 | },
814 | {
815 | "data": {
816 | "application/javascript": [
817 | "(function(root) {\n",
818 | " function embed_document(root) {\n",
819 | " \n",
820 | " var docs_json = {\"fd6c6937-be68-432f-a448-7b65cd81602e\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1130\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1134\",\"type\":\"Grid\"},{\"id\":\"1139\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"1135\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"1156\",\"type\":\"GlyphRenderer\"},{\"id\":\"1161\",\"type\":\"GlyphRenderer\"},{\"id\":\"1166\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1180\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1146\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1122\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1126\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1124\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1128\",\"type\":\"LinearScale\"}},\"id\":\"1121\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"formatter\":{\"id\":\"1184\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1131\",\"type\":\"BasicTicker\"}},\"id\":\"1130\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1189\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1136\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"1158\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1159\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1160\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"1162\",\"type\":\"CDSView\"}},\"id\":\"1161\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1186\",\"type\":\"Selection\"},{\"attributes\":{\"ticker\":{\"id\":\"1131\",\"type\":\"BasicTicker\"}},\"id\":\"1134\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[220]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[220]}},\"selected\":{\"id\":\"1190\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1189\",\"type\":\"UnionRenderers\"}},\"id\":\"1163\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1155\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1158\",\"type\":\"ColumnDataSource\"}},\"id\":\"1162\",\"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},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1191\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1136\",\"type\":\"BasicTicker\"}},\"id\":\"1139\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1182\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1136\",\"type\":\"BasicTicker\"}},\"id\":\"1135\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1160\",\"type\":\"Scatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZ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C73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/AAAAAAAA5D8AAAAAAADkPwAAAAAAAOQ/AAAAAAAA5D8AAAAAAADkPwAAAAAAAOQ/AAAAAAAA5D8AAAAAAADkPwAAAAAAAOg/AAAAAAAA6D8AAAAAAADoPwAAAAAAAOg/AAAAAAAA6D/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8=\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1188\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1187\",\"type\":\"UnionRenderers\"}},\"id\":\"1158\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1153\",\"type\":\"ColumnDataSource\"}},\"id\":\"1157\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1140\",\"type\":\"PanTool\"},{\"id\":\"1141\",\"type\":\"WheelZoomTool\"},{\"id\":\"1142\",\"type\":\"BoxZoomTool\"},{\"id\":\"1143\",\"type\":\"SaveTool\"},{\"id\":\"1144\",\"type\":\"ResetTool\"},{\"id\":\"1145\",\"type\":\"HelpTool\"}]},\"id\":\"1146\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1184\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1180\",\"type\":\"Title\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1159\",\"type\":\"Scatter\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1154\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1153\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1154\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1155\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"1157\",\"type\":\"CDSView\"}},\"id\":\"1156\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1163\",\"type\":\"ColumnDataSource\"}},\"id\":\"1167\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null},\"id\":\"1122\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1165\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1141\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK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B37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP6AJfyb8meA/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1186\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1185\",\"type\":\"UnionRenderers\"}},\"id\":\"1153\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1191\",\"type\":\"BoxAnnotation\"}},\"id\":\"1142\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1187\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"1163\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1164\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1165\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1167\",\"type\":\"CDSView\"}},\"id\":\"1166\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1188\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null},\"id\":\"1124\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1126\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1190\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1182\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1145\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1128\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1185\",\"type\":\"UnionRenderers\"}],\"root_ids\":[\"1121\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n",
821 | " var render_items = [{\"docid\":\"fd6c6937-be68-432f-a448-7b65cd81602e\",\"roots\":{\"1121\":\"ce9ad22a-bcf9-4533-ae72-1846e1f9a57c\"}}];\n",
822 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
823 | "\n",
824 | " }\n",
825 | " if (root.Bokeh !== undefined) {\n",
826 | " embed_document(root);\n",
827 | " } else {\n",
828 | " var attempts = 0;\n",
829 | " var timer = setInterval(function(root) {\n",
830 | " if (root.Bokeh !== undefined) {\n",
831 | " clearInterval(timer);\n",
832 | " embed_document(root);\n",
833 | " } else {\n",
834 | " attempts++;\n",
835 | " if (attempts > 100) {\n",
836 | " clearInterval(timer);\n",
837 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
838 | " }\n",
839 | " }\n",
840 | " }, 10, root)\n",
841 | " }\n",
842 | "})(window);"
843 | ],
844 | "application/vnd.bokehjs_exec.v0+json": ""
845 | },
846 | "metadata": {
847 | "application/vnd.bokehjs_exec.v0+json": {
848 | "id": "1121"
849 | }
850 | },
851 | "output_type": "display_data"
852 | }
853 | ],
854 | "source": [
855 | "xs = np.linspace(-11,11,220)\n",
856 | "\n",
857 | "p = figure(plot_width=600, plot_height=600)\n",
858 | "p.scatter(xtest,p0d,color='green')\n",
859 | "p.scatter(xtest,p1d,color='red')\n",
860 | "p.line(xs,thr(xs),color='blue')\n",
861 | "show(p)"
862 | ]
863 | },
864 | {
865 | "cell_type": "markdown",
866 | "metadata": {},
867 | "source": [
868 | "### If this does not look too good, consider that I introduced 10% of \"adversarial\" data, namely duplicates of points with their label flipped."
869 | ]
870 | }
871 | ],
872 | "metadata": {
873 | "kernelspec": {
874 | "display_name": "main",
875 | "language": "python",
876 | "name": "main"
877 | },
878 | "language_info": {
879 | "codemirror_mode": {
880 | "name": "ipython",
881 | "version": 3
882 | },
883 | "file_extension": ".py",
884 | "mimetype": "text/x-python",
885 | "name": "python",
886 | "nbconvert_exporter": "python",
887 | "pygments_lexer": "ipython3",
888 | "version": "3.7.6"
889 | }
890 | },
891 | "nbformat": 4,
892 | "nbformat_minor": 4
893 | }
894 |
--------------------------------------------------------------------------------