{ "cells": [ { "cell_type": "markdown", "id": "723c394d-987d-4f2d-8bd6-378a23b1218e", "metadata": { "tags": [] }, "source": [ "# 3. Process Brown Dwarf Atmospheric Parameters \n", "\n", "In the following steps, you will:\n", "\n", "- Load the brown dwarf dataset used to train the ML models.\n", "- Prepare the X and y variables to deploy the trained ML models.\n", "- Visualize them for a few cases.\n", "\n", "We will need the following modules from `TelescopeML`:\n", "\n", "- **DataMaster**: to prepare the synthetic brown dwarf dataset and load the trained machine learning (ML) models.\n", "- **StatVisAnalyzer**: to provide statistical tests and plotting functions.\n", "- **IO_utils**: to provide functions to load the trained ML models.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "dab6ba1b-87cf-482b-9bad-7ae019708a27", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No Bottleneck unit testing available.\n" ] }, { "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 != null && id in Bokeh.index) {\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 id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\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\") || (!Object.prototype.hasOwnProperty.call(output.data, 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[toinsert.length - 1].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[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\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[toinsert.length - 1]);\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", " \"\\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(url) {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (let i = 0; i < css_urls.length; i++) {\n", " const url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\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", " const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\": \"XypntL49z55iwGVUW4qsEu83zKL3XEcz0MjuGOQ9SlaaQ68X/g+k1FcioZi7oQAc\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.min.js\": \"bEsM86IHGDTLCS0Zod8a8WM6Y4+lafAL/eSiyQcuPzinmWNgNO2/olUF0Z2Dkn5i\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\": \"TX0gSQTdXTTeScqxj6PVQxTiRW8DOoGVwinyi1D3kxv7wuxQ02XkOxv0xwiypcAH\"};\n", "\n", " for (let i = 0; i < js_urls.length; i++) {\n", " const url = js_urls[i];\n", " const element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.async = false;\n", " element.src = url;\n", " if (url in hashes) {\n", " element.crossOrigin = \"anonymous\";\n", " element.integrity = \"sha384-\" + hashes[url];\n", " }\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\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.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.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));" ], "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 \"\\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(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\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 const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\": \"XypntL49z55iwGVUW4qsEu83zKL3XEcz0MjuGOQ9SlaaQ68X/g+k1FcioZi7oQAc\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.min.js\": \"bEsM86IHGDTLCS0Zod8a8WM6Y4+lafAL/eSiyQcuPzinmWNgNO2/olUF0Z2Dkn5i\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\": \"TX0gSQTdXTTeScqxj6PVQxTiRW8DOoGVwinyi1D3kxv7wuxQ02XkOxv0xwiypcAH\"};\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n if (url in hashes) {\n element.crossOrigin = \"anonymous\";\n element.integrity = \"sha384-\" + hashes[url];\n }\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\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.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.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));" }, "metadata": {}, "output_type": "display_data" }, { "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 != null && id in Bokeh.index) {\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 id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\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\") || (!Object.prototype.hasOwnProperty.call(output.data, 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[toinsert.length - 1].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[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\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[toinsert.length - 1]);\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", " \"\\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(\"1003\");\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(url) {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (let i = 0; i < css_urls.length; i++) {\n", " const url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\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", " const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\": \"XypntL49z55iwGVUW4qsEu83zKL3XEcz0MjuGOQ9SlaaQ68X/g+k1FcioZi7oQAc\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.min.js\": \"bEsM86IHGDTLCS0Zod8a8WM6Y4+lafAL/eSiyQcuPzinmWNgNO2/olUF0Z2Dkn5i\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\": \"TX0gSQTdXTTeScqxj6PVQxTiRW8DOoGVwinyi1D3kxv7wuxQ02XkOxv0xwiypcAH\"};\n", "\n", " for (let i = 0; i < js_urls.length; i++) {\n", " const url = js_urls[i];\n", " const element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.async = false;\n", " element.src = url;\n", " if (url in hashes) {\n", " element.crossOrigin = \"anonymous\";\n", " element.integrity = \"sha384-\" + hashes[url];\n", " }\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\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.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.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(\"1003\")).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));" ], "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 \"\\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(\"1003\");\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(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\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 const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\": \"XypntL49z55iwGVUW4qsEu83zKL3XEcz0MjuGOQ9SlaaQ68X/g+k1FcioZi7oQAc\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.min.js\": \"bEsM86IHGDTLCS0Zod8a8WM6Y4+lafAL/eSiyQcuPzinmWNgNO2/olUF0Z2Dkn5i\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\": \"TX0gSQTdXTTeScqxj6PVQxTiRW8DOoGVwinyi1D3kxv7wuxQ02XkOxv0xwiypcAH\"};\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n if (url in hashes) {\n element.crossOrigin = \"anonymous\";\n element.integrity = \"sha384-\" + hashes[url];\n }\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\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.bokeh.org/bokeh/release/bokeh-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.2.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(\"1003\")).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));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from TelescopeML.DataMaster import *\n", "from TelescopeML.Predictor import *\n", "from TelescopeML.StatVisAnalyzer import *" ] }, { "cell_type": "markdown", "id": "2052a7c9-c4c0-44fb-8456-b3b785ea70c4", "metadata": {}, "source": [ "\"ML\n" ] }, { "cell_type": "markdown", "id": "98309fb6-0ed0-4f20-a65e-45b54910a8c8", "metadata": { "tags": [] }, "source": [ "## 2.1 Load the Synthetic spectra - training dataset \n", "\n", "We computed a low-resolution spectrum ($R$=200) utilizing atmopshric brown dwarfs grid model, [*Sonora-Bobcat*](https://arxiv.org/pdf/2107.07434.pdf) for spectral range $\\sim$0.9-2.4 $\\mu m$. An open-source atmospheric radiative transfer Python package, [*PICASO*](https://natashabatalha.github.io/picaso/) was employed for generating these datasets. This dataset encompass 30,888 synthetic spectra (or instances or rows). \n", "\n", "\n", "Each spectrum has 104 wavelengths (i.e., 0.897, 0.906, ..., 2.512 μm) and 4 output atmospheric parameters:\n", "\n", "- gravity (log *g*)\n", "- temperature (*T*eff)\n", "- carbon-to-oxygen ratio (C/O)\n", "- metallicity ([M/H])" ] }, { "cell_type": "code", "execution_count": 2, "id": "94ab3753-16a7-40be-8832-06a8837649db", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'/Users/egharibn/RESEARCH/ml/projects/TelescopeML_project/reference_data/'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import os \n", "\n", "__reference_data_path__ = os.getenv(\"TelescopeML_reference_data\")\n", "__reference_data_path__ \n", "\n", "\n", "# Note: insert the directory of the reference_data if you get an error reading the reference data!!!\n", "# __reference_data_path__ = 'INSERT_DIRECTORY_OF_reference_data'\n" ] }, { "cell_type": "markdown", "id": "440fbe88-e7b4-496f-81ab-7c7fa9db75d3", "metadata": {}, "source": [ " Load the dataset and check few instances " ] }, { "cell_type": "code", "execution_count": 3, "id": "5332f129-5253-4067-ba57-165f5249e252", "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
gravitytemperaturec_o_ratiometallicity2.5122.4872.4622.4382.4132.389...0.9810.9710.9620.9520.9430.9330.9240.9150.9060.897
05.011000.25-1.09.103045e-081.181658e-071.307868e-071.269229e-071.159179e-078.925110e-08...1.257751e-079.640859e-087.612550e-086.901364e-086.247359e-084.112384e-085.127995e-084.897355e-084.087795e-082.791689e-08
15.011000.25-0.79.103045e-081.181658e-071.307868e-071.269229e-071.159179e-078.925110e-08...1.257751e-079.640859e-087.612550e-086.901364e-086.247359e-084.112384e-085.127995e-084.897355e-084.087795e-082.791689e-08
25.011000.25-0.59.103045e-081.181658e-071.307868e-071.269229e-071.159179e-078.925110e-08...1.257751e-079.640859e-087.612550e-086.901364e-086.247359e-084.112384e-085.127995e-084.897355e-084.087795e-082.791689e-08
35.011000.25-0.39.103045e-081.181658e-071.307868e-071.269229e-071.159179e-078.925110e-08...1.257751e-079.640859e-087.612550e-086.901364e-086.247359e-084.112384e-085.127995e-084.897355e-084.087795e-082.791689e-08
45.011000.250.09.103045e-081.181658e-071.307868e-071.269229e-071.159179e-078.925110e-08...1.257751e-079.640859e-087.612550e-086.901364e-086.247359e-084.112384e-085.127995e-084.897355e-084.087795e-082.791689e-08
\n", "

5 rows × 108 columns

\n", "
" ], "text/plain": [ " gravity temperature c_o_ratio metallicity 2.512 2.487 \\\n", "0 5.0 1100 0.25 -1.0 9.103045e-08 1.181658e-07 \n", "1 5.0 1100 0.25 -0.7 9.103045e-08 1.181658e-07 \n", "2 5.0 1100 0.25 -0.5 9.103045e-08 1.181658e-07 \n", "3 5.0 1100 0.25 -0.3 9.103045e-08 1.181658e-07 \n", "4 5.0 1100 0.25 0.0 9.103045e-08 1.181658e-07 \n", "\n", " 2.462 2.438 2.413 2.389 ... 0.981 \\\n", "0 1.307868e-07 1.269229e-07 1.159179e-07 8.925110e-08 ... 1.257751e-07 \n", "1 1.307868e-07 1.269229e-07 1.159179e-07 8.925110e-08 ... 1.257751e-07 \n", "2 1.307868e-07 1.269229e-07 1.159179e-07 8.925110e-08 ... 1.257751e-07 \n", "3 1.307868e-07 1.269229e-07 1.159179e-07 8.925110e-08 ... 1.257751e-07 \n", "4 1.307868e-07 1.269229e-07 1.159179e-07 8.925110e-08 ... 1.257751e-07 \n", "\n", " 0.971 0.962 0.952 0.943 0.933 \\\n", "0 9.640859e-08 7.612550e-08 6.901364e-08 6.247359e-08 4.112384e-08 \n", "1 9.640859e-08 7.612550e-08 6.901364e-08 6.247359e-08 4.112384e-08 \n", "2 9.640859e-08 7.612550e-08 6.901364e-08 6.247359e-08 4.112384e-08 \n", "3 9.640859e-08 7.612550e-08 6.901364e-08 6.247359e-08 4.112384e-08 \n", "4 9.640859e-08 7.612550e-08 6.901364e-08 6.247359e-08 4.112384e-08 \n", "\n", " 0.924 0.915 0.906 0.897 \n", "0 5.127995e-08 4.897355e-08 4.087795e-08 2.791689e-08 \n", "1 5.127995e-08 4.897355e-08 4.087795e-08 2.791689e-08 \n", "2 5.127995e-08 4.897355e-08 4.087795e-08 2.791689e-08 \n", "3 5.127995e-08 4.897355e-08 4.087795e-08 2.791689e-08 \n", "4 5.127995e-08 4.897355e-08 4.087795e-08 2.791689e-08 \n", "\n", "[5 rows x 108 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_BD = pd.read_csv(os.path.join(__reference_data_path__, \n", " 'training_datasets', \n", " 'browndwarf_R100_v4_newWL_v3.csv.bz2'), compression='bz2')\n", "train_BD.head(5)" ] }, { "cell_type": "markdown", "id": "e1568f0a-dff8-41ad-a418-a5b8dcb205b5", "metadata": {}, "source": [ "### 2.1.2 Check atmospheric parameters\n", "\n", "\n", "- gravity (log *g*)\n", "- temperature (*T*eff)\n", "- carbon-to-oxygen ratio (C/O)\n", "- metallicity ([M/H])" ] }, { "cell_type": "code", "execution_count": 4, "id": "9a30da21-ab88-406e-ad1f-e54c6291684c", "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", " \n", " \n", " \n", " \n", " \n", " \n", "
gravitytemperaturec_o_ratiometallicity
05.011000.25-1.0
15.011000.25-0.7
25.011000.25-0.5
35.011000.25-0.3
45.011000.250.0
\n", "
" ], "text/plain": [ " gravity temperature c_o_ratio metallicity\n", "0 5.0 1100 0.25 -1.0\n", "1 5.0 1100 0.25 -0.7\n", "2 5.0 1100 0.25 -0.5\n", "3 5.0 1100 0.25 -0.3\n", "4 5.0 1100 0.25 0.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output_names = ['gravity', 'temperature', 'c_o_ratio', 'metallicity']\n", "train_BD[output_names].head()" ] }, { "cell_type": "code", "execution_count": 5, "id": "1591d643-1052-47ab-af83-737069a88edd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['2.512', '2.487', '2.462', '2.438', '2.413']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# training_features_labels: they are Wavelengths variables in string format\n", "\n", "wavelength_names = [item for item in train_BD.columns.to_list() if item not in output_names]\n", "wavelength_names[:5]" ] }, { "cell_type": "code", "execution_count": 6, "id": "6aab2914-88d3-4180-8dce-32db38905e07", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2.512, 2.487, 2.462, 2.438, 2.413, 2.389, 2.366, 2.342, 2.319, 2.296]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# training_features_wl: they are Wavelengths variables \n", "\n", "wavelength_values = [float(item) for item in wavelength_names]\n", "wavelength_values[:10]" ] }, { "cell_type": "markdown", "id": "8bb511a7-5a5f-4b52-a6d9-e8533ece247e", "metadata": { "tags": [] }, "source": [ "### 2.1.3 Prepare Inputs and outputs for ML models (X,y)\n", "- X: 104 column variables or fluxes\n", "- y: output variables: 'gravity', 'temperature', 'c_o_ratio', 'metallicity'" ] }, { "cell_type": "code", "execution_count": 7, "id": "e90e78b1-4f64-40b6-b92e-6027c8ace483", "metadata": {}, "outputs": [], "source": [ "# Training feature variables\n", "X = train_BD.drop(\n", " columns=['gravity', \n", " 'temperature', \n", " 'c_o_ratio', \n", " 'metallicity'])\n", "\n", "\n", "# Target/Output feature variables\n", "y = train_BD[['gravity', 'c_o_ratio', 'metallicity', 'temperature', ]]\n" ] }, { "cell_type": "markdown", "id": "6932555b-26d2-4140-b5d9-f03b7ba86337", "metadata": {}, "source": [ "log-transform the 'temperature' variable toreduce the skewness of the data, making it more symmetric and normal-like for the ML model\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "07998d41-e101-410c-9a35-e5c6da1800b0", "metadata": {}, "outputs": [], "source": [ "y.loc[:, 'temperature'] = np.log10(y['temperature'])" ] }, { "cell_type": "code", "execution_count": 9, "id": "37b9edab-f6dd-406e-b4c4-aba7ef45634c", "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", " \n", " \n", " \n", " \n", " \n", " \n", "
gravityc_o_ratiometallicitytemperature
05.00.25-1.03.041393
15.00.25-0.73.041393
25.00.25-0.53.041393
35.00.25-0.33.041393
45.00.250.03.041393
\n", "
" ], "text/plain": [ " gravity c_o_ratio metallicity temperature\n", "0 5.0 0.25 -1.0 3.041393\n", "1 5.0 0.25 -0.7 3.041393\n", "2 5.0 0.25 -0.5 3.041393\n", "3 5.0 0.25 -0.3 3.041393\n", "4 5.0 0.25 0.0 3.041393" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check the output variables\n", "y.head()" ] }, { "cell_type": "markdown", "id": "6108f702-bb40-49f4-9c38-306e0e27ad4f", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "id": "c9cc267d-85a9-44c6-9081-5067d0bdd8e6", "metadata": { "tags": [] }, "source": [ "## 2.2 Processing the Data\n", "\n", "Here we instintiate BuildRegressorCNN class from DeepBuilder module to prepare the datasets and take the trained CNN (Convolutional Neural Networks) for us:\n", "\n", "- Take the synthetic spectra\n", "- Process them, e.g.\n", " - Divide them to three sets: train, validation, and test sets\n", " - Scale y variables\n", " - Scale X variables\n", " - Create new features \n", " " ] }, { "cell_type": "markdown", "id": "60932dc5-bd2b-4479-9126-da6f7b13735b", "metadata": { "tags": [] }, "source": [ "### 2.2.1 Instintiate DataProcessor class from DeepBuilder module" ] }, { "cell_type": "code", "execution_count": 10, "id": "bc38d0e4-a4c2-4288-9d33-ab15fb25093b", "metadata": {}, "outputs": [], "source": [ "data_processor = DataProcessor( \n", " flux_values=X.to_numpy(),\n", " wavelength_names=X.columns,\n", " wavelength_values=wavelength_values,\n", " output_values=y.to_numpy(),\n", " output_names=output_names,\n", " spectral_resolution=200,\n", " trained_ML_model=None,\n", " trained_ML_model_name='CNN',\n", " )" ] }, { "cell_type": "markdown", "id": "ffbeb92b-46ad-4ebb-8edc-f29d5d56e7e2", "metadata": {}, "source": [ "### 2.2.2 Split the dataset into train, validate and test sets" ] }, { "cell_type": "code", "execution_count": 11, "id": "3a00b374-192b-4a7f-9606-a9015f6db53d", "metadata": {}, "outputs": [], "source": [ "data_processor.split_train_validation_test(test_size=0.1, \n", " val_size=0.1, \n", " random_state_=42,)" ] }, { "cell_type": "markdown", "id": "bf565480-2818-48ad-859d-dd5153250007", "metadata": {}, "source": [ "### 2.2.3 Standardize X Variables Row-wise " ] }, { "cell_type": "code", "execution_count": 12, "id": "a5401e9b-1a1f-4914-838f-cac6fa26ee1b", "metadata": {}, "outputs": [], "source": [ "# Scale the X features using MinMax Scaler\n", "data_processor.standardize_X_row_wise(output_indicator='Trained_StandardScaler_X_RowWise')" ] }, { "cell_type": "code", "execution_count": 13, "id": "41659bce-458d-4a04-9f76-97c1de4c2336", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_boxplot( \n", " data = data_processor.X_train_standardized_rowwise[:, ::-1],\n", " title='Scaled main 104 Features',\n", " xlabel='Wavelength [$\\mu$m]',\n", " ylabel='Scaled Values',\n", " xticks_list=wavelength_names[::-1],\n", " fig_size=(18, 5),\n", " saved_file_name = 'Scaled_input_fluxes',\n", " __reference_data__ = __reference_data_path__,\n", " __save_plots__=True\n", " )" ] }, { "cell_type": "markdown", "id": "99348432-ec3b-445d-922f-dea2eef0a605", "metadata": {}, "source": [ "### 2.2.4 Standardize y Variables Column-wise " ] }, { "cell_type": "code", "execution_count": 14, "id": "ba7f068d-9503-4b77-b516-03d432309423", "metadata": {}, "outputs": [], "source": [ "# Standardize the y features using Standard Scaler\n", "data_processor.standardize_y_column_wise(output_indicator='Trained_StandardScaler_y_ColWise')" ] }, { "cell_type": "code", "execution_count": 15, "id": "1d90e605-c450-40cc-8cb7-57c8fe5bc6b9", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_boxplot( \n", " data = data_processor.y_train_standardized_columnwise,\n", " title='Scaled main 104 Features',\n", " xlabel='Wavelength',\n", " ylabel='Scaled Output Values',\n", " xticks_list=['','$\\log g$', 'T$_{eff}$', 'C/O ratio', '[M/H]'],\n", " fig_size=(5, 5),\n", " saved_file_name = 'Scaled_output_parameters',\n", " __reference_data__ = __reference_data_path__,\n", " __save_plots__=True\n", " )" ] }, { "cell_type": "markdown", "id": "9a4e7224-b203-448e-b531-78925f44e645", "metadata": {}, "source": [ "### 2.2.5 Feature engeenering: Take Min and Max of each row (BD spectra) " ] }, { "cell_type": "code", "execution_count": 16, "id": "b4dec506-00b2-478e-b7d5-3733f1e4efcf", "metadata": {}, "outputs": [], "source": [ "# train\n", "data_processor.X_train_min = data_processor.X_train.min(axis=1)\n", "data_processor.X_train_max = data_processor.X_train.max(axis=1)\n", "\n", "# validation\n", "data_processor.X_val_min = data_processor.X_val.min(axis=1)\n", "data_processor.X_val_max = data_processor.X_val.max(axis=1)\n", "\n", "# test\n", "data_processor.X_test_min = data_processor.X_test.min(axis=1)\n", "data_processor.X_test_max = data_processor.X_test.max(axis=1)" ] }, { "cell_type": "code", "execution_count": 17, "id": "ab93721b-c0d0-4d4d-969a-d36bed701a67", "metadata": {}, "outputs": [], "source": [ "df_MinMax_train = pd.DataFrame((data_processor.X_train_min, data_processor.X_train_max)).T\n", "df_MinMax_val = pd.DataFrame((data_processor.X_val_min, data_processor.X_val_max)).T\n", "df_MinMax_test = pd.DataFrame((data_processor.X_test_min, data_processor.X_test_max)).T" ] }, { "cell_type": "code", "execution_count": 18, "id": "915c7c1f-2e5e-46ea-bcb9-29c6b4203f8c", "metadata": {}, "outputs": [], "source": [ "df_MinMax_train.rename(columns={0:'min', 1:'max'}, inplace=True)\n", "df_MinMax_val.rename(columns={0:'min', 1:'max'}, inplace=True)\n", "df_MinMax_test.rename(columns={0:'min', 1:'max'}, inplace=True)" ] }, { "cell_type": "code", "execution_count": 19, "id": "1aad7765-9e8e-436a-9760-a3b2210c4c7a", "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", "
minmax
08.265340e-123.445259e-08
18.080712e-228.397132e-14
22.734403e-078.632182e-06
34.414951e-163.373262e-10
43.722576e-076.859888e-06
\n", "
" ], "text/plain": [ " min max\n", "0 8.265340e-12 3.445259e-08\n", "1 8.080712e-22 8.397132e-14\n", "2 2.734403e-07 8.632182e-06\n", "3 4.414951e-16 3.373262e-10\n", "4 3.722576e-07 6.859888e-06" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_MinMax_train.head()" ] }, { "cell_type": "markdown", "id": "8fb8ee2c-2127-4ca7-b1b1-619f6b5a37bc", "metadata": {}, "source": [ "### 2.2.6 Scale Min Max features - ColumnWise" ] }, { "cell_type": "code", "execution_count": 20, "id": "1ba420c3-13b0-418b-ab72-3d0dc45e156b", "metadata": {}, "outputs": [], "source": [ "data_processor.standardize_X_column_wise(\n", " output_indicator='Trained_StandardScaler_X_ColWise_MinMax',\n", " X_train = df_MinMax_train.to_numpy(),\n", " X_val = df_MinMax_val.to_numpy(),\n", " X_test = df_MinMax_test.to_numpy(),\n", " )" ] }, { "cell_type": "code", "execution_count": 21, "id": "f00b13c5-d42b-442c-b9c2-690cace08a0d", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_boxplot( \n", " data = data_processor.X_test_standardized_columnwise,\n", " title='Scaled Min Max Inputs - ColumnWise',\n", " xlabel='Wavelength',\n", " ylabel='Scaled Output Values',\n", " xticks_list= ['','Min','Max'],\n", " fig_size=(5, 5),\n", " saved_file_name = 'Scaled_input_Min_Max_fluxes',\n", " __reference_data__ = __reference_data_path__,\n", " __save_plots__=True\n", " )" ] }, { "cell_type": "markdown", "id": "ea261364-8478-4ffd-b3c8-2e51a464f911", "metadata": {}, "source": [ "---" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.5" } }, "nbformat": 4, "nbformat_minor": 5 }