Skip to content

Instantly share code, notes, and snippets.

@dvorkbod
Last active September 6, 2019 07:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dvorkbod/caab1b6ce5bb5a8cabc742ddef477b22 to your computer and use it in GitHub Desktop.
Save dvorkbod/caab1b6ce5bb5a8cabc742ddef477b22 to your computer and use it in GitHub Desktop.
ML_intro_DutchShellFish.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "ML_intro_DutchShellFish.ipynb",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/dvorkbod/caab1b6ce5bb5a8cabc742ddef477b22/ml_intro_dutchshellfish.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LLX2X2KqVsl6",
"colab_type": "text"
},
"source": [
"# EMODnet workshop on machine learning"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "GJBs_flRovLc"
},
"source": [
"## Getting Started\n",
"\n",
"The document you are reading is a [Jupyter notebook](https://jupyter.org/), hosted in Colaboratory. It is not a static page, but an interactive environment that lets you write and execute code in Python and other languages.\n",
"\n",
"For example, here is a **code cell** with a short Python script that computes a value, stores it in a variable, and prints the result:"
]
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"id": "gJr_9dXGpJ05",
"outputId": "6cc9ba17-a11e-4f8b-a94e-c4a2b2bee4a8",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"seconds_in_a_day = 24 * 60 * 60\n",
"seconds_in_a_day"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"86400"
]
},
"metadata": {
"tags": []
},
"execution_count": 1
}
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "2fhs6GZ4qFMx"
},
"source": [
"To execute the code in the above cell, select it with a click and then either press the play button to the left of the code, or use the keyboard shortcut \"Command/Ctrl+Enter\".\n",
"\n",
"All cells modify the same global state, so variables that you define by executing a cell can be used in other cells:"
]
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"id": "-gE-Ez1qtyIA",
"outputId": "027661c2-9854-4c4c-8cba-1a50729e871d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"seconds_in_a_week = 7 * seconds_in_a_day\n",
"seconds_in_a_week"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"604800"
]
},
"metadata": {
"tags": []
},
"execution_count": 2
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2h6A2gfMubRf",
"colab_type": "text"
},
"source": [
"## Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UJ4YJYHwuGq8",
"colab_type": "text"
},
"source": [
"Let's implement some machine learning techniques to perform classification and regression.\n",
"I have prepared a dataset for you, describing some shellfish habitat locations on the Dutch coast."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6rikOsS4uxsI",
"colab_type": "text"
},
"source": [
"We first import some packages to facilitate data manipulation and plotting.\n",
"We will be using `pandas` dataframes. For plotting, we will use `matplotlib` and `seaborn`. Throughout the text, you will encounter some more import statements. I could have included them all here, but I prefer to keep them close to where we first use them, so you can easily know what to google for inspiration or more explanation."
]
},
{
"cell_type": "code",
"metadata": {
"id": "n3TDojlMz6Sh",
"colab_type": "code",
"colab": {}
},
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "EkIrN8CQvLfP",
"colab_type": "text"
},
"source": [
"I have prepared different datasets. The datasets consist of 20 000 samples, but differ in the number of classes they contain. This will make the classification easier or harder (as good as impossible).\n",
"\n",
"Datsets are publicly hosted at gist.github.com."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3WZGd9J4vq8q",
"colab_type": "text"
},
"source": [
"Uncomment one `url` below to choose your dataset.\n",
"Best to start with the small 3 classes dataset first."
]
},
{
"cell_type": "code",
"metadata": {
"id": "trHN43K3z84B",
"colab_type": "code",
"outputId": "48e7bb1f-3a92-4d71-a1fb-a06f3fb9a532",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 198
}
},
"source": [
"# Small many classes dataset\n",
"#url = 'https://gist.githubusercontent.com/dvorkbod/1c50ff0091b7bbd3e9e8cb8f2a2800fd/raw/16ed8f92e493c2fa5e22867b45556c8b66d544dc/DutchShellFish_restricted_manyclasses.csv'\n",
"\n",
"# Tiny many classes dataset\n",
"#url = 'https://gist.githubusercontent.com/dvorkbod/1c50ff0091b7bbd3e9e8cb8f2a2800fd/raw/16ed8f92e493c2fa5e22867b45556c8b66d544dc/DutchShellFish_restricted_tinysample.csv'\n",
"\n",
"# Small 7 classes dataset\n",
"#url = 'https://gist.githubusercontent.com/dvorkbod/1c50ff0091b7bbd3e9e8cb8f2a2800fd/raw/16ed8f92e493c2fa5e22867b45556c8b66d544dc/DutchShellFish_restricted_7classes.csv'\n",
"\n",
"# Small 5 classes dataset\n",
"#url = 'https://gist.githubusercontent.com/dvorkbod/1c50ff0091b7bbd3e9e8cb8f2a2800fd/raw/16ed8f92e493c2fa5e22867b45556c8b66d544dc/DutchShellFish_restricted_5classes.csv'\n",
"\n",
"# Small 3 classes dataset\n",
"url = 'https://gist.githubusercontent.com/dvorkbod/433cc731c5d497d1db6140225361dbdb/raw/4fb2d10a5bb782c3f643315d6d5fb487964b1367/DutchShellFish_restricted_3classes.csv'\n",
"\n",
"# Tiny 3 classes dataset\n",
"#url = 'https://gist.githubusercontent.com/dvorkbod/433cc731c5d497d1db6140225361dbdb/raw/4fb2d10a5bb782c3f643315d6d5fb487964b1367/DutchShellFish_restricted_3classes_tiny.csv'\n",
"\n",
"class_df = pd.read_csv(url)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "error",
"ename": "NameError",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-1-50755b92b673>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m#url = 'https://gist.githubusercontent.com/dvorkbod/433cc731c5d497d1db6140225361dbdb/raw/4fb2d10a5bb782c3f643315d6d5fb487964b1367/DutchShellFish_restricted_3classes_tiny.csv'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mclass_df\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'pd' is not defined"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "kmq3GeO6y-ud",
"colab_type": "text"
},
"source": [
"## First look at the data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TRea8LxfwLK4",
"colab_type": "text"
},
"source": [
"Now that we have picked a dataset, let's take a look at the column names. These are the *features* of the objects in the dataset, as well as the *class* of the object."
]
},
{
"cell_type": "code",
"metadata": {
"id": "ZzN7miGuW7mj",
"colab_type": "code",
"outputId": "9620cbab-ea20-4e3f-cd5f-0f88da2c7c89",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 119
}
},
"source": [
"class_df.columns"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['datecollected', 'yearcollected', 'monthcollected', 'decimallongitude',\n",
" 'decimallatitude', 'Bedabundance', 'fishing', 'bathy', 'BO_phosphate',\n",
" 'BO_nitrate', 'BO_salinity', 'BO_sstmax', 'BO_sstmean', 'BO_dissox',\n",
" 'BO2_curvelmax_bdmax', 'BO2_lightbotmax_bdmax', 'coastdist',\n",
" 'substrate', 'scientificname'],\n",
" dtype='object')"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eH5IOuSYwVfF",
"colab_type": "text"
},
"source": [
"The `scientificname` is the name of the shellfish observed at the given longitude and latitude.\n",
"The remainding indicators describe the seawater conditions at that location, as well as the fishing intensity.\n",
"More to the point, we have:\n",
"\n",
"* datecollected, monthcollected: YMD and month of sampling\n",
"* decimallongitude, decimallatitude: location of sampling\n",
"* Bedabundance: count of individuals per m² (#/m^2)\n",
"* fishing: fishing intensity (average number of hours spent by Fishing ships in a square kilometre over a month)\n",
"* bathy: bathymetry information\n",
"* BO_phosphate, BO_nitrate, BO_salinity: environmental layers: phosphate, nitrate, salinity\n",
"* BO_sstmax, BO_sstmean: : max and mean sea surface temperature\n",
"* BO_dissox: dissolved oxygen\n",
"* BO2_curvelmax_bdmax: Current velocity (maximum at max depth)\n",
"* BO2_lightbotmax_bdmax: Light at bottom (maximum at max depth)\n",
"* coastdist: distance to the coast in meters\n",
"* substrate: type of substrate\n",
"* scientificname: species"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Hnbu9316xX5n",
"colab_type": "text"
},
"source": [
"We can observe class distributions by plotting the number of times each `scientificname` is present in the dataset."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cZ3pwXhPycxK",
"colab_type": "text"
},
"source": [
"Let's create `label_id` to refer to `scientificname`. That way, if we later want to classify something else, we have to adjust our code in only one location."
]
},
{
"cell_type": "code",
"metadata": {
"id": "VU9XHeYXyUhO",
"colab_type": "code",
"colab": {}
},
"source": [
"label_id = 'scientificname'"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "s0tON_k90Did",
"colab_type": "code",
"outputId": "d8ba5785-0f89-436b-cdd1-d68cb27ea1ee",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"unique, counts = np.unique(class_df[label_id], return_counts=True)\n",
"\n",
"plt.bar(unique, counts, 1)\n",
"plt.title('Class Frequency')\n",
"plt.xlabel('Class')\n",
"plt.ylabel('Frequency')\n",
"plt.show()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nJM2OiLZWx2Gr8ufS//gzqWagHKpaDGxTGh+VZWZm1scGSuK4GRgraYykDYCDgRktjsnMbJ00IA5V\nRcRKSZ8FrgbWA6ZFxJ0tDmsg8KG7/smfS//jz6QCRUSrYzAzswFkoByqMjOzfsKJw8zMKnHiGEAk\nPSfp1tKrctcrkl4t6eI64qubpBUNyj4t6dAWxLJ/nV3fSDpW0pcrzvOS/dPkfF+QNHhN5q24nlGS\nLpO0QNLfJZ2SF7v0NM9oSfO6mXa8pHfXE201ku6TtFWD8lq/J63icxwDiKQVEbFpq+Nolb7efkmi\n+Bt5vq/WWVr3scCKiPhehXnWaP9Iug9oi4jaboDLfXkjcEZE/DS7EZoKLI2Ir/Qw32jg8oh4fS/E\nMCgiVr7c5XSz7PvohX1YZ4y9yS2OtUD+2jlO0lxJd0jaMcvfWWqd3CJps/IvOEk7S7opp98uaWxr\nt6S68i9zSeMk3ZDbcqmkYVm+vaRrJN2W++i1kjaVNKu0zyZm3dHZmea5wDxgm+xgc27OPyvrfULS\naTl8jqRTJf1F0j2SDszyPSRdXor1NEmfyOETJc3PWLtLDjtJuj6XeWRpOV+SNC9fX2iwT7aW9If8\nXOdJenuWnyFptqQ7JR2XZUcCrwauk3Rdlq0oLetASefk8IdyebdJ+kPFj2pP4KmI+ClARDwHfBH4\nL0mDc39eltu7QNKU0rzrSToz4/6dpI0znnNK+/qFX/yS2iRdn8PHSjpP0p+B8/Lz/WN+nnMl/Uej\nYBvt45z3b5J+LukuSRdr1Zba5xr8DXb9nhxYWseKfN8jY5oBzM+yX0uak9s8mf4mIvwaIC/gOeDW\n0uvDWX4f8Lkc/gxwVg7/BnhrDm9Kcfn1aGBelv0QOCSHNwA2bvU2rmb7VzQoOxb4cg7fDrwzh48H\nTs7hG4H35/BGwODcF5tn2VZAO6DcP88Du+W04RTd3YzJ8S3y/RPAaTl8DnARxQ+xnSj6VQPYg+LX\ncmesp+V8WwJ382KLf2g32/UXYMOM72FgfeDNwB3AJvmZ3gm8qbx/gKOA/5vD6wGbdYl9PeB64I2l\n789WjfYzcCBwTg7fAYzsLubVfHZHAic1KL8FeGPulwdy32xMkbTb8vNYCYzL+hcCHyvt9wO7bkPO\nd31pP84hv9v52W+Uw2OB2Q1iariPM5bgxb+pabz43buPxn+Dn2DV78mBXfczxffkcfI71uWz6twX\nW7b676/8cotjYHkyIsaVXheUpl2S73MovuAAfwZ+kL8qh8ZLm8B/BY6R9FVgu4h4ss7g6yRpCMU2\n/j6LpgPvkLQZxT+7SwEi4qmIeIIiSXxb0u3ANRT9oY3Iee+PiBtyeDfgDxFxb86/tJsQfh0Rz0fE\n/NJyurMceAo4W9IHgCe6qXdFRDwdxeGPJbnctwGXRsTjEbGC4nN/e5f5bgYOU3G46w0R8ViWHyRp\nLsU/650pklwVfwbOkfRJiuTT22ZGxMP5PbyEYlsB7o2IW3O4/P1u1ozSd3t94ExJd1Ak+0b7oKd9\nvDAi/pzDPyvFCI3/Bpt1U+d3LB0p6TbgBopeM/rV0QAnjrXH0/n+HHljZ0ScCPwfil8tf+5sPneK\niF8A+wNPAldK2rPvwm25QyhaE2+OiHHAQxStESh+/VX1dGlY+b6SVf/GNoLihlaKHp8vBt4HXNXE\nMl/4XFcnIv4AvIOiW55zJB0qaQzwZWBCRLwRuIIXt/cli+gacy7308DXKf6RzZG0ZTPxpPkUv+Rf\nIGlzYFuK1l7X9ZbHm9kP5X3ddbvKn+cXKT7rXShaJj2enG+guxjLca42Rkmv6LLuF2KUtAfwbmD3\niNiFItF391m1hBPHWkzSayPijoj4DsWv0B27TH8NcE9EnApcRnHIYECKiOXAss7j+cDHgd/nr+1F\nkg4AkLRhHpceAiyJiGclvYvuewW9gaLlMibn36JCWPdTnKfYUNJQYEIuY1NgSERcSfGPbJcKy/wj\ncECeF9gEeH+WvUDSdsBDEXEmcBYwHtic4p/TckkjKJ5t0+kxYLPS+EOS/i3/ub2/tNzXRsSNEfEN\noINV+49bnVnAYOUVcCpOjn+f4jBYZ4vrPZK2yHMYB1C0cJp1Hy8mpg/2UG8I8EAUFzx8nMYtp572\n8baSds/hjwJ/WsMY96do/XQX47KIeCJ/7O1WYR19woljYNlYq16Oe+Jq6n8hT+7dDjwL/LbL9IOA\neZJuBV4PnFtDzL1psKRFpdeXukyfBHw3t3ccxXkOKP5BHJnlfwFeBfwcaMtDFocCf2u0wojooOiu\n/5I8dHBBo3rdzLuQ4pj8vHy/JSdtBlye8fwJ6LodPS1zLsWx8psozt2cFRG3dKm2B3CbpFuADwOn\nRMRtuf6/Ab9g1X/KU4GrOk+OA0cDl1PsqwdK9b6bJ37n5bTbKsQdFP+APyRpAfC/FIfrjilVuwn4\nFcW5ql9FxOxmlw8cB5wiaTbFL/7unA5Mys9yRxq0Llezj+8GjpB0FzAMOKNCjGcC78x1795o3ekq\nYFCu40SKHy/9ii/HNbOWU3G1WVtEfLbVsXRHvXhp8EDnFoeZmVXiFoeZmVXiFoeZmVXixGFmZpU4\ncZiZWSVOHGYvk6RXSTpfRY+WcY2QAAABY0lEQVSvcyRdKel16qZXV7OBbkA8Otasv5Ik4FJgekQc\nnGW7sPpuR8wGLLc4zF6edwHPRsSPOwvyZruFnePd9ciqBr3YSlove1GdlzfbfbHvN8msZ25xmL08\nr6fo1K4nS4D3RMRTKrqu/yVFP0kfBa6OiBOyC47BFHe8j+y8ySy7KjHrV5w4zOq3PnCapHEU3WG8\nLstvBqZJWp+id91bJd0DvEbSDyk6IvxdSyI264EPVZm9PHfSpdfXBhr2yNqoF9uIWJb1rgc+TdFJ\noVm/4sRh9vJcC2xYfkqbpDeyas+xDXtkbdSLrYqn2L0iIn5F0YX5+L7ZDLPm+VCV2csQESHp/cDJ\n+UCspyi6zy4/0vV04FfZpfhVvNgr6h7AVyQ9C6yg6KV3JPDT7NIc4Gu1b4RZRe6ryszMKvGhKjMz\nq8SJw8zMKnHiMDOzSpw4zMysEicOMzOrxInDzMwqceIwM7NK/j9aCW0Y5KicEgAAAABJRU5ErkJg\ngg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "X-nmOZrwyxWm",
"colab_type": "text"
},
"source": [
"In the three-class dataset, we have one class that is more prevalent, and two that are about equally common."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z3GTrmLdy5Qk",
"colab_type": "text"
},
"source": [
"#### Consider plotting the substrate distribution as well. You can repurpose the code from above!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tRsHeXqq0TlG",
"colab_type": "text"
},
"source": [
"## Correlation of descriptors"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XZ2vhTlY0ZJn",
"colab_type": "text"
},
"source": [
"A first step in machine learning is often to look at the correlation between different indicators. Some indicators that are highly correlated with each other could end up being redundant."
]
},
{
"cell_type": "code",
"metadata": {
"id": "fBqNPtuT1rBZ",
"colab_type": "code",
"outputId": "00da37d2-78ad-4fff-b769-6b0c490b6669",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 355
}
},
"source": [
"corr = class_df.corr()\n",
"ax = sns.heatmap(\n",
" corr, \n",
" vmin=-1, vmax=1, center=0,\n",
" cmap=sns.diverging_palette(20, 220, n=200),\n",
" square=True\n",
")\n",
"ax.set_xticklabels(\n",
" ax.get_xticklabels(),\n",
" rotation=45,\n",
" horizontalalignment='right'\n",
");"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaYAAAFSCAYAAAC5cnsMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsnXm8XdP5/9+fm3kezHOIECQEMcQY\n81hUKaWtoBSlZtVWVata6tdBTaW+BE1rLKIUNRNTDBnMlLTmMVIpIcl9fn+s5+TunJx77zn73tx7\nzr3P+/Xar7P32utZa+19zlnPXsP+LJkZQRAEQVAt1LV3AYIgCIIgSzimIAiCoKoIxxQEQRBUFeGY\ngiAIgqoiHFMQBEFQVYRjCoIgCKqKcExBEARBVRGOKQiCIKgqwjEFQRAEVUXX9i5AUFuMPeOCiqVC\nbtlvi4rzqVtxaMU2waJ0//Lzim2+7N5rMZQkKJd+/fqppWlU8j+9/4yjW5xfaxMtpiAIgqCqiBZT\nEARBB0OqukZQRUSLqUqQNFbS331/nKQLcqbzoxw2ufMLgqD6qJPK3qqRcEyLCUld2inrih1TEAQd\nC6n8rRoJxwRI+rmk4zLHZ0k6VtLJkiZLmibpZ5nzN0t6StJzkg7PhM+W9BtJU4ExkjaS9IikqZKe\nkNRPUk9JV0iaLukZSds0U7alJN3o5ZgsaXMP75tJZ5qkr0k6G+glaYqkCR7vm573FEmXFBympIMl\nvSzpCWDzVr2hQRAELSDGmBKXA38Dfi+pDtif1PLYDtgYEDBR0lZm9iBwiJl9LKkXMFnSjWb2EdAH\neNzMTpTUHXgR2M/MJkvqD3wOHAuYmY2UNBy4S9IaTZTtPOB3ZvawpJWBO4G1gJ8As8xsJICkQWZ2\no6SjzWyUh60F7AdsbmZzJV0EHCjpn8DPgA2BWcB9wDOtcyuDIGhvunZprw6b1iEcE2BmMyR9JGl9\nYBlSJb0RsCMNFXZfYBjwIPB9SV/18JU8/CNgPnCjh68JvGNmkz2P/wJI2gI438NelPRvoCnHtD2w\ndmYws7+kvh6+f+YaZpaw3Y7kfCa7fS/gfWAT4H4z+8DLdG1TZfBW4eEAw3bfn+U3jAZWEFQz1Tp2\nVC7hmBq4DBgHLEtqQW0H/MrMLslGkjSW5BTGmNlnku4HevrpOWY2v5XLVQdsamZzispRjq2AK83s\nh0W2e1VSADO7FLgU8r3HFARB21JXV9uOKcaYGrgJ2JnUUrrTt0O8dYKkFSQtDQwAZrpTGg5s2kh6\nLwHLSdrI7ftJ6go8BBzoYWsAK3vcxrgLOKZwIGmU7/4T+F4mfJDvzpXUzffvAfbxciNpsKRVgMeB\nrSUt4XH3bfrWBEEQtB3hmBwz+5I01nKdmc03s7uAvwCPSpoO3AD0A+4Aukp6ATgbeKyJ9PYDzvfJ\nEP8ktawuAuo8zWuBcWb2RRNF+z4w2ic4PA8c4eG/AAZJetbTL0yiuBSYJmmCmT0PnEYax5rmZVjO\nzN4BzgAeBSYBL1R0s4IgqGpqfbq4zKJnBsAnPTwN7Gtmr7R3eaqVkCSqLUKSqPZoDUmivc79v7L/\npzeffGjVeadoMQGS1gZeBe4JpxQEQa0jqeytGonJD4B3ea3W3uWoBfK0fva89uGKba4d+1bFNgB1\nXSr/SfcctVmuvOZ26dZ8pBLUT32kYptnBw7JldeKgwdWbPPKm/nu/YarrZzL7q2PP6nYZsU3n8uV\nV48ll63YZrr658prva6Vt1YB6Dc8n12GLjU++SEcUxAEQQejWltC5RKOKQiCoINRrZMayiUcUxAE\nQQejTrU9faC2S99OSBoo6ajM8QJl8BamGwrjQRC0mDqVv1Uj4ZjyMRA4qtlY7UcojAdBJ6Y1Z+VJ\n2lnSS5JelXRqifMrS7rPRamnSdq1peXv8I5J0hBJL0oa72raEyRtL2mSpFckbeyKCDf7TX1M0rpu\ne4akyyXdL+k1Sd/3ZM8Ghrpi97ke1lfSDZ7XBPk3rlAYD4KgjamrU9lbU3hdcSGwC7A28A1/vSbL\naSRhgvVJ+p0Xtbj8LU2gRlgd+A0w3LcDgC2Ak0iti58Bz5jZun58VcZ2OLATSWX8py7hcyrwLzMb\nZWYne7z1geNIX95qwOZKCuPXAsea2Xokjb3PSVJC5srg3wCulNSTxikojG8EfI2k6wcZhXEv+71m\ndirwuZftQC2sMD6KJDR7oKTl/Lo393tR/GNbgKTDJT0p6cnx193YWLQgCKqELqore2uGjYFXzew1\nV7O5BtizKI4BhTn1A4C3W1r+zjL54XUzmw4g6TnSi7TmskBDgFVIFT5mdq9ryBVu9G0uGfSFpPdJ\n6uOleMLM3vQ8pni6s+gACuNZEddZL0wJqZAg6DysALyROX6TVHdkOYMke3YMaemf7VuaaWdxTFkt\nuvrMcT3pHswt03Y+jd+zcuPlod0VxoMgqB0qeY9JmWVtnEv9YbRcvgGMN7PfSBoDXC1phJnVV5DG\nQnSWrrzmyCp+jwU+LLRuGuFTkqBrc4TCeBAEbU7XLnVlb2Z2qZmNzmxZp/QWac25Ait6WJZDgesA\nzOxRklj1ki0pfzimxBnAhkoK3GcDBzUV2VernaSk7H1uE/FCYTwIglpmMjBM0qo+Zr4/MLEozn9I\nQwaFVbN7Ah+0JNNQFw8qIs8YUz6tvFUrtoHQyisml1beu+/nyiu08hYmr1Ze39WGt/jtoiP+dH3Z\n/9M/HrZvk/n59O/fA12Ay83sLEk/B540s4k+S+9PpFW+DTjFlw3KTWcZYwqCIOg0VDLG1Bxmdjtw\ne1HY6Zn952nl103CMQUVkWedpDxK4fvd/3rFNgA9ulX+k751xIa58vpgzrxcdq/1q7xlMfCiU3Ll\npfUrbw2u9M5/cuXVY+9xuey6XHNJxTbf7L5errzGrFn5ePypWw7Olddn/YbksmsNalwqLxxTEARB\nR6NrXW1PHwjHFARB0MFoza689iAcUxAEQQej1pe9qO32XgbXtTsph13lU6RKp7NAnTtvWcrI43Yl\nZfOF1M0rsG8VFfQgCKqburq6srdqpDpL1YaYWb65wu2Ame1qZp9Q/ermQRC0I7HsRTsi6ceujv0w\nsKaHDZV0h6SnJD0kabiHLyPpJlf5nippMw+f7Z9jJT0g6RYlJfGzJR3oqtzTJQ31eF+R9Lirgt8t\nqTHtvEIZRykplk/z/Ad5+P2SzvH0X5a0pYf3lnSdpOc9/uOSRvu5GZKWpEjdvLglJOkCSeN8f2cl\nxfOngb0zcfooKac/4ddSLMwYBEHQLtSsY5K0Iekt5FHArsBGfupS4Bgz25CkHl6QYP8D8ICrfG8A\nlHpDbz2SqsJawLeANcxsY5Kad0ES6GGSbt36JKXd5ubxXgX8wNW/pwM/zZzr6ukflwk/CphpZmuT\n1MNLzWUupW6+CEqK5X8CvuLpZN8u/DFJjXxjkmLEuZL6NJLOAnXxK664opnLDYKgvan1rrxanvyw\nJXCTmX0GIGkiSQpjM+D6zKyUHv65LfBtADObT1L+LmayS/Ug6V8kjTpIDqUg97MicK3SshHdgUZf\nuJE0ABhoZg940JXA9Zkof/PPp0hq5JCWoDjPy/msywjlZThJWf0VL8+faRBr3BHYIzMW1pOk2beI\nNFFWXfzTTz8NqZAgqHJiunh1UQd84usO5aE5FXJIy1X81qU4xpL05vJSSL+lauTzWLj129TaTgUE\nfM3MmhKPDYIgaHNq2a0+COwlqZekfqTuqs+A1yXtC6BE4RXxe4AjPbyLt2byMIAGdd3mxF5nATML\n40ek7sEHmjCBJKj6dS/n2sDIEnGK1c3/TVqvqYekgbigIvAiMKQwPkaSpy9wJ3CMtGCl3fWbKVcQ\nBDWCWnFp9fagZh2TmT1NUuaeCvyDpIILaTmJQ5XUtp+jYbXFY4FtlBS9n6KJFVub4QxSV+FTwIdl\nxD+INH4zjTQe9vNm4l8ELKWkIv4L0jUs1O1YrG5uZm+QZOef9c9nPN4cUtfdbT75IavOeSbQjaRC\n/pwfB0HQAZDK36qRmu7KM7OzgLNKnNq5RNz3WHRJYMysr3/eD9yfCR+b2V9wzsxuAW4pkc54YLzv\nn5EJnwJsWiJ+Nv0PaRhjmgN808zmeEvnblKLCDMbkrE5oCi9UygxEcPM7iCNNRWHfw58tzg8CILa\np0uMMQWtTG/gPqXF+wQc5es61Sx5lqLII8YK8MXcyoVVrT7fQpt9evTKZffRp7Mrtun1Ub7lbWa/\n+nzFNn1WXTNXXp+/NSOXXf0XTS1FVpouPfNVvG9/XGrOU9PMnTUzV14fk+/3Mbh3OUPETVPryg/h\nmKoMM/sUGN3e5QiCoHap1rGjcgnHFARB0MGobbcUjikIgqDDUetjTLVd+grJK66qdhJ6lbSXTxkv\nHP9c0va+f5yk3jnKUPkARxAEQRvSqRxTXtpR6HUvMtPazex0M7vbD48jTZQIgiBYiLo6lb1VIx3e\nMak2hF4PkzTZ87zRhVw3A/YgvQM1xcs8XtI+kr4PLE+avXdftoy+v4+k8b6/qqRHvXy/KMr3ZM93\nmqSftcb9DoKg/elaV1f2Vo1UZ6laiRoSev2bmW3k+b4AHGpmjwATgZNdrPVfhchm9gfgbWAbM9um\ndJILOA+42MxGAu8UAiXtCAwDNibdnw0lbdVMWkEQ1AB1UtlbNdKhHRMZoVcz+y+pos8KvU4BLgGW\n8/jbAhdDEnp1SaFiJpvZO2b2BVAs9DrE91cE7nSViZOBdZop5whvuU0nKVc0F78SNgf+6vtXZ8J3\n9O0Z4GnSS7jDSiUQ6uJBELQlnXFWXjUKvY4H9jKzqUrrKI3NUa6s6nfxG3qlFMEF/MrMLmk24VAX\nD4KaotbfY+roLaaqF3p1+gHvuNrDgZnwYrFWmjj3nqS1JNUBX82ETyJ1Z1KU9p3AIZL6AkhaQdLS\nZZQ1CIIqJ0Rcq5gaEnr9CfA4yYm8mAm/BjjZJ1EMLbK5FLijMPmBtHjg34FHyIwlka7pe35NKxQC\nzewu4C/Ao37uBhp3gkEQ1BBdu9SVvVUjHb4rr0aEXi/Gx7aK4k9iYec4LnPufFKXYeH4BpJzKU7j\ndWBMJui0zLnz8EUJgyAIqoUO75iCIAg6G9U6265cZBZj2UH5tNXkhx7zKlechnxK4Tudf12uvCYc\nW87w4aIs8eV/K7b5tM/gXHl1yfECZbf5c3PlNUf5nnPzlLHvF/kETL7o2qNim9n1+Sr5QV98msuu\n59LLtdirXHrPY2X/Tw/fbtOq82LRYgqCIOhg1HqLqTpHvoIgCIJOS7SYgiAIOhjVqoFXLp2qxSRp\nvuvOTZX0dEELrwL7chTBx0vap2UlbTTtUAYPgqBZutTVlb1VI52txfR5QfFB0k7Ar4Ct27dIQRAE\nrUu1vjhbLtXpLtuG/sDMwkFjStul1Mk9fBFF8Eza27u23MuSdvf4C9Zi8uO/u1wRkmZLOsvTeqyg\nRt6YMrikvpLu8VbfdEl7evgQSS9I+pOk5yTdJamXn1vdlc4LrcWCEnoojAdBUFV0NsfUy7vyXiSp\ngZ8JjSttN6FODiUUwTPnhnhauwF/lFSsXVdMH+AxT+tB4DAPL6kMDswBvmpmGwDbAL9RwyPSMOBC\nM1sH+AT4modP8PD1SCK275SrMB4irkFQW9Sp/K0a6cxdeWOAqySNYGGlbYC+pAq7H65O7jYTM2mN\n8FbMQI9/Z+bcdWZWD7wi6TWScndTfEmSE4IkhbSD729Og2O5GjjH9wX80p1IPUlqqLDm0+tmNiWT\n1hDXCVzBzG4CMLM5fj2NXfeD2cKFiGsQ1BbdunRptbQk7Ux6SO4CXGZmZzcS72sk9ZmNzOzJluTZ\n2RzTAszsUUlLAkvRiNK2pOOaSGI8jSuCF1feBsxj4RZqthU11xredJ7Pwt9LKUdwoJd7QzObK2lG\nJr3sm6nzgV5NXEPZCuNBENQOrTXGJKkLcCHpYflNYLKkiWb2fFG8fiRdzsdbI9/O1pW3AKVVa7sA\nH9G40nYpdfICjSmCA+wrqc7HcVYDXgJmAKM8fCVS91lzNKYMPgB4353SNsAqTSViZp8Cb0ray6+v\nh4+JhcJ4EARNsTHwqpm9ZmZfkoSlF9ETJQ2LnEMaZmgxna3F1EtpcUBIrYWDzGw+cJektUhK2wCz\ngW+a2dOSCurk79OgTg4NiuAf+GdWmfs/wBOkCRZHmNkcSZOA14HnSWNST5dR3mOBv0j6AQuLwk4A\nbnVV8CdZWJG8Mb4FXCLp58BcYF8zK3ndfq1BENQolbSYJB0OHJ4JutS77yENE7yROfcmsEmR/QbA\nSmZ2m6ST85W4qEyhlRdUQmjlNRBaeQsTWnkL055aeX+bPL3s/+neG41sND9/J3NnM/uOH38L2MTM\njvbjOuBeYJyZzZB0P3BSjDEFVc/cLt0qtvlgzrxcefXp0dSQWmmuPeFg5s2v3KEdeN6VFdsAXLlW\n5ZXj4F33bz5SCebUV/4X7/buf3Ll9dTn+aqTDVdbuWKbd63y3xTABx9V/lDw3Bvv5spr67fy1c2r\n7P/dXHZZWvE9preAlTLHK9KwCCqknqIRwP2e57LAREl7tMQ5hWMKOj15nFIQVDN1tJpjmgwMk7Qq\nySHtDxxQOGlms4AlC8fRYgqCIAhKUtdKUkNmNk/S0aSJUl2Ay83sOR+rftLMJjadQj7CMQVBEHQw\nWlPE1cxuB24vCju9kbhjWyPPTjtdvFqR9H2XFZop6dQm4i0kcVR07nZJAxdfKYMgqGZC+SFobY4C\ntjezN/MmYGa7tmJ5giAI2pRoMVURkv5IeiH3H5KOL7SIJO0r6VkXYM3KBS0v6Q5Jr0j6dSadGZKW\nbEbUdSMXbp0i6VxJz7bpxQZBsNiQVPZWjYRjqiLM7AjgbZIw68zMqdOBnVyAdY9M+ChgP2AksJ8r\nShTTmKjrFcB3XTtwfqteSBAE7UrXui5lb9VIOKbaYBIwXtJhpJkxBe4xs1kuyvo8paWJSom6DgT6\nmdmjHv6XpjIPdfEgqC1ijClY7JjZEZI2IS2j8ZQvxwGLCraW+j4rEXVtLP9QFw+CoM0Ix1QDSBpq\nZo8Dj0vahYXfxK4YM/tE0qeSNvF088kKBEFQlbTWe0ztRTim2uBcScNIwrP3kERlR7UwzUOBP0mq\nBx4AZrUwvSAIqoS6Kp3UUC7hmKoMMxviu+N9w8z2LhF1wXmPs3uJND4k6VgVwv9fxv45M1sXwN+X\napGESBAE1UM4pqBW2U3SD0m/gX8D49q3OEEQtBbVOg28XMIxdVLM7Frg2rbIq37qIxXbvNavcsVp\ngI8+rXw5hD1XWypXXnlUwgEOeqHyJT3G10/IlVce+u9YqoHePMNu+XMuuzmvVr6kx8trbJErr9WW\nWaJim9GPXZ8rrwuW2yyX3bm5rBYmz1Ii1UQ4piAIgg5GtJiCIAiCqqLWx5hqe05hEARB0OEIx1QD\nuOZd2Vp2rjy+fOZ4hqQlm7IJgqDj0LVLXdlbNVKdpQpayjhg+eYiBUHQMQkR16Ct6CppgquF3yCp\nt6TTJU125fFLldgHGA1McOXwggTRMZKeljRd0nBJda5KvhSAH79aOA6CIGgvwjHVDmsCF5nZWsB/\nSes2XWBmG5nZCJIG3u5mdgPpZdkDzWyUmX3u9h+a2QbAxcBJZlYP/Bk40M9vD0w1sw+KMw4R1yCo\nLeqksrdqJGbl1Q5vmNkk3/8z8H3gdUmnAL2BwcBzwK2N2P/NP58CCi+qXA7cAvweOIS0FMYihIhr\nENQWXUIrL2gjih2CARcBo83sDUlnAD2bsC+81blAhdzt3pO0LbAxDa2nIAhqmGodOyqX2narnYuV\nJY3x/QOAh33/Q0l9gX0ycT8F+pWZ7mWkFtj1ZhYLBgZBByDWYwraipeA70m6nLQo4MXAIOBZ4F1g\ncibueOCPkj4HxtA0E0ldeDF4FAQdhFj2IljsmNkMYHiJU6f5Vhz/RuDGTNCQzLkngbGZc+uRJj28\n2ApFDYKgCqijSptCZRKOqRPjy10cSYwtBUGHotbHmGQWk6yC8skzK++pNxeZgd4sfS86pWIbgC8+\nqjyvNS69I1dePW1eLruP/l65Uvi4l/LlNahv74ptDthydK68Zv3v8+YjleDJf/2nYpvvTMsnjK+u\n3Sq2mXPk2bnyWvuzd3LZDRq1aYu9ymsfzCz7f7raUoOqzotFiykIgqCDUa1SQ+USjikIgqCDUetd\neeGYgiAIOhi1Pvmhttt7QRAEQYejUzomSfNd4HSqC5tuljm3jqR7Jb3kIqc/UY52saSxkv7euiVf\nKP1xki6o0OY4SZWPhgdBUFPU1ansrRrplI4J+NwFTtcDfgj8CsCVuCcCZ5vZmqR3fDYjCaZ2BI4j\n6eoFQdCBqXUR187qmLL0B2b6/gHAJDO7C8DMPgOOBk5tzFjSGZKulvSot7AOy5zu60tUvOhLVsht\ntpP0jC9BcbmkHh5+tqTnJU2T9P88bLykP7q698uSds+kv7ykOzzfX2fKdLHHf07Szzzs+6Q1mu6T\ndJ+H7ejlflrS9S5tVOoaQ108CGqIurq6srdqpLNOfuglaQpJ9HQ5YFsPX4ekvr0AM/uXpL6S+pvZ\nfxtJb11gU6AP8Iyk2zx8fU/zbWASsLmkJ0mSQduZ2cuSrgKOlHQ18FVguJmZpIGZ9IeQRFaHkhzL\n6h4+yvP4AnhJ0vlm9gbwYzP7WFIX4B5J65rZHySdAGxjZh/6iranAdub2f8k/QA4Afh58cWFungQ\nBG1JdbrLxU+hK284sDNwVZ5xpAy3mNnnZvYhcB/JiQA8YWZv+tpHU0gOZk3gdTN72eNcCWwFzALm\nAP8naW/gs0z615lZvZm9ArxGgzzRPWY2y8zmkPTzVvHwr0t6GniG5BjXLlHmTT18kjvpgzL2QRDU\nMF3qVPZWjXRWx7QAM3sUWBJYilS5b5g9L2k1YHYTrSUovSQFNCw1AZnlJhopxzySQ7sB2B3IyhGU\nnb6kVYGTSC2ydYHbKL0choB/uoMeZWZrm9mhjZUvCILaodv8uWVvzSFpZ58M9qrLmBWf7yHpWj//\nuKQhLS1/p3dMkoYDXYCPgAnAFpK293O9gD8Av248BQD2lNRT0hIkgdTJTcR9CRiS6Y77FvCAj+8M\nMLPbgeNJEy8K7OtLnw8FVvM0GqM/8D9glqRlgF0y57LLYTxG6lpc3a+1j6Q1mrnOIAg6ET4ccCGp\nHlkb+Iak4h6YQ4GZZrY68DvgnJbm29nHmCC1HA7ytYg+l7QncL6kC0kO62qguWnZ00hdeEsCZ5rZ\n241V8mY2R9LBwPWSupKc2B9JK9DeIqmnl+mEjNl/gCdITucIT6NkQcxsqqRngBeBN0hjWwUuBe6Q\n9LaZbSNpHPDXwuQL0pjTywRBECQ2Bl41s9cAJF0D7EnqXSqwJ3CG798AXCBJ1gIh1k7pmMysSxPn\nprPwshDlMM3Mvl2Uzv3A/ZnjozP795AmLWR5h4axqWLuNrMjitIfT5pEUTjePbM/rlQiZnY+cH7m\n+F5go0byLEn3LysX6lxx8MDmIxWh9TdrPlIJZr/6fPORisjbzz6nvu3+PnnEWAFmzv6s+UhF7LH6\nsrnyOuf+Kc1HKkG/Xj2aj1REn1WG5cpr7qefVGzzwZw5ufL6cuaHueyqjBVID7gF3gQ2aSyOmc2T\nNAtYAsh9Azp9V14QBEFnJvs6iG+Ht3eZOmWLKQ/e/XZsUfAkM/ve4sy3sdZPEARBa5B9HaQEbwEr\nZY5X9LBScd704YkBpDH73IRjKhMzi+XHgyDobEwGhvls37eA/UlCBFkmkl43eRTYB7i3JeNLEI4p\nCIIgaAQfMzoauJM0GexyM3tO0s+BJ81sIvB/wNWSXgU+JjmvFhGOqRWQNB+YTppNNx842swe8XPr\nkCYcrEAa07sK+EWeJwpJj5jZZv6ewGZm9pcK7QcCB5jZRZXmHQRB7dBj3hfNR1pAvybP+isstxeF\nnZ7ZnwPsW0n5miMmP7QObSIKa2aFqWpDWLQ5jefZ1MPGwLx5B0FQO1h9fdlbNRKOqfVpDVHYyyXd\nL+k1F18tnJvtu2cDWyot3XG80hIYEyXdS9LG6yvpHhdnne7vZhXshrrduZ7myZImu3Dsz1rzRgRB\nEOQhuvJah9YWhR0ObENqY78k6WIzy2qHnAqcVHh3yV+U3QBY18VbuwJfNbP/uljrY5Imut0IMxvl\ndjsCw0jvTwmYKGkrM3swWxifPno4wAW/OZfvHLTQK1tBEFQbVp0toXIJx9Q6fJ6p7MeQRGFHtCC9\n28zsC+ALSe8Dy5BebGuKf5rZx74v4JeStgLqSeNby5Sw2dG3Z/y4L8lRLeSYstNJv/jo/VAXD4Iq\nx+pr+28ajqmVMbNHvZVSEIXdKnu+TFHYssVfM/wvs3+g57+hmc2VNIPGhVx/ZWaXlJF+EAS1Qo23\nmGKMqZVpJVHY5siKsZZiAPC+O6VtaFjOotjuTuAQF5BF0gqSlm5h2YIgaGdqffJDtJhah9YWhW2O\nacB8SVNJenkzi85PAG6VNB14kiToipl9JGmSpGeBf5jZyZLWAh51UdjZwDeB91tYviAI2pMabzGF\nY2oFWlMU1szOKDoekdnv659zaZhgUWB8Jt6HwJhG0j+g6Pg84LxyyxcEQfUTY0xBp+LL7r0qtnnl\nzWJpreZZ6Z3/VGwD0GfVNSu2KWextJJ27+YrY/8d967Y5oBX382VVx6l8J3Ovy5XXjftNTqX3b8H\nj6zYpvcj7+TKq/vAJSq2WX1w5ernAE/3yDf/qdQspUqx+fNaIZX2IxxTO9FeorBBEATVTjimdiJE\nYYMgWGy0TEO13QnHFARB0MGw+vntXYQWEY4pCIKgg2Hza9sxxXtMOZE03zXnprom3WaZc+tIulfS\nS5JekfQT+XzsVsp7tn8uL+mGMuLfLmmgbyHiGgRBVROOKT9toijeFGb2tpntU0a8Xc3sE0JdPAg6\nB2blb1VIOKbWoaWK4lt762uKpGck9WtCITxrN8RflsUVxv8m6Q5vpf06E2+GyyQtpC4u6SpJe2Xi\nTWgkn8MlPSnpySuuiPkaQVDtmFnZWzUSY0z5aU1F8ZOA75nZJJcHmuPhiyiEN7PA4ChgfZLW3kuS\nzjezNzLni9XFtwaOB26WNICG+4IgAAAgAElEQVTUsjuoONGsiOunn35anb/kIAgWUOuTH6LFlJ9C\nV95wYGeSonjecaRJwG997aWBZjaPBoXwacDdNK4QnuUeM5vlK0o+T4NGXknM7AFgmKSlgG8AN3re\nQRDUMvX15W9VSLSYWoGWKoqb2dmSbgN2BSZJ2gnYlPIUwrPkUSW/iqSPtz9wcBnxgyCociy08oIS\niuI/krS9md1djqK4pKGuqTdd0kakhQIbUwhvCaVUyccDTwDvmtnzrZBHEATtTWjldVpaU1H8OHc+\n9cBzwD9IDmQRhfCWUEpd3Mzek/QCcHNL0w+CoDqo9TEmVeusjKBtkNQbmA5sYGazmoufZ/LD5zQq\nvt4oPd58uWIbgM/fmlGxTZdNd8qV11Ov5RNxHfbkbRXb3Ddk81x5vT2z2a90EY4Z2j9XXl+9+clc\ndkfutEXFNtt3qfy6AOq6Vy7IetMn+Ybit3rlgVx2qx92covfeZw55bGy/6eDRm3aau9YthYx+aET\n4wsYvgCcX45TCoKgNrD6+WVv1Uh05bUh1aYobmZ30zpjV0EQVBE2PyY/BGUSiuJBELQJNT4rL7ry\ngiAIgqoiHFNO2kvEVdKPWiOdIAg6LlZfX/ZWjYRjyk97ibiGYwqCoEls/ryyt2okHFPrsDhEXJeT\n9KCHPStpS0ln4+9PueDqEEkvShov6WUP297fVXpF0sae/saSHvW0H5G0pocfL+ly3x/p+fRefLcp\nCIKgecIx5afgIF4ELgPO9PCSIq5AX0mNvSBSEHEdBWwJfE5ycHd62HrAFDM7lYaW2oFuuzrwG5Ja\nxHC328LTLLSuXgS2NLP1gdOBX3r4ecDqkr5KmpTxXXekCxHq4kFQY4RWXqfl84xK9xiSiOuInGkV\nRFwnAH8zszclTQYul9QNuNnMpjRi+7rLGSHpOZKQq7lixBCPMwC4UtIwwIBuAGZWL2kcMA24xMwm\nlcog1MWDoLaodeGEaDG1Amb2KJAVcd0we74cEVfgO0AvkojrcDN7kCQG+xYwXtK3G8k+K9xanzmu\np+HB40zgPjMbAXyFhcVghwGzgeXLuNQgCGqAWn/BNhxTK1BCxHULV1UoTIYoS8TVzM4BJgPDJa0C\nvGdmfyJ1FW7g0ed6K6oSBpAcHMC4TL4DvGxbAUtIanY13CAIaoBYwbbTUhhjmgJci4u4mtnnwJ7A\naZJeIunQTaZ5Eddnfe2luSQR17HAVEnPAPuRxoMgdalN826/cvk18CtPK9t9+zvgQjN7GTgUOFvS\n0hWkGwRBFVLr08VjjCknZtaoMqmP+YytIK1jSgRf6Vtx3B8AP8gEjcicG5fZn1E4512Na2RsTvPw\nQzLx3yBNpAiCoNapceWHcEzBYuetjz+p2KbLNZfkyqv+iy+aj1TEypvtnCuvDVdbOZfdnFcHV2zz\n5L/yKZn361W5mva/B4/MldeROzW3jmVpLr7z4YptVp9Vcp5Osyy5ydiKbdZYP5/6/MCeo3PZtQZt\npZUnaTCpx2gIMAP4upnNbCRuf9IY/M1mdnRT6UZXXhsi6eDM+0qF7cL2LlcQBB0Mqy9/axmnkmYC\nDwPuoYn3NUmTsB4sJ9FoMbUhIeIaBEEHY08ahi2uBO5n4aEGACRtCCwD3AE025SMFlMQBEEHw8zK\n3rIv0Pt2eAVZLWNm7/j+uyTnsxCS6kgiACeVm2i0mIIgCDoYNq98DbzsC/SlkHQ3sGyJUz8uSsck\nlZp/fhRwuwsHlFWmcExNIGk+abq3gPnA0Wb2iJ9bBzgfWIHU8rwK+IW1wivXkn5kZr9sPmYQBMHi\nxcy2b+ycpPckLWdm70haDni/RLQxwJaSjgL6At0lzXaJtZJEV17ThIJ4EAQ1h1l92VsLmQgc5PsH\nAbcsWhY70MxWNrMhpO68q5pyShCOqRKqXUG8j6TLJT3h6e/p4UMkPaS0ZtSCdaMkjZV0v6QbPP0J\naqSdHSKuQVBjtJ3yw9nADpJeAbb3YySNlnRZ3kSjK69permyQ09gOWBbDy+pIC6pr6T+jWjiFRTE\nJ0nqC8wBDicpiJ8lqQvQ28weknR0RiB2COnF132BQ0gqEgUF8T1Irau9SP2995rZIZIGAk943/D7\nwA5mNsdFXP9Kw6yY9f1a3iYJyW4OLPJSSYi4BkFt0VbrLJnZR8B2JcKfJOl/FoePB8Y3l244pqap\nJQXxHYE9JBVmvvQEViY5nQskjSKNk2UVIJ4wszc93SmeVuVvOwZBUFWEungnoQYUxAV8zcfERnmf\n7gvA8cB7pHGw0UD3RtKdTzyoBEHHoN7K36qQcExlUgMK4ncCxxTGiSSt7+EDgHcsjXJ+y68hCIIO\nTCx70bGpJQXxM0kLAE7z7r7CiroXAQdJmkpa4fZ/FaQZBEEt0naSRIuF6LppghpTEP8c+G6JtF4B\n1s0E/cDD7yfJhxTiNSmqGARB7VDrY0zhmILFzopvPlexzTe7r5crry49K+8EuPmL2bnyetcq7W1N\nvLzGFhXbfOeSJl/7aJQ+qwyr2Kb3I+80H6kE2682PJddHqXwEwdsniuvbbutWnlePfPNcHt3tVG5\n7JbMZdWxCMfUykg6GDi2KHiSmX2vPcoTBEHnoxJJomokHFMrEwriQRC0N9W6Mm25xOSHIAiCoKoI\nx9RKSJrvM/imZqV//Nw6ku6V9JLLCP2kMfmfRtKeIWlJ339kcZQ/CIIORI3PygvH1Hq0ieCrmW3W\nfKwgCDozVl9f9laNhGNaPLRU8HUJSXdJes6FEJU5N9s/SwnAdnGx12clTZd0vMcdJekxSdMk3SRp\nkKSukiZLGutxfiXprMVwL4IgaGvq68vfqpBwTK1H4WXcF0kqDoUXXEsKvgJ9JfVvJK2fAg+b2TrA\nTSTNu2IOIAnAjiK1wqYAo4AVzGyEmY2kYRLGVcAPzGxd0svAPzWzecA44GJXsNgZ+FmpwoS6eBDU\nFpWsYFuNxKy81qM1BV+3AvYGMLPbJM0sEWcRAVhJrwGrSTofuA24S9IAYKCZPeB2VwLXe9rPSboa\n+Dswxsy+LFWYUBcPghqjSseOyiVaTIuBlgq+lpnHIgKwZjaT1Hq6HziC1HJrjpHAJ8DSecsSBEF1\nEWNMwSK0VPAVeJDUVYekXYBBJfJYRADWZ+7VmdmNwGnABmY2C5gpaUs3/RbwgKexNzCY5ODO93Wc\ngiCodWp8jCm68lqPwqKCkCYrHGRm84HPlVaTPV/ShSSHdTVNC77+DPiri7E+AvynRJyxwMmS5gKz\ngW8DKwBXSCo8cPzQPw8C/iipN/AacLA7sbOB7czsDUkXkERkDyIIgqAdCcfUSrSy4OtHpIX/Sp3r\n658lBWBpWDojazMF2LRE3DUycf5QbvmCIKhu6ufNbe8itIhwTMFip8eSy1ZsM2bNfF0Mb388q2Kb\nL7r2yJXXBx/lGyJcbZklKraZ2TWfYOzcTz+p2Kb7wMrLB1DXPd99XHKTsRXb5BFjBbh3+ssV2xy/\n45hceS0/u/J7n1ik575yqnS2XbmEY2pHQvA1CILFQbVOAy+XcEztSAi+BkEQLEo4piAIgo5Gjb/H\nFI4pCIKgg2Hz57d3EVpEi99jyquqLelA126bLukRSfmWLF1MFDTp2jjP8ZL2KSPe/ZJGt0WZgiCo\nPeIF2/yq2q8DW7um25m45E1rIylahUEQBDVEays/lK2qbWaPuIQOwGPAik0lLOnb3sKa6vpui7Qw\nMsrbYyU9JGki8LyksyV9LxPvDEkn+f7JrrI9TdIiIqae1gOSbpH0mqd1oKQnvLU31ON9RdLjkp6R\ndLekZTz8PEmn+/5Orgje1H3f3gVTX5a0u9v1knSNpBck3QT0yl6zpHOVlMjvlrSxt6hek7SHxxni\n9+PpbKtW0lcl3aPEcp7nInO7Q8Q1CGoLmz+v7K0aaY3WREHxoCewHLCth5dU1ZbUV1L/Ip24Q4F/\nNJaBpHVIEjubmdmHkgaXUa4NgBFm9rqk9YHfAxf6ua8DO0naERgGbExSa5goaSvXocuyHrAW8DFJ\nOeEyM9tY0rHAMcBxwMPApmZmkr4DnAKcSGpFTpb0EEmKaFezJkcmh3h5hgL3SVodOBL4zMzWkrQu\n8HQmfh/gXjM72Z3WL4AdgLVJL+BOBN4HdjCzOZKGAX8FRpvZTZK+BnyPpC7+UzN7t7hAIeIaBDVG\nTBdvmaq2pG1IjmmLJqJtC1xvZh8CmNnHZST9hJm97vGfkbS0pOVJwqozXYbnWJLCwjNu05fkqIod\n02Qze8fL+y/gLg+fDmzj+ysC10paDuhO6qrEzD6TdJinebwvedEU17njekVJLXw4ScvuD57eNEnT\nMvG/BO7IlOcLM5sraTrJyQF0Ay6QNAqYT0bxgeRYnwUeM7O/NlO2IAhqgKaffaufVh1/MbNHXYOt\noKq9Vfa8ilS1/en/MmAXl+GplHl4d6R3j3XPnPtfUdzrgX2AZYFrC0UCfmVmlzSTzxeZ/frMcT0N\n9/B84LdmNlFp8b0zMjYjSYKuyzeTD0Dxo05zjz5zreFtugVlM7P6zPja8cB7pJZfHTAnY7+i2y0j\nqa6Z1lwQBMFip1XHmFSBqraklYG/Ad8ys+Z0Qu4F9pW0hNsWuvJm0LCkxB6klkFjXAvsT3JO13vY\nncAhkvp6uitIyrv8wwDSEhSQEUJVUgE/EVgf2EXSJs2ks6+kOh+7Wg14iYXVxkcA6+Yo2zvudL5F\n+o4KE0MuB74BvACcUGG6QRBUITZvXtlbNdKaY0xQmar26cASwEVKM8jnmVnJKdC+oN1ZwAOS5pO6\n3sYBfwJukTSV1J1V3EoqTqMf8FahW87M7pK0FvCol2E28E3SmEylnAFcr7So373AqkqJ/h9wkpm9\nLelQ0tpJG5nZnEbS+Q/wBGkiyRE+LnQxSTX8BZIDeaoR28a4CLhR0rdZ+D79CHjIzB72ezhZ0m1m\n9kKF6QdBUEXUuiSRav0CgrYlz+QHe3tGxfn8dvrbFdtAPhHX33xjl1x5vZxTxHVQn94V28z85VHN\nRypBt/6VL7G11JjtcuXVc9kmJ9Y2yn9fnFqxzZVtKOJ664n5VoLpmlPEtddyKymXYYZpPz2y7P/p\nuj+7uMX5tTbxjk+w2Jmu/hXbnLplORMvF2XurFKr0DfN7Pp8/8vn3lhkAmNZjH7s+uYjFTHnyLNz\n5fXBnMYa5o2z+uB8KuHXvJqnowHWWH+nim1O7JmvCyqPUvhXflNqdZnmubjvW81HKsFaJ/0ql11H\noqock48h3VPi1HY5J0dUJZJ+DOxbFHy9mZ3VHuUJgqBjUeuSRFXlmNz5jGrvcixu3AGFEwqCYLHQ\nVo7JJ6JdS3o1ZQbw9YxwQjber4HdSBPu/gkca02MI7W28kMQBEHQ3piVv7WMU4F7zGwYqbfr1OII\nrjSzOWk28QhgI2DrphINxxQEQRDkZU+Swgz+uVeJOEZSBuoO9CC91vNeU4k265jURurhatC5W17S\nDWWUq6T6t6S9JK2dOa5IiVtJG2+z5mO2Po1dU1GcIZKebYvyBEFQm1j9/LK3FrJM4fUb4F1gmUXK\nYvYocB/wjm93NvdKSjktpjZVDzezt82s2aUfmmAvkk5cXsaSriMIgqAmqWTZi6xIs2+HZ9NSEod+\ntsS250J5pjGjRfoGXe9zLZLKzArAtpK2bKr8lXblLTb18MxFLGgRSOot6TpJz0u6SUm9e3Qm7lne\nkntM0jLe0tkDONdbeUM96rf8+FlJG7vtYEk3e6vuMUnrShoCHAEc7/G3VFIwv9jjvOYtqsuVlL7H\nZ8pysX+pz8lVyiUN8Nbkmn78VyXdvKau/3eexj2SlvKwDf06p5IEVwtxx/k1/FPSDElHSzpBSeH8\nMR+YRNJhSgrqUyXdKKm3h9/iL90i6buSJjRSplAXD4JaooIxJjO71MxGZ7ZLF07KtjezESW2W4D3\nlPRB8c9S7wx8laTFOdvMZpMEu5uct1+OY+rllfSLJF27Mz28pHo40Fda5MWVJtXDm+AokuDq2sBP\naJAfgqSq/Zi35B4EDjOzR0ituJO9lVcQTO3tQrNHkSR4AH4GPGNm65IUEK4ysxnAH4Hfuf1DHncQ\n6UYe7+n/zq9/pJIwKsCPXbliXWBrSeua2SySsx4vaX9gkJn9qYnr7QM8aWbrAA8AP/XwK4Bj/FqL\nGQHsTRpQPIukQr4+8CjwbY/zNzPbyO1fIH0fAIcDp/vTy4kkQddFyP5wDz744CaKHwRBNdCGXXkT\naZBgOwi4pUSc/5DqxK6SupEmPrRaV95w0tIIVxXGkcpBDerhPyjXJsMWwDUAZvYsUKyq/Xfff4oG\nJe1S/NXTeBDoL2mgp321h98LLFHCoRa41Zup04H3zGy66849l8n365KeJsklrYN3J5rZP93uQuA7\nzVxvPQ0Cs38maQ0OBAZmluK4usjmPjP71Mw+AGYBt3p4Vl18hNJ6TNOBA718mNl7JGmo+4ATy1Rt\nD4KgymnDFWzPBnaQ9AqwvR8jabSkyzzODcC/SHXSVGCqmd1aKrECFb3H1A7q4U2RVdWeT9PXUqli\ndzFZNfFipfGuklYFTgI2MrOZ3sXXExaonq8FfEZqeb1ZQb7llLMc5fPxwF5mNlXSONI4WoFKlM+D\nIKgF2khqzuv1RTSszOxJ/EHctVO/W0m6FY0xafGphzfGJNKifvhMu5Fl2HwK9CsK28/T2AKY5V1s\nD5FaDygtU/GhO9RS9s3RnySMOktp5dqs+NrxpGbrASQh1qYU0OtI6ud4/IfN7BPgEy87hTJXSD/g\nHc97gb2Pt+1CUj4/yR1sEAS1jtWXv1Uh5bSYFrt6eBNcBFwp6XngRVLXWXMqndcAf5L0fRoq+TmS\nniHNnz/Ew84ALldadO8zGvpJbwVu8GsrOeZSjLdEnvEyvkFyqPikh+8AG5vZp5IeJK3E+9NGkvof\nsLGk00iDiPt5+MFeVqNhkcJK+AnwOPCBf/aT1IOkzn6wK5+f6Hls29Qb2UEQBIubqlYXl9QF6OZL\nPwwF7gbWNLMv27lonZY86uL6oHIxyy+XHVKxDcDHn35Wsc2K+qL5SCV4796JuewumLdcxTY/GpFv\nmbAvZ35Ysc0ry5e9APVCLPtg5eK0AANHVvq8CrNWy6dctvz8Zl8VXIQZEy7KldeRs1fIZXf/GUe3\nWO37iSP3Kvt/uvHFN4e6eIX0Bu7zLigBR4VTCoIgaIYqbnCUQ5s6JlWoHm5mnwKVP05VOZIeJ0lz\nZPmWmU1vj/IEQdCxCHXxCugs6uHNYWbNLa8eBEHQaQkR1xpFSSHjgCbOL9AIlHS7vw/VWNzjCmoQ\nQRB0ANpOXXyxEI6pdhlCmlLeLGa2q087b4zjSON5QRB0ANrwBdvFQjimNkDSt12Tb6qkq721c6+H\n3ePvfCHpK0p6gM8oCScu4+FbuyzUFD/Xj/SG9ZYedrykXpKuUdLwuwnolcl/hqQlJfWRdJuX41lJ\n+/m0+uVJk0zua4fbEwRBa9MJ3mMKWoCkdUjvLm1mZh+6sOqVwJVmdqWkQ0gvJu8FPAxsamYm6TvA\nKSQNu5OA75nZJEl9gTkksdyTzGx3z+cEkk7eWq648XSJ4uwMvG1mu7nNADOb5bbbmFnlc4uDIKg6\nWkEDr12JFtPiZ1vg+kKl73p0Y4C/+PmrSbp9kBTY73RNu5NxTTvSC7u/9dbNQDObVyKfrUj6epjZ\nNBbWFSwwnaRrdY6kLV0Bo1lCXTwIagtLquFlbdVIOKbq4nzgAl/D6ru43p6ZnU1SkOgFTHJpqIpx\naagNSA7qF5JOL9Mu1MWDoJaot/K3KiQc0+LnXmBff4cL78p7BNjfzx9I0u0DGAAUZBIKEklIGuqK\n5ucAk4HhLKrp9yA+GULSCNLyGwshaXlSd9+fgXNJTooSaQVBUMO04bIXi4UYY1rMmNlzks4CHpA0\nn7QsxjEkQdeTSfp1hWbIGcD1kmaSHFpBVPU4Xz6ksNTGP3x/vtLigeOBiz3NF0iisQutleWMJC2i\nWA/MBY708EuBOyS9bWbbtNrFB0EQ5CAcUxtgZleSJjxk2bZEvFsosdCWmTUmJlucxv6lIpnZEN+9\n07fi8+eTuhGDIOgAVGtLqFzCMQVBEHQ0qnTsqGwqmb0RW2yNbcDh1W7XUfOqhTJ21LzauoydZYvJ\nD0FrcXgN2HXUvPLaRV7tZ5c3r05BOKYgCIKgqgjHFARBEFQV4ZiC1uLSGrDrqHnltYu82s8ub16d\ngqpeWj0IgiDofESLKQiCIKgqwjEFQRAEVUU4pqBsJKm9yxAEQccnHFPQLJIGSZKZWaXOSVKXxVWu\nIAg6JuGYgibxhQlPBU6r1DlJWhM4Q9KAxVxGNXXcBnYV/Y8kbSCpRyV5tjWSurfAtiqvqS2Q1K29\ny9ARCMcUNMc80rIcSwLHluucvLJeARhMUkcva1mNQrqVOAnzqaWShkkaCDRbORTZLVdOXgX8+jeW\ndIUf11fonH4C/K6QViV5l0vmPvbNYbsOsIfvl93ilbSlpEGL65qK8hopaZUcdqPyOM5ybCT1Bw6V\n1FPSYZJ+VGk+QSIcU9AokurMbA7wJWm9pn2Ao5pzTn6+3szuJa2kuxZwdHOVZCbdXUktrXMkDWrK\nJuNcTgJ+D/wROEHS0mXaHQecL+kS4ABJvZuyc5utSfdiR0mXenqNOqcS9+kU0pIlTZYx41y2kLS/\npB0LLa3m8Pu4G3CRpF9I2rVcW2ATUisZM2tWpjpz3d8FxmbLXobtepLGSOpVZny5AzgBKNvpZloy\nfwR2L9fObdcFzvT9RutMM/uvl+lt4AjiXaXchGMKGsUr261If7CJwBOk5d5PaMo5ZSr940lLcdQD\nmwOneKWyCJn0tgHOAq5z258399QuaQdgZzPbDehNcoQflGG3F7CX5zMK2MTMPmuqUpW0CfBX4C7g\ne8BgSRP8uks6J7+urSVtImkZ4FVgJUosfVLCbg9S62o54IfAYU3ZZMq5GXAO8AtgK+DrQHOt3O6e\n7+XAFEnjPLw5J7OEf84mtZCzv4FFbDMOdzvS93wecKakMc1dlyX+C8wEtsik2Vxd1sc/nwTmuE25\nrcGhpPuPmdUXnyy6xhs8jx7AF8Xn87TWOiPhmIKS+JOpSKvlXmFmNwM/Be4BtgO+n+0OK2G/NOnJ\n9CtmdgCpNbMEqcXVLxNvBUkbZNLZgfQ0vDTwDvDr4qd2SVtJ+n0mqC9wu7d+upOUm83LvtA1FRVz\nSdIT9DjgE+AkD1+xiVvTB7jKzO4GbgWOBlaXdDEscE7K3L8CI0itkN8B3wD+DzhM0pKlMpFU562I\n/f2evEVyutdL6lJGRTyc5JQGAz2Bn5rZHHeMhTyyFeYGpO+msGjlw8Bqfk2Nds1JWgO4WNKFXr6d\n3AF3ldSrlK073A1IC2buBBQWwdyzKeckaXNJ10r6K+l7GNrYg06R3TDgFm9VrwV8U9IKpN9KU3ZD\nJK0OTCE9gHQvOq/sf0DSPsBIM9sRuJG0OOiqha7fwrU3V96AWPYitoU3XA0kc7wzMBVYOxN2F/Bn\nYNUm7AYDz5IcE0AXUnfIFOAHpKf3LqQWwIPARh7vKGACaVxrqIcdDJyUSXsJ4H3gbD9eB5gEPAB0\n8bBjgeuBnsXlA0b457akp9v7MudOIDnRro1c1+akrpp1M2G/9LxPK3E/RwFrAL39eH3SCsSXkJ76\n1/fwOqBXIT9gRf8c7+V5MHM/dgJGZ/LoBeyYyW8zUitpkt/v5f3c17ys3UjOal8PXxP4jX8XtwEX\nAt8hPRjs0szvZWmSA9ufNHZW79/dDZ5/7xI2PUndmf8FNvCwFYCz/Vq3aCSvPn7/D/L7V09y8I/6\nfRpQ/H253TLA9sB+wNVud6eX8Qqge1H8LqTf783AY8BNbnMScKB/h8U2R5O6rVfPhJ0GPO2f/wKW\na+//d61s7V6A2Kpny1SKW3sls4f/CY8DLgI28ErsfmCdYjvfHwOsDvQH9nW7rfzcQaSVcpfJxO8O\nnExqfazuFeurwP5+fn1gOslBigbHswOp6+gnfnyWV67HkZYUmII7oKJr/L5XNkt4hXo58GNSZf9N\nr0jWKbLZgdTdtCupUj8IeJn0pL8dqRX5PS/DSsBv3G4s8B5wFakrdFMP7wsMAf7k97Jw3/cmtUp3\nJjnMPiRnMQPYzeNsBbwEbJgpXy+/9ofdbnVPfwKp+28NYDTpAWP3jN1RXmG+AKxQFH6Ml/1MD6sr\n+o1sSnKAYzJ2A/1+9vT7NKLUbyRT5t+RKv81PWwF4P9ljgt5beT3fouM/WZ+vT1JXXqrF+cFrAuM\nBFbKnBvg92olUvfcZo2VMRO+BsnJnkRyUtcCB2bOrwVMBpby4z38e+tB+g+cDqzV3v/vWtravQCx\nVdfmFcA04FD/M/7Q/+AnAM94ZfC1RmxPBO4lPXFfAexGepJ8ifRk+zow3OMWKo9dPO7jJOc0hFQx\n307qDpkE7FGUz8mkyv4c4CPgDA/fG7jYK551Grm2yXhrxMNGeyV8g6c5sqh8G5Ac2e9JT+VnkJ7A\nv0Fq+dzlld/ewN+BQaSKfjzJyYwhdXEd5fdm06Iy/RlYMnM8jdSSKDjzIX69U4BzPe3dS1zb9sAH\nwJ2ZsF28vPcBdwB7kir/8/38CJLTm9bI97kXqdW7clH4bsBzJGc8Bdgvc+4x3IGwqDPbjeS8zyVV\n2j38Hl2Pt8iBHiXyeobkxG8idaMWzt1AUcul6NpfJD10vA6s4eFLkh50NiiKXyjjDsAFwLdYuFV6\npYeJtPL3JcDSBVv/fdxN+v39zb//H/v5Lu39v661rd0LEFv7b5kKpAupUl8F2NIrhGzrZhCwhO+L\nhVtKowuVolci1/h+d1JX287AkKJ81wD+TXoi3pLk2G71yrMXsCzeXej51QFLkbpuCt1xSwJvAj/K\npNu1kevcBe9uA/plwrt5+j2AwZnwdYGngG39eBvgV6TKfnDm+rYhtaAK3XK9SU5qKjDMw/oDR5Ic\ncKHltBXwCsnRFb6D49YQC+EAACAASURBVP36Lim6v5t4PqMbuf9LkZzgdcCETPjy/r0OytiNII2j\nDQRW9ut5iIYuv1Uy9hOAPTPHQ/0aViVV1FNIra7D/fxlhWsuuve7+b0cTZpEM4nU2unq9/QWUgux\nLlPO7h5euP8D/fp+7t/ZQ34txa2xEX7vh5IeGN4nOftRfv7iRsq4i9vt79/fX4Ht/NyRpN/n0EwZ\nNyc5oa6k3/iP8ZYbaVbeb9r7v12rW7sXILZ2/PLTFPCCoxlJqvhPI7UCHsW7QEiTGHYssu2Z2e9G\ncjLnkVpYtwO9/Ny2NO4o1gQmZo5XAq4htSw2KhG/MF50Q7ZiAb5NGgP4SSas1FjDrqQWQtbZjqNh\nrKUbqZW2sh+v6pXuDZn4W/l1nkVyQP2BQ0ithyGkrpsfkxzr/cAlGdv+pBbkJn48lIaxpGFkHLd/\nBxN8fzPSrEOKr4/0hP99YJwfL+WV5dUkJ3BN5jvukrG/yctX+J5+TXI4e5LGmVbz7+OBons9yL+3\nzUhOqS+p63Q28NXs7yJj04s0yWQEqRV2D6kL73mSc+pBgwMvXFfhu74F2KZwjtQy/EMh3UZ+VwNI\n3WtbA0952O+AuaSHrgElbAYDv/XvZCeSg/oJyTmN9u0r/r38wq+7K/BI9jv2tA4hdaku0pUcW5l1\nU3sXILZ2/PJhQ/9jHUF6+hzmf+YHaXgC3pTUFTc2Y9eLVPmOJL3P80vSmM3tpKfiHh7vCJKTGVCU\n7zBgY5IjeBw4JXPuR6QutdFFNmNI09Z7kp7wp2by2Rf4GUVjE77/HZIj2Y3UcjjBr2dXUhfesyw8\nsaMXycn+0I9XIVXOv8/EGVvIy4+7kAbWny+k7eG9SS2Di7JxS3wPe3pFdhOpG3QI6SHhn6Rurhn4\nGFORXaFLbQdSi+AcD+9HckhP4t1+NFT4vTP2V5O6+AoTM07376swntUdb1n6d7Yi0M2Pv423Ukmt\nkovwlk3xd+DHg0iV/mQausA+8t+Lisq4LXCC7x/j97TQBbwraeJCfxbtKlyBhbtpTyTNRiyU8SHc\nyTVSxsJEjkf8Wlcj/c6uB/p6nGX8nhV+H139no0nOc7VSb/Tke39/67lrd0LEFs7/wBSf3o98G0/\nXtYrg4kkRzMNn1lXZLet272UqSAOAf5AGgA/wf/U2QHwOtLT8W893khSF9WNpAp5J5KjWD+TZrbb\n5Dzgl378W9J4xmWkMYRVS5Rxd6+MziKNcf2IVGkfQuoquwpYu0QFtRZp5t0pfjzEK8PiJ+MF3Wle\nQf2dVPGuDfTx8N6kyveKRu7/xiTntYTf97f83gzx9HegoQsq63B7ewU50u/bU6QWzGWZOMtm7Ujd\nqRP8fhQmkUwgtZAKzmlAibx2Jk2EuJLkPPuQur3uJM2wnEGJLkaSAz+Yhhbpcv7bGEJqcf0S2LLo\nfuxM6t7cOhN2mN+XX5B+b4vMFCQ595dJv9lLPGw//45/TPotjixxbduRWrtjSA9KKwP3+Ll1SQ4+\n+xDydb9fnwG/y3z3d5EmRdRRotUYW4X1UnsXILZ2+NIbKo7lSS2Kc7ziyU6BXoLUcljQxYI7CT9e\nidRl9CkNXVP9SH3tp5DGStYqyrfQbTSE1HV0JmlG1cqkJ84LgL2KbEZl9jcmzdoqTBNfjzTuMrTE\nNe7qlVFhivXObvtDYKCH1RVVUivis9NILYTnaXgyXo3Uclq7xH0szMbqQaqI7ypUrKQn+77Axo18\nF+uTxth2Ijm1TUiTKm4ttsnktyvJYQ0gdY9Nznyf9cCvMjYFB7QJqXt2P9IT/nn49GX/Hu/N3o/M\nZx9SV93mfn0Xetm6kJzBqZRuze1Aas3tDswnjdGsQBp/vIw07rNjUV59SQ9EY/14F9L40zokB7wN\n/lsrsutK6nbb1NOYDlzs5w7ya92jRBlHeRkvJ3U1nuThd5AeaGaw8Pja7p52P9Jv8R7gLD/Xzcse\nU8JbYWv3AsTWTl98qlRuoGG20imkWV3LkFoMPyiKn63AD6JhOveupG6kXfx4C7y1UGS/Mulpe1jm\n+LcUDZYXVY59SHJIJ2bObUHq4jofH9AvLp8fr0tyttlutB0KFZBXZksDx/m57UhTxZ8FDvawoaQW\n40/9uNT4ye4kR3QO7lRJT/h3kmbTzab0tPUlyYy9kVoD3/T9Y0hP5auXsNvIK83CBIr1SC3OHl7R\n/pk0kWQIDQ5zVb/3BSc7mDQT8vc0THgYVSKvnUkthn/Q4Gi7kiYP3MPC3YILHBqpNXcVDe9UPU2D\nwx9EeuDZoMiuMDnjJL/n15C6xM71/BsbT/r/7Z15uJ7T1f8/K3NkMCZpEsQ8JCGIEkQkQgxBhNas\nhlbMkVTVLN4oSkpRY1qU11Ci5iGvoU0JNZRoCJ3oSN8OP31RqhXW74/vut37ec5zknNOhuecZH+v\na1/Pcw/7vvc97bXXWt+19q5IG55BqVl2QgLkxup3ODlfL/QeF+/t7sgceUxyX7dI6nVAgvGW5Hgb\nIgF7FTT0aeayCP1TvRuQSx0eunxLc2g4Ij8dOftrmu9in6PQKHOd5CP/IjJtTIsOYXUkVIbE9kKz\nmYrMHYUWszbwJgqsXDnKwbHt6OhghyABMzFpw/XRGfSJ5VRo9knWb4LMff+VbN+R0sexE+qgv4EE\nwfpIeD2QdFDrIxNRLa1sJNLK1kPCYXbRTiSwTqPUCvpQmrR2RdrXE5SBxUciM9VXkG9o+xrX1g9p\nlncn69aPDvU2xHAsiAITkcO+HTLPTo/2Fc9kxXgWV1GDch3vyGPITzgTmcMKH17HOF5NLTD2KXIX\nPpM876MIllt6bSju567kvTmSUshshkyktQY7AxGBYwrSVs4koZ3H/RxCw0HLnkh7fJ2SSNGZMnTh\nVORrPBj5XPdD8XEjkOlzICU549uIJr5yY/cilxb0UfVuQC51eOjqCL4b/zsQDu1YHkhtEoEhs9S9\nlKa7TknnMgKZU9JgyTuR6eZHaHTZDznY70Qd9RrIJzAE6Bn1rkHC8TlKxtqmwN+RVncU6tT71mjj\n1+J4zwNHxrrBiMwxLb2WpP1jUOf8TLJ9p+joCiHTNdmWMtuOQdrlWCRMjkWa0mTCWR77tUMmtNuR\nQ/4xFB91FjKj7YKE8gTUQRfkg67AzvF/QxQAfGxc34HJ8QcjwT+cymDS1ZFg6IOo1lORprlpbF+J\nSvNtcV/6IjPW5FgegjTbM0hMmTXqrYc04XbIpPk2pYDZFA1oRlXV3RFpVIWA7kAISqTFvEypia5G\nxHwhgfUnSs19JzQwOp0avqTkfEPiHRmM3tk3KDXVTvEsByHhOxz5u36btOkSJLwmx7N8lKowiFwW\nQx9V7wbkshQecsMR43A0wk8F0naI7muN1Yt136MhdXwYGnEWrKRi1H488kGljLYByLf0OvLh7Ik6\n98K+PwRpcz+K5XbJ+pvQKH9IjXZNIFILIXPWe8BJsbwZGvWvRqU5Z634HYW0pDMpmX67Rp2COp7G\nPRVJUccgAXw1EfsTdW6kiowR5z4UaTx3JutPRGaogslXnL+Iq5qEtIJ5SLAXGsV1wH417sPtwKvJ\n8ndQgG0vpDlNiWc4JNmnB6UmtTXKs3cZ8AdKE9xgpJWdQ23tpSBI3Bz7tUcki3spGYLj4vlfkdQ7\nGQm8DRF1/x5kFt0EaS5pSqv/Rn7IIobsWYIOnjzHK9EAqRsSkP2Aa2N7R0QsmUfJstsJacRfqX7n\no02vII0ozZhxWLTtdmoEcueyGPqsejcglyX8gCsZWV+NTqA9GqlfiXwrO6OR48jqevH/82iE3w5p\nJTMozWVfRBpA0Vlsj/wKXZFA+DLSfk5Mjx0dVOHf6o467oFolNw1OriHKAkThfmtyGG3GfBScsx9\n0Wh9EtI6tgfeJXxllCPeQtDtRtCQ0Sh9N9SJn04pHIr4nxWQ1rVv7P86EpI3xn38HTLBDSIxl9W4\njz2jU/spEXcU67+GBGOhDQwghDmK+/kAeCjZvx/qxG8GDqrxzO8FZifLF1POqdUXmS7TlFK9kRb2\nXaRhFRrV+bFcxLNtQm0Nq5ogcS0SMO2RyXdbEi0GmRiLwOntkXlsLjI/Ho00nwE0pIN3Qprs1GTd\n08AjSZtGk5BukD/tYeCGWN4CaeznU76zuxJCODnu0WjA1AsJrweBQ2Pb5kiY54wOS6jUvQG5LIWH\nrJH9S0jA/I0yALSYv+hBYsReo+4J8fFficwqXdCI+x4kAJ5NOrLio+6B/B1fiOURaMR8BPKJXBId\nWFdKW/2KSAu4ipIgcTvqZCejUe4qVW27F3gqWe4T11IIvNuifT2pdNRvgUbJQ5P2Fma969CIu5qF\nOB4J2B8R+dVQp1ukM3opzrVPjXs4EgmSveP+fQmZLA9N9hlQVWcopblyONIibqQkCWyCNKdUwKRm\nxplUCqcLo429SHxKyTM7BPgXpUBshzSM85DQWLP6umK/xggSVyOTa6GZrAWck9R7Bng8/nen1Ew3\niWddK6XUVijg9h9IKy5iqh5Pr7XGtQ1F71/hT9oSvftTKQcfqyb1JiKtvfBXrYAGJTOREP0RQcXP\nZQn1WfVuQC5L4KFqBPyZnwgJlc2QL+MZGpqZVmrk//D4GDsjbevpZNv6SNAVpp5qdtV41PnvE8tF\npoB5yI7fLfbZFgnKUxBFfRqi924c9c6M5cHJ9RQj6U0ReeKJpF3XIMEyEQmmNWK/6ZQxOqMQ4WIz\n5Ld6GQnaAUg41TTPoJHzu5RpjToi89QF0bn2Tu9F/N8ejcbPQMlpT6H0F91KmbGhuH+pcHmesvPu\nj4T29UgYfIeyMy/qfo7K7BEPVz2zS6hMulrUWxNpzfuioNeUaNIj7tF2Ne7HwggS11H6I/uhwUqa\nneNJKjXBXZAWWysX4KYo990gpMnMRGa54hpmU4OMgQYDjyMG6IuUmtPQeCcuRIK0fXKffxzt7RLP\n9wDKRLhXU8PPlsti7sPq3YBcFvMDlfnkVOTLGBTrpiLN6AlKbeIQSoJA0dGvhbShHWJ5XUQ2mIKc\nvIU5bDyVVOeic9gaOf+LbANjkeO4EE6rUJkFel9Ez36dMs/cStGJfJuSrtsgpRHyTcxEpsKfAj+L\n9Tsi4fYc8osMQL6Pw5DA3gdpULPQKP/I6IxupxEmYtV5xyMBc2As7xAd3mo19t0Udc77x/KayBRV\nBO4eTpIhILmP6b39CfBA/O8d96ZBIldEaHkeaYxXJevvA15ewPXsFfeqyKywJSKaHIEEwA1UEjma\nTZCg1GxGI8LCt5JtTxFpqZBGtG0j7dwyrqU4Vi9ETLiDxqnkneMZj0nafA9lEtutarT1c8hUfSUa\n2NyGLAZHpNefyxLux+rdgFwW48PUR9UzOsBz4uMqZkr9F5FvLT7yeVT6lLpE3bOQ1rFdfMivUelg\nPgQJuF5V594NmdZmIQ1hTLL+b5Sdc6pNdEdmoHuQNlL4rXogQXoBtWOH2iPzWdr+B4CHq45tyAd2\nUdybyXG+4bGt8FdtgGjfjdKfq86/J/BOdJR30Di1/ggktC6hNBltiMxKXUnIJ0mdMXHdk5J1TwH3\nps85vZfIVPgyGuUfB8wnWJexfSaJppSs3xaZ6Qr/TxH3tBEaMDxHBJiyiAQJJADvj2t7l0pCzBzg\nwUbuYfsoq8axt6Y0D54U7V83vR9J3cInVbyLHZAG9WcaJsndBrEYO8X7cSLlwG4i0q46VJ8jlyVT\n6t6AXBbTg9RHMwV18isiLWAqMv+sjKZpmIuc9s+nnSmKJ7oXaUg9kbnpe4hhtwUSLKdFBzuHqoDR\nONeLlEGfJyDTSkF73gOZz9KOYD1k7mmPtJhbiek0kJlwXUrTWLuq87WP6zgoWbc5Igk8GMufmRaj\nI/o/ZFY7HGkBhf9rDGJejWvm/d4Hdd7bFOejUlB8Of4fhXxD45GvYpO4/w3iXqJznIdMY78lct/F\ntpcoU+VU348iyejuaHQ/EJnE7lzINYxGxIi9ovOdHc9hHaTdrp5cW4sJEnHdjxMsQuQL/DVweXrt\n8bsqpRl3D0qCyQZI4N2CBNKX0CColsDdCAnpzpQabiF8R8U1pybNE5EQ/kYcf81k2+HxnPN8Skux\n1L0BuSzGh6nO/kLE1iqE03lIOK2ENKB1aTgnUl+UGHUGElI9kTnwemQKG4RG4qdQe7qAjmg0m37s\n30Jmm62SdcX5TkT+hYuREGuH6Nc3xzn/TI3ULsgPMhiN3ndETvCRsW0/xKhbp6pOO+Rr+QNKONsd\nMeiujU6rCyUJolmjYarIGLFuT6Rl7pysOwI5zB9CJtFa6XE2iE64oC33R4Lim8k+w9J2kiSTRcL6\ne5QByqch/1uaVSOttwESIhchDe4QyiDonaratkgEieR9SCnX26P0Secm6zogU+VFcR9fimde0M6H\nxTP7L/SuFgOfAcD0+D8CmRh/EPd6eDz3t5Ff8W0qk82ORe9iF+Q/eiHqrY/MhbeQKeFLvdS9Abks\nhodYqYkMiI/7ZiSM+iOhcz0NNZ20Xl/kvL6bSuH0mQO7uh7SRgpCwaWI9lyYmYYhltrPibQ3sf5g\nZJpaCZnCZiPzTjuknR1O7QDfw5GguwV1wP2QmXBuXOtvSZJt1rhHA9AofQIawR8b9VZd2P1txnNY\nhZiJN5ZHEPRzZEK6i0iWW6Pu2Oh8b6OMr+qLTHSX1th/d6QJpJkUTonO9QgkBIcuoF4Ra9aJ0jS2\nSdzPdKbYRSJIJPuchvw9hbl283iWI6v2Ww+Zkm+i0tx3TLStyHOYxnsZIlbcjwTg1mgAsnfUKYgL\no6jScAkCT7wXTyBtrpgWvh9VExfmsnRK3RuQyyI+wLLjWIPSnNIXjQ4LzWkNNKqtOR16sq4Lcl7f\ng8w5PZF58LLozFNBsRcy392BhMbKKGj3mth/LjKp3IG0k4KdtX+07wRk3hmNtIlvkTjZq9p1SLR/\nNSRgJkWnNoDSp9a/CfdqM6TNHB/Xs8bC6rTgedyERuA3IL/E48B9se34uB+7UmWOi+2j495NomTc\n9aPKXBX3bw4lOWST6Hj3QMLpKWprZdX1BiPzYW9K1mStes0iSNR6P+P/dxA547tImxtZ9Q4XvwOQ\ngJ1J5Syyd5AIlvgt2HSGiCJvU0n9Ph04pUZbepMInWhboTlfHO9xoxpgLku21L0BuSyGh6gO6VU0\nIn0iOpx1kUlkBtJOao78kFntWjTC3ggJsVOj3npoNFwdP1TkhtsFkSTmIXZcZ2SCOQOZ/3ZCWsp0\nZCIqnMndEAuuCJ69G5kbG9CtY/lpxKzrmJx/Ekl6pGbcqy2QdrXIQinpHDdDvqoN0Uj9tKQDXY/K\nxJ9HU2WmrOow90C+vNMa6xjRqP565Be6Lp77i5Tsx+7Vx22k3sNIGH0hnnutaSGaRJCghh+wkf/D\nSTSXBdzTNeK9OQ+ZaT8P/JEa8xxRklgs2ppO7DiZhtOVHIcGDz+gnCLju3G+SXEvc5bwOpa6NyCX\nRXyAGl0+TTkKvgCZg1ZBTLRLqZHCJ/bdH9nUN0ajxHuRGaRbHOe/qaJqI4H3FGHTj3WbIALBacm6\nLyD21c6I7XQR8hUMRb6EV5AGsT8a6fap0b5tKaPzZxO06VjeEJnj+rXgnvVobp0FHGsv5AuZgYTt\nBcm2cdHxj4/lBXXeqTDYG8XoNJhjKtnnJKRlFqmMjkVaRrvq8zSh3pUL2H+hBIl4Fhcgk/EplHNR\npddUs0211lMKp7URs3RuvIsNptdI6qTC6TVEyDg03tXUt1WYfzdG4RFPI+2oc7yj19DI95LL0it1\nb0AuLXholR98YULbKFk3g3ISs67V9ZLfKcRUCLF8MjEzLHL8rlp9vmS/2YSQiXVDEBOsoO5ugcwj\nlxNmRmRevACZlDZDMU+PUDXlQnSuKyCfwWWUCV5nU0mbbkC3bu79W8Tn0AX5yYpJ8jYO4fBVpKVe\nR5jGmth5V5iaGjlnrY58GyTod15AWxdUb0x1G2giQQJpTr9C/sVTkSnzV5SMvvZV5yxMb+0X9ByS\ndqyJtJmaQa1V9ywVTq8iEkQamF2kRzqv6hizkXmyIttHLvUrdW9ALs18YOUHOwb5KlZGZICDKLWL\ncSTpX9J68b+IR/kS0qhWS7bdSSVZoTjfdmh0PQ4xsY5D/oItks6miB1KMzNMoYynWiM6uQsI9hy1\n45QKQkU/5EuaRimc5gG31/PeJ8s9olMrMoB3RgG702K5CEhucudN6ZRvR2Wgbc28bEhw3E+Z7LRR\nrWxB9aq2NYkgQRkndFxV/cvRIKVHrbYgv+eV8TuCyBC+gHc9TSdVvFsNAppjfSqchiXrj0XElMNR\nBok+ybbrqMp6nkt9S90bkEsLHprMEa9RBsyOiY9uGmLWvU4jZg9kPnsJkQY2inqT0Eh4/+j4awXP\nvhzH/z7SdLrGsZ5gAXRrNEqdSimcVqfMAN3A74Wi8adTMvP6Io3w5qRzXKvO938ApcZzWNyPwpS6\nOyKPdEfCpdmdN9KuLkFxQ2dTQ7uqqlMIuIVqZY3USwcTTSZIxPXdTakld0mOfT2VcVipUJpFMP8Q\nG+6EBbw/haDplPzfmCRDeWN1kuW9SOjsiG7+W2QyPSmud53GjpfL0i/tyGhTMLPOSFs50d1nmlk7\nd38UBQe+gsxLx7r7Q2ZmVXV3QyP68e7+nrv/AmV66I8YVoch4fSpmQ1JqhYa2ClR/0UUHHkVsuVj\nZuZF72J2lJmdZWbHoRk+v4syJRQzx16InM7/rm4jmrH2/4CjzWxDd/8zIgLsCZwQ1/u7RbuLzYOZ\n9TWzU+L/aKQpPmRmhyDn/53AvWZWCODp7v5Pd/8UZWGYj4QXZtYFwN1PQtrWWcl52qP4mYdQp/ki\nIk/MMbPV3d1jn2J/i/v+JzMbhAYZ76BYo8FNrNfBhU9j86do4DLczK6jZKiNQOSDQ939/qhfXN8B\ncU0fmVmnOM4s9C4S2z4xs5WQIDsbeMPMVkUz/H4+nqtXtbG9u8+Petch4Qh6R4bFc2lf7J88suI9\n7G5mGyDN+wfu/oc45hSkuW+OTNCHuPub1c89o37IgqkNwcw2QpTpbiiWBGQ+AviNu9/s7me7+yyA\n9EMPdATucfffm1nX+Eh/Dpzh7l9C2SFeR5rQ4WY2NOqtgPwNoNH1bXEs4nwvJkJpUhznlfi9CnU+\n16JO7HjgL+7+VzPrntQbaWY7opHs95FwOs7MVkda1qPAbUkHujSxOjDKzC5BJqED0HUNR76YHyLm\n2HMoG8UjRcXmdN5IW7o09j/c3Y9198MItqWZ9XD3T5L924XQWQ0Jy2vd/VvuflET660IXBa/RXv/\nQmgXiOa+OxIKI939j8CHZrYPynwBMrX2N7MxUf8/sf4DoIuZdQSIa74CsezeQgSMWXEPtwcOMLMB\nZrZO0sZPom33oHdiYzMbh/xBLwCfFteVvEcdEiE4C30rvwdGxECnuA9/BV5w9yPdfR4ZrQv1Vtly\nWXChkpI8B3Vk56DRcRHMuj36UPtSOVVDtU9kNJp3KU0ZM4EyW0BvpD0NQAy68+P/EORzOCg539M1\nzjcAja47oYDLIgP0LciE05eSbjwI+Z8GoODJXyP67otodD4UdWI/I1hUdXwGnVDA8E1UZuveGwnc\nySRkBcRc3IcyxdJeiBRRPcHiPqjTL2jwnVEnWtzn5pjGfsIimNRi3QIJEmhw8ioyM/4U+Sh7ItPY\nNcgk3Jtyfq+xyXG6Uem7bI9McluhTB/fRVm951JOe7JSXFdh9jsJaTp3oIkgn0Mm0ZPjWVhybY9T\nTk/fM96lCxEd/2D0vTTIYpJL6yh1b0AuTXhIymA9izK/Wy/kR/g1ihmaR2Xuu3WT/0ci89KO0Tl8\nJT72fVEetzlISHRCfombqCQqXIj8RMNQWp/rkG9kbHVHhrSo3shf9RQy2xUzhN4IFQSM9RHt+BtI\nAysyAhyD4msKcsSG1CmmhIaCfWuUzeK8ZN2+KMC08F8saud9P3Bmsq4gUBxKklsu1q2EfHzbI3Ni\nU+utXNSL5YUSJFD+vTmUJItDkPa7ViwfiDIm/DhKsV+aQ3DHqLMfQWiIe/M4ZXB4j+RdujSurTqO\nriMaEPwADbamUZmd/mkSgRvr+ybv1u0kg7NcWl+pewNyacJDEknhY2KK6GT9vsjZXkxcZ2i0eAfS\nqvZGfozzEa15AvJZ7B/73EhlNojNkc+jFouuHxKIG5NQcOP3IDT63y6WR1FOLXAYEj79kjYW9TZA\nRIeXqRSs30Yj6LpTd5EAOQcFIvdC7MSbgCnJPkVgcLM7b1quXW2EBivnNLPeYKQBfZ/mESSGI9NZ\nsX4uMhXOpTKmrSclgzIdiOyJtOGjot7VybmvoMx7l9ZZJa7rPsQ83YmSeboTcHH875jUGU4I3Eau\npxPJRIm5tM5S9wbkUuOhlB33KpSxRAOR+eLkhdTthEaZV6PRfWEW2TuEwDGUo9WKuKb4vyka3afC\n6QIkLDavsf845Be6GPlaDkUj8nkoKPJtymzRab1iRN87Os4pwOdj3dFxvrpOMYCE0C+RQH8KCdjt\nkfZ4PzC16j42q/OmhdpV1JuHtIbm1NsIadlTaSJtPf4XbLjdUCqhxykFYqe4R2cv4D72QdrNADQN\nyQtIMN6ITNMnU3sCw1GIiLF63O9nEN27C7IivEIlWy9PSbGMlLo3IJeqB1J+lHtHpzaT0uewEXIc\nn1GjXi/K+J/CoTyHynl59kKa0pHVHzOKsu+EzG9rUknxHoDMJRtQKVzWRiPgIofa7sgJvwuikw8l\npgyvqjchOqaT4ph9kNB8Ijrbn1FnU0u061bg+FheFQnfS2N5W0JQV9VrUudNy01jLa23yDFHsTwa\nkTNS3+KXqRowVT3vrvGuFH7StZBgeSN9P5P9C+r6VxHRYSzyJ52MhNNRSINvNGlvLm271L0BudR4\nKDJTPI+EzdUoq3bRQQ5C0z2sXdU5jEQmj3OjQ10Njexvo3Jqgd1omKttd2RmOR+ZVbrHh38ucp6v\niUap6fkmI1PSQjg6UgAAFNFJREFUHylnwu1MOY3Agcm+aSd1HPJxjYz97o52rhTtvpImJGRdCs9g\nd0QwuZdIDYQCal8mhO0C6i6086aFprFFqLfIMUdV9+Y38X89FLA6psZ9GIa0zmLgsg1lRpIdkQ9p\ni+r3hDKHosW7+ENKre4xFNNW93cklyVX6t6AXJKHUX6YB6MR+V7IkXsoGl2eEdu7NVL/QeB9ShZT\ntzjOLSTTWVfVGRad2vpIS3odjbiLrOTnUzUfDZoT54fIZHcGEohF0tLOSGMqnNkbIfNL1+gsz0cd\n/IloRD8Z0YG3juO1muSZyJR0OWIYrhud8FyakAC2KZ03LTeNtbRecwgSnxErGjnWrsCHyKS4a43t\n2wD/i4TeDGQB6B3v8eUoKW8tYbZL7H8iIiy0R3FdUxA79MeEyTeXZbfUvQG5VAiknsm6jvGBFn6X\nG9HotX91vWT5mPjoZwMbJOtHorx1vdK6aBQ9CjnEd0ImtC2Q0Lk7OqfOyFdRUMr7oVHrzORYZyAz\n0Yiq9rRDZpfpyOTUDgnLwcBjsc96SFu7gSSvX2t4HvF/LNI6X0JBsrs14zgL7LxjnyaZxlpSj5YT\nKzohrWRkE9owvsZ7vGo872KAtB9iww1DiYX3pMbcTWhw9CwyNT+IBkobIkr5fcgM2KyZhnNpm6Xu\nDcglHoQ6wFsQPXt3NFK8HJm2di4+7GT/tPPcmcoMyucim3x35Gs6msQ8Er/VPoWrKHO+TQtBU6Sl\nWQeZDgsK945x/FOT+uehEXmXWE47zLORYP1idHqDgOdj2z7RCfZq7j1bDPe8qdm+RyHBfnpyfU1y\ntFd33o3s0yTTWHPqsRhjjprQjpQosScygc5DQcKgAO390MBqfHXd+B2I/E4Tk+u5FjEiN0GDmtXT\nOrksu6XuDcjFQXPNvIZGjD9BAqprCJXLUMbvBsk2o+7RyPz2KPJLFR/vVMTA+jmJ9hTbionfLqIk\nVtwYdXaObQOpzKHWHaWr+Vosj0Ra1SnJcRvMBosmBHwsrushSs3rLqTZ/ZI6EB1ofrbvscgsdTwt\noBsvrDOlCdpVU+uxGGKOWnJtSLN5GPmVLkGa96axbQWU/WLLGvV3QhMP3otM0QNj/dpo0PJNaiT7\nzWXZLXVvwPJeELFgYny024RwWSu2FbE/RfBpteluW+SfKZzcVyIBVQinrYr/SZ3VECNuv+ig7kE+\no/4o8PAhpNlUUMjjdxDyGxSj2h2Qn+OkRtq3PhqtFyaiCdG5F3MBrUV9NKVmZftO/o8lyXS9BNq1\nUO2qKfVYxJijZpx3PWC/+N8LadkPJtsvROboQvOulVli43gnCrPfacikXEwquQ4RN5fL8lPq3oDl\nuSCa9DQUoPojFJfRP7Z9IbZ1oByRfvaLYpwuReaacckxr0BxIg1YSyGoJgPfjOWu0dnel3QwXarO\nNQmx59aK5cFodFtkhB5OIyYWRJ6YA2wVy52QNvhCcb463POW0qa7xb2tSTxZzG1skamqSoi2iCDR\nzPNtg7ToQgveB2luxyf7fDvud4+kDUWW+NXinj4f30ChnZ8S7cwCaTktHcioJ/6OtIq10Yf4KNDT\nzPohv8yZ7j4fKrN3o+ki3jGzs1Em6a3M7B13f8rdJ5rZxchHRSRq/cTMtkcEg58CO5jZ/e7+jJk9\njogWE8zsGXf/EygpppntijS5Pd39b3GsV81sBPCqmc1392ur22dmGyNK+99RkO1IM/sw6v4EZYee\nteRu6wLRINu3u3/k7ieZ2fUo88Wpsa24dysi4X22u3+wpBuYPOcW13P3R8zsKHSdnyVYjXdjpUVt\nY2QD/6mZjQQeNDPc/VYz+zd6lz5x92vdfXIkT33fzDogYbaKmfVE7/4lKIRgc6S1/szdp8W+i9zO\njDaKekvG5bEgs1kx39CaaNR4AqLEzkKMpHFFP19VdyLqJH+MTG6fQxkJLgB2TPZbJfk/EGk9W8fy\nGXGOYbHcmRomNeRvuij+F6PcIjB3A6p8V7H+FGQ2uhPNDXUAIkY8hQgWv6hVbynf/8VGm27thRYS\nK5p47ELD2R54l1Jz2g1paifUqDMM+Rz/SKUZ8HLk8xy2ONqWS9sudW/A8laQSejbyHQ3ATGOrqHM\nd9eDMh9YtVDaBxETNkBO7zei4+8Rxzwbmec6xfGLWKJRaJrpK5JjnRpCcNtGzmXIhzWXylxkh6D5\na2pd2yjg0fg/A7g5/vdFGcO/AqxXh3u+RGnTrb3QQmJFI8dK0y99lZLJOSyE0wGxvAcJ0YFKM+P1\nyLx3JGVmkJ5x76cRWSZyWX5L3RuwPBaURWELlB7oTOBvyO+yRtV+1XTm/YELk+WtUFaItdFoOI1T\n6oY0pcmxvANiPX092edMqoIVkeZ2CUqiujJyYL8SnfbJaMRd5L5bFVg5qbsrolQXWlNBUd+sjvd6\nqdGmW3OhhcSKRo61K2KCTkDmt+IdG458TodU7V8Is3WQht8NpSe6Evk8O6DB1Q5UBXPnsnyW7GOq\nA9z9I+AlM5uAzGjt0Ie6OvDHwl/jMSmeme2NRrxDgG5m1hX4yN2fN7MHEFNsXuxb1P0gJvWcFr6g\n78Qsn8eb2TnuPtXdzzezfma2grt/aGbHowj9CYitd7a7f9XM/oZyln0OdW6vm9nuiGr9OzP7jbuf\ngeYSOhX5t0a7+8dmNhEYY2b7+1Lwz6Qws4EozdHp7v5AzDi7ItJIp5jZgShD+7ioMsmTmX+jvUu1\nzUsK7v4ENPBVNhumGXj3RhrRaui9vCPOMdvMRlFOXlmc202zJ19ChC+gez4DmaOnIxLOLp4n7cuA\nrDG1loK0l+nxPzV7HIAmUpuKzHj/h2zxY1EM02uUJrtiZLozZXDjQDTbbUHxHo18VOsgX9d34jgd\nEX26F9KMHkKaXXtKv1LBUNsVxSCNQwL1vynNX2cis+JZyKn9c+rErmIp0aaXl4L8oe3j/bgn3sdi\nHqrxwA7JvlZV73nKaVGmoEwaqyIz68FoIFP3a8yldZSsMdUZyQj2DTT9c1d3/1dsWxNwFOPxhpm9\ngIgOI1GW8Z3Q5IF/hM9GpjshksGEYE69ZmY7AI+ZWWcX42mOi9VnKB3QYOT43wxF7v8ZkS/mm9kJ\nwCdmdh3wqZmtgoIo93X3+8xsq2jHFWb2AcqFtzUSjiugZK6vLeHbWBOuEfxYM3sTUafvcvepMc33\nK2Z2truf5+7vJXVarE0syzCzXkgbvhxNc7Ifmg/pD2a2JTL5HlPsX3Uf/4FMfr+Pbf9lZn2As9x9\nMnr3F1mby1h2kAVTnRHCxJDJ6OREKE1EI8kewKVm9pbLHNUeaTkvAFd70MmjTidEMDjH3WeZWbuE\n4r0zMNvMZgC/LzoBM2uHtKpBaFS7K3BHCKXDkdYzzsOsCLxjZnsC34gO/3xkirkeRfqv5u6HAzML\nuvUSu3lNgC9h2vRyhH+guLvD3P1MM9sMGG9mR6B4ta+7+6y0gpn1QBrr+2bWHTEEp8fmJ9E79xmy\nUMookAVTK0B8kA8Uy+FT2hJpMV9BzL1hZjbb3e8NO/9fUqEUx/mPmb0DvBOrOrv7v8xsUAin/p74\neczsYJTF+Yg4zyeIhTbJzDZBkwZ+wd1/XXWeh8zsExQ8e4a7fzOONwq4z8x6ufvf6i2UCrj7E2a2\nFxq1r2dm6yGCxsT6tqz1w8z6ouDYX4UP8sbQkC5Agqo/8I67/8LM+iMCzssxeDkdeM/MHoz/t5jZ\n+si0fGCsy8hogHb1bkBGJeLjvgL42N1/hZJYvoec9KPMrIO7/8Dd3yyc9Ga2oZmtESPUnwGXFyZB\nMxsK3GBmaxVCqaiH8sXd5u4vI+rve4iAcR2ino9tzAzn7jPRFAVHmFmheXwR0dU/Wrx3ZdHh7g8D\nJ5jZh8jHNsndH61zs1o1wgQ8AbjYzA5FA54nURzaR+7+e3d/xt1/EVUORtr97sCxKF7u68iHORpp\n479BNPzJ7v5w8i5mZJSot5Mrl4YFUbPfJibbQ5rtpcC3qMrVhoIZ5yIB9gvknP4OMstdhbSavRs5\nz96IQj4oWfcCmqm1ZxPbuhuiYx+HOq1WnUaGxUibXpYLIo68hoJnd4z34jQ0o/KvSeLRqMwteFa8\nB7dSkmV6ozi6Jk8ZksvyXbIprxXC3e82pXa50JTq5XYz+zqKK+oepr77KONxxiPCwSdIcJ1oZlsj\nIXWDu7/YiGN5FspsfpCZ/QhpO+8Cl3lCCFhIWx8Jv9fdaKrxVk339cVEm16WETT7ixCT86lYtzfy\nRa6BhFbPWN8V2NjM5iGT8wyUJuuLwOfN7BV3/6uZ3YDIMBkZC4Xlb7P1ImI/pgNfdfcZYfY4CI1g\nf4LS/OyCTCxfQ1NY/MbMdgGedfd3m3COfkhD2wflkPuau89tQVtXcPcPm1svo3UgFdRmNhxlXJ/l\n7l+use+G7v7L+N8HsfHWRuzMXdx9npmdi/Lf/Rix7q4GDvUqgkRGRi1kwdTKEWy6N9z9zWTdyZR5\nzyaiGKR1XEy6YcgxfZS7v9GM83RD78M/F+sFZLQZBHllmLtfaGbbIHr4c+5+YWzv5O7/SfYvmJ3j\n0VQqt6LJI9+P7V9HPqqHEVX/yaV7RRltFVkwtTGENnQGIq68BfwBOBz5hT5C02uf6+731auNGW0T\nwZibi8INppnZdoi1+Ut3n1K1b0dXZo92yET3eZQy603gfg9ChJmdATzh7s8tzWvJaNvIgqkNwcx6\nI1/OBFfg7AkoLYwhB/OvgVfc/bHsQ8loKiJ4dr67/yOE09PIz3iBaYqTycjE+0aEHLwV9fZCwuhp\n5PPsikg4LwIfI5PzkU31V2ZkFMh08baFjxFDb7VYvg7oh5zRL7j7pe7+GORgxYymIeKUvg2MNrOV\nXDFrw4Azzey0ML8dkZiFv2dmj5nZ6kibehWFGJyPyDZT0SBpHPCDLJQyWoIsmNoQ3P0faC6hkWY2\n2N0/RtkW3geeqWvjMtoMkvi3jd39z8CziEQzwsxWDX/m1cB5prRYn5Fo3H03JICeBK4P/9P3gZdR\nwGw3dz8TBWbfleOUMlqCbMprY4iR6jFoyosX0BTsx7v743VtWEabQgTBTgG+7MoKcjxi0f0UJQre\nA7jU3V+J/StMw6aZiHu4+xaxvC56FzcFjgfezVp7RkuRBVMbRGR42AYlX33R3X9S5yZltCGEH+le\nJJSeTdYfhvLXjQamFgSahH23Fcpqf24sP4dSY+2VHPdjd//d0r2ijGUNWTBlZCxnCAFzpruPi+XO\n7v7vZPvKQYRIY5tGAyehTB83o3CET0Nzmu/uo5f+lWQsq8g+poyM5Q9vAJ0i0Sru/m8zG21m5wb9\n+90qobQZSm91GjL3rYnSY+HuOwA9IrFrRsZiQRZMGRnLH95HQa8jzOy80IauAJ5xTW/SG7gmUk0B\ndAfmAa+7+6vAYcA+ZjYdwN23cvefLfWryFhmkQVTRsYyjmpmXGRvuAPNUbUWyrV4mke2dXf/XySo\nBpjZysDrKFRhaKSeehu4DNjOzPLUFRmLHdnHlJGxjMHM1kDTlncoNJkFBVybplKZH/WmufsBsf4a\nZLrbATgSzZz8Y+CfsTwdOATY35N5vjIyFhVZY8rIWIZgZhujSSePAWaY2bHQeMB1CKxiwsm3gIFm\ndn/UORbN73U3mqH4VuRf2g8lDf4LyvbwafVxMzIWBVljyshYRhCZvh9B6YRujoS+30AT+P21WjiZ\nWXt3/8Q07Xk3d/9LrH8S+Ke77x7L16KZag9yTZPeCQXkXhjrmp2NPiNjQcgaU0bGsoPewLUhlAzN\nFvspMul5kvHBEqG0Ipo+pV9BdnD3EWjer4dj+Rjg78BDYfb7D5pzaf8slDKWBLLGlJHRxmFm7YJN\nh2ma+/fd/ZNYvhOY4u6vm1lv16R9qVD6IQqYnR37dyhMe6E5vevue8byIG/lE0FmLBvIgikjow3D\nzDZE9O35KKfdte7+gZl1QDMaz0LJVnsissLO7v5WCLCZyFf0dFW6oVQ4vQj8P3cfsxQvK2M5Rzbl\nZWS0UZjZRojo8A7wAcpTN8fMVnf3+SFsXkazE1+EKOFvBfvuCygJ6+zUzAcQDL3CrDcUTWWRkbHU\n0KHeDcjIyGg+goBwMSI6XJ2svxx4wsy2dM0k2xE4Gfiiu88M1t7tREbx0I6uqSZGhKmvQwi4Z+PY\nn5kMMzKWJLLGlJHRNjE/yv8AmFkXAHc/CZgNnB37PQfsEUKpD6J8XxqEhgOBfc2sTyPTUxQpibqb\nWa8slDKWFrJgyshogwghMR84IJY/Ci0K5FcqBNVNSfb5RWHtrb60ri0jIwumjIw2AjNb18z2MbN9\nY9UtQH8zGwOfpRoC+Zs6m1lnM2sXiVmJuZXuDKHj7v53NPdSz6jXK37bVbH2TnT3OUvhEjMygOxj\nyshoEzCzDVAGhv8BtjWzbmhOpaHAeDMbCNwGDAGmARMja/iGwGFmlrL2PklYe32AjmY2HJhuZg1Y\newWVPCNjaSHTxTMyWjlC6NwKnOPuD5jZIcCKwEPu/jszOxDYF+XHA/mQHgjW3v2IJt4eGIgmmNzR\n3f8Ux74c+AewM3CRu98f60cCn7r7k0vrOjMyCmTBlJHRyhHazJPu3i6W56K8dv2BZ919QqzvCeDu\n74W/6S5gZg3W3q7AlpFe6GrgUErWnsUxcseQUTdkH1NGRitHmNLGmtmbZvY4cJe77wZsCexgZmfH\nfu+5+3tRrSWsvSyUMloFsmDKyGgDcPdHgKPQ1BPfiHX/QbFMH9bYvyWsvSyUMloFsmDKyGgjcPcn\ngL2AXwGY2XrAKcArsdwi1l5y/CyUMloFMisvI6MNwd0fNrNPzexD4LfAJHd/tKWsvfpcRUbGgpHJ\nDxkZbRBmNhro6e73LAJrr9FZbTMy6oksmDIy2jCCsLAdzWftZaGU0WqRBVNGxjIAM9sNuAp4Ewmp\nqUF2eAW4xd3Pq2sDMzKagSyYMjKWEYR573+ATsnEgV8GVnL3S+rauIyMZiCz8jIylhEsjLWXkdFW\nkFl5GRnLEBpj7dW7XRkZzUE25WVkLINIWXv1bktGRnORBVNGxjKMzL7LaIvIgikjIyMjo1Uhkx8y\nMjIyMloVsmDKyMjIyGhVyIIpIyMjI6NVIQumjIyMjIxWhSyYMjIyMjJaFf4/Z5skWrFC4ggAAAAA\nSUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u2K55AU30_tj",
"colab_type": "text"
},
"source": [
"#### Given your knowledge of marine ecology, do the above correlations surprise you? Do they make sense?\n",
"This type of expert knowledge is sometimse also called domain knowledge. Incorporating domain knowledge in feature selection and so on used to be a very important step in achieving good results in machine learning.\n",
"\n",
"These days, when doing deep learning, this is often no longer the case: The machine is fed with so much raw data that it lears the domain knowledge by itself!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_zlZFf5qGgAv",
"colab_type": "text"
},
"source": [
"Bedabundance isn't really correlated to anything else. Let's take a look at this feature."
]
},
{
"cell_type": "code",
"metadata": {
"id": "uKlfnlywGpVc",
"colab_type": "code",
"outputId": "adf86000-a7b4-437b-cccf-42ab477abdce",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 170
}
},
"source": [
"class_df['Bedabundance'].describe()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"count 20000.000000\n",
"mean 10.482118\n",
"std 71.786574\n",
"min 0.020000\n",
"25% 0.221000\n",
"50% 0.702000\n",
"75% 3.184500\n",
"max 4304.176000\n",
"Name: Bedabundance, dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "I8pnPi1DGwE2",
"colab_type": "text"
},
"source": [
"Those percentiles are weird! That max value seems very high compared to the 75% percentile. Let's plot all of the values."
]
},
{
"cell_type": "code",
"metadata": {
"id": "IxLcFTuLG7AW",
"colab_type": "code",
"outputId": "adf7149d-c12d-423c-d85c-3a3a7f60196a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 286
}
},
"source": [
"plt.scatter(np.arange(0,len(class_df)),class_df['Bedabundance'].sort_values())"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f6bef92ef28>"
]
},
"metadata": {
"tags": []
},
"execution_count": 10
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "f8mtkp1ZIbCy",
"colab_type": "text"
},
"source": [
"So, it turns out there are some major differences between the Bedabundances. In case you wanted to chop off the data after the 90% percentile, comment out the next line of code. When continuing on with the rest of this notebook, try to think about what effects this could have. Not every technique will be equally strongly affected."
]
},
{
"cell_type": "code",
"metadata": {
"id": "sqyFF40zIEKp",
"colab_type": "code",
"colab": {}
},
"source": [
"class_df = class_df[class_df['Bedabundance'] < class_df['Bedabundance'].quantile(.90)]"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "PoGew_ESJce7",
"colab_type": "text"
},
"source": [
"If you did remove the top 10% of the Bedabundance sites, consider checking what happened to the correlation matrix."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "r8C_mJN1aSg9",
"colab_type": "text"
},
"source": [
"## Classification"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bmwkrwsMQG5u",
"colab_type": "text"
},
"source": [
"To prepare the data for classification, we will separate the class, the `label_id`, from the features.\n",
"\n",
"We will store the labels in a dataframe `y`, and the features in a dataframe `x`."
]
},
{
"cell_type": "code",
"metadata": {
"id": "IOjrO1U03EgV",
"colab_type": "code",
"outputId": "0c1530b8-a4fc-4c71-fde9-8aa4fa4139cd",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"y = class_df[label_id]\n",
"x = class_df.drop([label_id], axis=1)\n",
"\n",
"print (\"dataset : \",class_df.shape)\n",
"print (\"x : \",x.shape)\n",
"print (\"y : \",y.shape)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"dataset : (18000, 19)\n",
"x : (18000, 18)\n",
"y : (18000,)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "06RaiysHQcv-",
"colab_type": "text"
},
"source": [
"the `head()` command on a dataframe returns the first 5 rows. We often use it to take a look at the columns of the dataset."
]
},
{
"cell_type": "code",
"metadata": {
"id": "5OMdKwqmAqRF",
"colab_type": "code",
"outputId": "189af76b-f3b6-447f-9b77-57abce1da9e5",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 258
}
},
"source": [
"x.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>datecollected</th>\n",
" <th>yearcollected</th>\n",
" <th>monthcollected</th>\n",
" <th>decimallongitude</th>\n",
" <th>decimallatitude</th>\n",
" <th>Bedabundance</th>\n",
" <th>fishing</th>\n",
" <th>bathy</th>\n",
" <th>BO_phosphate</th>\n",
" <th>BO_nitrate</th>\n",
" <th>BO_salinity</th>\n",
" <th>BO_sstmax</th>\n",
" <th>BO_sstmean</th>\n",
" <th>BO_dissox</th>\n",
" <th>BO2_curvelmax_bdmax</th>\n",
" <th>BO2_lightbotmax_bdmax</th>\n",
" <th>coastdist</th>\n",
" <th>substrate</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2011-04-11</td>\n",
" <td>2011</td>\n",
" <td>4</td>\n",
" <td>4.083333</td>\n",
" <td>52.000000</td>\n",
" <td>2.474</td>\n",
" <td>3.580371</td>\n",
" <td>9.470000</td>\n",
" <td>1.3149</td>\n",
" <td>23.789000</td>\n",
" <td>32.712002</td>\n",
" <td>20.052999</td>\n",
" <td>12.533</td>\n",
" <td>5.696</td>\n",
" <td>0.197045</td>\n",
" <td>51.959618</td>\n",
" <td>1163.095498</td>\n",
" <td>Muddy sand</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2014-06-26</td>\n",
" <td>2014</td>\n",
" <td>6</td>\n",
" <td>3.733333</td>\n",
" <td>51.766667</td>\n",
" <td>0.617</td>\n",
" <td>2.567846</td>\n",
" <td>4.050000</td>\n",
" <td>1.3208</td>\n",
" <td>22.468000</td>\n",
" <td>33.276001</td>\n",
" <td>19.679001</td>\n",
" <td>12.216</td>\n",
" <td>5.707</td>\n",
" <td>0.194461</td>\n",
" <td>52.213890</td>\n",
" <td>2891.283835</td>\n",
" <td>Sand</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2006-07-05</td>\n",
" <td>2006</td>\n",
" <td>7</td>\n",
" <td>4.625000</td>\n",
" <td>53.133333</td>\n",
" <td>0.256</td>\n",
" <td>1.027181</td>\n",
" <td>21.440001</td>\n",
" <td>0.8338</td>\n",
" <td>16.073000</td>\n",
" <td>33.201000</td>\n",
" <td>19.153000</td>\n",
" <td>11.706</td>\n",
" <td>5.962</td>\n",
" <td>0.330311</td>\n",
" <td>0.000172</td>\n",
" <td>9061.493935</td>\n",
" <td>Coarse substrate</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2007-04-24</td>\n",
" <td>2007</td>\n",
" <td>4</td>\n",
" <td>6.166667</td>\n",
" <td>53.550000</td>\n",
" <td>2.177</td>\n",
" <td>7.273304</td>\n",
" <td>13.780000</td>\n",
" <td>0.9326</td>\n",
" <td>21.235001</td>\n",
" <td>31.950001</td>\n",
" <td>19.655001</td>\n",
" <td>11.557</td>\n",
" <td>6.291</td>\n",
" <td>0.272504</td>\n",
" <td>52.218163</td>\n",
" <td>5174.087562</td>\n",
" <td>Sand</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2015-05-04</td>\n",
" <td>2015</td>\n",
" <td>5</td>\n",
" <td>3.883333</td>\n",
" <td>51.866667</td>\n",
" <td>0.353</td>\n",
" <td>14.173340</td>\n",
" <td>6.980000</td>\n",
" <td>1.3188</td>\n",
" <td>23.136999</td>\n",
" <td>33.012001</td>\n",
" <td>19.698999</td>\n",
" <td>12.213</td>\n",
" <td>5.697</td>\n",
" <td>0.202623</td>\n",
" <td>20.613363</td>\n",
" <td>4246.686223</td>\n",
" <td>Sand</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" datecollected yearcollected ... coastdist substrate\n",
"0 2011-04-11 2011 ... 1163.095498 Muddy sand\n",
"1 2014-06-26 2014 ... 2891.283835 Sand\n",
"2 2006-07-05 2006 ... 9061.493935 Coarse substrate\n",
"3 2007-04-24 2007 ... 5174.087562 Sand\n",
"4 2015-05-04 2015 ... 4246.686223 Sand\n",
"\n",
"[5 rows x 18 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "J6E46_tRan48",
"colab_type": "text"
},
"source": [
"The \"datecollected\" feature is a string. Let's drop it, and use month and year instead."
]
},
{
"cell_type": "code",
"metadata": {
"id": "ge44Tf1dcTtb",
"colab_type": "code",
"colab": {}
},
"source": [
"x.drop(['datecollected'], axis=1,inplace=True)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "KozS6EEvfV2Y",
"colab_type": "code",
"colab": {}
},
"source": [
"x = pd.concat([x, pd.get_dummies(x['yearcollected'], prefix='month_')], axis=1)\n",
"x = pd.concat([x, pd.get_dummies(x['monthcollected'], prefix='year_')], axis=1)\n",
"x = pd.concat([x, pd.get_dummies(x['substrate'])], axis=1)\n",
"\n",
"x.drop(['yearcollected'], axis=1,inplace=True)\n",
"x.drop(['monthcollected'], axis=1,inplace=True)\n",
"x.drop(['substrate'], axis=1,inplace=True)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "1CPyeRjSQteC",
"colab_type": "text"
},
"source": [
"A more indepth examination is possible with the `describe()` command."
]
},
{
"cell_type": "code",
"metadata": {
"id": "3yh49IMBQ1gN",
"colab_type": "code",
"outputId": "482ce3da-773f-44f1-e7a4-7fc51fd96f96",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 334
}
},
"source": [
"x.describe()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>decimallongitude</th>\n",
" <th>decimallatitude</th>\n",
" <th>Bedabundance</th>\n",
" <th>fishing</th>\n",
" <th>bathy</th>\n",
" <th>BO_phosphate</th>\n",
" <th>BO_nitrate</th>\n",
" <th>BO_salinity</th>\n",
" <th>BO_sstmax</th>\n",
" <th>BO_sstmean</th>\n",
" <th>BO_dissox</th>\n",
" <th>BO2_curvelmax_bdmax</th>\n",
" <th>BO2_lightbotmax_bdmax</th>\n",
" <th>coastdist</th>\n",
" <th>month__2004</th>\n",
" <th>month__2005</th>\n",
" <th>month__2006</th>\n",
" <th>month__2007</th>\n",
" <th>month__2008</th>\n",
" <th>month__2009</th>\n",
" <th>month__2010</th>\n",
" <th>month__2011</th>\n",
" <th>month__2012</th>\n",
" <th>month__2013</th>\n",
" <th>month__2014</th>\n",
" <th>month__2015</th>\n",
" <th>month__2016</th>\n",
" <th>month__2017</th>\n",
" <th>year__3</th>\n",
" <th>year__4</th>\n",
" <th>year__5</th>\n",
" <th>year__6</th>\n",
" <th>year__7</th>\n",
" <th>year__8</th>\n",
" <th>year__9</th>\n",
" <th>Coarse substrate</th>\n",
" <th>Mixed sediment</th>\n",
" <th>Muddy sand</th>\n",
" <th>Sand</th>\n",
" <th>Sandy mud</th>\n",
" <th>Seabed</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>1.800000e+04</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.00000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" <td>18000.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>4.532537</td>\n",
" <td>52.589559</td>\n",
" <td>1.684170</td>\n",
" <td>4.120040</td>\n",
" <td>14.889183</td>\n",
" <td>1.085573</td>\n",
" <td>20.360427</td>\n",
" <td>32.908975</td>\n",
" <td>19.461016</td>\n",
" <td>11.883879</td>\n",
" <td>5.904686</td>\n",
" <td>0.250199</td>\n",
" <td>2.048642e+01</td>\n",
" <td>8619.186728</td>\n",
" <td>0.049667</td>\n",
" <td>0.046111</td>\n",
" <td>0.070222</td>\n",
" <td>0.081111</td>\n",
" <td>0.074056</td>\n",
" <td>0.072500</td>\n",
" <td>0.071278</td>\n",
" <td>0.069556</td>\n",
" <td>0.067889</td>\n",
" <td>0.071333</td>\n",
" <td>0.081611</td>\n",
" <td>0.084611</td>\n",
" <td>0.084222</td>\n",
" <td>0.075833</td>\n",
" <td>0.008222</td>\n",
" <td>0.40850</td>\n",
" <td>0.323889</td>\n",
" <td>0.216778</td>\n",
" <td>0.030167</td>\n",
" <td>0.003278</td>\n",
" <td>0.009167</td>\n",
" <td>0.055278</td>\n",
" <td>0.001333</td>\n",
" <td>0.011889</td>\n",
" <td>0.829722</td>\n",
" <td>0.097167</td>\n",
" <td>0.004611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.856364</td>\n",
" <td>0.746854</td>\n",
" <td>2.580633</td>\n",
" <td>5.357022</td>\n",
" <td>6.801131</td>\n",
" <td>0.216050</td>\n",
" <td>2.560947</td>\n",
" <td>0.463071</td>\n",
" <td>0.313240</td>\n",
" <td>0.267694</td>\n",
" <td>0.201641</td>\n",
" <td>0.050850</td>\n",
" <td>2.468351e+01</td>\n",
" <td>5502.211419</td>\n",
" <td>0.217261</td>\n",
" <td>0.209732</td>\n",
" <td>0.255528</td>\n",
" <td>0.273013</td>\n",
" <td>0.261869</td>\n",
" <td>0.259321</td>\n",
" <td>0.257295</td>\n",
" <td>0.254404</td>\n",
" <td>0.251562</td>\n",
" <td>0.257388</td>\n",
" <td>0.273779</td>\n",
" <td>0.278310</td>\n",
" <td>0.277729</td>\n",
" <td>0.264739</td>\n",
" <td>0.090305</td>\n",
" <td>0.49157</td>\n",
" <td>0.467971</td>\n",
" <td>0.412061</td>\n",
" <td>0.171050</td>\n",
" <td>0.057160</td>\n",
" <td>0.095306</td>\n",
" <td>0.228528</td>\n",
" <td>0.036491</td>\n",
" <td>0.108389</td>\n",
" <td>0.375887</td>\n",
" <td>0.296193</td>\n",
" <td>0.067750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>3.162500</td>\n",
" <td>51.383333</td>\n",
" <td>0.020000</td>\n",
" <td>0.000054</td>\n",
" <td>-0.240000</td>\n",
" <td>0.739700</td>\n",
" <td>14.152000</td>\n",
" <td>31.379000</td>\n",
" <td>18.707001</td>\n",
" <td>11.377000</td>\n",
" <td>5.671000</td>\n",
" <td>0.109856</td>\n",
" <td>7.068152e-07</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.00000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>3.800000</td>\n",
" <td>51.850000</td>\n",
" <td>0.206000</td>\n",
" <td>0.709532</td>\n",
" <td>9.420000</td>\n",
" <td>0.874500</td>\n",
" <td>18.339001</td>\n",
" <td>32.581001</td>\n",
" <td>19.256001</td>\n",
" <td>11.644000</td>\n",
" <td>5.735000</td>\n",
" <td>0.210191</td>\n",
" <td>8.470287e-04</td>\n",
" <td>4296.762423</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.00000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>4.458333</td>\n",
" <td>52.550000</td>\n",
" <td>0.567000</td>\n",
" <td>1.895385</td>\n",
" <td>15.940000</td>\n",
" <td>1.090600</td>\n",
" <td>20.849001</td>\n",
" <td>32.956001</td>\n",
" <td>19.462999</td>\n",
" <td>11.895000</td>\n",
" <td>5.823000</td>\n",
" <td>0.246820</td>\n",
" <td>4.290867e-01</td>\n",
" <td>7548.709778</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.00000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>5.125000</td>\n",
" <td>53.450000</td>\n",
" <td>1.828000</td>\n",
" <td>5.317977</td>\n",
" <td>20.520000</td>\n",
" <td>1.295800</td>\n",
" <td>22.563000</td>\n",
" <td>33.236000</td>\n",
" <td>19.642000</td>\n",
" <td>12.051000</td>\n",
" <td>6.099000</td>\n",
" <td>0.287816</td>\n",
" <td>5.153546e+01</td>\n",
" <td>11853.852833</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.00000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>6.541667</td>\n",
" <td>53.700000</td>\n",
" <td>13.276000</td>\n",
" <td>53.632763</td>\n",
" <td>30.340000</td>\n",
" <td>1.493800</td>\n",
" <td>24.700001</td>\n",
" <td>34.037998</td>\n",
" <td>21.150000</td>\n",
" <td>12.841000</td>\n",
" <td>6.366000</td>\n",
" <td>0.371960</td>\n",
" <td>5.532480e+01</td>\n",
" <td>25144.521954</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.00000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" decimallongitude decimallatitude ... Sandy mud Seabed\n",
"count 18000.000000 18000.000000 ... 18000.000000 18000.000000\n",
"mean 4.532537 52.589559 ... 0.097167 0.004611\n",
"std 0.856364 0.746854 ... 0.296193 0.067750\n",
"min 3.162500 51.383333 ... 0.000000 0.000000\n",
"25% 3.800000 51.850000 ... 0.000000 0.000000\n",
"50% 4.458333 52.550000 ... 0.000000 0.000000\n",
"75% 5.125000 53.450000 ... 0.000000 0.000000\n",
"max 6.541667 53.700000 ... 1.000000 1.000000\n",
"\n",
"[8 rows x 41 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "e14Q5NLuQ5-u",
"colab_type": "text"
},
"source": [
"We will split the dataset in a training set and a test set."
]
},
{
"cell_type": "code",
"metadata": {
"id": "-wcnBiFY3enc",
"colab_type": "code",
"outputId": "f4dcb49e-2592-496e-eada-dc45727fc8ca",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"#Selective import Scikit Learn \n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Generate Training and Validation Sets\n",
"x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.3) #0.3 data as data test\n",
"\n",
"#converting to float 32bit - not actually needed\n",
"#x_train = np.array(x_train).astype(np.float32)\n",
"#x_test = np.array(x_test).astype(np.float32)\n",
"#y_train = np.array(y_train).astype(np.float32)\n",
"#y_test = np.array(y_test).astype(np.float32)\n",
"\n",
"#print data split for validation\n",
"print(x_train.shape, y_train.shape)\n",
"print(x_test.shape, y_test.shape)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"(12600, 41) (12600,)\n",
"(5400, 41) (5400,)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wTMvlbZTafQX",
"colab_type": "text"
},
"source": [
"### Neural Network Classification"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZdT1CDW9SLBh",
"colab_type": "text"
},
"source": [
"Let's dive straight in with a neural network classifier. Spoiler: It won't work very well on factory settings. Or even when fiddling with the hidden layer sizes and learning rates. Nevertheless, there are some settings where the network starts to learn a little bit.\n",
"The starting `hidden_layer_sizes=(100,5), max_iter=2000, alpha=0.01, solver='adam'` is not one of those settings.\n",
"\n",
"\n",
"> Hidden layer sizes allow to specify how big the network has to be.\n",
">\n",
"> The alpha term determines how fast it learns from the input it gets. If it becomes too large, the network reacts too fast and goes all over the place.\n",
">\n",
"> There are three different solvers for weight optimization in the MLPClassifier:\n",
">\n",
">> ‘lbfgs’ is an optimizer in the family of quasi-Newton methods.\n",
">> ‘sgd’ refers to stochastic gradient descent.\n",
">> ‘adam’ refers to a stochastic gradient-based optimizer proposed by Kingma, Diederik, and Jimmy Ba\n",
">>\n",
">> Note: The default solver ‘adam’ works pretty well on relatively large datasets (with thousands of training samples or more) in terms of both training time and validation score. For small datasets, however, ‘lbfgs’ can converge faster and perform better.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "sKUZY0Bv3kOk",
"colab_type": "code",
"colab": {}
},
"source": [
"#Importing our model\n",
"from sklearn.neural_network import MLPClassifier\n",
"\n",
"#model initialization\n",
"Model = MLPClassifier(hidden_layer_sizes=(400,20), max_iter=2000, alpha=0.001, #try changing hidden layers and learning rate alpha\n",
" solver='adam', verbose=0, random_state=121) #try verbose=0 to train with out logging\n",
"#train our model\n",
"h=Model.fit(x_train,y_train)\n",
"#use our model to predict\n",
"NN_pred=Model.predict(x_test)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ppus2z6E31Ee",
"colab_type": "code",
"outputId": "04a9f27d-d25b-44b3-ad44-d7a7c8f7dc76",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 312
}
},
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.plot(h.loss_curve_)\n",
"plt.title('Loss History')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['Loss'])"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f6be9a27d30>"
]
},
"metadata": {
"tags": []
},
"execution_count": 19
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "h4vZ09zD3sBX",
"colab_type": "code",
"outputId": "1cc7d264-c08d-4b68-925b-a8cec6f05af6",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"#scikit for machine learning reporting\n",
"from sklearn.metrics import mean_squared_error \n",
"from sklearn.metrics import classification_report\n",
"from sklearn.metrics import confusion_matrix\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"print(classification_report(y_test,NN_pred)) # Print summary report"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Ensis 0.66 0.12 0.21 1971\n",
"Liocarcinus holsatus 0.46 0.84 0.60 1803\n",
" Ophiura ophiura 0.37 0.40 0.38 1626\n",
"\n",
" accuracy 0.45 5400\n",
" macro avg 0.50 0.45 0.40 5400\n",
" weighted avg 0.51 0.45 0.39 5400\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SRph9qp1x0SE",
"colab_type": "text"
},
"source": [
"The reported averages include macro average (averaging the unweighted mean per label), weighted average (averaging the support-weighted mean per label), sample average (only for multilabel classification) and micro average (averaging the total true positives, false negatives and false positives) "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vgjavnP1x6sz",
"colab_type": "text"
},
"source": [
"We also take a look at the confusion matrix, showing which objects get (mis)classified as which."
]
},
{
"cell_type": "code",
"metadata": {
"id": "LHbjy6cPx3pu",
"colab_type": "code",
"outputId": "3a9fbeef-57d3-45b1-b597-d17940f84c83",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"print(confusion_matrix(y_test, NN_pred)) # Print Confusion matrix "
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"[[ 245 891 835]\n",
" [ 34 1521 248]\n",
" [ 90 893 643]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "EImqfRjCyEzU",
"colab_type": "code",
"outputId": "5f40f333-547b-4208-d9c8-4001a8fd3cba",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"print('accuracy is ',accuracy_score(NN_pred,y_test)) # Print accuracy score"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"accuracy is 0.4461111111111111\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SWF-KORKBeia",
"colab_type": "text"
},
"source": [
"### Decision trees"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2hin43bNvFrK",
"colab_type": "text"
},
"source": [
"Decision Trees are a non-parametric supervised learning method used for classification and regression. The goal is to create a model that predicts the value of a target variable by learning simple decision rules inferred from the data features.\n",
"\n",
"It will do so by learning a set of if-then-else decision rules. The deeper the tree, the more complex the decision rules and the fitter the model.\n",
"\n",
"Some advantages of decision trees are:\n",
"\n",
"> Simple to understand and to interpret. Trees can be visualised.\n",
"> \n",
"> Requires little data preparation. Other techniques often require data normalisation, dummy variables need to be created and blank values to be removed. > Able to handle both numerical and categorical data. Other techniques are usually specialised in analysing datasets that have only one type of variable.\n",
"> \n",
"> Able to handle multi-output problems.\n",
"> \n",
"> Uses a white box model. If a given situation is observable in a model, the explanation for the condition is easily explained by boolean logic. By contrast, in a black box model (e.g., in an artificial neural network), results may be more difficult to interpret.\n",
"> \n",
"> Possible to validate a model using statistical tests. That makes it possible to account for the reliability of the model.\n",
"> \n",
"> Performs well even if its assumptions are somewhat violated by the true model from which the data were generated.\n",
"\n",
"The disadvantages of decision trees include:\n",
"\n",
"> Decision-tree learners can create over-complex trees that do not generalise the data well. This is called overfitting. Mechanisms such as pruning, setting the minimum number of samples required at a leaf node or setting the maximum depth of the tree are necessary to avoid this problem.\n",
"> \n",
"> Decision trees can be unstable because small variations in the data might result in a completely different tree being generated. This problem is mitigated by using decision trees within an ensemble.\n",
"> \n",
"> The problem of learning an optimal decision tree is known to be NP-complete under several aspects of optimality and even for simple concepts. Consequently, practical decision-tree learning algorithms are based on heuristic algorithms such as the greedy algorithm where locally optimal decisions are made at each node. Such algorithms cannot guarantee to return the globally optimal decision tree. This can be mitigated by training multiple trees in an ensemble learner, where the features and samples are randomly sampled with replacement.\n",
"> \n",
"> There are concepts that are hard to learn because decision trees do not express them easily, such as XOR, parity or multiplexer problems.\n",
"> \n",
"> Decision tree learners create biased trees if some classes dominate. It is therefore recommended to balance the dataset prior to fitting with the decision tree.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0vPwdZqCv9ed",
"colab_type": "text"
},
"source": [
"**Which of these advantages and disadvantages do you think will come in to play here?**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "X9vyVw4O85K1",
"colab_type": "code",
"colab": {}
},
"source": [
"from sklearn import tree\n",
"\n",
"treemodel = tree.DecisionTreeClassifier()"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ATzGuiGK85Nl",
"colab_type": "code",
"outputId": "a47560d2-6924-4ed9-a34a-de7174ce6285",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 119
}
},
"source": [
"treemodel.fit(x_train, y_train)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
" max_features=None, max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, presort=False,\n",
" random_state=None, splitter='best')"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "wJst5XPa85Qj",
"colab_type": "code",
"outputId": "667a370c-ad0e-483b-b64c-2da2f49a363d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"tree_pred = treemodel.predict(x_test)\n",
"\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"print(classification_report(y_test,tree_pred))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Ensis 0.50 0.50 0.50 1971\n",
"Liocarcinus holsatus 0.51 0.49 0.50 1803\n",
" Ophiura ophiura 0.37 0.39 0.38 1626\n",
"\n",
" accuracy 0.46 5400\n",
" macro avg 0.46 0.46 0.46 5400\n",
" weighted avg 0.46 0.46 0.46 5400\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "8zFt6yZtMpmf",
"colab_type": "code",
"outputId": "382e5a46-496e-4209-b991-c87d22ad609c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"score = accuracy_score(y_test, tree_pred)\n",
"print(score)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"0.46166666666666667\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "pinQL9ij85Tb",
"colab_type": "code",
"outputId": "804a78f9-b98b-43f4-aaed-0d536340476c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"confusion_matrix(y_test, tree_pred)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[979, 399, 593],\n",
" [440, 886, 477],\n",
" [529, 469, 628]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 27
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "onAtGY3jBb_s",
"colab_type": "text"
},
"source": [
"### Random Forest"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BVo9hS61wSDI",
"colab_type": "text"
},
"source": [
"We will now test an upgrade to decision trees, a random forest. A random forest consists of---you might have guessed it---a number of decision trees forming an *ensemble*.\n",
"\n",
"In random forests, each tree in the ensemble is built from a sample drawn with replacement from the training set.\n",
"\n",
"Furthermore, when splitting each node during the construction of a tree, the best split is found either from all input features or a random subset of size `max_features`.\n",
"\n",
"The purpose of these two sources of randomness is to decrease the variance of the forest estimator. Indeed, individual decision trees typically exhibit high variance and tend to overfit. The injected randomness in forests yield decision trees with somewhat decoupled prediction errors. By taking an average of those predictions, some errors can cancel out. Random forests achieve a reduced variance by combining diverse trees, sometimes at the cost of a slight increase in bias. In practice the variance reduction is often significant hence yielding an overall better model."
]
},
{
"cell_type": "code",
"metadata": {
"id": "mzGeCRcjBYnm",
"colab_type": "code",
"outputId": "47634300-1524-48d8-d766-80a50311e67d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"from sklearn.model_selection import train_test_split\n",
"import pandas as pd\n",
"import numpy as np\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense, Activation, Flatten\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.metrics import f1_score\n",
"from sklearn.metrics import accuracy_score\n",
"from keras.callbacks import ModelCheckpoint\n",
"from sklearn.metrics import accuracy_score"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "mH4diUkO85WD",
"colab_type": "code",
"colab": {}
},
"source": [
"parameters = {'bootstrap': True,\n",
" 'min_samples_leaf': 3,\n",
" 'n_estimators': 50, \n",
" 'min_samples_split': 10,\n",
" 'max_features': 'sqrt',\n",
" 'max_depth': 6,\n",
" 'max_leaf_nodes': None}"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "K5IQO1jO85Yj",
"colab_type": "code",
"colab": {}
},
"source": [
"RF_model = RandomForestClassifier(**parameters)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "b4_wqRKqBoc_",
"colab_type": "code",
"outputId": "67a9178c-0dce-48db-8616-f01ca3945b44",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 136
}
},
"source": [
"RF_model.fit(x_train, y_train)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
" max_depth=6, max_features='sqrt', max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=3, min_samples_split=10,\n",
" min_weight_fraction_leaf=0.0, n_estimators=50,\n",
" n_jobs=None, oob_score=False, random_state=None,\n",
" verbose=0, warm_start=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 31
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ikbJL8LjBuTH",
"colab_type": "code",
"colab": {}
},
"source": [
"RF_pred = RF_model.predict(x_test)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "RSYmRU1OBzX-",
"colab_type": "code",
"outputId": "51777687-8b5d-4156-a056-2fa957f09bbf",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"score = accuracy_score(y_test, RF_pred)\n",
"print(score)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"0.5459259259259259\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "_deYDZ6rzSUl",
"colab_type": "code",
"outputId": "bae2a21a-096d-4aba-e7d4-d026ddd10d44",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"print(classification_report(y_test,RF_pred))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Ensis 0.58 0.58 0.58 1971\n",
"Liocarcinus holsatus 0.55 0.80 0.65 1803\n",
" Ophiura ophiura 0.46 0.22 0.30 1626\n",
"\n",
" accuracy 0.55 5400\n",
" macro avg 0.53 0.53 0.51 5400\n",
" weighted avg 0.53 0.55 0.52 5400\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "P3WhBFVSaejT",
"colab_type": "code",
"outputId": "bbcb545e-7a75-47f3-e47a-028b3b46b766",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"confusion_matrix(y_test, RF_pred)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[1146, 545, 280],\n",
" [ 218, 1441, 144],\n",
" [ 619, 646, 361]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 35
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fhV-k3MOcVR1",
"colab_type": "text"
},
"source": [
"#### ADA-boost classifier"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RtjDAoLiw8dW",
"colab_type": "text"
},
"source": [
"Not all classes seemed as easily recognised, earlier on. Especially the third class seemed to present the classifier with difficulties. We will now test the ADA-boost classifier. \n",
"\n",
"An AdaBoost classifier is a meta-estimator that begins by fitting a classifier on the original dataset and then fits additional copies of the classifier on the same dataset but where the weights of incorrectly classified instances are adjusted such that subsequent classifiers focus more on difficult cases.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SIHPr7yNcUl_",
"colab_type": "code",
"colab": {}
},
"source": [
"# Load libraries\n",
"from sklearn.ensemble import AdaBoostClassifier\n",
"from sklearn import datasets\n",
"# Import train_test_split function\n",
"from sklearn.model_selection import train_test_split\n",
"#Import scikit-learn metrics module for accuracy calculation\n",
"from sklearn import metrics"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "I0kA7-zocYzQ",
"colab_type": "code",
"colab": {}
},
"source": [
"# Create adaboost classifer object\n",
"abc = AdaBoostClassifier(n_estimators=50,\n",
" learning_rate=1)\n",
"# Train Adaboost Classifer\n",
"model = abc.fit(x_train, y_train)\n",
"\n",
"#Predict the response for test dataset\n",
"ADA_pred = model.predict(x_test)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "37bc_ORAc00K",
"colab_type": "code",
"outputId": "10c5ee59-fa8f-4df8-b845-34745136d123",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"score = accuracy_score(y_test, ADA_pred)\n",
"score"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.5274074074074074"
]
},
"metadata": {
"tags": []
},
"execution_count": 38
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "vF9ZboXxzV2J",
"colab_type": "code",
"outputId": "76bd0140-cb02-4be7-aaaa-540d3f94da83",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"print(classification_report(y_test,ADA_pred))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Ensis 0.58 0.53 0.56 1971\n",
"Liocarcinus holsatus 0.56 0.72 0.63 1803\n",
" Ophiura ophiura 0.39 0.31 0.35 1626\n",
"\n",
" accuracy 0.53 5400\n",
" macro avg 0.51 0.52 0.51 5400\n",
" weighted avg 0.52 0.53 0.52 5400\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "5MxdNqMScsqQ",
"colab_type": "code",
"outputId": "cf900bf0-25bc-4827-e623-ee4d5bdcae56",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"confusion_matrix(y_test, ADA_pred)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[1050, 460, 461],\n",
" [ 186, 1293, 324],\n",
" [ 566, 555, 505]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 40
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tKdMeJuMbBr-",
"colab_type": "text"
},
"source": [
"## Regression"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OTo6J0M-JMQ9",
"colab_type": "text"
},
"source": [
"### Linear Regression"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UOpNcwVscXDr",
"colab_type": "text"
},
"source": [
"We will now perform some regression techniques. Trying to predict bed abundance might be a bit of a stretch, but we can try. Perhaps the phyisco chemical characteristics might be easier. Remember how they these were quite correlated, after all."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "G3H-cotjJ_U8",
"colab_type": "text"
},
"source": [
"We first create a new dataset and again define the target and create dummy variables for year and month."
]
},
{
"cell_type": "code",
"metadata": {
"id": "qBsb51FxbId6",
"colab_type": "code",
"outputId": "aac3bba3-1736-4a27-c779-2900e09f6cf7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"reg_df = class_df# pd.read_csv(url)\n",
"\n",
"print (\"dataset : \",reg_df.shape)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"dataset : (18000, 19)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Dhyvs9x4bKDs",
"colab_type": "code",
"outputId": "09f808fc-cdb8-4309-8fea-a8d8d5e6545d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"target = 'BO2_curvelmax_bdmax'\n",
"#target = 'Bedabundance'\n",
"\n",
"y = reg_df[target]\n",
"\n",
"x = reg_df.drop([target], axis=1)\n",
"x = pd.concat([x, pd.get_dummies(reg_df['scientificname'])], axis=1)\n",
"x = pd.concat([x, pd.get_dummies(x['yearcollected'], prefix='year_')], axis=1)\n",
"x = pd.concat([x, pd.get_dummies(x['monthcollected'], prefix='month_')], axis=1)\n",
"x = pd.concat([x, pd.get_dummies(x['substrate'])], axis=1)\n",
"\n",
"x.drop(['scientificname'], axis=1,inplace=True)\n",
"x.drop(['datecollected'], axis=1,inplace=True)\n",
"x.drop(['yearcollected'], axis=1,inplace=True)\n",
"x.drop(['monthcollected'], axis=1,inplace=True)\n",
"x.drop(['substrate'], axis=1,inplace=True)\n",
"x.drop(['decimallatitude'], axis=1,inplace=True)\n",
"x.drop(['decimallongitude'], axis=1,inplace=True)\n",
"\n",
"print (\"dataset : \",reg_df.shape)\n",
"print (\"x : \",x.shape)\n",
"print (\"y : \",y.shape)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"dataset : (18000, 19)\n",
"x : (18000, 41)\n",
"y : (18000,)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "P2Xkcowad0Q9",
"colab_type": "code",
"outputId": "5d11a938-63d6-4709-9d4e-39f5ae64bdf7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"from sklearn.linear_model import LinearRegression\n",
"model = LinearRegression(fit_intercept=True)\n",
"\n",
"x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.3) #0.3 data as data test\n",
"model.fit(x_train,y_train)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 43
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "OIbmp-Pie5bu",
"colab_type": "code",
"outputId": "3d578ec1-b9c4-4ad8-9151-4088811d432f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"model.score(x_train,y_train)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.8813535278953175"
]
},
"metadata": {
"tags": []
},
"execution_count": 44
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QcN_7cePgmhE",
"colab_type": "code",
"outputId": "fdded38e-9899-4815-ff5f-ae72ddc26130",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 301
}
},
"source": [
"plt.scatter(y_train,model.predict(x_train))\n",
"plt.xlabel('y_train')\n",
"plt.ylabel('prediction')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, 'prediction')"
]
},
"metadata": {
"tags": []
},
"execution_count": 45
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4azCQ_UcQQQC",
"colab_type": "text"
},
"source": [
"Here we could actually see very rudimentary domain knowledge being important when trying to estimate Bedabundance. Abundances smaller than zero dont make sense, but linear regression doesn't know that. Linear regression only knows how to try and fit lines through clouds..."
]
},
{
"cell_type": "code",
"metadata": {
"id": "OQND--9ofu34",
"colab_type": "code",
"colab": {}
},
"source": [
"output = model.predict(x_test)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "fyZbQW_mfyXi",
"colab_type": "code",
"outputId": "79f26bcc-9d04-4b50-d4e8-2511dd77d44a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"model.score(x_test,y_test)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.8912470960037642"
]
},
"metadata": {
"tags": []
},
"execution_count": 47
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "UG0jGW3yf4d9",
"colab_type": "code",
"outputId": "fd3b9a0b-17d5-4d6e-8630-bf35cc7f6679",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
}
},
"source": [
"plt.scatter(y_test,output)\n",
"plt.xlabel('y_test')\n",
"plt.ylabel('prediction')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, 'prediction')"
]
},
"metadata": {
"tags": []
},
"execution_count": 48
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xPziHY90OvF5",
"colab_type": "text"
},
"source": [
"### Random Forest Regression"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "R47d9TMjOzYJ",
"colab_type": "text"
},
"source": [
"Similar to random forest classification, a random forest regressions creates an ensemble of different regressions. This can help when the relation isn't properly captured by the linear regression, when it is not "
]
},
{
"cell_type": "code",
"metadata": {
"id": "dGSBRUJ4bDXf",
"colab_type": "code",
"outputId": "430a79e6-1b7a-4335-dcb5-866d96f1484a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 136
}
},
"source": [
"from sklearn.ensemble import RandomForestRegressor\n",
"RF_model = RandomForestRegressor(**parameters)\n",
"RF_model.fit(x_train,y_train)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=6,\n",
" max_features='sqrt', max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=3, min_samples_split=10,\n",
" min_weight_fraction_leaf=0.0, n_estimators=50,\n",
" n_jobs=None, oob_score=False, random_state=None,\n",
" verbose=0, warm_start=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 49
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ZCpi31i08daA",
"colab_type": "code",
"outputId": "af29f8d3-fa45-46fd-d689-b48e74aa1ae9",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"RF_model.score(x_test,y_test)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9557544486033251"
]
},
"metadata": {
"tags": []
},
"execution_count": 50
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "wHNJPap69ACL",
"colab_type": "code",
"outputId": "958017ed-1ee1-4fc0-9ae6-4358db62ee12",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
}
},
"source": [
"plt.scatter(y_test,RF_model.predict(x_test))\n",
"plt.xlabel('y_test')\n",
"plt.ylabel('prediction')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, 'prediction')"
]
},
"metadata": {
"tags": []
},
"execution_count": 51
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nRFJYiIhIpP8PrtWiEUFHSXoAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_zFXWVh9JIrZ",
"colab_type": "text"
},
"source": [
"As an added bonus, Random Forest Regression allows you to get an idea about the importance of the different features that were most often used."
]
},
{
"cell_type": "code",
"metadata": {
"id": "iINVIU8l9Yms",
"colab_type": "code",
"outputId": "01b04529-2384-49fd-c9fa-1fd465727b03",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"pd.DataFrame({'Variable':x.columns,\n",
" 'Importance':RF_model.feature_importances_}).sort_values('Importance', ascending=False)\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Variable</th>\n",
" <th>Importance</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>BO_dissox</td>\n",
" <td>2.715729e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>BO_phosphate</td>\n",
" <td>2.204262e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>BO_nitrate</td>\n",
" <td>1.422850e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>BO_sstmean</td>\n",
" <td>1.118744e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>BO_salinity</td>\n",
" <td>8.092014e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>BO2_lightbotmax_bdmax</td>\n",
" <td>4.211891e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>BO_sstmax</td>\n",
" <td>3.779603e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>bathy</td>\n",
" <td>2.533595e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>coastdist</td>\n",
" <td>1.720726e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>fishing</td>\n",
" <td>1.658735e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>Sandy mud</td>\n",
" <td>1.270148e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>Sand</td>\n",
" <td>8.524709e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>month__6</td>\n",
" <td>3.448242e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>month__4</td>\n",
" <td>2.883425e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>Seabed</td>\n",
" <td>1.730011e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>month__5</td>\n",
" <td>1.385904e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>Coarse substrate</td>\n",
" <td>9.181943e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Bedabundance</td>\n",
" <td>6.358276e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>month__7</td>\n",
" <td>2.933041e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>Muddy sand</td>\n",
" <td>2.845644e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>month__3</td>\n",
" <td>2.386485e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>year__2011</td>\n",
" <td>2.270888e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>year__2017</td>\n",
" <td>1.173374e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Ophiura ophiura</td>\n",
" <td>1.073545e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Liocarcinus holsatus</td>\n",
" <td>6.591472e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>month__9</td>\n",
" <td>4.922648e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>year__2007</td>\n",
" <td>4.310042e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>year__2015</td>\n",
" <td>3.918202e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>month__8</td>\n",
" <td>2.654053e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>year__2014</td>\n",
" <td>2.453891e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>year__2004</td>\n",
" <td>2.388705e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Ensis</td>\n",
" <td>2.140795e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>year__2010</td>\n",
" <td>1.557261e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>year__2016</td>\n",
" <td>1.553205e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>year__2012</td>\n",
" <td>1.445182e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>year__2005</td>\n",
" <td>1.304749e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>year__2006</td>\n",
" <td>1.237333e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>year__2008</td>\n",
" <td>1.006399e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>year__2013</td>\n",
" <td>4.307692e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>year__2009</td>\n",
" <td>5.729521e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>Mixed sediment</td>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Variable Importance\n",
"8 BO_dissox 2.715729e-01\n",
"3 BO_phosphate 2.204262e-01\n",
"4 BO_nitrate 1.422850e-01\n",
"7 BO_sstmean 1.118744e-01\n",
"5 BO_salinity 8.092014e-02\n",
"9 BO2_lightbotmax_bdmax 4.211891e-02\n",
"6 BO_sstmax 3.779603e-02\n",
"2 bathy 2.533595e-02\n",
"10 coastdist 1.720726e-02\n",
"1 fishing 1.658735e-02\n",
"39 Sandy mud 1.270148e-02\n",
"38 Sand 8.524709e-03\n",
"31 month__6 3.448242e-03\n",
"29 month__4 2.883425e-03\n",
"40 Seabed 1.730011e-03\n",
"30 month__5 1.385904e-03\n",
"35 Coarse substrate 9.181943e-04\n",
"0 Bedabundance 6.358276e-04\n",
"32 month__7 2.933041e-04\n",
"37 Muddy sand 2.845644e-04\n",
"28 month__3 2.386485e-04\n",
"21 year__2011 2.270888e-04\n",
"27 year__2017 1.173374e-04\n",
"13 Ophiura ophiura 1.073545e-04\n",
"12 Liocarcinus holsatus 6.591472e-05\n",
"34 month__9 4.922648e-05\n",
"17 year__2007 4.310042e-05\n",
"25 year__2015 3.918202e-05\n",
"33 month__8 2.654053e-05\n",
"24 year__2014 2.453891e-05\n",
"14 year__2004 2.388705e-05\n",
"11 Ensis 2.140795e-05\n",
"20 year__2010 1.557261e-05\n",
"26 year__2016 1.553205e-05\n",
"22 year__2012 1.445182e-05\n",
"15 year__2005 1.304749e-05\n",
"16 year__2006 1.237333e-05\n",
"18 year__2008 1.006399e-05\n",
"23 year__2013 4.307692e-06\n",
"19 year__2009 5.729521e-07\n",
"36 Mixed sediment 0.000000e+00"
]
},
"metadata": {
"tags": []
},
"execution_count": 52
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HBMbE_p_PYNH",
"colab_type": "text"
},
"source": [
"### An AdaBoost regressor.\n",
"\n",
"Much like the AdaBoost classifier, an AdaBoost regressor is a meta-estimator that begins by fitting a regressor on the original dataset and then fits additional copies of the regressor on the same dataset but where the weights of instances are adjusted according to the error of the current prediction. As such, subsequent regressors focus more on difficult cases"
]
},
{
"cell_type": "code",
"metadata": {
"id": "FYTrrtCNQDxI",
"colab_type": "code",
"colab": {}
},
"source": [
"from sklearn.ensemble import AdaBoostRegressor"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "zxzdGcp6QFg3",
"colab_type": "code",
"outputId": "518cbcb0-46cb-48ee-8add-35558f124003",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"ADAregr = AdaBoostRegressor(random_state=0, n_estimators=100)\n",
"ADAregr.fit(x_train, y_train) "
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"AdaBoostRegressor(base_estimator=None, learning_rate=1.0, loss='linear',\n",
" n_estimators=100, random_state=0)"
]
},
"metadata": {
"tags": []
},
"execution_count": 54
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "S6qwQfPXJWLp",
"colab_type": "text"
},
"source": [
"Much like the Random Forest Regressor, ADAboost gives you the importances of the different features. When you compare these to the ones from the Random Forest Regressor, does anything catch your eye?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "7VwHSo31QFjl",
"colab_type": "code",
"outputId": "df55dd4c-ac74-42af-81c3-eefd1af00793",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"pd.DataFrame({'Variable':x.columns,\n",
" 'Importance':ADAregr.feature_importances_}).sort_values('Importance', ascending=False)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Variable</th>\n",
" <th>Importance</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>BO_dissox</td>\n",
" <td>0.316386</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>BO_phosphate</td>\n",
" <td>0.253280</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>BO_sstmax</td>\n",
" <td>0.098606</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>BO_nitrate</td>\n",
" <td>0.090407</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>BO_sstmean</td>\n",
" <td>0.066976</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>BO2_lightbotmax_bdmax</td>\n",
" <td>0.065401</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>BO_salinity</td>\n",
" <td>0.044901</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>coastdist</td>\n",
" <td>0.030864</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>bathy</td>\n",
" <td>0.026377</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>Seabed</td>\n",
" <td>0.003645</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>fishing</td>\n",
" <td>0.003156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>month__8</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>month__3</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>month__4</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>month__5</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>month__6</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>month__7</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>Sand</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>month__9</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>Coarse substrate</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>Mixed sediment</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>Muddy sand</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>year__2016</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>Sandy mud</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>year__2017</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Bedabundance</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>year__2015</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>year__2014</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>year__2013</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>year__2012</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>year__2011</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>year__2009</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>year__2008</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>year__2007</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>year__2006</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>year__2005</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>year__2004</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Ophiura ophiura</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Liocarcinus holsatus</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Ensis</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>year__2010</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Variable Importance\n",
"8 BO_dissox 0.316386\n",
"3 BO_phosphate 0.253280\n",
"6 BO_sstmax 0.098606\n",
"4 BO_nitrate 0.090407\n",
"7 BO_sstmean 0.066976\n",
"9 BO2_lightbotmax_bdmax 0.065401\n",
"5 BO_salinity 0.044901\n",
"10 coastdist 0.030864\n",
"2 bathy 0.026377\n",
"40 Seabed 0.003645\n",
"1 fishing 0.003156\n",
"33 month__8 0.000000\n",
"28 month__3 0.000000\n",
"29 month__4 0.000000\n",
"30 month__5 0.000000\n",
"31 month__6 0.000000\n",
"32 month__7 0.000000\n",
"38 Sand 0.000000\n",
"34 month__9 0.000000\n",
"35 Coarse substrate 0.000000\n",
"36 Mixed sediment 0.000000\n",
"37 Muddy sand 0.000000\n",
"26 year__2016 0.000000\n",
"39 Sandy mud 0.000000\n",
"27 year__2017 0.000000\n",
"0 Bedabundance 0.000000\n",
"25 year__2015 0.000000\n",
"24 year__2014 0.000000\n",
"23 year__2013 0.000000\n",
"22 year__2012 0.000000\n",
"21 year__2011 0.000000\n",
"19 year__2009 0.000000\n",
"18 year__2008 0.000000\n",
"17 year__2007 0.000000\n",
"16 year__2006 0.000000\n",
"15 year__2005 0.000000\n",
"14 year__2004 0.000000\n",
"13 Ophiura ophiura 0.000000\n",
"12 Liocarcinus holsatus 0.000000\n",
"11 Ensis 0.000000\n",
"20 year__2010 0.000000"
]
},
"metadata": {
"tags": []
},
"execution_count": 61
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "-NyqCHnJSL05",
"colab_type": "code",
"outputId": "470bb42b-91c4-4022-979b-8f61fd5c2286",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"ADAregr_pred = ADAregr.predict(x_test) \n",
"ADAregr.score(x_test, y_test)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9134187702357311"
]
},
"metadata": {
"tags": []
},
"execution_count": 59
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "7MEY5fKnQFmU",
"colab_type": "code",
"outputId": "d6f35061-fc39-4f7d-e495-af64af0e279e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
}
},
"source": [
"plt.scatter(y_test,ADAregr_pred)\n",
"plt.xlabel('y_test')\n",
"plt.ylabel('prediction')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, 'prediction')"
]
},
"metadata": {
"tags": []
},
"execution_count": 56
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nmRwWZmaW6f8DzjitCZ6dWg8AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-r57EwK1Tr1q",
"colab_type": "text"
},
"source": [
"## Appendix"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SrQPbTeoBkTL",
"colab_type": "text"
},
"source": [
"## Better correlation plot helper functions"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2quDA-CN0ymX",
"colab_type": "text"
},
"source": [
"The standard correlation plot is rather hard to parse. Let's make a prettier one!"
]
},
{
"cell_type": "code",
"metadata": {
"id": "tZO7tHpQ1xLe",
"colab_type": "code",
"colab": {}
},
"source": [
"# Better correlation plot\n",
"from matplotlib import pyplot as plt\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import numpy as np\n",
"\n",
"\n",
"def heatmap(x, y, **kwargs):\n",
" if 'color' in kwargs:\n",
" color = kwargs['color']\n",
" else:\n",
" color = [1]*len(x)\n",
"\n",
" if 'palette' in kwargs:\n",
" palette = kwargs['palette']\n",
" n_colors = len(palette)\n",
" else:\n",
" n_colors = 256 # Use 256 colors for the diverging color palette\n",
" palette = sns.color_palette(\"Blues\", n_colors) \n",
"\n",
" if 'color_range' in kwargs:\n",
" color_min, color_max = kwargs['color_range']\n",
" else:\n",
" color_min, color_max = min(color), max(color) # Range of values that will be mapped to the palette, i.e. min and max possible correlation\n",
"\n",
" def value_to_color(val):\n",
" if color_min == color_max:\n",
" return palette[-1]\n",
" else:\n",
" val_position = float((val - color_min)) / (color_max - color_min) # position of value in the input range, relative to the length of the input range\n",
" val_position = min(max(val_position, 0), 1) # bound the position betwen 0 and 1\n",
" ind = int(val_position * (n_colors - 1)) # target index in the color palette\n",
" return palette[ind]\n",
"\n",
" if 'size' in kwargs:\n",
" size = kwargs['size']\n",
" else:\n",
" size = [1]*len(x)\n",
"\n",
" if 'size_range' in kwargs:\n",
" size_min, size_max = kwargs['size_range'][0], kwargs['size_range'][1]\n",
" else:\n",
" size_min, size_max = min(size), max(size)\n",
"\n",
" size_scale = kwargs.get('size_scale', 500)\n",
"\n",
" def value_to_size(val):\n",
" if size_min == size_max:\n",
" return 1 * size_scale\n",
" else:\n",
" val_position = (val - size_min) * 0.99 / (size_max - size_min) + 0.01 # position of value in the input range, relative to the length of the input range\n",
" val_position = min(max(val_position, 0), 1) # bound the position betwen 0 and 1\n",
" return val_position * size_scale\n",
" if 'x_order' in kwargs: \n",
" x_names = [t for t in kwargs['x_order']]\n",
" else:\n",
" x_names = [t for t in sorted(set([v for v in x]))]\n",
" x_to_num = {p[1]:p[0] for p in enumerate(x_names)}\n",
"\n",
" if 'y_order' in kwargs: \n",
" y_names = [t for t in kwargs['y_order']]\n",
" else:\n",
" y_names = [t for t in sorted(set([v for v in y]))]\n",
" y_to_num = {p[1]:p[0] for p in enumerate(y_names)}\n",
"\n",
" plot_grid = plt.GridSpec(1, 15, hspace=0.2, wspace=0.1) # Setup a 1x10 grid\n",
" ax = plt.subplot(plot_grid[:,:-1]) # Use the left 14/15ths of the grid for the main plot\n",
"\n",
" marker = kwargs.get('marker', 's')\n",
"\n",
" kwargs_pass_on = {k:v for k,v in kwargs.items() if k not in [\n",
" 'color', 'palette', 'color_range', 'size', 'size_range', 'size_scale', 'marker', 'x_order', 'y_order'\n",
" ]}\n",
"\n",
" ax.scatter(\n",
" x=[x_to_num[v] for v in x],\n",
" y=[y_to_num[v] for v in y],\n",
" marker=marker,\n",
" s=[value_to_size(v) for v in size], \n",
" c=[value_to_color(v) for v in color],\n",
" **kwargs_pass_on\n",
" )\n",
" ax.set_xticks([v for k,v in x_to_num.items()])\n",
" ax.set_xticklabels([k for k in x_to_num], rotation=45, horizontalalignment='right')\n",
" ax.set_yticks([v for k,v in y_to_num.items()])\n",
" ax.set_yticklabels([k for k in y_to_num])\n",
"\n",
" ax.grid(False, 'major')\n",
" ax.grid(True, 'minor')\n",
" ax.set_xticks([t + 0.5 for t in ax.get_xticks()], minor=True)\n",
" ax.set_yticks([t + 0.5 for t in ax.get_yticks()], minor=True)\n",
"\n",
" ax.set_xlim([-0.5, max([v for v in x_to_num.values()]) + 0.5])\n",
" ax.set_ylim([-0.5, max([v for v in y_to_num.values()]) + 0.5])\n",
" ax.set_facecolor('#F1F1F1')\n",
"\n",
" # Add color legend on the right side of the plot\n",
" if color_min < color_max:\n",
" ax = plt.subplot(plot_grid[:,-1]) # Use the rightmost column of the plot\n",
"\n",
" col_x = [0]*len(palette) # Fixed x coordinate for the bars\n",
" bar_y=np.linspace(color_min, color_max, n_colors) # y coordinates for each of the n_colors bars\n",
"\n",
" bar_height = bar_y[1] - bar_y[0]\n",
" ax.barh(\n",
" y=bar_y,\n",
" width=[5]*len(palette), # Make bars 5 units wide\n",
" left=col_x, # Make bars start at 0\n",
" height=bar_height,\n",
" color=palette,\n",
" linewidth=0\n",
" )\n",
" ax.set_xlim(1, 2) # Bars are going from 0 to 5, so lets crop the plot somewhere in the middle\n",
" ax.grid(False) # Hide grid\n",
" ax.set_facecolor('white') # Make background white\n",
" ax.set_xticks([]) # Remove horizontal ticks\n",
" ax.set_yticks(np.linspace(min(bar_y), max(bar_y), 3)) # Show vertical ticks for min, middle and max\n",
" ax.yaxis.tick_right() # Show vertical ticks on the right \n",
"\n",
"\n",
"def corrplot(data, size_scale=500, marker='s'):\n",
" corr = pd.melt(data.reset_index(), id_vars='index')\n",
" corr.columns = ['x', 'y', 'value']\n",
" heatmap(\n",
" corr['x'], corr['y'],\n",
" color=corr['value'], color_range=[-1, 1],\n",
" palette=sns.diverging_palette(20, 220, n=256),\n",
" size=corr['value'].abs(), size_range=[0,1],\n",
" marker=marker,\n",
" x_order=data.columns,\n",
" y_order=data.columns[::-1],\n",
" size_scale=size_scale\n",
" )\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "khl7Tf2l14qs",
"colab_type": "code",
"outputId": "ba44719e-05cb-4145-fd51-9fa664fb931b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 681
}
},
"source": [
"plt.figure(figsize=(10, 10))\n",
"corrplot(corr)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nupxcxXGupP6K+5cm1+doChfWZmZmZtau1kVEX6uCubC2Kevp6mTj4FBT2jUzM7PpRxKlfPRYt5Qr\nF5uyFeedmnUKZmZmZnWT9O/AsZSHjPwa+JuI+NdG23NhbWZmZmapmw4d1hHxljTb85UXzczMzMxS\n4B5rMzMzM0tdTs4K0lLusTYzMzMzS4EiIuscbBqQtBhYPG/evLOWL0/lqp8N2bBhA7Nmzcosfh5y\nyDp+HnLIOn4ecsg6fh5yyDp+HnLIOr5zyEf8POSwaNGi1ZWntdt+3l5x1DnvyyyfUdd/8C9W+3R7\nljsRcS1wbW9v71l9fS17fW6lv7+fLOPnIYes4+chh6zj5yGHrOPnIYes4+chh6zjO4d8xM9LDubC\n2szMzMyawGOszczMzMysIe6xNjMzM7N0iUJeedE91mZmZmZmKXCPtU17pyy9ko2DQ01pu6er05ds\nNzMza0ABO6zdY23TX7OK6ma3bWZmZu3FPdZmZmZmliohnxXEzMzMzMwa4x5rsybYeMdPYGS4vo1K\nHfQsPDq1HAbW3gIjI3XmUKL74BelloNZHtz6i98wUudVhksSR+61S5MyMiuGIp4VxIW1WTPUW1Q3\nus2E7dVZVDe6jU1o87231fe8lkrM2P+wVHNY8+h6RuqoK0uCQ3bdKdUcslRvUd3oNjaxgXv6634v\ndB/QflcSvO+3T9T8fiwJFuw8p7kJWapcWFvzPPow1PLhJMGu85ucjFlG6v2y0oQvN/UU1Y2sX6vf\nbhxisqYF7Nzjj6ZmeOiJDZM+/6MEPH/OrHQTyMF7AYD/+2Xtn01/sGfq4et5fzXrvah1j6BJnoOQ\niLm7TSlOEXusPcbamqfWHh/3DJkVQi3vdO8Nmqee57at/w/+bJq0qK51HduaC+sGSJoj6ZyK+8dK\n+nYK7T7bjqQlki5psJ33N7BNw/HMpouhji6GOmdsOXV0ZZ2WFcwmOtikzq0nOrJOzSw1EkjKfGo1\nF9aNmQOcM+la2am7sDZrlSx3eFWvVlDAnyotY+O95vxaNJv22r6wljRf0n2Slkl6QNIVko6XtFLS\ng5KOlLSjpG9KWiPpp5IOSba9UNJlkm6U9HNJ70yavRjYR9Idkj6VzJst6aok1hVKqgZJR0j6iaQ7\nJd0qaVtJMyVdLmmtpNslHTfJY9hZ0tclrUqmY5L5syvaWSPpDZIuBnqS3K5I1ntrEvsOSV+U1JHM\n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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x720 with 2 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "vDITcsODjpEs",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "pa56VB53TvvR",
"colab_type": "text"
},
"source": [
"## Make a fake regression dataset"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DIUdftZ-YUTi",
"colab_type": "text"
},
"source": [
"Let's make a fake data set to play around with and compare the performance of the different regressors.\n",
"\n",
"Handily, `sklearn` has the tools needed to make this a breeze."
]
},
{
"cell_type": "code",
"metadata": {
"id": "hVY1yx_1T1Kp",
"colab_type": "code",
"colab": {}
},
"source": [
"from sklearn.datasets import make_regression\n",
"\n",
"x_constructed, y_constructed = make_regression(n_features=10, n_informative=4, random_state=0, shuffle=False, noise=1.0)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "1dq_4_l-Uu3Z",
"colab_type": "code",
"colab": {}
},
"source": [
"constructed_data = [x_constructed, y_constructed]\n",
"constructed_df = pd.DataFrame(x_constructed,columns=['ind1','ind2','ind3','ind4','ind5','ind6','ind7','ind8','ind9','ind10'])\n",
"constructed_df['target'] = y_constructed"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "diSi8Ae_U6YC",
"colab_type": "code",
"outputId": "6deb30d5-3585-4e05-cb45-5d60f2e36977",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
}
},
"source": [
"constructed_df.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ind1</th>\n",
" <th>ind2</th>\n",
" <th>ind3</th>\n",
" <th>ind4</th>\n",
" <th>ind5</th>\n",
" <th>ind6</th>\n",
" <th>ind7</th>\n",
" <th>ind8</th>\n",
" <th>ind9</th>\n",
" <th>ind10</th>\n",
" <th>target</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.764052</td>\n",
" <td>0.400157</td>\n",
" <td>0.978738</td>\n",
" <td>2.240893</td>\n",
" <td>1.867558</td>\n",
" <td>-0.977278</td>\n",
" <td>0.950088</td>\n",
" <td>-0.151357</td>\n",
" <td>-0.103219</td>\n",
" <td>0.410599</td>\n",
" <td>475.627312</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.144044</td>\n",
" <td>1.454274</td>\n",
" <td>0.761038</td>\n",
" <td>0.121675</td>\n",
" <td>0.443863</td>\n",
" <td>0.333674</td>\n",
" <td>1.494079</td>\n",
" <td>-0.205158</td>\n",
" <td>0.313068</td>\n",
" <td>-0.854096</td>\n",
" <td>192.786074</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-2.552990</td>\n",
" <td>0.653619</td>\n",
" <td>0.864436</td>\n",
" <td>-0.742165</td>\n",
" <td>2.269755</td>\n",
" <td>-1.454366</td>\n",
" <td>0.045759</td>\n",
" <td>-0.187184</td>\n",
" <td>1.532779</td>\n",
" <td>1.469359</td>\n",
" <td>-159.214723</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.154947</td>\n",
" <td>0.378163</td>\n",
" <td>-0.887786</td>\n",
" <td>-1.980796</td>\n",
" <td>-0.347912</td>\n",
" <td>0.156349</td>\n",
" <td>1.230291</td>\n",
" <td>1.202380</td>\n",
" <td>-0.387327</td>\n",
" <td>-0.302303</td>\n",
" <td>-230.429190</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-1.048553</td>\n",
" <td>-1.420018</td>\n",
" <td>-1.706270</td>\n",
" <td>1.950775</td>\n",
" <td>-0.509652</td>\n",
" <td>-0.438074</td>\n",
" <td>-1.252795</td>\n",
" <td>0.777490</td>\n",
" <td>-1.613898</td>\n",
" <td>-0.212740</td>\n",
" <td>-147.236330</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ind1 ind2 ind3 ... ind9 ind10 target\n",
"0 1.764052 0.400157 0.978738 ... -0.103219 0.410599 475.627312\n",
"1 0.144044 1.454274 0.761038 ... 0.313068 -0.854096 192.786074\n",
"2 -2.552990 0.653619 0.864436 ... 1.532779 1.469359 -159.214723\n",
"3 0.154947 0.378163 -0.887786 ... -0.387327 -0.302303 -230.429190\n",
"4 -1.048553 -1.420018 -1.706270 ... -1.613898 -0.212740 -147.236330\n",
"\n",
"[5 rows x 11 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 106
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "CWewlBGQUHQq",
"colab_type": "code",
"outputId": "5f675dbc-b234-413e-997a-0800ad2f2391",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 614
}
},
"source": [
"plt.figure(figsize=(10, 10))\n",
"corrplot(constructed_df.corr())"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAncAAAJVCAYAAAC8rtNfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3X2cZndd3//XZ3Ymu5sbAuaGwCay\nEIEQEJhkREhQFgKaYraSSBtZrdWWLK1mIdVYbypKa2u13hQavAtVaX4hdhEBicFArS5EgoZJjIAa\nCJCqkdKQBSTZ7G52dz6/P86Z5MrsNTfX7HVd5/qe83o+HvPYmevmzHvOnutcn+tzzvd7IjORJElS\nO0w1HUCSJEnDY3EnSZLUIhZ3kiRJLWJxJ0mS1CIWd5IkSS1icSdJktQiFneSJEktYnEnSZLUIhZ3\nkiRJLWJxJ0mS1CLTTQcYRERsB7Yff/zxV5x55plNx1mXhYUFpqbKrKlLzg5l5zd7c0rOb/bmlJy/\n5Oyf/vSn78/M0xZ/PvXUU3Pr1q0NJqrcfvvtj8k1alHitWVnZ2fzQx/6UNMx1mV+fp65ubmmY6xL\nydmh7Pxmb07J+c3enJLzl5z95JNPvj0zHwk/NzeX8/PzTUYCICIek2vUyizNJUmS1JfFnSRJUotY\n3EmSJLWIxZ0kSVKLWNxJkiS1iMWdJElSi1jcSZIktYjFnSRJUotY3EmSJLWIxZ0kSVKLWNxJkiS1\nyHTTAcbh8mtuYP+hwyNZ9uaZaXbv2jGSZUuSJA2qE527URV2o162JEnSoDpR3EmSJHVFJw7LSpKk\n8XjPn3+awwsL637+9NQUl84+Y4iJusfOnSRJGppjKeyG8XxZ3EmSJLWKxZ0kSVKLDKW4i4hbB3z8\ntoj4/fr7cyLioxFxMCKuHkYeSZJ6TX35i2z48n3Lfk19+YtNR5SGZigDKjLzgmN4+peA1wOvGkYW\nSaub2f8Ascx9CRzafNI44wzsuIcf6ps/gYePO37ccQby4ELACmv/xKkcZ5yB7GeKlbJvZnLPlQpW\nXq+r3d+0gzEN0WfdZ7IxnZKrdBHxm8AlwH2Z+ZxjXd6wOncP1v9ui4g9EfGuiLgrIt4RUW2NEXFx\nfdsdwGWLz83M+zLzY8ChYWTpsoh45Ks0JWcv0UpruYT/geUylpC97LVfcvbCLbdvdJ/ZFm8HLh7W\nwkZxzt0scBVwLvA04MKI2AS8DdgOnA+cMYLf22lLi6KSiqSSsy+yMJUkrVdmfpjqSOZQjGKeu9sy\n816AiLgT2Ao8CNyTmXfXt18P7BxkoRGxc/E5Z5111jDzSsekt6iLCDIn+/COJHXFpz5/H9ve9Nam\nY4zdKDp3B3u+P8Lwzuu7NjPnMnPulFNOGcYiJUmSxuHUiJjv+RqowTWocV2h4i5ga0ScnZmfBV4z\npt/bGZn5mA5SSd2jkrPDY/OXll2S2m5CTpm5PzPnxvXLxlLcZeaBukq9KSIeAm4BTgKIiDOAeeBx\nwEJEXAWcm5lfHUe2Nim5sCg5O5SfvzRJ/9P3/V9Qa2UuO1pWWmpYh0xPrP/dA+zpuf3Knu9vBs7p\n89wvAGcOI4ektVmuOFq8b9JN+nQnKyt57ZebPYkVpzvJCR/tuzEPT/oqnkgRwdRkdO5WFBG/DWyj\nOnx7L/BTmfkb613euA7LSpogkz6PXZtV89iV+S49yfPYrWbhCac1HUFaVmYO9XQ1iztJktRaBTTu\nhs5ry0qSJLWInTtJkjQ001NTHF5Y/yH86anh9p0mZLTsWFncSZKkobl09hlNR+g8iztJktRKAUWM\nlh22Tpxzt3lmdDXsKJctSZI0qE5UJrt37Wg6giRJakAXz7nrROdOkiSpKzrRuZMkSR0UnnMnSZKk\nwtm5kyRJrdXBxp2dO0mSpDaxcydJklopCEfLSpIkqWx27iRJUms5WlaSJElFs3MnSZJaq4udO4s7\nSZLUShFefkySJEmFK6pzFxHbge1btmxhfn6+6Tjrsm/fPrM3pOT8Zm9OyfnN3pyS85ecvZ8udu6K\nKu4y80bgxtnZ2Svm5uaajrMu8/PzmL0ZJec3e3NKzm/25pScv+TsqhRV3EmSJA1iqnuNO8+5kyRJ\nahM7d5IkqZW8/JgkSZKKZ+dOkiS1VhcnMbZzJ0mS1CJ27iRJUmsFdu4kSZJUMDt3kiSpnby2rCRJ\nkkpn506SJLVS4BUqJEmSVDg7dwW4/Job2H/o8NCXu3lmmt27dgx9uZIkTQavUKEJNYrCbpTLlSRJ\nzbFzJ0mSWmuqgyfd2bmTJElqETt3kiRpqG695/9yJHOg52yI4IKnPmmoOcJ57iRJko7doIXdep+j\n/uzcSR1z7wMHWMsuNIAzT9o06jjSyH3hoYfXvM2fcfxxo46jMZvy2rLrExG3Dvj4bRHx+/X33xUR\nH4+IT0TErRHxvGFkktTfWj8b+xl6+L5yOFf90vC1YZvfzxT72bDMlwfh9FhD6dxl5gXH8PR7gJdk\n5pcj4h8B1wLfOIxcmnwbDx/s+5kqgYPTG8cdZyDHHTqwbPaHZ+x4SRqmlbpP3etMDcJz7tYpIh6s\n/90WEXsi4l0RcVdEvCPqtRoRF9e33QFctvjczLw1M79c//inwJnDyLQeEfHIl8ZjuTVdwv9Aydnb\nwtdsc1zv0uQaxTl3s8Czgc8DHwEujIh54G3Ay4DPALuXee6/BP5gBJlWtXQnFRGkJ3dKE8vXbHN6\n173rXZOsq9eWHUVxd1tm3gsQEXcCW4EHgXsy8+769uuBnb1PioiXUhV3L+630IjYufics846awSx\nJUlSu3SzwzyKszAP9nx/hDUUkBHxXOC/A9+emXv7PSYzr83MucycO+WUU4aTVJI0sN5OnV07afKM\nayqUu4CtEXF2Zn4WeM3iHRHxtcC7gX+WmZ8eU56jZOZjqnt3WOOR9D9HzbWv1fiabZbrW6XoYudu\nLMVdZh6oD6veFBEPAbcAJ9V3/yRwCvAr9X/A4cycG0euPjmb+LWdNukjYldiYdo8X7PqjuX2OIv3\nSY8a1lQoJ9b/7gH29Nx+Zc/3NwPn9Hnua4HXDiOHNE5OdyKVIVhb+TPJ/Z3NLDQdoUwBU3buJLVd\nG97oSvX4addqE7zqhLrG4k7qGC8pJmnUNkQMfK3YDSPosAWecydJknTMLnjqk5qO0GkWd5IkqbU6\n2LjzasOSJEltYudOkiS1VDAV3etjde8vLtDmmdHU4KNariRJao7v7gXYvWtH0xEkSSpOAFOecydJ\nkqSS2bmTJEntFN2c587OnSRJUovYuZMkSa3VxWvL2rmTJElqETt3kiSptTznTpIkSUWzcydJklop\nsHMnSZKkwtm5kyRJ7RReoUKSJEmFK6pzFxHbge1btmxhfn6+6Tjrsm/fPrM3pOT8Zm9OyfnN3pyS\n85ec/WjRyXPuiiruMvNG4MbZ2dkr5ubmmo6zLvPz85i9GSXnN3tzSs5v9uaUnL/k7KoUVdxJkiQN\nws6dJElSSwRefkySJEmFs3MnSZJay86dJEmSimbnTpIktVN0c0CFnTtJkqQWsXMnSZJaKYAONu7s\n3EmSJLWJnTtJktRS4WhZSZIklc3OnSRJaq0ujpa1uNNIXX7NDew/dHjoy908M83uXTuGvlxJkkpn\ncaeRGkVhN8rlSpLaw2vLSpIkqXh27iRJ0tC8+45PcXhhYd3Pn56a4rLznjmcMF6hQpIk6dgcS2E3\njOfLzp0kSWqx7vXt7NxJkiS1ylA6dxFxa2ZeMMDjtwFXZ+YlEfHtwE8DC8Bh4KrM/JNh5JLUPvcf\nPLLqY07duGEMSSSVoIujZYdS3A1S2PXxv4H3ZWZGxHOBdwLnDCNXV2w8fPCotnMCB6c3NhGnM/Zl\nsHzDPzkhcpxxVBBfs83ot96hjHW/nylW2t9sxvPU9Khhde4ezMwT647cm4D7gecAtwPfXRduFwNv\nBh4CHunMZeaDPYs6gep11ojeETWZ5bwx93u5d+9zShNWWstBg5uyJlwbXrOL+8vS95Ur3T5ZVtvf\nqJ8gHC07JLPAVcC5wNOACyNiE/A2YDtwPnBG7xMi4tKIuAu4CfgXI8i0qqX/+V3cGNRNEd3c+Wn9\nercXtx1p8oyiuLstM+/NzAXgTmAr1WHWezLz7qw+5l3f+4TMfE9mngO8iur8u6NExM6ImI+I+b17\n944gttQ9vklLarupqWj8a+x/8wiWebDn+yMMcOg3Mz8MPC0iTu1z37WZOZeZc6eccsoQYkrqPaRW\n0uE1SdLyxjXP3V3A1og4OzM/C7xm8Y6I+Drgs/V5eecBG4Gxt+Yys9hz7qRj4bauQfXuL91+NNE6\neoWKsRR3mXkgInYCN0XEQ8AtwEn13d8BfE9EHAL2A5dnQ3uLUndSydGn05b5l0jd0IbXbIn7y37r\nffH2ybdc+sX7pEcNayqUE+t/9wB7em6/suf7m+kzxUlm/hzwc8PI0VWTPoS/vdzZan18zTaj5PXu\nVCfrEzjPnaQBVPPYWcSNmxMUS9LKLO4kSVJrda9vZ3EnSZJarIuHZUcxFYokSeqo6aljKy2O9fmy\ncydJkobosvOe2XSEHt28Ao/lsSRJUovYudNIbZ6ZZv+hwyNZriRJKwmcxFgaut27djQdQZKkTrG4\nkyRJ7RSOlpUkSVLh7NxJkqTW6mDjzs6dJElSm9i5kyRJrdXF0bJ27iRJklrEzp0kSWqlwNGykiRJ\nKpydO0mS1FJh506SJElls3MnSZLaKRwtK0mSpMIV1bmLiO3A9i1btjA/P990nHXZt2+f2RtScn6z\nN6fk/GZvTsn5S86+VFdHyxZV3GXmjcCNs7OzV8zNzTUdZ13m5+cxezNKzm/25pSc3+zNKTl/ydlV\nKaq4kyRJGoTn3EmSJKlodu4kSVJrdbBxZ+dOkiSpTezcSZKkVurqaFk7d5IkSS1i506SJLVTRCdH\ny1rcSZKk1upicedhWUmSpBaxcydJklqpGlDRdIrxs3MnSZLUInbupGVcfs0N7D90eCTL3jwzze5d\nO0aybEnSozznTtIjRlXYjXrZkqRus3MnSZJaq4uTGFvcSZKkofj1PfMcOrJwTMuY2TDF67bNDSlR\nN1ncSZKkoTjWwm5Yy1gU0c3OnefcSZIktYidO0mS1FJefkySJE2a++4lMld8SEbA6WeOKZAm3VCK\nu4i4NTMvGODx24CrM/OSntu+Afgo8J2Z+a5h5NLk25dBNYf4UskJsfLOTMfmABuqE1KWymQTR8Yf\naAClZv/K4dW36cdPT26XYcM/3N/31boogSMnnzquOJ2xWmG3+Bj3mP3ZuVunQQq7fiJiA/BzwAeH\nkadrjjt0YJnyCB6e2TTuOANa7kUX4K5qtJbb4UVM/qovOXvBVnuLnPS30ENTM8t+KJhZODT+QNKI\nDKtz92Bmnlh35N4E3A88B7gd+O7MzIi4GHgz8BDwJ0sWsQv4XeAbhpHnWCxW+LmGT0qTYqXySJJU\nW+lDgVrL0bLDMQtcBZwLPA24MCI2AW8DtgPnA2csPjgitgCXAr86giwD6W3ddrGNK0mSyjeK4u62\nzLw3MxeAO4GtwDnAPZl5d1Ytset7Hv9m4Efqxy8rInZGxHxEzO/du3cEsSVJUpsEVWO26a9xG8Vo\n2YM93x9Zw++YA/5n3Sk7FXhlRBzOzPf2PigzrwWuBZidnR3JMdPMLPKwrCRJ0qJxTYVyF7A1Is7O\nzM8Cr1m8IzOfuvh9RLwd+P2lhd04lVjUJcuNN5UkPSJz2QEVaqno5mlWYynuMvNAROwEboqIh4Bb\ngJPG8bu7YPJHxK7E0rQxJb/RlZxdjXFErLpiWFOhnFj/uwfY03P7lT3f30x17t1Ky/neYeRROaq5\n7HxDbsImjhS76kvOXrLlPor13q/hy4i1TWKsvqY6OHeEV6iQpDGZ5AmK18IJihty+pkWzhqIxZ0k\nSWqpbl5bdhRToUiSJKkhdu4kSdJQzGyY4tCRFaetXdMyhqWa5657nTuLO0mSNBSv2zbXdARhcSdJ\nklpsasrOnaTa5plp9h86PLJlS5JGLKCDtZ3FnbSc3bt2NB1BkqSBWdxJkqRW6uqACqdCkSRJahE7\nd5IkqbW6ePkxO3eSJEktYudOkiS1lJcfkyRJUuHs3EmSpNaycydJkqSi2bmTJEmtFHTzChV27iRJ\nklrEzp0kSWqn6OY5d5GZTWdYs4jYDmzfsmXLFdddd13TcdZl3759nHDCCU3HWJeSs0PZ+c3enJLz\nm705JecvOftFF110e2bOLf78zOd8ff7aO9/bZCQAXvbsr3tMrlErqnOXmTcCN87Ozl4xNze2dTRU\n8/PzmL0ZJec3e3NKzm/25pScv+Ts/XSxc+c5d5IkSS1SVOdOkiRprarRsnbuJEmSVDA7d5IkqaXC\nzp0kSZLKZudOkiS1lqNlJUmSVDQ7d5IkqZUiHC0rSZKkwtm5kyRJrdXBxp2dO0mSpDaxcydJklqr\ni6NlLe6kFrr8mhvYf+jwSJa9eWaa3bt2jGTZkqRjZ3EntdCoCrtRL1uShq2Lo2Ut7iRJUisF0cnD\nsg6okCRJahE7d5IkqZ3CqVAkSZJUODt3Bbv3gQPkGh4XwJknbRp1HEmSJo4DKtYpIm7NzAsGePw2\n4OrMvKT+/veAe+q7352Z/2EYudpuLYXdII+TSjD1pfuIFbbqJFj4mtPHmGgwDxyB6iNXP8lJG8YY\nRlIrDaW4G6SwW8YtmXnJMLKsx8z+B1bY1cKhzSeNM44KcYAN/U/myGQTR8YfqCNWKuzWcn/zVuoi\nBJP8cWzmoa+uvK88/nHjjNMpxx060HfdJ/DwzGQfmdnPFCt9oNnMwkh/v6Nl1ykiHqz/3RYReyLi\nXRFxV0S8I+q1GhEX17fdAVw2jN87LKvtaqW+ltthdHBHom5ow75y45GH2dTztfHIw01HWpPl1m8Z\n670NW05ZRnHO3SzwbODzwEeACyNiHngb8DLgM8DuJc95UUT8Rf2cqzPzL0eQSxMuIsic3K6FpPIt\nLSUsLdot6OY5d6MYLXtbZt6bmQvAncBW4Bzgnsy8O6t37+t7Hn8H8JTMfB5wDfDefguNiJ0RMR8R\n83v37h1BbDVpsW3exfa5JEnDNIri7mDP90dYpTuYmV/NzAfr798PzETEqX0ed21mzmXm3CmnnDLU\nwGreYsfOzp0kaZimIhr/GvvfPKbfcxewNSLOrn9+zeIdEXFGz3l5L6gz2ZrrIAs7SaO2dC/jXkdt\nNJZ57jLzQETsBG6KiIeAW4DFIaivBv51RBwG9gPfmWN+l09WGscjLSNz2dGyUhu1YV95cMNxTUdY\nl+XWfRnrvcEtJ7p5bdlhTYVyYv3vHmBPz+1X9nx/M9W5d0uf+1bgrcPIsV5OdaL12MSRUvasrZLE\nqvPcTbZySySnOmnOpE93spJRT3Wio3mFioKtdUasSX+rkwYxyRMUr0U1SfFkF3FSWwTdHKhncVcw\nLykmSZKWsriTJEmtNdW9xt3YRstKkiRpDOzcSZKk1uriOXd27iRJklrEzp3UQptnptl/6PDIli1J\npehi5869tNRCu3ftaDqCJKkhFneSJKmVApjq4GyvnnMnSZLUInbuJElSO3X02rJ27iRJklrEzp0k\nSWqtDjbuLO4kSVI7BTDVweuPeVhWkiSpRezcSZKk1prq4HFZO3eSJEktYudOkiS1U3Tz8mN27iRJ\nklrEzp0kSWqlIDp5+bHIzKYzrFlEbAe2b9my5Yrrrruu6Tjrsm/fPk444YSmY6xLydmh7Pxmb07J\n+c3enJLzl5z9oosuuj0z5xZ/ft7sefn+P/pQk5EAOPNrHveYXKNWVOcuM28Ebpydnb1ibm5s62io\n5ufnMXszSs5v9uaUnN/szSk5f8nZ+/GcO0mSJBWtqM6dJEnSIDrYuLNzJ0mS1CZ27iRJUmt5hQpJ\nkiQVzc6dJElqpfAKFZIkSSqdnTtJktRadu4kSZJUNDt3kiSppcLRspIkSSqbnTtJE+fya25g/6HD\nQ1/u5plpdu/aMfTlSppcHWzc2bmTNHlGUdiNcrmSNEns3EmSpFaaIpk5cqjpGGNn506SJKlFLO4k\nSZJaxOJOkiSpRSzuJEmSWmQoAyoi4tbMvGCAx28Drs7MS3p+fjMwA9yfmS8ZRi5NtvsPHln1Madu\n3DCGJN0y9aX7CHLFxyTBwtecPqZE3RH3f57IVdZ9BHnqk8eUSFIbDaW4G6SwWyoiHg/8CnBxZv5t\nRIz9HeW4hx+i3zQ4CTx83PHjjqNCHGDD8hMoZbKJ1YvXJqxW2K31MRrcaoXd4mNc+8P3wBGg755+\nUXLSBH+WPBjT/fc3mWzMyZ7iZ18Gy6/75IRwi4+Ii4G3ABuA/56ZP3ssyxvKYdmIeLD+d1tE7ImI\nd0XEXRHxjqiv2BsRF9e33QFc1vP0HcC7M/NvATLzvmFkGij/gLdPqoh45EtjsNJ69v9ALXXcoQNs\nXPJ13KEDTcdag9VekxP+ml1un1LEvmaljCXkH62I2AD8MvCPgHOB10TEuceyzFGcczcLXEUV8GnA\nhRGxCXgbsB04Hzij5/HPAJ5QF4W3R8T3jCBT6y0t6CzwJI1Cvz2LexvpmLwA+Exmfi4zHwb+J/Dt\nx7LAURR3t2XmvZm5ANwJbAXOAe7JzLszM4Hrex4/TVXwfRvwrcAbI+IZSxcaETsjYj4i5vfu3TuC\n2JIkSSNx6mINU3/t7LlvC/B3PT/fW9+2bqO4QsXBnu+PrOF33Avszcx9wL6I+DDwPODTvQ/KzGuB\nawFmZ2c9QC9Jkkpxf2bOjeuXjWsqlLuArRFxdv3za3ru+z3gxRExHRHHA98I/PWYckmSJDXp74Gz\nen4+s75t3cZS3GXmAWAncFM9oOK+nvv+GrgZ+DhwG9UokU+OI9cjGQa8fRLlklF4S3+WpGHot2dx\nbzMGy+3T3de3wceAp0fEUyPiOOA7gfcdywKHNRXKifW/e4A9Pbdf2fP9zVTn3vV7/s8DPz+MLOvR\nlulOLOjGLHPFqVCkNnp4ZlPTEdYpWW0qlEm2MQ9PesQVrLTui/2jhiYzD0fElcAHqKZC+c3M/Mtj\nWeYozrmTOmETR4rcLyWxpkmMNXwZsaZJjDV81Rx2Bb5gW6Cax851v5LMfD/w/mEtz+JOjfHqE83w\nyhPNyVOf7FucpJHz2rKSJEktYnEnSZLUIhZ3kiRJLeI5d5IkqZUiF9h4+ODqD2wZO3eSJEktYudO\n0sTZPDPN/kOHR7JcSR2SdHLeUfd0kibO7l07mo4gScWyuJMkSa3Vxas3ec6dJElSi9i5kyRJLZWQ\nC02HGDs7d5IkSS1i506SJLVWLnjOnSRJkgpm506SJLVT4jl3kiRJKpudO0mS1FLZyStU2LmTJElq\nETt3kiSplapLy3avcxcl/dERsR3YvmXLliuuu+66puOsy759+zjhhBOajrEuJWeHsvObvTkl5zd7\nc0rOX3L2iy666PbMnFv8+bznPTc/8gc3NhkJgOO3bH1MrlErqnOXmTcCN87Ozl4xNze2dTRU8/Pz\nmL0ZJec3e3NKzm/25pScv+TsqhRV3EmSJK1ZOomxJEmSCmfnTpIktVQ6ibEkSZLKZudOkiS1Vi7Y\nuZMkSVLB7NxJkqT2Kmg+32GxcydJktQidu4kSVI7ZXby8mN27iRJklrEzp0kSWov57mTJElSyezc\nSdIQXX7NDew/dHjoy908M83uXTuGvlyp9TznTpJ0LEZR2I1yuZLax86dJElqqfQKFZIkSSqbnTtJ\n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\n+JfjyKTJUMKI2JWUMCp2OZM/KnY5y30k6L1/kq2Uf7Kzl5tc6pZhTYVyYv3vHmBPz+1X9nx/M3BO\nn+d+FHjGMHKsRxKrznM3qdYyacLkppfWp5rDrtxSoprHrsz8zmOn8mQnry3b+StUTOoExWvhlSck\nSdJSnS/uJElSixV8juJ6jWKeO0mSJDXEzp0kSWqnLHt08XrZuZMkSWoRO3eSJKmlujla1s6dJKkV\nNs+Mpl8xquVKo+IWK0lqhd27djQdQROoi1eosHMnSZLUInbuJElSe3XwnDuLO0mS1E5OhSJJkqTS\n2bmTJEktlV5+TJIkSWWzcydJklopgVw40nSMsbNzJ0mS1CJ27iRJUnt5zp0kSZJKZudOkiS1U3Zz\ntGxRxV1EbAe2b9myhfn5+abjrMu+ffvM3pCS85u9OSXnN3tzSs5fcnZViiruMvNG4MbZ2dkr5ubm\nmo6zLvPz85i9GSXnN3tzSs5v9uaUnL/k7P1kBy8/5jl3kiRJLVJU506SJGkgC907587OnSRJUovY\nuZMkSS2VnnMnSZKkstm5kyRJ7ZR0cp47O3eSJEktYudOkiS1Vtq5kyRJUsns3EmSpPZytKwkSZJK\nZudOkiS1VHbyChUWd5IkNezya25g/6HDQ1/u5plpdu/aMfTlarJZ3EmS1LBRFHajXG4xEq9QIUmS\npLLZuZMkSe210L3OncWdJElqpSSdxFiSJElls3Mnrcd99xKrfBrMCDj9zDEFkiT1ZedueRFx6yAL\njohtEfH79ffnRMRHI+JgRFy95HEXR8SnIuIzEfGjg/wOqSmrFXZrfYwkScO25s5dZl5wDL/nS8Dr\ngVf13hgRG4BfBl4B3At8LCLel5l/dQy/a2AHYxoijr4jk4052cPI9zMF9MkOQLKZyT6RdPn8k5+9\ndMcdOrDMmoeHZzaNO85ASn7Nlu7whpmj130m00cONRNIWolToawsIh6s/90WEXsi4l0RcVdEvCOi\neqXXXbi7IuIO4LLF52bmfZn5MWDpq/8FwGcy83OZ+TDwP4FvP9Y/amD93iRWun2irJSx5PwlZC9b\n0Wu+6NdsJSIe81WMfllLyg9lrndpAOs9524WeDbweeAjwIURMQ+8DXgZ8Blg9xqWswX4u56f7wW+\ncZ2ZJKkI/YqKiOjkqL5xW7ruXe/jtbj+x7rOO/j/u97Rsrdl5r1Z9TrvBLYC5wD3ZObdWf2vXT+k\n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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x720 with 2 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AVJ2_ju_YmcS",
"colab_type": "text"
},
"source": [
"Let's create some test and training sets by splitting the constructed set."
]
},
{
"cell_type": "code",
"metadata": {
"id": "RYL5STpjYFop",
"colab_type": "code",
"colab": {}
},
"source": [
"x_c_train, x_c_test, y_c_train, y_c_test = train_test_split(x,y, test_size=0.3) #0.3 data as data test"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "rKVsChvBYxnl",
"colab_type": "text"
},
"source": [
"Back to you to test the regressors we already played around with before."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NOVQGb9uJqVz",
"colab_type": "text"
},
"source": [
"# This concludes my part of the notebook. \n",
"Go forth and extend!"
]
},
{
"cell_type": "code",
"metadata": {
"id": "lPjrFMoDJxfn",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment