{ "cells": [ { "cell_type": "markdown", "id": "01e8e78a", "metadata": {}, "source": [ "# Interpretting Regression" ] }, { "cell_type": "code", "execution_count": 1, "id": "4e02a824", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import numpy as np\n", "import pandas as pd\n", "from sklearn import datasets, linear_model\n", "from sklearn.metrics import mean_squared_error, r2_score\n", "from sklearn.model_selection import cross_val_score\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import PolynomialFeatures\n", "sns.set_theme(font_scale=2,palette='colorblind')" ] }, { "cell_type": "markdown", "id": "ffbbdf53", "metadata": {}, "source": [ "## Multivariate Regression\n", "\n", "We can also load data from Scikit learn.\n", "\n", "This dataset includes 10 features measured on a given date and an measure of\n", "diabetes disease progression measured one year later. The predictor we can train\n", "with this data might be someting a doctor uses to calculate a patient's risk." ] }, { "cell_type": "code", "execution_count": 2, "id": "be1c8d38", "metadata": {}, "outputs": [], "source": [ "# Load the diabetes dataset\n", "diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)\n", "X_train,X_test, y_train,y_test = train_test_split(diabetes_X, diabetes_y ,\n", " test_size=20,random_state=0)" ] }, { "cell_type": "code", "execution_count": 3, "id": "c03b30ae", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(422, 10)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.shape" ] }, { "cell_type": "code", "execution_count": 4, "id": "608cedb3", "metadata": {}, "outputs": [], "source": [ "regr_db = linear_model.LinearRegression()" ] }, { "cell_type": "code", "execution_count": 5, "id": "2215569c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'fit_intercept': True, 'copy_X': True, 'n_jobs': None, 'positive': False}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_db.__dict__" ] }, { "cell_type": "markdown", "id": "7d154b5d", "metadata": {}, "source": [ "We have an empty estimator object at this point and then we can fit it as usual." ] }, { "cell_type": "code", "execution_count": 6, "id": "f371c793", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LinearRegression()" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_db.fit(X_train,y_train)" ] }, { "cell_type": "markdown", "id": "3095e5f6", "metadata": {}, "source": [ "This model predicts what lab measure a patient will have one year in the future\n", "based on lab measures in a given day. Since we see that this is not a very high\n", "r2, we can say that this is not a perfect predictor, but a Doctor, who better\n", "understands the score would have to help interpret the core." ] }, { "cell_type": "code", "execution_count": 7, "id": "6372fb06", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'fit_intercept': True,\n", " 'copy_X': True,\n", " 'n_jobs': None,\n", " 'positive': False,\n", " 'n_features_in_': 10,\n", " 'coef_': array([ -32.30360126, -257.44019182, 513.32582416, 338.46035389,\n", " -766.84661714, 455.83564292, 92.5514199 , 184.75080624,\n", " 734.91009007, 82.72479583]),\n", " 'rank_': 10,\n", " 'singular_': array([1.95678408, 1.19959858, 1.08212757, 0.95268243, 0.79449825,\n", " 0.76416914, 0.71267072, 0.64259342, 0.27343748, 0.0914504 ]),\n", " 'intercept_': 152.391853606725}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_db.__dict__" ] }, { "cell_type": "markdown", "id": "60df718c", "metadata": {}, "source": [ "We can look at the estimator again and see what it learned. It describes the model like a line:\n", "\n", "$$ \\hat{y} = mx+b$$\n", "\n", "except in this case it's multivariate, so we can write it like:\n", "\n", "$$ \\hat{y} = \\beta^Tx + \\beta_0 $$\n", "\n", "where $\\beta$ is the `regr_db.coef_` and $\\beta_0$ is `regr_db.intercept_` and that's a vector multiplication and $\\hat{y}$ is `y_pred` and $y$ is `y_test`. \n", "\n", "In scalar form it can be written like\n", "\n", "$$ \\hat{y} = \\sum_{k=0}^d(x_k*\\beta_k) + \\beta_0$$\n", "\n", "where there are $d$ features, that is $d$= `len(X_test[k])` and $k$ indexed into it. For example in the below $k=0$" ] }, { "cell_type": "code", "execution_count": 8, "id": "822ad35e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.01991321, 0.05068012, 0.10480869, 0.0700723 , -0.03596778,\n", " -0.0266789 , -0.02499266, -0.00259226, 0.00370906, 0.04034337])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test[0]" ] }, { "cell_type": "markdown", "id": "1f15125b", "metadata": {}, "source": [ "We can compute the prediction manually:" ] }, { "cell_type": "code", "execution_count": 9, "id": "b93a5eac", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "234.91095893227003" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(regr_db.coef_*X_test[0]) + regr_db.intercept_" ] }, { "cell_type": "markdown", "id": "a0fd9611", "metadata": {}, "source": [ "and see that it matches" ] }, { "cell_type": "code", "execution_count": 10, "id": "9fc54912", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([234.91095893, 246.81176987])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_db.predict(X_test[:2])" ] }, { "cell_type": "code", "execution_count": 11, "id": "b6cfe7a3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5195333332288746" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_db.score(X_test,y_test)" ] }, { "cell_type": "markdown", "id": "eb6f22b7", "metadata": {}, "source": [ "We can also look at the residuals and see that they are fairly randomly spread out." ] }, { "cell_type": "code", "execution_count": 12, "id": "b6deecbb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAGvCAYAAABLgJELAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOoElEQVR4nO3de0BUdf4//ufMcFMugsjN8A6CUKZphZKlUp9V0VI39bOVZVmGeUnN2sq1MrOs2LV02/rUl7XcNDRSylB/JZqZpeZdQTHACyiMlNzvzJzfHyzHOXMHBs5cno9/Ou8z7znzJg745Jz3eb0VgiAIICIiIiKjlHIPgIiIiMieMSwRERERmcGwRERERGQGwxIRERGRGQxLRERERGYwLBERERGZwbBEREREZAbDEhEREZEZbnIPwBkIggCtlrU9HYFSqeD3iuwOz0uyR85+XiqVCigUCqv6MizZgFYr4Pr1armHQRa4uSkREOCNiooaNDVp5R4OEQCel2SfXOG87N7dGyqVdWGJt+GIiIiIzGBYIiIiIjKDYYmIiIjIDIYlIiIiIjMYloiIiIjMYFgiIiIiMoNhiYiIiMgMhiUiIiIiMxiWiIiIiMxoUwXvqqoqHDhwAIcOHUJ2djYuXryIyspKeHp6Ijg4GIMHD8bEiRMxatQos6XEt27dipdeesnqz50/fz4WLFhgsV9DQwPS0tKwa9cu5Ofno6ysDN27d0d0dDQSExMxadIkKJXMiURERGRZq8PS+vXrsWbNGtTX1xu81tTUhAsXLuDChQv4+uuvMXz4cLz77rvo2bOnTQZrjby8PCxcuBC5ubmS/Wq1Gmq1Gvv27cPmzZuxdu1a9OjRo9PGRUREpNEKOFhYBnVVA0J8PBAX7g+V0rolN0g+rQ5LFy5cEINSSEgIRo4cidjYWAQGBqK+vh4nTpzAN998g5qaGhw5cgQzZ87Eli1bEBgYaPa4M2fORFxcnNk+/fr1M/v6tWvX8OSTT+Lq1asAgKioKEyZMgXBwcEoKChAWloaCgoKcPToUcyZMweff/45unbt2oqvnoiIqG0yckqwLDMXRZU3LjaE+XpiVUIEEqOCZBwZWdLqsKRQKHDXXXfhiSeewIgRIwxuZ02ZMgVz5szB7NmzceHCBRQWFiI5ORlvvfWW2ePGxMTg3nvvbe1wJFavXi0GpcTERLzzzjtwc7vxJc6cORNJSUk4fPgwsrKy8PHHH2PRokXt+kwiIiJLMnJKMDs9C4Le/uLKesxOz0LK5FgGJjvW6ok7ixcvRkpKCuLj403O+7npppvw3nvvie2dO3eitra2zYO0Rm5uLnbs2AEACAoKwsqVKyVBCQC8vb2RnJwMT09PAMCnn36KioqKDh0XERHJQxD0o4k8NFoByzJzDYISAHHf3zJzodHax3jJUKvDkr+/v1X9oqOjxdtmtbW1uHTpUms/qlV27Ngh/mDMmDED3t7eRvuFhIRg/Pjx4rgyMzM7dFxERNT5Npy4itB39uGl73+Teyg4WFgmufWmTwBwtbIeBwvLOm1M1Dod+kiYj4+PuG1sQrgt/fjjj+L2PffcY7av7uu67yMiIseXmfcHnv//zgMAvjl3TebRAOqqBpv2o87XptIB1mhoaMDFixfFtqUn4jZt2oRPPvkExcXF0Gq1CAgIQHR0NO6++25MmTIFXbp0MfleQRDEp99UKhUGDRpk9rNuueUWcfv8+fNWfDVEROQITqsr8VDaabG9e9ZwGUfTLMTHw6b9qPN12JWlb7/9FpWVlQCA2NhYBAWZn7h2+vRp5Ofno6amBnV1dSgqKsLevXuxYsUKjB07Fnv37jX53qKiInFOVGhoKNzd3c1+VmhoKFQqFQDg0qVLdnNfm4iI2q6wog73fnpUbO95fDjCfD1lHFGzuHB/hPl6wlSBAAWAnr6eiAv378RRUWt0yJWl69evIzk5WWzPnTvXZF+VSoUhQ4Zg+PDh6Nu3L7p27YrKykqcOXMGu3btQllZGa5fv465c+ciOTkZEydONDiG7iRta+ZUubu7w8fHB+Xl5WhsbERNTY3JOU7WcnNjkUt7p1IpJf8lsgc8L22jvK4Rwz48KLbT/jIEt/b0k3FEN7gBeOt/IvH4V2egACQTvVsC1Jv/EwlPD1XnD84EnpdSNg9LDQ0NWLBgAf744w8AwL333ov77rvPaN9hw4Zhz549CA0NNXht2rRpeP7557F8+XJx8vbLL7+M2267zeCWXk1Njbjd8qSbJbr9qqur2xWWlEoFAgLaF7ao8/j5mb6lSyQXnpdt19CkReCqPWI7ZfqtmDqsl4wjMvToiH7w8fHCovQzKCyvE/eH+3thzQM3Y+otYTKOzjSel81sGpa0Wi1efvllHDlyBADQu3dvvPnmmyb79+nTx+zxfHx8kJycjN9//x2HDx9GfX09PvnkE7z66qu2HHa7abUCKipqLHckWalUSvj5dUFFRS00Gq3cwyEC0PHnpUYr4JeCMqir6hHi44kRvZyrYrQgCOjx5o1pGs/f1ReTIwNRWlot46iMGxPuh2PPjDD6/bC38brC70s/vy5WXzmzWVgSBAGvvvoqtm/fDqB5Qvf69evRrVu3dh1XpVJh0aJFeOihhwAAP/zwg0FY0q3Cbe1Td7r92nsLDgCampzzZHJGGo2W3y+yOx1xXrpCxeiQt38Qt6cMCsbS+L52//Mdd9ONfxcFrYAmO66vxN+XzWxyM1IQBLz22mvYsmULgOYJ1J999hnCw8NtcXgMHTpUvG129epVgwKXfn437kuXlZVZPF5TUxOqqqoANM9f4pInRORsWipG69f3aakYnZFTItPIbOfulMPidmywNz66P0bG0ZAza3dYEgQBK1asQGpqKoDmoo8bNmxA79692z24FkqlUnKFSr/qdlhYmFhaoLi4GI2NjWaPV1RUBI1GA6D5VqBC4TyXpImIXKFi9MyvTiPn9+bpDwoAex6/Xd4BkVNrV1hqCUpffPEFACA4OBgbNmywOBeptbRarSQg6V5JAprXq4uIiAAAaDQanD171uzxTp++UYMjMjLShiMlIpKfs1eMDnn7B3yX+4fYLnrBfCFiovZqc1jSD0pBQUHYsGED+vbta6uxiU6cOIG6uuanB0JDQ40WqBw1apS4bakq9759+8RtS9W+iYgcjTNXjB6/4aikXbj07g6/O6DRCjhwuRRbs9U4cLnUoa/IUdu0OSy9/vrrBkGpZS04W9JqtVi7dq3YHj16tNF+EyZMELdTU1Ml5QR0qdVq7Ny5EwDg5eWFhIQE2w2WiMgOOGvF6OWZuThWVCm2j8+Ng3sH1wHKyCnBsI8OYuoXJzF3+1lM/eIkhn100CnmfJH12nSWrVy5Eps2bQJwIyj179+/Vcc4fvw4Nm/ebPbptZqaGrzwwgv45ZdfAAAeHh546qmnjPaNjIwUF8gtKSnB8uXL0dTUJOlTXV2NpUuXip85a9Ysg1t6RESOzhkrRqeeLsLHRwrFdsYjQ9HTz6tDP9MVJsmTdRRCK9f6WLNmDT766KPmNysUWLJkiVVBKSYmRlJMcvfu3Zg3bx66du2K+Ph4xMbGihO1KysrkZ2djYyMDPHpNoVCgbfffhsPPPCAyc9Qq9WYPn06iouLAQBRUVGYOnUqgoODUVBQgC+//BIFBQUAgEGDBmHjxo02KRug0Whx/bp91cggQ25uSgQEeKO0tJqPwpLd6KjzsuUfesB4xeiUybEOUz7gcGE5Jm08Lrb/mRiNaTcbFjO2JY1WwLCPDpqc+6VAcxmGI0lxTlW3qoUr/L7s3t3b6jpLrQ5LM2fOxOHDhy131PPWW29h6tSpYrslLFkjKCgIb7zxhslbcLpyc3OxYMEC5Ofnm+wzdOhQrFu3zuJ6ddZiWHIMrvDDT46nI89LY3WWevp64g0HqrN0tqQKo/99RGzPvT0cr42N6PDPPXC5FFO/OGmx39a/3Ir43gEdPp7O5gq/L1sTljpkbThrjBgxAv/6179w6tQpnDp1CkVFRSgrK0NlZSW8vLwQGBiImJgYjB49GuPHj7d6GZOIiAikp6cjLS0Nu3btQn5+PsrLyxEQEICoqChMnDgR999/P5RKrndDRM4tMSoI4yJ74GBhGdRVDQjx8UBcuONU8C6va5QEpcEhPp0SlADnniRPrdfqK0tkiFeWHIMr/KVEjofnpXFaQUDYO/sk+9R/Hd1pn88rS85/XrbmyhIvrxARkd2RMygBzjlJntqOYYmIiOyK7npvQOcHJQBQKRVYldB8y08/MLW030iIcJhbmtQ+DEtERGQ37CEotUiMCkLK5FiE+krnzIb5ejrU04TUfrJN8CYiItKlH5TsYRkTR58kT7bBsERERLLTD0rnn42H0k4WOVcpFU45iZusx9twREQkqzH//lXS/uGJ4ejm5S7TaIgMMSwREZFsVuzNQ3bJjdIrH98fg0FBPjKOiMgQwxIREcni25wS/Otwgdh+eng4HhgULOOIiIxjWCIiok6X83u1uHYdAEQFdsXrCZ1TnZuotRiWiIioU1XUN+HuFOk8pR+fvEOm0RBZxqfhiIio02gFAZHv/STZJ2ctJbJvGq1gF2UbGJaIiKjTyL2MCTmOjJwSLMvMRVFlvbgvzNcTqxIiOr0gKG/DERFRp7Cn6txk3zJySjA7PUsSlACguLIes9OzkJFT0qnjYVgiIqIOx6BE1tJoBSzLzIVg5LWWfX/LzIVGa6xHx2BYIiKiDqUflK4+L/8yJmS/DhaWGVxR0iUAuFpZj4OFZZ02JoYlIiLqMFHvSydz5zwbz3XVyCx1VYNN+9kCwxIREXWIp77OQlldk9g+8OQd8OcyJmRBiI+HTfvZAsMSERHZ3P/9WoBvzt2YhPv5g7cgIrCrjCMiRxEX7o8wX0+Yuv6oANDT1xNx4f6dNiaGJSIisqkfL5bilT15Yvulu/vhvgGBMo6IHIlKqcCq/1Zz1w9MLe03EiI69XYuwxIREdnMpbJaTNt8Umwn9O+ORSP6yDgickSJUUFImRyLUF9Pyf4wX0+kTI7t9DpLLEpJTq+lAuzvtY2ICO2GmwO85B4SkVOqbtDgjv87JLaVCmDTtMEyjogcWWJUEMZF9mAFb6KOZqwCbE9fT7whQwVYImcmCAL6r9kv2Vf0wmh5BkNOQ6VUIL53gNzD4G04cl6mKsAWyVQBlsiZhXIZE3JiDEvklOyxAiyRs2J1bnJ2DEvklOyxAiyRM2JQIlfAsEROyR4rwBI5Gy5jQq6CYYmckj1WgCVyJvpB6cz8kVzGhJwWn4Yjp9RSAba4st7ovCUFmut1dGYFWFfSUq5B7sd9qWPc/M8Dkva3Dw9FkDf/8CDnxbBETqmlAuzs9CwoAElgkqsCrKswVq4hzNcTq1iuwSks3ZWDkupGsf3mvRG4PbybjCMi6ni8DUdOy1QF2J5+8lSAdQWmyjUUs1yDU/gqW43/nCwS2+MiAzF7WLiMIyLqHApBEPjsdDtpNFpcv14t9zDIBGMVvAWWDLA5jVbAsI8OmnwKseXW55GkOF7R0+HmpkRAgDdKS6vR1KSVezgmnSquxH2fHZXs45NvzstRzsv26N7dGyqVddeMeBuOnF5LBVjJDz/Dks21plyDPVTkJeuV1zUyKJFL4204IrIJlmtwToIgYOD70gndDErkahiWiMgmWK7BOXEZEyKGJSKykZZyDaZmIynQvIgxyzU4DlbnJmrGsERENtFSrgGAQWBiuQbHw6BEdAPDEhHZjKlyDWG+LNfgSPSDUuHSu+UZCJGd4NNwRGRTiVFBGBfZgxW8HZR+UDrxzAi4W/l4NZGzYlgiIptrKddAjkU/KG2ZMRhhelcJiVwR/1wgIiI89XWWpP3cyD64p293mUZDZF8YloiIXNzGk0X45tyNpWhuCfHBC6P6yTgiIvvCsERE5MKyrlVhya4cyb7ds4bLNBoi+8SwRETkoirqmzB2/RHJPpYIIDLEsERE5IIEQUDkez9J9jEoERnHsERE5IK4jAmR9RiWiIhcDKtzE7UOwxIRkQthUCJqPYYlIiIXoR+UCriMCZFVGJaIiFyAflA6NjcOHlzGhMgq/EkhInJyPd/5QdL+YtotuMnPS57BEDkghiUiIif2zPZsaIQb7UUjemNs/0D5BkTkgBiWiIic1ObTxfgq+5rYjgrsipfu7i/jiIgcE8MSEZETyi6pwsId5yT7fnzyDplGQ+TYGJaIiJxMVX0Txvyby5gQ2QrDEhGRExEEAQO4jAmRTTEsERE5ES5jQmR7DEtERE6C1bmJOgbDEhGRE2BQIuo4DEtERA6Oy5gQdSyGJSIiB6YflH5NupPLmBDZGH+iiIgcVN+//yhpb3zwFvTu1kWm0RA5L4YlIiIH9GzGOdQ2acX2/Dt74d4BXMaEqCMwLBEROZi0rGKknikW2/0DumD56AEyjojIuTEsERE5kJzfqzHvW+kyJr/MuVOm0RC5BoYlIiIHUd3QhLtTfpXsY4kAoo7HsERE5AAEQUD/NVzGhEgODEtERA6Ay5gQyYdhiYjIzrE6N5G8GJaIiOwYgxKR/Nza8qaqqiocOHAAhw4dQnZ2Ni5evIjKykp4enoiODgYgwcPxsSJEzFq1CgoFAqrjnnp0iWkpqZi//79KCoqglarRXBwMEaOHInp06dj0KBBVo+voaEBaWlp2LVrF/Lz81FWVobu3bsjOjoaiYmJmDRpEpRK5kQism/6QenSc6PkGQiRi1MIgiC05g3r16/HmjVrUF9fb7Hv8OHD8e6776Jnz55m+23evBlvvvkm6urqjL6uUqnwzDPPYP78+RY/My8vDwsXLkRubq7JPsOGDcPatWvRo0cPi8ezhkajxfXr1TY5FnUcNzclAgK8UVpajSadYn5EcjJ1XuoHpcNP34k+/qzOTZ3DFX5fdu/uDZWVSwO1+srShQsXxKAUEhKCkSNHIjY2FoGBgaivr8eJEyfwzTffoKamBkeOHMHMmTOxZcsWBAYaryz79ddf45VXXgEAKJVKTJgwASNGjICbmxuOHTuGbdu2oaGhAevWrYOHhwfmzJljcmzXrl3Dk08+iatXrwIAoqKiMGXKFAQHB6OgoABpaWkoKCjA0aNHMWfOHHz++efo2rVra/8XEBF1qMj39kvan029mUGJSEatvrL06quvorCwEE888QRGjBhh9HbWlStXMHv2bFy4cAEAMHXqVLz11lsG/a5fv4777rsPVVVVUCqV+Oc//4mEhARJnxMnTmDWrFmora2Fm5sbtm/fjv79+xsd25IlS5CRkQEASExMxDvvvAM3txt5sLq6GklJSTh8+DAAYO7cuVi0aFFrvnyjeGXJMbjCX0rkePTPyyU7c7DxVJH4etLt4VgxNkLGEZIrcoXfl625stTqiTuLFy9GSkoK4uPjTc77uemmm/Dee++J7Z07d6K2ttagX0pKCqqqqgAADz/8sEFQAoAhQ4bg2WefBQA0NTXhgw8+MPqZubm52LFjBwAgKCgIK1eulAQlAPD29kZycjI8PT0BAJ9++ikqKiosfMVERJ1jW7ZaEpR6dfNiUCKyA60OS/7+/lb1i46ORr9+/QAAtbW1uHTpkkGfnTt3ituPPfaYyWNNmzZNvF22Z88eo3ObduzYgZaLZDNmzIC3t7fRY4WEhGD8+PHiuDIzM636eoiIOtJvf1QjaftZyb4jSXEyjYaIdHXoI2E+Pj7itv6E8NzcXFy5cgUAMGDAAPTq1cvscYYNGwYAqKmpEW+j6frxxx/F7XvuucfsuHRf130fEZEcquubEPfRIck+lgggsh8dFpYaGhpw8eJFsa3/RNz58+fF7VtuucXi8XT76L4XaF4GoOXpN5VKZbHMgLljERF1JkEQ4Ltsp2QfgxKRfWlTnSVrfPvtt6isrAQAxMbGIigoSPJ6fn6+uB0eHm7xeLp9WiaOtygqKhLnRIWGhsLd3d3ssUJDQ6FSqaDRaHDp0iUIgmB1PShT3NxYt8netUzks3ZCH1FnCFy1R9L+Y9lYmUZCdAN/X0p1SFi6fv06kpOTxfbcuXMN+rQEKQAICAiweEzduVK67wUgmaRtzZwqd3d3+Pj4oLy8HI2NjaipqTE5x8kaSqUCAQFtfz91Lj8/PoJN9kG5dLukrU2eJNNIiIzj78tmNg9LDQ0NWLBgAf744w8AwL333ov77rvPoF9NTY243fJ0mjleXl7idnW19DH91h5Lv191dXW7wpJWK6CiosZyR5KVSqWEn18XVFTUQqNxzkdhyXHoX1Eqe+VelJayBAnZB1f4fenn16XjilKao9Vq8fLLL+PIkSMAgN69e+PNN9+05UfYLWetQ+GMNBotv18kK/3q3DVvTUBtVR3PS7I7/H3ZzGY3IwVBwKuvvort25svK/fs2RPr169Ht27djPbXrZxtzdIpuuUC9K8CtfZY+v3ac1WJiKg19IPSr3Pj4OWukmcwRGQVm4QlQRDw2muvYcuWLQCaJ1B/9tlnZidu+/r6itulpaUWP6OsrMzoewHAz8/PaD9TmpqaxGKY7u7uXPKEiDpFzLoDkvb6KbHo352/f4jsXbvDkiAIWLFiBVJTUwE0F33csGEDevfubfZ9ukuWFBYWWvwc3T4txS5bhIWFoUuX5kloxcXFaGxsNHusoqIiaDQaAECfPn3a/SQcEZElf/3uPP6oufG76YnbbsKEgUFm3kFE9qJdYaklKH3xxRcAgODgYGzYsAF9+vSx+N6BAweK26dPn7bYX7dPZGSk5DWFQoGIiOYlATQaDc6elVbBbc2xiIhsbfu5a/j0+FWxHerjgbfu4+8eIkfR5rCkH5SCgoKwYcMG9O3b16r3R0REiIUq8/LyzF5dqq6uxtGjRwEAXbp0wR133GHQZ9SoUeK2parc+/btE7ctVfsmImqP/Os1ePLrbMm+k/NGyjQaImqLNoel119/3SAo6d8es6RljTageVFbU7Zs2SKWBxg7dqx4y03XhAkTxO3U1FRJOQFdarVaXJPOy8vL6OK9RES2UNuowYhPpMszsTo3keNpU1hauXIlNm3aBOBGUNKdg2St2bNni0+ibdy40eiitidPnsT7778PAHBzc8O8efOMHisyMlIMXyUlJVi+fDmampokfaqrq7F06VLxSbhZs2ZJJocTEdlS33/sl7QZlIgck0IQBKE1b1izZg0++uij5jcrFFiyZIlVQSkmJsZgfTgA2LZtG1588UUAgFKpxIQJExAfHw+lUoljx44hPT1dDDeLFy9GUlKSyc9Qq9WYPn06iouLAQBRUVGYOnUqgoODUVBQgC+//BIFBQUAgEGDBmHjxo02KRug0Whx/TqLydk7NzclAgK8UVpazboh1OH0SwSYCko8L8keucJ52b27t9VFKVsdlmbOnInDhw9b7qjnrbfewtSpU42+tmnTJqxevdpkjSSVSoWkpCQsXLjQ4ufk5uZiwYIFkrXn9A0dOhTr1q0zWK+urRiWHIMr/PCTfbA2KAE8L8k+ucJ52Zqw1GEL6bbGQw89hJEjRyI1NRX79+9HUVERBEFAcHAw4uLiMGPGDMTExFh1rIiICKSnpyMtLQ27du1Cfn4+ysvLERAQgKioKEycOBH3338/lEouDkhEtteaoEREjqHVV5bIEK8sOQZX+EuJ5KUflC4sGYWuFqpz87wke+QK56XDXVkiIrI1jVbAwcIyqKsaEOLjgbhwf6iUHVeAVj8o/fLUHRaDEhE5BoYlInI6GTklWJaZi6LKG/Mgw3w9sSohAolRtq+aPeSDnyXtTx6I4TImRE6EE3eIyKlk5JRgdnqWJCgBQHFlPWanZyEjp8Smn7ds928oqmoQ248N6Yn7o4Nt+hlEJC+GJSJyGhqtgGWZuTA2EbNl398yc6HR2maq5o7zJfh/R6+I7cAu7njnTwPNvIOIHBHDEhE5jYOFZQZXlHQJAK5W1uNgYVm7P+tiaS0e35Yl2Ze9ML7dx3V0Gq2AA5dLsTVbjQOXS20WTInkxDlLROQ01Dq3w2zRz5TaRg3u/PiQ9JgsEdDpc8WIOguvLBGR0wjx8bBpP1O4jImhzp4rRtSZGJaIyGnEhfsjzNcTpgoEKAD09PVEXLh/mz+DRScNdfZcMaLOxrBERE5DpVRgVUIEABgEppb2GwkRba63xKBkXGfOFSOSA8MSETmVxKggpEyORaivp2R/mK8nUibHtnnujH5QKn7hnrYO0el01lwxIrlwgjcROZ3EqCCMi+xhswre+kEpb9FdUCg6rhq4o+msuWJEcmFYIiKnpFIqEN87oN3H0Q9K3z82DD6e/NWpq2WuWHFlvdF5Swo0X9lrz1wxIjnxNhwRkQn6QWllQgQGh/rKMxg71tFzxYjkxrBERGTErK1nJO248G6YMzxcptHYv46aK0ZkD3gtmYhIT+rpIuz87XfJvq8fHirTaByHreeKEdkLhiUiIh3nf6/GsztyJPtYIsB6tporRmRPeBuOiOi/ahs1GJXyq2QfgxIRMSwREf0XlzEhImMYloiIwOrcRGQawxIRuTwGJSIyh2GJiFwalzEhIksYlojIZekHpd+4jAkRGcGwREQuST8o7Xr0NvhxGRMiMoK/GYjIqWi0gsWiiPpB6bUxAzA0zK8TR0lEjoRhiYicRkZOCZZl5qKosl7cF+briVUJEeJyG0+lZ0nec1uYL+be0atTx0lEjoVhiYicQkZOCWanZxmsel9cWY/Z6VlImRyL2iYNvskpkby+89FhnTdIInJIDEtE5PA0WgHLMnMNghIACGhe+f7F78/jWnWj5DWWCCAia3CCNxE5vIOFZZJbb/oEgEGJiNqMYYmIHJ66qqF1/RmUiKgVGJaIyOGF+HhY3ZdBiYhai2GJiBxeXLg/wnw9Yamc5NXnWZ2biFqPYYmIHJ5KqcCqhAgAMBmYUh6IMai3RERkDYYlInIKiVFBSJkci1BfT4PX3h8fhYnRwTKMioicAcMSETmNxKggg6fiUqcNxv8ODpNpRETkDBiWiMhp6C9jMmd4OMb07y7PYIjIaTAsEZFTmPT5MUnbU6XAyv/OYyIiag+GJSJyeOuPXcHhKxWSfZeX8sk3IrINhiUicmjnSqrx4ve/SfaxlhIR2RLDEhE5rLomDe7596+SfQxKRGRrDEtE5LD6/H2/pM2gREQdgWGJiByS/pNvDEpE1FEYlojI4TAoEVFnYlgiIoeiH5SKX+BTb0TUsdzkHgARkbX0g9KZ+SOhUHC9N5LSaAUcLCyDuqoBIT4eiAv357qA1C4MS0TkEPSDUuq0wQjy9pBnMGS3MnJKsCwzV7LsTZivJ1YlRCAxKkjGkZEj4204IrJ7+kHp8aE9uYwJGcjIKcHs9CyD9QGLK+sxOz0LGTklMo2MHB3DEhHZtalfnDDYt/p/Bnb+QMiuabQClmXmQjDyWsu+v2XmQqM11oPIPIYlIrJbX5+9hgOXyyT7+OQbGXOwsMzgipIuAcDVynocLCzrtDGR8+CcJSI75eqTVC+V1WLON9mSfQxKZIq6qsGm/Yh0MSwR2SFXn6TaoNHijv87JNnHoETmhPhYN9nf2n5EungbjsjOcJIq0Cv5R0mbQYksiQv3R5ivJ0xde1UA6Onribhw/04cFTkLhiUiO8JJqqzOTW2jUiqwKiECAAwCU0v7jYQIl7qVTbbDsERkR1x9kiqDErVHYlQQUibHItTXU7I/zNcTKZNjXeIWNnUMzlkisiOuPElVPygVcRkTaoPEqCCMi+zh0g9HkO0xLBHZEVedpKoflLIWjISSy5hQG6mUCsT3DpB7GOREeBuOyI644iRV/aC07S9D0KOrc4VBInJsDEtEdsTVJqmGv7tP0n5uZB+M7O0vz2CIiExgWCK7odEKOHC5FFuz1ThwudSpn/gyx1UmqS7dlYNGne9xX38vvDCqn4wjIiIyjnOWyC64ehFGfc4+SXXH+RL852SRZN+hp+NkGg0RkXkMSyS7liKM+teRWoowOtPVlNZw1kmqhRV1eHxblmQfSwQQkT3jbTiSFYswupZGjRbDPjwo2cegRET2jmGJZOXqRRhdTTiXMSEiB8SwRLJy5SKMrobVuYnIUTEskaxctQijq2FQIiJHxrBEsnLFIoyuhsuYEJGjY1giWblaEUZXox+UTjwzgsuYEJHDYVgi2blKEUZXox+U1k+JRZje95iIyBGwzhLZBWcvwuhq9IPS9JtDMGEgQy8ROaY2hSWNRoO8vDycOXMGWVlZOHPmDM6dO4e6ujoAwJQpU7B69WqLx9m6dSteeuklqz93/vz5WLBggcV+DQ0NSEtLw65du5Cfn4+ysjJ0794d0dHRSExMxKRJk6BU8qKavXHWIoyuZuZXpw32rUscJMNIiIhso01hadGiRfjuu+9sPRabyMvLw8KFC5GbmyvZr1aroVarsW/fPmzevBlr165Fjx49ZBolkXNKyyrGd7l/SPbxyTcicnRtvrKky9/fH/7+/rh48WKbBzJz5kzExZlfG6pfP/OLbF67dg1PPvkkrl69CgCIiorClClTEBwcjIKCAqSlpaGgoABHjx7FnDlz8Pnnn6Nr165tHjMR3XCxtBbzvj0n2cegRETOoE1hafDgwRgwYABiY2MRGxuLXr16tfqWmr6YmBjce++9bX4/AKxevVoMSomJiXjnnXfg5nbjS5w5cyaSkpJw+PBhZGVl4eOPP8aiRYva9ZlE1LyMyZ0fH5LsY1AiImfRprCUlJRk63G0W25uLnbs2AEACAoKwsqVKyVBCQC8vb2RnJyM++67D/X19fj000/xxBNPwM/PT44hEzkNLmNCRM7MaWY579ixA4LQvNjqjBkz4O3tbbRfSEgIxo8fDwCora1FZmZmp42RyBmxOjcROTunCUs//njjL9t77jFfIVj3dd33EVHrMCgRkSuwmzpLmzZtwieffILi4mJotVoEBAQgOjoad999N6ZMmYIuXbqYfK8gCOLTbyqVCoMGmX9M+ZZbbhG3z58/b5svgMjF6Aelq89zGRMick52c2Xp9OnTyM/PR01NDerq6lBUVIS9e/dixYoVGDt2LPbu3WvyvUVFRaitrQUAhIaGwt3d3exnhYaGQqVSAQAuXbok3r4jIuvoB6Wjc+NYQJSInJbsV5ZUKhWGDBmC4cOHo2/fvujatSsqKytx5swZ7Nq1C2VlZbh+/Trmzp2L5ORkTJw40eAYFRUV4ra/v7/Fz3R3d4ePjw/Ky8vR2NiImpoak3OcrOXmZje5k0xQqZSS/1LbBK7aI2mvn3oz+nZnCY624nlJ9ojnpZSsYWnYsGHYs2cPQkNDDV6bNm0ann/+eSxfvlycvP3yyy/jtttuQ8+ePSV9a2pqxG1PT+vWntLtV11d3a6wpFQqEBDQvrBFncfPz/QtXTJPuXS7pP2/Q3risZHm65+RdXhekj3iedlM1rDUp08fs6/7+PggOTkZv//+Ow4fPoz6+np88sknePXVVztphNbRagVUVNRY7kiyUqmU8PPrgoqKWmg0WrmH43BmGVnG5IPEaJSWVsswGufB85LskSucl35+Xay+cib7bThLVCoVFi1ahIceeggA8MMPPxiEJd0q3PX19VYdV7dfe2/BAUBTk3OeTM5Io9Hy+9VK6WevYfu5Esk+9V9H8/+jDfG8JHvE87KZQ9yMHDp0qHjb7OrVq+Jk7ha6RSXLysosHq+pqQlVVVUAmucvcckTItMKyuvw9DfZkn0sEUBErsQhwpJSqUS3bt3Etu6EbgAICwsTSwsUFxejsbHR7PGKiorE9e369OkDhYJP8RAZ06TVYvhHByX7GJSIyNU4RFjSarWSgKS/PIlCoUBERASA5kV+z549a/Z4p0/fmHsRGRlpw5ESOZeb3uUyJkREDhGWTpw4gbq6OgDNNZKMFagcNWqUuG2pKve+ffvEbUvVvolcFatzExE1s/uwpNVqsXbtWrE9evRoo/0mTJggbqempkrKCehSq9XYuXMnAMDLywsJCQm2GyyRg9FoBRy4XIqt2WocuFwKjba5QCuDEhHRDbI9DXf8+HGcP38ekydPNlkbqaamBq+88gp++eUXAICHhweeeuopo30jIyMxfvx47Ny5EyUlJVi+fDnefvttuLnd+BKrq6uxdOlS8Um4WbNmGdzSI3IVGTklWJaZi6LKG0+Ghvl6StoAcOX5uzt7aEREdkUhtGGtj4KCAqSlpUn25eTkiEuSREVFYcyYMZLX4+LiMGLECLG9e/duzJs3D127dkV8fDxiY2PFidqVlZXIzs5GRkaG+HSbQqHA22+/jQceeMDkuNRqNaZPn47i4mJxHFOnTkVwcDAKCgrw5ZdfoqCgAAAwaNAgbNy40SZlAzQaLa5fZ60Ze+fmpkRAgDdKS6td/lHYjJwSzE7PgqUf/l+T7kTvbixK15F4XpI9coXzsnt3746ts3T16lV89NFHJl/PyclBTk6O9IPc3CRhqUVNTQ2+//57fP/99yaPFxQUhDfeeMPkLbgWISEhSElJwYIFC5Cfn4+cnBy89dZbBv2GDh2KdevW2SQoETkajVbAssxci0Hpg4mDGJSIiCDjbbgRI0bgX//6F06dOoVTp06hqKgIZWVlqKyshJeXFwIDAxETE4PRo0dj/PjxVi9jEhERgfT0dKSlpWHXrl3Iz89HeXk5AgICEBUVhYkTJ+L++++HUmn307WIOsTBwjKDW23GhPl6dMJoiIjsX5tuw5EUb8M5Ble4rGyNrdlqzN1uvrwGAHw4aRCmxoR0wohcG89LskeucF625jYcL68QuZgQH+uuGFnbj4jI2TEsEbmYuHB/hPmavq2tANDT1xNx4f6dNiYiInvGsETkYlRKBVaOHWD0tZaFf95IiIBKyWWAiIgAhiUil/Tk19lG94f5eiJlciwSo4I6eURERPZLtqfhiEge+tW5t/7lVqirGhDi44G4cH9eUSIi0sOwRORCuIwJEVHr8TYckYvQD0pcxoSIyDoMS0QuQD8oHZsbBzcWZiUisgp/WxI5Of2g9NnUm3GTn5c8gyEickAMS0RObPiHv0jas4b2xLjIHjKNhojIMTEsETmpN3/MR0HFjTXgurgp8fb/DJRxREREjolhicgJ7b9Uivd/uSzZd/E5TugmImoLhiUiJ1NS3YAHU09K9rFEABFR2zEsETkRrSDg5n/+LNnHoERE1D4MS0ROJOydfZI2gxIRUfsxLBE5CVbnJiLqGAxLRE6AQYmIqOMwLBE5OP2gVLiUT70REdkSwxKRA9MPSkeS4uCu4o81EZEt8bcqkYPSD0r/nhyLXt24jAkRka0xLBE5oJGfHJK0Hx4chsSoIJlGQ0Tk3BiWiBzMuz9dQN71WrGtVAD/GB8l44iIiJwbwxKRA/mloAzJBy5J9hW9MFqewRARuQiGJSIH8UdNAyZvOiHZxxIBREQdj2GJyAEIgoCYdVzGhIhIDgxLRA4glMuYEBHJhmGJyM6xOjcRkbwYlojsGIMSEZH8GJaI7JR+UCrgMiZERLJgWCKyQ/pB6dDTd8KDy5gQEcmCv32J7Ix+UPr4/hj09e8iz2CIiIhhicie3JPyq6Q9/eYQPDAoWKbREBERwLBEZDfW/HwJ536vluxblzhIptEQEVELhiUiO3C4sByr91+Q7OOTb0RE9oFhiUhmpbWNmLTxuGQfgxIRkf1gWCKSkSAIiF57QLKPQYmIyL64yT0Ako9GK+BgYRnUVQ0I8fFAXLg/VEqF3MNyKVzGhIjI/jEsuaiMnBIsy8xFUWW9uC/M1xOrEiKQGBUk48hcB6tzExE5Bt6Gc0EZOSWYnZ4lCUoAUFxZj9npWcjIKZFpZK6DQYmIyHEwLLkYjVbAssxcCEZea9n3t8xcaLTGepAt6Aely89xGRMiInvGsORiDhaWGVxR0iUAuFpZj4OFZZ02JleiH5R+eeoOeLrxx5CIyJ7xt7SLUVc12LQfWe+md6WTuf81aRD6d+8q02iIiMhaDEsuJsTHw6b9yDrPbM9Gk86tzfl39sKfY0JkHBEREVmLYcnFxIX7I8zXE6YKBCgA9PT1RFy4fyeOyrltPl2Mr7Kvie2BgV2xfPQAGUdEREStwbDkYlRKBVYlRACAQWBqab+REMF6SzaSXVKFhTvOSfbtf/IOmUZDRERtwbDkghKjgpAyORahvp6S/WG+nkiZHMs6SzZSVd+EMf8+ItnHEgHy02gFHLhciq3Zahy4XMonP4nIIhaldFGJUUEYF9mDFbw7iCAIGPDeT5J9DEryYzFWImoLhiUXplIqEN87QO5hOCUuY2J/Woqx6l9HainGyquqRGQKb8MR2Rirc9sfFmMlovZgWCKyIQYl+8RirETUHgxLRDbCZUzsF4uxElF7MCwR2YB+UDo1bwSXMbEjLMZKRO3B3+ZE7fS/W05K2hmPDEWIj6eJ3iQHFmMlovZgWCJqh3UHL2PvhVKx/e6fBmL4Td1kHBEZw2KsRNQeDEtEbbTvwnW8sS9fbP85JhiPDukp44jIHBZjJaK2Yp0lojYoKK/D9C2nxHY3Tzf8a1KMjCMia7AYKxG1BcMSUSvVNmow/KODkn3nF90l02iotViMlYhai7fhiFpBEAT0/cd+yT7WUiIicm4MS0StwGVMiIhcD8MSkZVYnZuIyDUxLBFZgUGJiMh1MSwRWaAflAqWchkTIiJXwrBEZIaxZUw8VPyxISJyJfytT2TCw2mnJO3tD3MZEyIiV8Q6S0RGfHi4ALvzrovt1fdF4o5w+ZYx0WgFFlIkIpIJwxKRnv2XSvHa3jyxfX90EB6/7SbZxpORU4JlmbkoqqwX94X5emJVQgSX6CAi6gS8DUeko7CiDg+mnhTbXd2V+OSBWNnGk5FTgtnpWZKgBADFlfWYnZ6FjJwSmUZGROQ6GJaI/quuSYNhH0qXMbmwRL4n3zRaAcsycyEYea1l398yc6HRGutBRES20qbbcBqNBnl5eThz5gyysrJw5swZnDt3DnV1dQCAKVOmYPXq1a065qVLl5Camor9+/ejqKgIWq0WwcHBGDlyJKZPn45BgwZZfayGhgakpaVh165dyM/PR1lZGbp3747o6GgkJiZi0qRJUCqZE+kGQRDQ5+/2tYzJwcIygytKugQAVyvrcbCwjGudERF1oDaFpUWLFuG7776z2SA2b96MN998UwxbLS5evIiLFy9i8+bNeOaZZzB//nyLx8rLy8PChQuRm5sr2a9Wq6FWq7Fv3z5s3rwZa9euRY8ePWz2NZBjs8dlTNRVDTbtR0REbdPmK0u6/P394e/vj4sXL7b6WF9//TVeeeUVAIBSqcSECRMwYsQIuLm54dixY9i2bRsaGhqwbt06eHh4YM6cOSaPde3aNTz55JO4evUqACAqKgpTpkxBcHAwCgoKkJaWhoKCAhw9ehRz5szB559/jq5du7Z6zORc7LU6d4iPh037ERFR27QpLA0ePBgDBgxAbGwsYmNj0atXL2zduhUvvfRSq45z/fp1vP766wCag9I///lPJCQkiK9PnjwZU6dOxaxZs1BbW4v3338f9957L/r372/0eKtXrxaDUmJiIt555x24ud34EmfOnImkpCQcPnwYWVlZ+Pjjj7Fo0aJWfvXkTOw1KAFAXLg/wnw9UVxZb3TekgLNT8XFhft38siIiFxLmybuJCUl4bnnnsO4cePQq1evNn94SkoKqqqqAAAPP/ywJCi1GDJkCJ599lkAQFNTEz744AOjx8rNzcWOHTsAAEFBQVi5cqUkKAGAt7c3kpOT4enZXFjw008/RUVFRZvHT45HoxXw06VSbM1WGwSly8/Z1zImKqUCqxIiADQHI10t7TcSIlhviYiog8k6y3nnzp3i9mOPPWay37Rp08TbZXv27DGY2wQAO3bsgCA0//09Y8YMeHt7Gz1WSEgIxo8fDwCora1FZmZmm8dPjmX7uWvot2o3Hvj8OOZuPyt57cQzI+DpZn+T/hOjgpAyORahvtLK4WG+nkiZHMs6S0REnUC2fx1yc3Nx5coVAMCAAQPMXqHy8fHBsGHDAAA1NTU4fPiwQZ8ff/xR3L7nnnvMfrbu67rvI+eVkVOCx786g8Jyw6ANAMeu2u8VxsSoIBxNisPWv9yKDycNwta/3IojSXEMSkREnUS2sHT+/Hlx+5ZbbrHYX7eP7nuB5se+W55+U6lUFssMmDsWOR9z9YqA5lta9l6vSKVUIL53AKbGhCC+dwBvvRERdSLZwlJ+fr64HR4ebrG/bp8LFy5IXisqKkJtbS0AIDQ0FO7u7maPFRoaCpVKBaC5vlPL7TtyTq2pV0RERKRPtrXhKisrxe2AAMsF9fz9/Y2+F4BkkrZuP1Pc3d3h4+OD8vJyNDY2oqamxuQcJ2u52eF8F2r2e22j1f34faTOplIpJf8lsgc8L6VkC0s1NTXidsvTaeZ4eXmJ29XV1e06ln6/6urqdoUlpVKBgID2hS3qOL2DfK3qFxHajd9Hko2fXxe5h0BkgOdlM9nCkjPRagVUVNRY7kiyGPfJIbOvKwD09PPEzQFeKC2tNtuXyNZUKiX8/LqgoqIWGo1W7uEQAXCN89LPr4vVV85kC0u6lbPr603PJ2mhWy5A/ypQa4+l36+9t+AAoKnJOU8mR6dfS0kBSCZ6t0yTXjk2AoJWQJMdT/Im56bRaPl7hOwOz8tmst2M9PW9cWuktLTUYv+ysjKj7wUAPz8/o/1MaWpqEothuru7c8kTJ6UflD798824qZuXZB/rFRERkSWyXVnSXbKksLDQYn/dPv369ZO8FhYWhi5duqC2thbFxcVobGw0+0RcUVGRuL5dnz59oFDwMWxnox+Uil+4B+7uKjx8Z1/sOHUFV8vrEOLjgbhwfz6GT0REZsl2ZWngwIHi9unTpy321+0TGRkpeU2hUCAionlZCI1Gg7NnpdWZW3Mscnz6QenSc6PEQKxSKnBXH9YrIiIi68kWliIiItCzZ08AQF5entmrS9XV1Th69CgAoEuXLrjjjjsM+owaNUrctlSVe9++feK2pWrf5Fj6/F36vT82Nw5ebiqZRkNERM5A1gIKLWu0Ac2L2pqyZcsWsTzA2LFj0aWL4aOMEyZMELdTU1Ml5QR0qdVqcU06Ly8vo4v3kmN6Mj0LdToTEb/631txk5+XmXcQERFZJmtYmj17tvgk2saNG40uanvy5Em8//77AAA3NzfMmzfP6LEiIyPF8FVSUoLly5ejqalJ0qe6uhpLly4Vn4SbNWuWZHI4Oa6Uo4XYnlMitleMGYC7+lgudkpERGSJQmjDWh8FBQVIS0uT7MvJycHevXsBAFFRURgzZozk9bi4OIwYMcLgWNu2bcOLL74IAFAqlZgwYQLi4+OhVCpx7NgxpKeni+Fm8eLFSEpKMjkutVqN6dOno7i4WBzH1KlTERwcjIKCAnz55ZcoKCgAAAwaNAgbN260SdkAjUaL69dZn0cuhwrLcP/GE2L7fyIC8Z8/G6436OamRECAN0pLq/koLNkNnpdkj1zhvOze3dvqOkttCkuHDh3Co48+2qr3zJ8/HwsWLDD62qZNm7B69WqTNZJUKhWSkpKwcOFCi5+Tm5uLBQsWSNae0zd06FCsW7cOQUG2eVycYUk+xZX1uPVfv0j2qf862mhfV/jhJ8fD85LskSucl60JS3ZRwfuhhx7CyJEjkZqaiv3796OoqAiCICA4OBhxcXGYMWMGYmJirDpWREQE0tPTkZaWhl27diE/Px/l5eUICAhAVFQUJk6ciPvvvx9KJde7cXQNGq3VQYmIiKit2nRliaR4ZUke+iUCLAUlV/hLiRwPz0uyR65wXrbmyhIvr5BDam1QIiIiaiuGJXI4DEpERNSZGJbIoRhbxoSIiKgjMSyRw9APSheXjOK6fkRE1OHs4mk4ckwarYCDhWVQVzV0+KK0A9bsl7SPJMWhizuXMSEioo7HsGSnOjOItEVGTgmWZeaiqPJGbawwX0+sSohAYpRt6le1SPomG1UNGrH95Yxb0asblzEhIqLOwbBkhzoziLRFRk4JZqdnQb/mRHFlPWanZyFlcqzNxvnp8SvYdvaa2H5ldH/c3ZfLmBARUefhnCU70xJEdIMScCOIZOisfyYHjVbAssxcg6AEQNz3t8xcaLTtL9/1a2E5/vrdb2I7oX93zLuzd7uPS0RE1BoMS3akM4NIWx0sLDMIcroEAFcr63GwsKxdn1NW14iJG49L9m2aNrhdxyQiImoLhiU70llBpD3UVQ027WeMVhAQ9f4B6fFYS4mIiGTCsGRHOiOItFeIj4dN+xkT9s4+SZtBiYiI5MSwZEc6I4i0V1y4P8J8PWHquTwFgJ6+nogL92/T8W/TWRj3zvBuDEpERCQ7hiU70tFBxBZUSgVWJUSI49HV0n4jIaJNZQ4e+vIUrvz3NqSfpwrfPDy0HSMlIiKyDYYlO9KRQcSWEqOCkDI5FqG+npL9Yb6ebS4bsDwzF5n518X2+Wfvavc4iYiIbIF1luxMSxAxVmfpDTupswQ0j3NcZA+bFM78f0cL8fGRQrF95fm7uYwJERHZDYYlO2TLINKRVEoF4nu3r0Dkzt9+x7LduWI7f/EouCl5wZOIiOwHw5KdskUQsXdHr1Zg1tYzYvv0vBHw9uB6b0REZF/4JzzJ4mJZLSb855jY3j/7dgT7eJp5BxERkTwYlqjTXa9txJ3/d0hsb/vLEAzs4S3jiIiIiExjWKJOVdekwaC1N6pzfzhpEEb29pdvQERERBYwLFGn0QoC+vx9v9h++e5+mBoTIuOIiIiILGNYok6ju4zJQ4ND8eyIPjKOhoiIyDoMS9Qphn908MZ2Tz+sGR8t42iIiIisx7BEHe7htFMoKK8DAHh7qJAx8zaZR0RERGQ9hiXqUK/tycXuvBvLmOQt4jImRETkWBiWqMP8+9gVfPgrlzEhIiLHxrBEHWLXb7/jpe9/E9v5i+/iMiZEROSQ+K8X2dzxogo8prOMyal5I+DtwZV1iIjIMTEskU1dKqvFuA03ljH5cfbtCOEyJkRE5MAYlshmSmsbcYfOMiZb/3IroriMCREROTiGJbKJ+iYtonWWMflgYjTiewfIOCIiIiLbYFiidtMKAnr//Uex/eKofngwNlTGEREREdkOwxK1m+4yJjNuDsHikVzGhIiInAfDErXLnf93YxmT28J8sTZxkIyjISIisj2GJWqzx7aexsWy5mVMurgpsfPRYTKPiIiIyPYYlqhNXt+bh12//SG2LywZJeNoiIiIOg7DErXap8ev4IPDBWKby5gQEZEzY1iiVvku93f89bsby5jkLeIyJkRE5Nz4rxxZ7URRBWZ+dWMZk5PPjICPJ5cxISIi58awRFa5XF6LP+ksY7LvidsR6stlTIiIyPnxsgBZVFbXiNs/urGMSdr/3orooBvLmGi0Ag4WlkFd1YAQHw/EhftDpeQcJiIicg4MS2RWfZMWUe/fWMZkXWI0RvW5sYxJRk4JlmXmoqiyXtwX5uuJVQkRSIwK6tSxEhERdQTehiOTBL1lTP56V19Mv/nGMiYZOSWYnZ4lCUoAUFxZj9npWcjIKem0sRIREXUUhiUyKVRnGZMHY0OwJL6v2NZoBSzLzIVg5H0t+/6WmQuN1lgPIiIix8GwREZ9la0Wt28N9cEHE6XLmBwsLDO4oqRLAHC1sh4HC8s6aIRERESdg2GJjArwap7O1tffC989NtzgdXVVg1XHsbYfERGRveIEbzJqbP9AFL1wD5QmKnOH+HhYdRxr+xEREdkrXlkik0wFJQCIC/dHmK8nTPVQAOjp64m4cP+OGBoREVGnYViiNlEpFViVEAEABoGppf1GQgTrLRERkcNjWKI2S4wKQsrkWINK3mG+nkiZHMs6S0RE5BQ4Z4naJTEqCOMie7CCNxEROS2GJWo3lVKB+N4BljsSERE5IN6GIyIiIjKDYYmIiIjIDIYlIiIiIjMYloiIiIjMYFgiIiIiMoNhiYiIiMgMhiUiIiIiMxiWiIiIiMxgWCIiIiIyQyEIgiD3IBydIAjQavm/0RGoVEpoNFq5h0EkwfOS7JGzn5dKpQIKhXVLczEsEREREZnB23BEREREZjAsEREREZnBsERERERkBsMSERERkRkMS0RERERmMCwRERERmcGwRERERGQGwxIRERGRGQxLRERERGYwLBERERGZwbBEREREZAbDEhEREZEZDEtEREREZjAsEREREZnhJvcAiFpoNBrk5eXhzJkzyMrKwpkzZ3Du3DnU1dUBAKZMmYLVq1e36piXLl1Camoq9u/fj6KiImi1WgQHB2PkyJGYPn06Bg0aZPWxGhoakJaWhl27diE/Px9lZWXo3r07oqOjkZiYiEmTJkGp5N8fzqSqqgoHDhzAoUOHkJ2djYsXL6KyshKenp4IDg7G4MGDMXHiRIwaNQoKhcKqY/KcpPY6deoUTp8+jdOnT+O3335DaWkpSktL0djYCD8/PwwYMAB33nknpkyZgptuusmqY167dg2bN2/G3r17ceXKFdTV1SEoKAjDhw/Hn//8Z9x+++1Wj0+r1WL79u3IyMjAuXPncP36dfj7+6N///4YN24cHnzwQXh4eLT1y5eFQhAEQe5BEAHAggUL8N1335l8vbVhafPmzXjzzTfFsKVPpVLhmWeewfz58y0eKy8vDwsXLkRubq7JPsOGDcPatWvRo0cPq8dI9mv9+vVYs2YN6uvrLfYdPnw43n33XfTs2dNsP56TZAtDhw5FTU2NxX4eHh6YP38+nn76abP9du/ejZdffhnl5eUm+8yYMQOvvvoqVCqV2WOVlJRg4cKFOHbsmMk+kZGRWLduHfr162f+C7AjvLJEdkOj0Uja/v7+8Pf3x8WLF1t9rK+//hqvvPIKAECpVGLChAkYMWIE3NzccOzYMWzbtg0NDQ1Yt24dPDw8MGfOHJPHunbtGp588klcvXoVABAVFYUpU6YgODgYBQUFSEtLQ0FBAY4ePYo5c+bg888/R9euXVs9ZrIvFy5cEINSSEgIRo4cidjYWAQGBqK+vh4nTpzAN998g5qaGhw5cgQzZ87Eli1bEBgYaPR4PCfJlgIDAzF48GBERUUhPDwcvr6+aGpqwpUrV/DDDz/g2LFjaGhowD/+8Q80NjaaDOAHDx7EokWL0NjYCAAYPXo0xo4diy5duiA7OxtpaWmorKzE5s2boVAosGLFCpNjqq6uxlNPPYWzZ88CAHr16oUHH3wQvXr1wrVr17Bt2zbk5OTgt99+w+zZs7FlyxbHCfICkZ348MMPheTkZGHnzp3C5cuXBUEQhK+++koYOHCgMHDgQOGvf/2rVcf5448/hNtuu00YOHCgEB0dLezevdugz/Hjx4Vbb71VGDhwoBATEyPk5eWZPN7ixYvFMSxevFhobGyUvF5VVSU88sgjYp81a9ZY/0WT3XrllVeEJ554Qvjpp58EjUZjtE9hYaHwpz/9Sfzev/jii0b78ZwkW8rJyRG0Wq3ZPtu2bROioqLE86m4uNigT319vTBmzBjxPPnPf/5j0Cc/P1+Ij48X+/z8888mPzM5OVns98gjjwhVVVWS1xsaGoRFixaJfZYuXWrlVyw/3swmu5GUlITnnnsO48aNQ69evdp8nJSUFFRVVQEAHn74YSQkJBj0GTJkCJ599lkAQFNTEz744AOjx8rNzcWOHTsAAEFBQVi5ciXc3KQXZL29vZGcnAxPT08AwKeffoqKioo2j5/sw+LFi5GSkoL4+HiT835uuukmvPfee2J7586dqK2tNejHc5JsaeDAgRbnyE2ePBmjR48G0Hw+7d+/36BPWloarly5AgAYM2YMHnnkEYM+/fr1E6+IAsD7779v9PPKysrw2WefAQA8PT2RnJwMb29vSR93d3e88cYbCAoKAgBs374deXl5Zr8Oe8GwRE5n586d4vZjjz1mst+0adPEWxN79uwxOo9kx44dEP47rW/GjBkGP/wtQkJCMH78eABAbW0tMjMz2zx+sg/+/v5W9YuOjhbnXtTW1uLSpUsGfXhOkhwiIyPF7d9//93g9ZbQDQCPP/64yePce++94kTx48ePiwFLV2ZmpnjbesKECQgJCTF6LG9vb0yfPh0AIAiC5GfDnjEskVPJzc0Vf5AHDBhg9gqVj48Phg0bBgCoqanB4cOHDfr8+OOP4vY999xj9rN1X9d9Hzk/Hx8fcVt/QjjPSZKLbnDXnxtUVVWFo0ePAmgOMMOHDzd5HKVSiVGjRoltY+eS7r67777b7Lgc8bxkWCKncv78eXH7lltusdhft4/ue4Hmv3panjRSqVQWH+k2dyxyXg0NDZKHEPSfiOM5SXLYs2cPdu/eDaD5tljLLbkWeXl50Gq1AICYmBiLT7lZOpdac57rft5vv/0mXim1Z3wajpxKfn6+uB0eHm6xv26fCxcuSF4rKioS55+EhobC3d3d7LFCQ0OhUqmg0Whw6dIlCIJgde0dclzffvstKisrAQCxsbHifIwWPCepI/3666/iI/8NDQ0oLi7GgQMH8NNPPwEA3NzcsGLFCoMrS7rnVnvPS61Wi8uXLwNoDvFhYWFmj+Xu7o6QkBBcvXoVNTU1UKvVCA0NtTgGOTEskVNp+UcLAAICAiz2152XovteAJIJsdbMX3F3d4ePjw/Ky8vR2NiImpoak/NJyDlcv34dycnJYnvu3LkGfXhOUkd69913cfLkSYP9CoUCt99+OxYuXGi0oKTuudTa81L/YYGamho0NTUBAHx9fQ0eODB1vJbSFxUVFXYflngbjpyKbqG2lieBzPHy8hK3q6ur23Us/X76xyPn0tDQgAULFuCPP/4A0DwJ9r777jPox3OS5BASEoL4+Hj06dPH6Ou655I11bTNnZe6bWc9LxmWiIhaSavV4uWXX8aRI0cAAL1798abb74p86jIFW3ZsgU5OTnIycnB8ePH8fXXX2PhwoWorq7GmjVrMGnSJPz8889yD9PhMSyRU9GtUmzNMhW6j2br355o7bH0+/F2h3MSBAGvvvoqtm/fDqB5Qvf69evRrVs3o/15TlJn6dq1K6KjozFv3jxs27YNwcHBKCsrw5w5c5CTk2PQt0VDQ4PFY5s7L3XbznpeMiyRU/H19RW3S0tLLfYvKysz+l4A8PPzM9rPlKamJrHwoLu7O5eXcEKCIOC1117Dli1bADRPoP7ss8/MTpDlOUly6NWrF5577jkAQGNjIz766CPJ67rnUmvPS933As3Bq2WeUmVlpTh/qa3Hs0cMS+RU+vfvL24XFhZa7K/bR39Rx7CwMHTp0gUAUFxcLK6dZEpRUZG4vl2fPn341JGTEQQBK1asQGpqKoDmOSEbNmxA7969zb6P5yTJRbfekX7NLt1zq73npVKpFH8ONBoNioqKzB6rsbERarUaQHPQMlXA0p4wLJFTGThwoLh9+vRpi/11++hWuwWanyaJiIgA0PwLoGVxyLYcixxbS1D64osvAADBwcHYsGGDycmzunhOklx0i6W2lBdoMWDAAHEZn+zsbIOFzPVZOpdac57rfl5ERIRDhHiGJXIqERERYlHAvLw8s38xVVdXixVsu3TpgjvuuMOgj6Wqtbr27dsnbluqrEyOQz8oBQUFYcOGDejbt69V7+c5SXLRLZbavXt3yWs+Pj647bbbAEjPO2O0Wq1YtwkwXqFb97w0tg6dLkc8LxmWyOm0rIcFNC8gasqWLVvEx2fHjh0r3t7QNWHCBHE7NTVV8ritLrVaLa5x5OXlZXShVHJMr7/+ukFQ0r8NYQnPSZJDyy1jAGIw0qV7Lv373/82eZzdu3eLIX/IkCFG5+glJCSI5QAyMjLE22z6qqurxTl/CoVC8rNhzxiWyOnMnj1bfLpi48aNRhcQPXnypLh6tpubG+bNm2f0WJGRkeIPc0lJCZYvX24webG6uhpLly4Vn+6YNWuWQ0xYJMtWrlyJTZs2AbgRlHTnIFmL5yTZyhdffIGDBw+aXSJEo9Hg448/Fs9dAHjooYcM+j344IPiVc+9e/di48aNBn0uXryI119/XWw/++yzRj8zICAAM2fOBND8pNvSpUsN6ic1NTVh+fLlKCkpAQBMnDgRAwYMMPl12BOF4AiLspBLKCgoQFpammRfTk4O9u7dCwCIiorCmDFjJK/HxcVhxIgRBsfatm0bXnzxRQDNkw8nTJiA+Ph4KJVKHDt2DOnp6eI/JIsXL0ZSUpLJcanVakyfPh3FxcXiOKZOnYrg4GAUFBTgyy+/REFBAQBg0KBB2Lhxo0M8CkvmrVmzRnyCSKFQYMmSJVYFpZiYGIP14QCek2QbL774IrZt24awsDCMHDkSAwcORGBgINzd3VFZWYnz588jMzNTXLwZAJ5++mksWbLE6PF+/vlnzJkzR3xYYMyYMeJVzezsbHz55ZdiJfnp06dj5cqVJsdWVVWFhx56SCxT0KtXL0yfPh3h4eG4du0atm7dKr7Ws2dPbN68GcHBwTb5/9LRGJbIbhw6dAiPPvpoq94zf/58LFiwwOhrmzZtwurVq03W/VCpVEhKSsLChQstfk5ubi4WLFggWedL39ChQ7Fu3TqDtcHIMc2cOdPgCSJrvPXWW5g6darR13hOUnu1hCVr+Pr6YsmSJUavKun6/vvv8fLLLxssY6Jr+vTpeO211ywuuKtWq7Fw4UKcOHHCZJ+IiAisXbvWYa4qAQxLZEdsHZaA5kvIqamp2L9/P4qKiiAIAoKDgxEXF4cZM2YgJibG6s+qr69HWloadu3ahfz8fJSXlyMgIABRUVGYOHEi7r//fvHpEnJ8HRGWAJ6T1D5VVVX45Zdf8Ouvv+Ls2bO4fPkySktL0dTUhK5duyIwMBBRUVEYNWoUxo0bZ1Cry5Rr167hiy++wN69e3HlyhXU19cjKCgIw4YNw4MPPmj0YQNTtFotvvnmG3z77bfIyclBaWkpunXrhv79+2PcuHGYNm2aVUus2BOGJSIiIiIz+CcHERERkRkMS0RERERmMCwRERERmcGwRERERGQGwxIRERGRGQxLRERERGYwLBERERGZwbBEREREZAbDEhEREZEZDEtEREREZjAsEREREZnBsERERERkBsMSERERkRkMS0RERERm/P/CPWqvZi0vIAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/home/runner/work/BrownFall22/BrownFall22/_build/jupyter_execute/notes/2022-10-26_19_1.png" } }, "output_type": "display_data" } ], "source": [ "y_pred = regr_db.predict(X_test)\n", "plt.scatter(y_test,y_pred)\n", "plt.plot(y_pred,y_pred)" ] }, { "cell_type": "code", "execution_count": null, "id": "10819750", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9f43db77", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c25d14b6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "85828209", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ed1e284d", "metadata": {}, "source": [ "## Questions After Class\n", "\n", "### Is there a way to calculate p value in addition to r^2?\n", "\n", "The $R^2$ is a measure of the quality of the regression fit, but a p-value is not. A p-value implies a broader experimental framework, so it is not included in this object. `sklearn` does have tools that will calculate a p-value when appropriate, but it not built into this estimator object. The [`scipy.stats.linregress`](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.linregress.html) estimator does compute a p-value, and allows you to specify under which statistical test you want that p-value computed (two-sized, one-sided greater, or one-sided lesser). \n", "\n", "Broadly, p-values are very [frequently misinterpretted and misused](https://www.frontiersin.org/articles/10.3389/fphy.2016.00006/full). Their use is not common in ML (because they're usually not the right thing) and being actively discouraged in other fields (eg psychology) in favor of more reliable and consistently well interpretted statistics." ] } ], "metadata": { "jupytext": { "text_representation": { "extension": ".md", "format_name": "myst", "format_version": 0.13, "jupytext_version": "1.14.1" } }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" }, "source_map": [ 12, 16, 27, 39, 46, 50, 54, 56, 61, 63, 71, 73, 90, 92, 95, 97, 101, 105, 107, 111, 118, 122, 126, 130, 132 ] }, "nbformat": 4, "nbformat_minor": 5 }