diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4940046 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv + diff --git a/regression/simple_linear_regression/.gitignore b/regression/simple_linear_regression/.gitignore new file mode 100644 index 0000000..37eca35 --- /dev/null +++ b/regression/simple_linear_regression/.gitignore @@ -0,0 +1,2 @@ +*.csv +.ipynb_checkpoints diff --git a/regression/simple_linear_regression/dataset/archive.zip b/regression/simple_linear_regression/dataset/archive.zip new file mode 100644 index 0000000..be99965 Binary files /dev/null and b/regression/simple_linear_regression/dataset/archive.zip differ diff --git a/regression/simple_linear_regression/simple_regression.ipynb b/regression/simple_linear_regression/simple_regression.ipynb new file mode 100644 index 0000000..1200e79 --- /dev/null +++ b/regression/simple_linear_regression/simple_regression.ipynb @@ -0,0 +1,472 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "29b5381a-72b4-4f81-9208-2075f7acad85", + "metadata": {}, + "source": [ + "# Simple Regression" + ] + }, + { + "cell_type": "markdown", + "id": "cac03d32", + "metadata": {}, + "source": [ + "Configure the project. Indeed you create a dataset in csv format." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6f480cda-8380-4355-998a-5c59d6203b05", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Archive: ./dataset/archive.zip\n", + " inflating: score.csv \n", + " inflating: score_updated.csv \n" + ] + } + ], + "source": [ + "! rm -rf *.csv\n", + "! unzip ./dataset/archive.zip\n", + "! head -n 1 *.csv | head -n 2 | tail -n 1 > data.csv && for file in *.csv; do (tail -n +2 \"$file\"; echo) >> data.csv; done && sed -i '/^$/d' data.csv" + ] + }, + { + "cell_type": "markdown", + "id": "52ec2f48", + "metadata": {}, + "source": [ + "Import needed libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "dd17f780", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn import linear_model\n", + "from sklearn.metrics import r2_score\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "id": "57b33a77", + "metadata": {}, + "source": [ + "Read data from data.csv using pandas and store in data frame structure. Also shuffle data to have uniform distribution. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a102a751", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HoursScores
07.469
13.835
23.530
31.619
45.147
\n", + "
" + ], + "text/plain": [ + " Hours Scores\n", + "0 7.4 69\n", + "1 3.8 35\n", + "2 3.5 30\n", + "3 1.6 19\n", + "4 5.1 47" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"data.csv\")\n", + "df.head()\n", + "df = df.sample(frac=1.0, random_state=42).reset_index(drop=True)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "93002df5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HoursScores
count121.000000121.000000
mean5.21487653.495868
std2.49918924.988705
min1.00000012.000000
25%3.00000030.000000
50%5.10000054.000000
75%7.40000075.000000
max9.80000099.000000
\n", + "
" + ], + "text/plain": [ + " Hours Scores\n", + "count 121.000000 121.000000\n", + "mean 5.214876 53.495868\n", + "std 2.499189 24.988705\n", + "min 1.000000 12.000000\n", + "25% 3.000000 30.000000\n", + "50% 5.100000 54.000000\n", + "75% 7.400000 75.000000\n", + "max 9.800000 99.000000" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# summarize data\n", + "df.describe() " + ] + }, + { + "cell_type": "markdown", + "id": "7ebceb4d", + "metadata": {}, + "source": [ + "Print the histogram chart of data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "39faae37", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiUAAAGzCAYAAADwumcoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAxbklEQVR4nO3deXzTdZ7H8XfapoEC5ZSjUKCiI3KIR8FFGIGBUhFBVLxAp4OrswgeDC4qumALMig+FtERZXXXY3fEa0fQ8YIOh4ggUhBGVpfDYdQFgQGGFugYYvPdP9xmSZMeaX9pvklez8ejD8wvv+T7TvL7fXyTtNRljDECAACIsZRYBwAAAJAoJQAAwBKUEgAAYAVKCQAAsAKlBAAAWIFSAgAArEApAQAAVqCUAAAAK1BKAACAFSglAADACpSSJPLiiy/K5XKppKQk7PVDhw5Vnz59GjkVgHj1+eefa/z48erWrZuaNGmizp07Ky8vT7/5zW9iHQ1xilICAIjYhg0blJubq+3bt+u2227TU089pVtvvVUpKSl64oknYh0PcSot1gGQ3E6ePKlmzZrFOgaACM2bN08tW7bU5s2b1apVq6DrDh061Gg5ysvLlZGR0WjrIbp4pwTV+uGHHzR37lz16NFDHo9H3bt31wMPPCCv1xu0n8vlUmFhYcjtu3fvrl/84heBy5UfH3344YeaMmWK2rdvry5dukiSjh8/rmnTpql79+7yeDxq37698vLytHXr1mg+RAD19NVXX6l3794hhUSS2rdvH3T5t7/9rQYMGKCMjAy1bt1al156qVauXBm0z9NPP63evXvL4/EoKytLU6dO1bFjx4L2qfyIecuWLbr00kuVkZGhBx54QJLk9Xr10EMP6ayzzpLH41F2drbuvffekHlVXFyswYMHq1WrVmrevLnOOeecwH0g9ninJAmVlpbq8OHDIdt9Pl/Q5VtvvVUvvfSSxo8fr3vuuUebNm3S/Pnz9eWXX2rZsmX1Xn/KlCk644wzNHv2bJ08eVKSNHnyZP3nf/6n7rjjDvXq1UtHjhzR+vXr9eWXX+rCCy+s91oAoqNbt27auHGjduzYUeP3ohUVFamwsFCXXHKJ5syZo/T0dG3atEmrV6/WyJEjJUmFhYUqKirSiBEjdPvtt2vnzp165plntHnzZn388cdyu92B+zty5IhGjRqlG264QTfddJM6dOggv9+vsWPHav369frlL3+pc889V59//rkef/xx7dq1S8uXL5ck/dd//ZeuuOIKnXfeeZozZ448Ho/27Nmjjz/+OKrPFSJgkDReeOEFI6nGr969extjjNm2bZuRZG699dag+/jHf/xHI8msXr06sE2Seeihh0LW69atmykoKAhZf/DgweaHH34I2rdly5Zm6tSpzj1YAFG1cuVKk5qaalJTU83AgQPNvffea1asWGFOnToV2Gf37t0mJSXFXHXVVaaioiLo9n6/3xhjzKFDh0x6eroZOXJk0D5PPfWUkWSef/75wLYhQ4YYSWbJkiVB9/Uf//EfJiUlxXz00UdB25csWWIkmY8//tgYY8zjjz9uJJm//OUvzjwJcBwf3yShxYsXq7i4OOTrvPPOC+zz3nvvSZKmT58edNt77rlHkvTuu+/We/3bbrtNqampQdtatWqlTZs2af/+/fW+XwCNJy8vTxs3btTYsWO1fft2LViwQPn5+ercubPefvttSdLy5cvl9/s1e/ZspaQE/+/G5XJJkv7whz/o1KlTmjZtWtA+t912mzIzM0Nmjcfj0aRJk4K2vfHGGzr33HPVs2dPHT58OPD1s5/9TJK0Zs0aSQp81PTWW2/J7/c792TAMXx8k4QGDBig3NzckO2tW7cOfKzz9ddfKyUlRWeddVbQPh07dlSrVq309ddf13v9nJyckG0LFixQQUGBsrOzddFFF+nyyy/Xz3/+c5155pn1XgdAdPXv319vvvmmTp06pe3bt2vZsmV6/PHHNX78eG3btk1fffWVUlJS1KtXr2rvo3KWnHPOOUHb09PTdeaZZ4bMms6dOys9PT1o2+7du/Xll1/qjDPOCLtG5TfeXn/99frXf/1X3Xrrrbr//vs1fPhwXX311Ro/fnxIaUJsUEpQo8q/zdRHRUVF2O1NmzYN2Xbdddfppz/9qZYtW6aVK1fqscce06OPPqo333xTo0aNqncGANGXnp6u/v37q3///vrJT36iSZMm6Y033ojKWuHmh9/vV9++fbVw4cKwt8nOzg7cdt26dVqzZo3effddffDBB3rttdf0s5/9TCtXrgx5BxeNj2qIsLp16ya/36/du3cHbT948KCOHTumbt26Bba1bt065LvkT506pe+++y6iNTt16qQpU6Zo+fLl2rt3r9q2bat58+bV+zEAaHyV78J+99136tGjh/x+v7744otq96+cJTt37gzafurUKe3duzdo1lSnR48eOnr0qIYPH64RI0aEfJ3+LkxKSoqGDx+uhQsX6osvvtC8efO0evXqwEc8iC1KCcK6/PLLJUmLFi0K2l75N5HRo0cHtvXo0UPr1q0L2u/ZZ5+t9p2SqioqKlRaWhq0rX379srKygr5cT4AdlizZo2MMSHbK78f7ZxzztG4ceOUkpKiOXPmhHwPR+VtR4wYofT0dD355JNB9/dv//ZvKi0tDZo11bnuuuu0b98+PffccyHX/e1vfwv8lN/Ro0dDrj///PMliVljCT6+QVj9+vVTQUGBnn32WR07dkxDhgzRp59+qpdeeknjxo3TsGHDAvveeuutmjx5sq655hrl5eVp+/btWrFihdq1a1entY4fP64uXbpo/Pjx6tevn5o3b64//OEP2rx5s/75n/85Wg8RQAPceeedKi8v11VXXaWePXvq1KlT2rBhg1577TV1795dkyZNUqtWrfTggw9q7ty5+ulPf6qrr75aHo9HmzdvVlZWlubPn68zzjhDM2fOVFFRkS677DKNHTtWO3fu1NNPP63+/fvrpptuqjXLzTffrNdff12TJ0/WmjVrNGjQIFVUVOi///u/9frrr2vFihXKzc3VnDlztG7dOo0ePVrdunXToUOH9PTTT6tLly4aPHhwIzxrqFWMf/oHjajyR3I3b94c9vohQ4YEfiTYGGN8Pp8pKioyOTk5xu12m+zsbDNz5kzz/fffB92uoqLC3HfffaZdu3YmIyPD5Ofnmz179lT7I8FV1/d6vWbGjBmmX79+pkWLFqZZs2amX79+5umnn3buwQNw1Pvvv29uueUW07NnT9O8eXOTnp5uzjrrLHPnnXeagwcPBu37/PPPmwsuuMB4PB7TunVrM2TIEFNcXBy0z1NPPWV69uxp3G636dChg7n99tvNX//616B9qs6o0506dco8+uijpnfv3oF1LrroIlNUVGRKS0uNMcasWrXKXHnllSYrK8ukp6ebrKwsc+ONN5pdu3Y598SgQVzGhHn/DQAAoJHxPSUAAMAKlBIAAGAFSgkAALACpQQAAFiBUgIAAKxAKQEAAFaw7h9P8/v92r9/v1q0aNGg37sCIJQxRsePH1dWVlbS/gIyZgwQHU7MF+tKyf79+wO/PAlAdHz77bfq0qVLrGPEBDMG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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "viz = df[[\"Hours\", \"Scores\"]]\n", + "viz.hist()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "55722cea", + "metadata": {}, + "source": [ + "Print scatter chart of data to recognize the patterns of data. Based on the below chart we must answer to this question \"Is Linear Simple Regression good or not?\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d647bbf0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGCUlEQVR4nO3de3RU9bn/8U8YCCRcgkQJhIQSEQURLUp/CoiFklO81AMG9CB4O7XYloskAbKgFUFF0VABKaZWbUWPgGIN8VKrtZhwTVFRFAUxRKgYuViVREUJDvP7Y3dCJpnL3pM99/drraxp9uyZ2SldnWft7+f7PEkul8slAACAONUq0hcAAAAQShQ7AAAgrlHsAACAuEaxAwAA4hrFDgAAiGsUOwAAIK5R7AAAgLjWOtIXEA1OnDihTz/9VB07dlRSUlKkLwcAAJjgcrn01VdfKTMzU61a+b5/Q7Ej6dNPP1V2dnakLwMAAARh//79ysrK8vk8xY6kjh07SjL+y+rUqVOErwYAAJhRV1en7Ozshu9xXyh2pIalq06dOlHsAAAQYwJFUAgoAwCAuEaxAwAA4hrFDgAAiGsUOwAAIK5R7AAAgLhGsQMAAOJaRIudDRs26Morr1RmZqaSkpJUVlbm8bzL5dLtt9+u7t27KyUlRbm5uaqqqvI454svvtDEiRPVqVMnde7cWTfffLO+/vrrMP4VAAAgmkW02Pnmm2903nnn6cEHH/T6fHFxsZYtW6aHHnpIW7duVfv27TVq1Ch99913DedMnDhR77//vl599VW9+OKL2rBhg2655ZZw/QkAACDKJblcLlekL0IyGgKtXbtWY8aMkWTc1cnMzNSMGTM0c+ZMSVJtba0yMjK0YsUKjR8/Xrt27dLZZ5+tN954Q4MGDZIkvfzyy7r88sv1ySefKDMz09Rn19XVKS0tTbW1tTQVBAAgRpj9/o7azM7evXt18OBB5ebmNhxLS0vThRdeqMrKSklSZWWlOnfu3FDoSFJubq5atWqlrVu3+nzvY8eOqa6uzuMHAADYy+mUKiqk1auNR6czMtcRtcXOwYMHJUkZGRkexzMyMhqeO3jwoLp27erxfOvWrdWlS5eGc7xZuHCh0tLSGn4YAgoAgL1KS6VevaQRI6QJE4zHXr2M4+EWtcVOKM2ZM0e1tbUNP/v374/0JQEAEDdKS6Vx46RPPvE8XlNjHA93wRO1xU63bt0kSYcOHfI4fujQoYbnunXrpsOHD3s8//333+uLL75oOMebtm3bNgz9ZPgnAAD2cTql6dMlb4lg97H8/PAuaUVtsZOTk6Nu3bpp3bp1Dcfq6uq0detWDR48WJI0ePBgHTlyRNu2bWs457XXXtOJEyd04YUXhv2aAQBIBP6yOBs3Nr+j05jLJe3fb5wXLq3D91HNff3119qzZ0/D73v37tX27dvVpUsX9ezZU/n5+VqwYIH69OmjnJwczZ07V5mZmQ07tvr166dLL71UkyZN0kMPPaTjx49r6tSpGj9+vOmdWAAAwLzSUuPOTeOCJitLeuABKS9POnDA3PuYPc8OES123nzzTY0YMaLh98LCQknSjTfeqBUrVqioqEjffPONbrnlFh05ckQXX3yxXn75ZbVr167hNStXrtTUqVM1cuRItWrVSmPHjtWyZcvC/rcAABDv3FmcpktU7izOX/4ide9u7r3MnmeHqOmzE0n02QEAwD+n09hN5WuJKinJuMOzZ4/Uu7dRAHmrMNzn7d0rORwtu6aY77MDAACih9kszpYtxpKWZBQ2jbl/X7q05YWOFRQ7AAAgICtZnLw8Y0mrRw/P57KyjON5efZfnz8RzewAAIDYYDWLk5cnjR5t3BE6cMA4PmxYeO/ouFHsAACAgIYNM+7MBMriDBt28pjDIQ0fHrZL9IllLAAAEJDDETiL84tfSGvWRHYOljcUOwAAwBRfWZwuXYyfefMiPwfLG7aei63nAABY4XSezOJUVRlFTlPuuz2hDCSb/f4mswMAQJSrr5dKSqTqaqOHzeTJUnJy5K7HncVx997xxuUyCp78fCOoHIlgshvLWAAARLGiIik1VSookJYvNx5TU43jkRaNc7C84c4OAABRqqhIWrSo+XGn8+Tx4uLwXlNj0TgHyxvu7AAAEIXq66XFi/2fs3ixcV6kROMcLG8odgAAiEIlJYG3bzudxnlWOZ3G9vDVq1u2Tdzde6fpVnS3pCQpO9uz904kUOwAABCFqqvtPc+ttNQIFY8Y0fJt4mZ674R7DpY3FDsAAESh3r3tPU8yCppx45qHimtqjOPBFDzRNgfLG/rsiD47AIDoU19v7Lryt8TkcEhHj5rbhu7eJu5r95R73MPevcHdiWnceydcc7DoswMAQAxLTpYKC73vxnIrLDTfb8fsNvHf/17KyLBesETLHCxvKHYAAIhS7m3lixd73uFxOIxCx8q2c7PbvwsKTv7nrCwjkxMNS1EtwTKWWMYCAEQ3OzooV1QYYWQrwjHyoSXMfn9T7IhiBwAQ/9yZnZoaY8nKrJZmeULJ7Pc3u7EAAIhBVnvl+Nsm7k+0jHxoCYodAABiTLC9cnxtEzcj0iMfWoJiBwCAGNLSXjl5edK+fVJ5ubRqlbRkibnPjfTIh5YgsyMyOwCA2BCKXjmBsjxkdgAAQNiY7ZVjJV8TKyMfWoJiBwCAGGE2N2M1XxMLIx9agqaCAADECLO5mWDyNXl50ujR4R/5EA4UOwAAxIhhw4y7LYHyNcOGBff+0TzyoSVYxgIAIEZEIl9jtZ9PNKLYAQAghoQzXxNsP59ow9ZzsfUcABB7nM7Q5mvc/XyaVgnRNC+L2VgWUOwAAHBSKPr5hAJ9dgAAiCKxlH0JRT+fSGI3FgAAIVZaKk2f7llAZGUZYeNILwV5E6p+PpHCnR0AAEKopbOsIiGU/XwigcyOyOwAAEIjGrIv9fVSSYlUXS317i1NniwlJ/t/TazMyyKzAwBAhEU6+1JUJKWmSgUF0vLlxmNqqnHcn3ibl0WxAwBAiEQy+1JUJC1a1DwI7XQaxwMVPPE0L4tlLLGMBQAIjYoKoxFfIOXl9o5pqK837uD42/HlcEhHj5pb0orWeVksYwEAEGHuWVZNl4IaO+00Ixtj53b0kpLA7+V0GucF4p6Xde21xmO0FDpWUOwAABAi/rIvbp99Jl13nb2jGKqr7T0v1lHsAAAQQr6yL97YtR29d297z4t1ZHZEZgcAEHru7EtNjbEr6rPPvJ9nx7ZuOzM70YzMDgAgYdTXG1uhp00zHuvrI31FzbmzLz16+C50JHu2oycnS4WF/s8pLIztQscKxkUAAGJaUZG0eLHnXYyZM40v8+LiyF2XL+Haju7+25v+d+NwRO9/N6FCsQMAiFnuXjJNuXvJSNH3pR7OUQzFxdKCBdY7KMcbMjsiswMAsShWcymxMoohFpDZAQDEJXc+5yc/sa+XTDjF2yiGWECxAwCIGY1nPW3ebO410dhLJp5GMcQCMjsAgJjgK58TSLT2ksnLk0aPjt5RDPGEzI7I7ABAtDOTz/EmGjM7sI/Z72/u7AAAop6ZWU/eNO0lY/dQy2gekomTKHYAAFHPau7GWy+Z0lJp+nTpk09OHsvKMsLCwWRk7H4/hA4BZQBA1DObuxk6VFqyxFi6alrojBvnWZhIwc+isvv9EFpkdkRmBwCiXUt66rj72jQtTNys9rWx+/0QPPrsAADiRktmPW3c6LswkbzPonI6pYoKafVq47FxkRXM+yGyyOwAAGJCsLOerM6iCpTFCddsK9iHYgcAEDOCmfVkZRaVO4vTNODhzuL85S/hnW0Fe5DZEZkdAIhnZmdR7dljFE+Bsjju85htFXlkdgAAkLlZVL/4hXTXXeayOFu2MNsq1lDsAADinq9ZVF26GD/z5hnLY2YcOMBsq1jDMpZYxgKARNG443FVlVHkWFVeLg0f3vz96KAcfoyLAACgCYfDKFTcOR6r0tKkZ56Rtm8/GYx2Fz6IXixjAQASTqBeOb7U1ho7wQoKjCaHRUX2XxvsR7EDAEg4dvTAcTqlRYsoeGIBxQ4AIOGY7YEzZ47UKsA35eLFxjgLRC+KHQBAXPI38mHYMGPnVNOt425JSVJ2tnTqqdKJE4E/p6TErqtGKFDsAADiTmmpEUAeMUKaMMF47NXr5DRyM713li41GgOaUV1tw0UjZKK62HE6nZo7d65ycnKUkpKi3r1766677lLj3fIul0u33367unfvrpSUFOXm5qqqqiqCVw0AiCT3yIemAWT3yAd3wWOmV07v3uY+0+x5iIyo7rNzzz33aPHixXr88cfVv39/vfnmm/rf//1f3X333br11lslSffdd58WLlyoxx9/XDk5OZo7d6527NihnTt3ql27dqY+hz47ABAf3FvKA418aDzKwV+vnPp6Y9dV4yWwphwO6ehR//O5EBpx0Wdny5YtGj16tK644gpJUq9evbR69Wq9/vrrkoy7OkuXLtVtt92m0aNHS5KeeOIJZWRkqKysTOPHj/f6vseOHdOxY8cafq+rqwvxXwIACIdAW8rdIx/mz5dGjjxZ2PjqlZOcbExUX7TI93sWFlLoRLuoXsYaMmSI1q1bpw8//FCS9M4772jTpk267LLLJEl79+7VwYMHlZub2/CatLQ0XXjhhaqsrPT5vgsXLlRaWlrDT3Z2dmj/EABAWJjdUr5gQfMcjy/FxdKsWc07IzscxvHi4qAuFWEU1Xd2Zs+erbq6OvXt21cOh0NOp1N33323Jk6cKEk6ePCgJCkjI8PjdRkZGQ3PeTNnzhwVFhY2/F5XV0fBAwBxwOyWcjd3jifQPKviYqNAKikxwsi9e5/soIzoF9XFzpo1a7Ry5UqtWrVK/fv31/bt25Wfn6/MzEzdeOONQb9v27Zt1bZtWxuvFAAQDdxbymtqjCWrQFwuI8eTny+NHu1/rlVysnEeYk9UL2PNmjVLs2fP1vjx4zVgwABdf/31Kigo0MKFCyVJ3bp1kyQdOnTI43WHDh1qeA4AEJv89cnxxd+Wcl/cOZ6NG4O9UkS7qC52jh49qlZNWlc6HA6d+E+Hp5ycHHXr1k3r1q1reL6urk5bt27V4MGDw3qtAAD7BOqT44+vLeWB2DFCAtEpqoudK6+8Unfffbf++te/at++fVq7dq0WL16sq666SpKUlJSk/Px8LViwQM8//7x27NihG264QZmZmRozZkxkLx4AEBSzfXL8ycuT9u2Tysul224z97lW8z6IHVHdZ+err77S3LlztXbtWh0+fFiZmZm69tprdfvttyv5P6kwl8ulefPm6eGHH9aRI0d08cUXq6SkRGeeeabpz6HPDgBEh2D65Jh9T185nmDeE9HB7Pd3VBc74UKxAwCh4a9hnzcVFcaSVSDl5b5743jjvlskeRY87lxPoN1YiE5mv7+jehkLABC7gsndmM3NWM3XmBkNgfgV1VvPAQCxyX0npenaQaC+NmZzM8Hka/LyjO3lVu40IT6wjCWWsQDATi3J3ZCvgRUsYwEALKuvl5YulaZNMx7r662/h9n5VN762vjrk+P+felSCh1YQ7EDAJAkFRUZE74LCqTly43H1FTjuBUtzd2Qr4HdyOwAAFRU5H2yt9N58rjZgZd25G7I18BOZHZEZgdAYquvN+7g+BvH4HBIR4+aG3xJ7gbhQmYHAGBKSUnguVNOp3GeGYmeu7Ej9wR7UewAQIKrrrb3PClxczd25Z5gLzI7AJDgeve29zy3RMvd2Jl7gr3I7IjMDoDE03iMQ3q6dPnl9mV2EpHduSeYQ2YHAOBV0zEOo0ZJKSn+X1NYyJe0P3bnnmAvlrEAIIH4GuPwzTfGY6tW0okTJ487HEahw/KLf6HIPcE+FDsAkCCcTmn6dO/bwV0uY6dU9+5GqHbfPiOjM3kyd3TMCFXuCfYgsyMyOwASQ0WFsXQVSHm5NHz4yd8b53vcIWMpcYLHZpDZiQyz39/c2QGABBHMGIfSUuNuUONZV+npxuPnn588lpVl9NaJ1y3lgSQnG8t93nZjuZF7ihwCygCQIKyOcXDne5oO9fz8c89CRzK6JY8bZ7wmURUXS7NmNb/D5XAYx8k9RQ7LWGIZC0BisDLGQTLO9Te93N/rE31Jq6TECCOTewotlrEAIAF5y9e4Cw/3GIdx44zCpHHB03SMQ0WFtUJHMt5v/35p/nxp5MjEzfEkJ0v5+ZG+CjTGMhYAxImm/XNGjDB+b7y0ZHaMg9l8jzcLFnj/bCBSWMYSy1gAYp+v/jnuOzZN51H5uwMkmd+55Y+vzwbsYvb7m2JHFDsAYps7i+Nr2SmYLE2gfI9Z5HgQSoyLAIAEsXGj/3xN4yxNRUXgsQbSyXyPdPIOTTDcn71xY/DvAbQUxQ4AxDiz+RqrWRpf+Z709JO9duy+RiAUKHYAIMaZ7Z/jZqUnTl6eMTqivFxatcp4PHTI+Ckvl267LTTXCNiJzI7I7ACIbcHka+zK0ljp3UNmB3YjswMACSKYfI1dWRp/n920d48/TqeRJ1q92nyuCDCLYgcA4oCvfE0gdmRpzPbu8cVMfyCgJVjGEstYAOKHu3/OunVGIDmQphPO7fhsK5PQrfYHAhqjz44FFDsA4k0sZGlC0R8IiYXMDgAkMLuyNKFQX298treJ6o3Rowd2odgBgDjV0ixNKBQVSampUkGBVFZm7jX06EFLMfUcAOJYXp40erT1LE0oFBVJixZZfx09etBSZHZEZgcAQq2+3rijY2VLOZkdBGL2+5s7OwAQQcHsYIpFJSXWCx0pcrkixBcyOwAQIYnUX6a62tr5kcwVIf5Q7ABABLj7yzTdjWRlblUs6d3b3HnXX2/0/tm7l0IH9iGzIzI7AMIrEfvLmMnsOBzS0aNScnL4rguxjT47ABBloqm/TLhnUSUnS4WF/s8pLKTQQWgQUAaAMCgqkhYvtlZUhKq/TGmpNH26Z8GVlWU0IQzl0lFxsfHY9L8Hh8ModNzPA3ZjGUssYwEIrWD7y9g5t8otGmZR1dcbu7Oqq40sz+TJ3NFBcJiNZQHFDoBQCba/zKmnSkuWGN2P7dqOnohZIcQ3MjsAEAWs9peRjLsun30mXXedvdvRN26MfFYIiASKHQAIIav9Zbyxazu62QwQs6gQbyh2ACCEzPaXmTjRWLryxh02yM9v2a4pszOmmEWFeEOxAwAhNHly4PyLwyHdcIP073/7PsfbEpPV7ePDhhmZHHcYuamkJCk72zgPiCcUOwAQQmb7y3z+ubn3cy8xBTNqwuEwtpdLzQseZlEhnlHsAECIFRdLs2Y1LyIcDuN4cbG1JaaWjJrIyzO2l/fo4XmcWVSIZ2w9F1vPAYSHv/4y7m3hNTXNe+BIJ7eF79ljvLal28cTZdo64ht9diyg2AEQDdx3bCTPgicpyfj9jjuk48elBQsCv1coGhIC0cbs9zfjIgAgSriXmJqOcujSxXicN8/8e7F9HDiJYgcAokhenjR69Mklpqoqaf5870tb/rB9HDiJYgcAoozDYSxBuXM8Vgodd2aH7ePASRQ7AGBSS0O9Vl8faLxDU2wfB7xj6zkAmBBMX5uWvt5q7obt44B3FDsAEEBL+tq05PVmcze33Wbsvtq7l0IH8Iat52LrOQDf3LmZYPvatOT1ZnvvBOqpA8Qrs9/f3NkBAD8C5WbcM6vGjTOyMvX1wb2+8cwrN8Y7APag2AEAP8zmZsrKpIICKTVVKiqy/npf5zHeAWg5dmMBgB9W+9U4ndKiRcZ/tjrzypemvXcY7wBYQ2ZHZHYA+BYoN+OLwyEdPWo8krsBQoPMDgDYwF9uxh+nU7r5ZuNuzJIl3l9P7gYID4odAAjAV24mkCefNPrpFBRIM2eSuwEihWUssYwFwBx3B+Q//1n6v/8z/zr3HZynn5ZOO43cDWAXs9/fFDui2AFgTX29sevK6TT/GrI5gP3I7ACAF/X1RkZm2jTvfXH8cTqligrp2WeNvjpW+OunAyC0or7Yqamp0XXXXaf09HSlpKRowIABevPNNxued7lcuv3229W9e3elpKQoNzdXVVVVEbxiANGqqMi4I1NQIC1f7r0vji9NZ1s9/bTUoYPUyuL/i1qddwWg5Wwpdurq6lRWVqZdu3bZ8XYNvvzySw0dOlRt2rTR3/72N+3cuVP333+/TjnllIZziouLtWzZMj300EPaunWr2rdvr1GjRum7776z9VoAxLaiIqP/TdOlJ3dfHH8Fj6/ZVt98Y9yx+d//lcaMMXcdVvv2AGi5oDI711xzjS655BJNnTpV3377rc477zzt27dPLpdLTz31lMaOHWvLxc2ePVubN2/WRh/3fV0ulzIzMzVjxgzNnDlTklRbW6uMjAytWLFC48ePN/U5ZHaA+GYmY+Pui5OcbPzuDiPX1Ej5+dK//+39de4szp49Uu/e9NMBwimkmZ0NGzZo2LBhkqS1a9fK5XLpyJEjWrZsmRYsWBDcFXvx/PPPa9CgQbr66qvVtWtXDRw4UI888kjD83v37tXBgweVm5vbcCwtLU0XXnihKisrfb7vsWPHVFdX5/EDIH6VlAQOEzudxnmS55LVddf5LnSkk1mcLVuYYwVEq6CKndraWnXp0kWS9PLLL2vs2LFKTU3VFVdcYWte5qOPPtIf/vAH9enTR6+88op+/etf69Zbb9Xjjz8uSTp48KAkKSMjw+N1GRkZDc95s3DhQqWlpTX8ZGdn23bNAKJPdbX583wtWQVy4ABzrIBoFdRsrOzsbFVWVqpLly56+eWX9dRTT0kyMjbt2rWz7eJOnDihQYMG6Z577pEkDRw4UO+9954eeugh3XjjjUG/75w5c1RYWNjwe11dHQUPEMd69zZ3Xk6ONH26tbEQbu4sDnOsgOgT1J2d/Px8TZw4UVlZWerevbuGDx8uyVjeGjBggG0X1717d5199tkex/r166ePP/5YktStWzdJ0qFDhzzOOXToUMNz3rRt21adOnXy+AEQvyZPDlxsOBzSgAHW7+gkJUnZ2UZB0/i9hg+Xrr3WeKTQASIrqGJn8uTJqqys1J///Gdt3rxZrf6z9/L000+3NbMzdOhQ7d692+PYhx9+qB/84AeSpJycHHXr1k3r1q1reL6urk5bt27V4MGDbbsOALEtOVlqdDPXq8JC/9kcb8jiADHC1QLHjh1zffDBB67jx4+35G18ev31112tW7d23X333a6qqirXypUrXampqa4nn3yy4Zx7773X1blzZ9dzzz3nevfdd12jR4925eTkuL799lvTn1NbW+uS5KqtrQ3FnwEgSsya5XI5HC6XsVBl/DgcxnGXy+UqL/d8LtBPdrbL9eyzEf2TgIRm9vs7qK3nR48e1bRp0xqCwh9++KFOP/10TZs2TT169NDs2bNtK8ZefPFFzZkzR1VVVcrJyVFhYaEmTZrU8LzL5dK8efP08MMP68iRI7r44otVUlKiM8880/RnsPUcSBz19cauq+pqI8szebLndvNevfxvHz/1VGOKeY8eZHGASAvpbKzp06dr8+bNWrp0qS699FK9++67Ov300/Xcc89p/vz5evvtt1t08eFGsQMkNndPnQMHpKoqaf5843jj/3d0L1mxqwqIHma/v4PajVVWVqann35aF110kZIaNZTo37+/qs3u8QSAKFBaauzAahxMTk83Hj///OSxrCwjm0OhA8SeoIqdzz77TF27dm12/JtvvvEofgAgmrl76jS9v/3FF8axO+6Q+vRh+zgQ64LajTVo0CD99a9/bfjdXeA8+uij7IICEBOcTt89dVwuY9nq0Uela65h+zgQ64K6s3PPPffosssu086dO/X999/rgQce0M6dO7VlyxatX7/e7msEgIAa527M3InZuNF/Tx33GIiNG41iB0DsCurOzsUXX6x33nlH33//vQYMGKC///3v6tq1qyorK3XBBRfYfY0A4FfjWVYTJhiPvXoZx305cMDce5s9D0D0snxn5/jx4/rlL3+puXPnegzlBIBI8JW7qakxjvvaPeUe7xCI2fMARC/Ld3batGmjZ599NhTXAgCWBMrdSFJ+vveJ58OGGTusfO2p8DYGAkBsCmoZa8yYMSorK7P5UgDAGrO5m/nzpYoKz6LH4ZAeeMD4z00LHsZAAPElqIBynz59dOedd2rz5s264IIL1L59e4/nb731VlsuDgD8MZunWbDA+MnKMgoc97JWXp6xzNW0zw49dYD4ElQH5ZycHN9vmJSkjz76qEUXFW50UAZiU0WFEUY2y1cXZKs7uQBEh5COi4g3FDtAbAo0y8qbpCTjzs3evRQ0QKwz+/0dVGanMZfLJeolAL7U1xtLQtOmGY/19fa9t7/cjS+N++cASAxBFztPPPGEBgwYoJSUFKWkpOjcc8/V//3f/9l5bQBiXFGRlJoqFRRIy5cbj6mpxnG7uHM3PXpYex39c4DEEVSxs3jxYv3617/W5ZdfrjVr1mjNmjW69NJL9atf/UpLliyx+xoBxKCiImnRoubbvp1O47jdBc++fVJ5uXTbbeZeQ/8cIHEEHVC+4447dMMNN3gcf/zxxzV//nzt3bvXtgsMBzI7gL3q6407ON7627g5HNLRo1Jysr2fHSjHQ2YHiB8hzewcOHBAQ4YMaXZ8yJAhOsC9YSDhlZT4L3Qk4/mSEuvv7XQau7BWr27eO0eifw6A5oIqds444wytWbOm2fGnn35affr0afFFAYht1dX2nudmdgaWrxxPVpbv8REA4ldQTQXvuOMO/c///I82bNigoUOHSpI2b96sdevWeS2CACSW3r3tPU+yPgMrL08aPZr+OQBa0Gdn27ZtWrJkiXbt2iVJ6tevn2bMmKGBAwfaeoHhQGYHsFcwmR1/jf3cORxfoyHI4QCJyez3d1B3diTpggsu0JNPPhnsywHEseRkqbDQ2HXlS2HhyUKntNT7yAb3aAezM7A2bpSGD7flTwAQR4Iqdl566SU5HA6NGjXK4/grr7yiEydO6LLLLrPl4gDEruJi43Hx4uYDOAsLTz5vZnnq2DFzn8n+CADeBBVQnj17tpxe7k+7XC7Nnj27xRcFID4UFxtLVUuWSFOnGo9Hj54sdJxO446Ot8V097H8fKlrV3OfR+8cAN4EdWenqqpKZ599drPjffv21Z49e1p8UQDiR3KyUbA05s7nrFtnbnlKMpa1AvXOGTbMtssGEEeCurOTlpbmdbL5nj171L59+xZfFID41Xj7+IIF5l5z+DC9cwAEL6hiZ/To0crPz1d1oyYZe/bs0YwZM/Tf//3ftl0cgPjizuf4u5vjTffu9M4BELygtp7X1tbq0ksv1ZtvvqmsrCxJ0v79+3XJJZeotLRUnTt3tvs6Q4qt50DoBdo+7o23LeX+tqgDSCwh3XqelpamLVu26NVXX9U777yjlJQUnXfeeRrGgjmQ0PwVIoG2jzfla3nK4WB7OQBrLC1jVVZW6sUXX5QkJSUl6ac//am6du2q3/3udxo7dqxuueUWHTO7RxRAXAk0ysHqtnCWpwDYxVKxc+edd+r9999v+H3Hjh2aNGmS/uu//kuzZ8/WCy+8oIULF9p+kQCim68sjrtXTmmp+W3ht90mlZcbS1cUOgDsYCmz0717d73wwgsaNGiQJOm3v/2t1q9fr02bNkmSnnnmGc2bN087d+4MzdWGCJkdIHhmRzns2WPMwgq0fZyRDwDMMvv9benOzpdffqmMjIyG39evX+/RLflHP/qR9rubYgCIGk6nVFEhrV5tPPqbWWWV2VEOW7awfRxAZFgqdjIyMrR3715JUn19vd566y1ddNFFDc9/9dVXatOmjb1XCKBFAmVpWspsFufAAbaPA4gMS7uxLr/8cs2ePVv33XefysrKlJqa6rED691331Xv3r1tv0gAwTEzd6qlBYbZLI77vLw8afRoto8DCB9LmZ1///vfysvL06ZNm9ShQwc9/vjjuuqqqxqeHzlypC666CLdfffdIbnYUCGzg3hkNkvT0oyM+3PI4gAIN7Pf30E3FezQoYMcTf6f64svvlCHDh2UnJxs/YojiGIH8aiiwliyCqS8PLi+NY176lRVSfPmGYVN4/9HcWdxWKICEAohbyroTZcuXYJ5OwAhYCVLY1VpqTGtvPFdo/R04/Hzz08ey8oyQscUOgAiKahiB0D0s5qlMctXDuiLL4zHO+6Q+vQhiwMgegS1jBVvWMZCPApFliZcOSAAMCMkfXYAxA6Hw/6+NmZ76mzcaOlSfaqvN65x2jTjsb7envcFkFgodoA4Zndfm1DmgJoqKpJSU6WCAmn5cuMxNdU4DgBWkNkB4pydfW1ClQNqqqhIWrSo+XGn8+Tx4uKWfQaAxEFmR2R2ALPC0VOnvt64g+NvpIXDIR09KsVYlwsANiOzA8B2ocgBNVVSEnh2l9NpnAcAZlDsALAk1POtqqvtPQ8AyOwAsCyU863MjtdjDB8As8jsiMwO4NZ4BESkmgKS2QFgFpkdAJaUlhrh4xEjpAkTjMdevYzj4ZScLBUW+j+nsJBCB4B5FDsAGkZANG0YWFNjHA93wVNcLM2a1fyuksNhHGfbOQArWMYSy1hIbNE8AqK+3th1VV1tZHQmT+aODoCTQjr1HED0spq7sTICYvhw2y/Xr+RkKT8/vJ8JIP5Q7ABxpLRUmj7ds3jJyjJ64/jaEh7OERAAEAlkdoA4EWzuJlwjIAAgUsjsiMwOYl9Lcjds9QYQq9h6DiQQK7kbN6dTqqiQ7rrL3HiGLVtsuVQACDsyO0AcsJq78ZbtseszACDaUOwAccBK7sad7bG6gE1mB0CsotgB4sCwYUYmp6bGexHjzuwMGWL0q7FS6LhfO2yYfdcLAOFEZgewoL5eWrpUmjbNeKyvj/QVGRwOY3u5ZBQnjbl/X7rUyN1YWbpq/NpwNxQEALtQ7AAmFRUZu5YKCqTly43H1FTjeDTIy5P+8hepRw/P41lZxvG8POu5m8avBYBYxTIWYEJRkbRoUfPjTufJ49EwrykvTxo92ncHZbO5m9tuk0aOjMzUcwCwG312RJ8d+BdPfWjc/XgCZXsiMQcLAKyizw5gk5ISc31oSkrCcz0tYTbb463xYDRmlQDADIodIIDqanvPizQz2Z7Goj2rBACBkNkBAujd297zokGgbI9brGSVAMAfMjsiswP/4imzY0Wi/t0AYgeZHcAmyclSYaH/cwoLI/OF755vtXq18RgoW2RFPGWVACS2mCp27r33XiUlJSk/P7/h2HfffacpU6YoPT1dHTp00NixY3Xo0KHIXSTiUnGxNGtW82Ueh8M4HomlnNJSY2fViBHShAnGY69exnE7xFtWCUDiipli54033tAf//hHnXvuuR7HCwoK9MILL+iZZ57R+vXr9emnnyqPDmgIgeJiY8lmyRJp6lTj8ejRyBU648Y174ZcU2Mct6PgicesEoDEFBOZna+//lrnn3++SkpKtGDBAv3whz/U0qVLVVtbq9NOO02rVq3SuHHjJEkffPCB+vXrp8rKSl100UWm3p/MDmKJu1eOr7EPdvXKIbMDINrFVWZnypQpuuKKK5Sbm+txfNu2bTp+/LjH8b59+6pnz56qrKz0+X7Hjh1TXV2dxw8QKzZu9D/fyuWS9u83zmuJaM4qAYAVUb/1/KmnntJbb72lN954o9lzBw8eVHJysjp37uxxPCMjQwcPHvT5ngsXLtQdd9xh96UCYWF2vpXVOVjeuJfoFi/2vMPjcBiFDtvOAcSCqL6zs3//fk2fPl0rV65Uu3btbHvfOXPmqLa2tuFn//79tr03EGpm51uZPS+QaMoqAUAwovrOzrZt23T48GGdf/75DcecTqc2bNig5cuX65VXXlF9fb2OHDnicXfn0KFD6tatm8/3bdu2rdq2bRvKSwdCZtgwI5MTaL7VsGH2fWZystRoEyQAxJSovrMzcuRI7dixQ9u3b2/4GTRokCZOnNjwn9u0aaN169Y1vGb37t36+OOPNXjw4AheOWA/d0+dNWukSZOMY1bmWwFAoorqOzsdO3bUOeec43Gsffv2Sk9Pbzh+8803q7CwUF26dFGnTp00bdo0DR482PROLCAWlJZK06d7BpPT043Hzz8/eSwryyh06L4AACdFdbFjxpIlS9SqVSuNHTtWx44d06hRo1RCS1fEEXdPnaZLVl98YRy74w6pTx/f860AINHFRJ+dUKPPDiKpvt4YuVBdbTTomzz55HbucPXUAYBYFFd9doB4VVRkNO4rKJCWLzceU1ON41L4euoAQDyL+WUsIFYVFUmLFjU/7nSePD5woLn3sqOnDgDEK+7sABFQX2806vNn8WLp1FPNvZ9dPXUAIB5xZwcIE6fTWG46cEDavNn/zCn3+Tt2hL+nDgDEG4odIAy8bR03Y+9e6YEHjN1YSUmeBQ89dQDAHJaxgBBzbx23WuhIxu6svDzpL3+RevTwfC4ryzhOTx0A8I+t52LrOUIn0NZxfxwOYwZV423o7mUweuoAgPnvb5axgBAKtHXcn0sukWbM8Oy9M3y4rZcHAAmBZSwghILZEp6UZPyUl3vvvQMAsIY7O0AImd0SPmWKUeC8/75R5DTVuPdOcbF91wcAiYDMjsjsIHTcmZ1AW8f37jXOTU31vyW9aY4HABIZ4yIAH5xOqaJCWr3aeAzU76YlHA5j67h0cqu4W9Ot4yUl5nrvMOcWAKyh2EFCKS017rSMGCFNmGA89uplHA8Vs1vHq6vNvZ/Z8wAABjI7SBjufjdNl5NqaozjoexZk5cnjR7tf+t4797m3svseQAAA5kdkdlJBIH63TTOzkSqd019PZkdALCCzA7QSKB+Ny6XtH+/cZ5VdmWAkpOlwkL/5xQWUugAgFUsYyEhmO13Y7UvjreZV1lZRig5mCUx97byxYs9iyaHwyh02HYOANZR7CAhmO13Y/Y8KXQZoOJiacECY9dVdbVnB2UAgHVkdkRmJxFY6XdjJrMTCxkgAIh3ZHYQF+zKw1jpd2NGKDNAAAB7UewgatndE8dsvxszQpUBAgDYj8wOolKo8jBm+t2YEYoMEAAgNMjsiMxOtImFPIzdGSAAgHVkdhCz7MzDhGoOlt0ZIABA6FDsIOrYlYcJ9RwsOzNAAIDQIbODqGNHHiZcc7DsygABAEKHzI7I7ESL+nqjkV5VlbRypVRb6/vctDRp4kSpT5/mDfeiIfPj/ltoCggAoWP2+5tiRxQ70aCoqPmIBLOajlKoqDCWrAIpL5eGD7f+eYF4+1sY9wAA9jP7/c0yFiKuqEhatCj41zudJ19fXBzZHji+/pam1wgACB8Cyoio+nrjLog/rVpJf/6z8ejP4sXG+0WqB46Zv8V9jQCA8KHYQUSVlAReujpxQnr+eePRH6dTuvlm4zErq/mWcLekJCk72wgS28nM3+J0GucBAMKHYgcRVV1t73lPPinl5krffmvsxApnDxy7/xYAgD0odhBRvXvbe57bF18Yj126eB4PZQ+cUP0tAICWYTeW2I0VSfX1Umqq/+Ufh0M6ckTq3Nnabq2kJKPh34oV0uHDoe+BY/ZvOXqUbegAYAfGRSAmJCcbW7L9KSyUOnQIfF5TLpfRa8fhkK691thm7qvQsWOshNm/hUIHAMKLreeIOPdW7EC9aXydF4iZsRLTp3s2IczKMmZfWV3uMvu3AADCh2UssYwVLcx2HXaft369VFYW+H39NQ/0NVbCHWQONt9DB2UACD06KFtAsROb3GMhamqaFytS4LEQ0TBWAgAQPDI7iHsOh7HUJFnbYu7O58yf77vQkYwCav9+487P0qU0AwSAWEWxg5iWl2csNfXo4Xnc1xbz0lLjbs6IEdKCBeY+o6xMKigwdloVFdlx1QCAcCKgjJiXlyeNHi1t3GiEkX1tMfeVzzGL+VYAEJvI7IjMTiIIlM+xgl45ABAdyOwgqtnR18aKjRvtKXQk5lsBQKxhGQthZ2dfG7MC9dqxivlWABA7uLODsHLnZpreZampMY6Xlobmc7t3N3debq6585hvBQCxg8yOyOyESyT72pjtybN7t9SxI/OtACAWkNlB1AmUm3H3tdm40f/71NcbfW+mTTPf/8ZsT56UFOZbAUC8odhB2JjNzfg7r6jI6HdTUCAtX26t/43ZnjzFxdKsWc3vLjkcxnG2nQNAbGEZSyxjhUtFhdHMLxBfs6yKik72ufHGbCHidAbuySMx3woAoh2zsSyg2AmPlsyyqq837uCQpQEAuJHZQVCCycOYFewsK8m4wxKoFw/9bwAA3lDsoEFL8jBmWZ1l5Wa2rw39bwAATdFUEJJ852FCMQ/K7Cyrxsz2taH/DQCgKTI7IrMT6jyM2UBwJK8RABB7yOzAtFDmYUpLjVDyiBHShAnGY69e1jslJyfT/wYAEByKHYQsD2P3aAj63wAAgkGxg5DkYZxOY9int0VS97H8fOvTzouLjaWqJUukqVONx6NHKXQAAL6R2RGZHTvzMO58zrp10oIFgT/bVwNBAAACIbMD0+zKwzTO55gpdCTzIyQAAAgWW88h6eQy0OLFnnd4HA6j0Am0TOTO51i9T9i9u7XzAQCwimUssYzVWDDzoNxjIPxNNG/K32gIAADMMPv9zZ2dBOat/01yshEctmLjRuuFjtR8NASDNwEAoUBmJ0HZ1f9Gsp678TYaIhyjKgAAiYliJwHZ3f/GbO7mttuM3Vd79zYvdBYtar4bzD2qgoIHANASZHaUWJmdQPmaYLI07vesqfEeUPb3noyBAAAEi63nCaK+3si+TJtmPNbX+z8/UL7G5ZL27zfOC8TplCoqpDVrpEmTjGPuPI6br3yOWyhHVQAAIEV5sbNw4UL96Ec/UseOHdW1a1eNGTNGu3fv9jjnu+++05QpU5Senq4OHTpo7NixOnToUISuOLyCybmYzdcEOq9p5mfePKlLF+OnMW/5nMZCNaoCAAC3qC521q9frylTpuif//ynXn31VR0/flw//elP9c033zScU1BQoBdeeEHPPPOM1q9fr08//VR5vr5Z40iwORez+Rp/5/nK/HzxhfT559Idd0irVnnP5zQVilEVAAA0FlOZnc8++0xdu3bV+vXrdckll6i2tlannXaaVq1apXHjxkmSPvjgA/Xr10+VlZW66KKLTL1vrGV2WpJzaUm+pvHr7cr8kNkBAAQrLjM7tbW1kqQu/1kr2bZtm44fP67c3NyGc/r27auePXuqsrLS5/scO3ZMdXV1Hj+xxGzO5eabjUxN047IDzxg/Ger+RrJ3syPZN+oCgAAfImZYufEiRPKz8/X0KFDdc4550iSDh48qOTkZHXu3Nnj3IyMDB08eNDney1cuFBpaWkNP9nZ2aG8dNuZza88+aT3/jl5eUaOpkcPz/MD5Wsk+zI/jRUXS7NmNS+wHA7jOBPNAQAtETMdlKdMmaL33ntPmzZtavF7zZkzR4WNbifU1dXFVMFjNb/i7p/TuJDJy5NGj27eQTnQ0pMdmR9viouN4aF0UAYA2C0mip2pU6fqxRdf1IYNG5SVldVwvFu3bqqvr9eRI0c87u4cOnRI3bp18/l+bdu2Vdu2bUN5ySE1ebI0c2bgpSw3l8tYosrPNwocd0HjcEjDh1v77GHDjDtAgTI/w4ZZe18puFEVAAAEEtXLWC6XS1OnTtXatWv12muvKScnx+P5Cy64QG3atNG6desaju3evVsff/yxBg8eHO7LDRszOZem3Fma+fOb53gCcffTWb3auBO0eLFxPJjMDwAA4RbVu7EmT56sVatW6bnnntNZZ53VcDwtLU0pKSmSpF//+td66aWXtGLFCnXq1EnTpk2TJG3ZssX058Tabiy3oiKj8LBSuLhlZRlB5UC79EtLpenTPUPJWVnStdcaxU/j49nZRqGTADv/AQBRwOz3d1QXO0lNbx38x2OPPaabbrpJktFUcMaMGVq9erWOHTumUaNGqaSkxO8yVlOxWuxIJyeFr18vlZWZf537v1p/gWR3P52m/wtxv3bNGunUU61lfgAAsEtcFDvhEsvFjlug/jne+OuJE4oZWgAA2Cku++zEOqtzrKzw1z/HF389cezupwMAQKRQ7IRJMHOsrPLVPycQbz1xQtFPBwCASKDYCYNg51gFIy9P2rfPmEt1223mXuOtJ06o+ukAABBuZHYU2sxOsLOfnE7rDf+aaskcrJbO0AIAINTI7EQJs3OsSkpO/l5aahQaI0ZIEyZ4H/lgRkvmYLV0hhYAANGCYifEzM6xcp/n3u7dNBzsHvlgteBpyRyslrwWAIBoERPjImKZ2TlWvXsbd3imT/e+bORr5IMZwc7BaulrAQCIBmR2FD2ZnS1bjCWrQG67TRo5kqIDAJDYyOxECTNzrAoLjfPMbuNesCD4HA8AAImGYicMioulWbOa34VxOIzjxcXG71a3cQeb4wEAIJGwjKXwjYtwz7GqrjYyOpMnN99ubufIBwAA4hmzsSyI5Gyspv10PvtM+p//MZ6z8i9TXi4NHx6SSwQAICqZ/f5mN1YElZYau68abzPPypJmzpRWr/Y/m6opxjYAAOAdxU6EuPvpNL17U1Mj/e530po10qmnSuvWGYHkQBjbAACAdyxjKfzLWO5sjq87N41zOBJjGwAA8Iat51Fs40b/S1Qul7R/v3EeYxsAAGgZip0IMJuvcZ/H2AYAAIJHZicCzOZrGp/H2AYAAIJDsRMBw4YZd2UC5XCGDfM87nCwvRwAAKtYxgoRp1OqqDC2kFdUeM7GIocDAED4UOyEQGmpsYNqxAhpwgTvc6zI4QAAEB5sPZe9W8999c9x37FpWsg07aBMDgcAAHMYF2GBXcWOlf45FDQAALQMfXYiwEr/HAAAEB4UOzay2j8HAACEHsWOjYLpnwMAAEKLYsdG7v45TbeTuyUlSdnZzfvnAACA0KHYsRH9cwAAiD4UOzajfw4AANGFcREhwBwrAACiB8VOiDDHCgCA6MAyFgAAiGsUOwAAIK5R7AAAgLhGsQMAAOIaxQ4AAIhrFDsAACCuUewAAIC4RrEDAADiGsUOAACIa3RQluRyuSRJdXV1Eb4SAABglvt72/097gvFjqSvvvpKkpSdnR3hKwEAAFZ99dVXSktL8/l8kitQOZQATpw4oU8//VQdO3ZUUlJSpC8nKtXV1Sk7O1v79+9Xp06dIn05aIR/m+jEv0v04t8mOgXz7+JyufTVV18pMzNTrVr5TuZwZ0dSq1atlJWVFenLiAmdOnXi/xyiFP820Yl/l+jFv010svrv4u+OjhsBZQAAENcodgAAQFyj2IEpbdu21bx589S2bdtIXwqa4N8mOvHvEr34t4lOofx3IaAMAADiGnd2AABAXKPYAQAAcY1iBwAAxDWKHQAAENcoduDXwoUL9aMf/UgdO3ZU165dNWbMGO3evTvSl4Um7r33XiUlJSk/Pz/SlwJJNTU1uu6665Senq6UlBQNGDBAb775ZqQvK6E5nU7NnTtXOTk5SklJUe/evXXXXXcFnKkE+23YsEFXXnmlMjMzlZSUpLKyMo/nXS6Xbr/9dnXv3l0pKSnKzc1VVVVViz6TYgd+rV+/XlOmTNE///lPvfrqqzp+/Lh++tOf6ptvvon0peE/3njjDf3xj3/UueeeG+lLgaQvv/xSQ4cOVZs2bfS3v/1NO3fu1P33369TTjkl0peW0O677z794Q9/0PLly7Vr1y7dd999Ki4u1u9///tIX1rC+eabb3TeeefpwQcf9Pp8cXGxli1bpoceekhbt25V+/btNWrUKH333XdBfyZbz2HJZ599pq5du2r9+vW65JJLIn05Ce/rr7/W+eefr5KSEi1YsEA//OEPtXTp0khfVkKbPXu2Nm/erI0bN0b6UtDIz372M2VkZOhPf/pTw7GxY8cqJSVFTz75ZASvLLElJSVp7dq1GjNmjCTjrk5mZqZmzJihmTNnSpJqa2uVkZGhFStWaPz48UF9Dnd2YEltba0kqUuXLhG+EkjSlClTdMUVVyg3NzfSl4L/eP755zVo0CBdffXV6tq1qwYOHKhHHnkk0peV8IYMGaJ169bpww8/lCS988472rRpky677LIIXxka27t3rw4ePOjx/2lpaWm68MILVVlZGfT7MggUpp04cUL5+fkaOnSozjnnnEhfTsJ76qmn9NZbb+mNN96I9KWgkY8++kh/+MMfVFhYqN/85jd64403dOuttyo5OVk33nhjpC8vYc2ePVt1dXXq27evHA6HnE6n7r77bk2cODHSl4ZGDh48KEnKyMjwOJ6RkdHwXDAodmDalClT9N5772nTpk2RvpSEt3//fk2fPl2vvvqq2rVrF+nLQSMnTpzQoEGDdM8990iSBg4cqPfee08PPfQQxU4ErVmzRitXrtSqVavUv39/bd++Xfn5+crMzOTfJQGwjAVTpk6dqhdffFHl5eXKysqK9OUkvG3btunw4cM6//zz1bp1a7Vu3Vrr16/XsmXL1Lp1azmdzkhfYsLq3r27zj77bI9j/fr108cffxyhK4IkzZo1S7Nnz9b48eM1YMAAXX/99SooKNDChQsjfWlopFu3bpKkQ4cOeRw/dOhQw3PBoNiBXy6XS1OnTtXatWv12muvKScnJ9KXBEkjR47Ujh07tH379oafQYMGaeLEidq+fbscDkekLzFhDR06tFl7hg8//FA/+MEPInRFkKSjR4+qVSvPrzyHw6ETJ05E6IrgTU5Ojrp166Z169Y1HKurq9PWrVs1ePDgoN+XZSz4NWXKFK1atUrPPfecOnbs2LBmmpaWppSUlAhfXeLq2LFjs9xU+/btlZ6eTp4qwgoKCjRkyBDdc889uuaaa/T666/r4Ycf1sMPPxzpS0toV155pe6++2717NlT/fv319tvv63Fixfr5z//eaQvLeF8/fXX2rNnT8Pve/fu1fbt29WlSxf17NlT+fn5WrBggfr06aOcnBzNnTtXmZmZDTu2guIC/JDk9eexxx6L9KWhiR//+Meu6dOnR/oy4HK5XnjhBdc555zjatu2ratv376uhx9+ONKXlPDq6upc06dPd/Xs2dPVrl071+mnn+767W9/6zp27FikLy3hlJeXe/1eufHGG10ul8t14sQJ19y5c10ZGRmutm3bukaOHOnavXt3iz6TPjsAACCukdkBAABxjWIHAADENYodAAAQ1yh2AABAXKPYAQAAcY1iBwAAxDWKHQAAENcodgAAQFyj2AEQF8rKynTGGWfI4XAoPz8/otdy0003WWptP3/+fP3whz8M2fUAiY5iB0gwvr6IKyoqlJSUpCNHjoT9muzwy1/+UuPGjdP+/ft11113WX59r169tHTpUvsvzISZM2d6DD4EYC8GgQIIq+PHj6tNmza2vufXX3+tw4cPa9SoUcrMzLT1vcOhQ4cO6tChQ6QvA4hb3NkB4NOzzz6r/v37q23bturVq5fuv/9+j+eTkpJUVlbmcaxz585asWKFJGnfvn1KSkrS008/rR//+Mdq166dVq5cqX/961+68sordcopp6h9+/bq37+/XnrpJZ/X8eWXX+qGG27QKaecotTUVF122WWqqqqSZNyR6tixoyTpJz/5iZKSklRRUdHsPVwul+bPn6+ePXuqbdu2yszM1K233ipJGj58uP71r3+poKBASUlJSkpKkuR9eWnp0qXq1atXw+9Op1OFhYXq3Lmz0tPTVVRUpMYjB5944gmlp6fr2LFjHu8zZswYXX/99V4/x3337Xe/+526d++u9PR0TZkyRcePH28458CBA7riiiuUkpKinJwcrVq1KqJ3p4BoRrEDwKtt27bpmmuu0fjx47Vjxw7Nnz9fc+fObShkrJg9e7amT5+uXbt2adSoUZoyZYqOHTumDRs2aMeOHbrvvvv83tm46aab9Oabb+r5559XZWWlXC6XLr/8ch0/flxDhgzR7t27JRnF2YEDBzRkyJBm7/Hss89qyZIl+uMf/6iqqiqVlZVpwIABkqTS0lJlZWXpzjvv1IEDB3TgwAHTf9v999+vFStW6M9//rM2bdqkL774QmvXrm14/uqrr5bT6dTzzz/fcOzw4cP661//qp///Oc+37e8vFzV1dUqLy/X448/rhUrVnj8d3/DDTfo008/VUVFhZ599lk9/PDDOnz4sOnrBhIJy1hAAnrxxRebFRdOp9Pj98WLF2vkyJGaO3euJOnMM8/Uzp07tWjRIt10002WPi8/P195eXkNv3/88ccaO3ZsQ7Fx+umn+3xtVVWVnn/+eW3evLmhiFm5cqWys7NVVlamq6++Wl27dpUkdenSRd26dfP6Ph9//LG6deum3NxctWnTRj179tT/+3//r+F1DodDHTt29Pl6X5YuXao5c+Y0/H0PPfSQXnnllYbnU1JSNGHCBD322GO6+uqrJUlPPvmkevbsqeHDh/t831NOOUXLly+Xw+FQ3759dcUVV2jdunWaNGmSPvjgA/3jH//QG2+8oUGDBkmSHn30UfXp08fStQOJgjs7QAIaMWKEtm/f7vHz6KOPepyza9cuDR061OPY0KFDVVVV1awwCsT9hex26623asGCBRo6dKjmzZund9991+drd+3apdatW+vCCy9sOJaenq6zzjpLu3btMn0NV199tb799ludfvrpmjRpktauXavvv//e0t/RVG1trQ4cOOBxba1bt272906aNEl///vfVVNTI0lasWKFbrrppoblMm/69+8vh8PR8Hv37t0b7tzs3r1brVu31vnnn9/w/BlnnKFTTjmlRX8PEK8odoAE1L59e51xxhkePz169LD8PklJSR75FEkeuZLGn9fYL37xC3300Ue6/vrrtWPHDg0aNEi///3vLX++FdnZ2dq9e7dKSkqUkpKiyZMn65JLLvF6vW6tWrUy9fcFMnDgQJ133nl64okntG3bNr3//vsB7441DXEnJSXpxIkTlj8bAMUOAB/69eunzZs3exzbvHmzzjzzzIY7DqeddppHvqWqqkpHjx419f7Z2dn61a9+pdLSUs2YMUOPPPKIz+v4/vvvtXXr1oZjn3/+uXbv3q2zzz7b0t+UkpKiK6+8UsuWLVNFRYUqKyu1Y8cOSVJycnKzO1annXaaDh486FHwbN++veE/p6WlqXv37h7X9v3332vbtm3NPvsXv/iFVqxYoccee0y5ubnKzs62dO2NnXXWWfr+++/19ttvNxzbs2ePvvzyy6DfE4hnFDsAvJoxY4bWrVunu+66Sx9++KEef/xxLV++XDNnzmw45yc/+YmWL1+ut99+W2+++aZ+9atfmdpWnp+fr1deeUV79+7VW2+9pfLycvXr18/ruX369NHo0aM1adIkbdq0Se+8846uu+469ejRQ6NHjzb996xYsUJ/+tOf9N577+mjjz7Sk08+qZSUFP3gBz+QZPTZ2bBhg2pqavTvf/9bkrFL67PPPlNxcbGqq6v14IMP6m9/+5vH+06fPl333nuvysrK9MEHH2jy5MleexVNmDBBn3zyiR555BG/wWQz+vbtq9zcXN1yyy16/fXX9fbbb+uWW25RSkqK36UxIFFR7ADw6vzzz9eaNWv01FNP6ZxzztHtt9+uO++802P55f7771d2draGDRumCRMmaObMmUpNTQ343k6nU1OmTFG/fv106aWX6swzz1RJSYnP8x977DFdcMEF+tnPfqbBgwfL5XLppZdestSvp3PnznrkkUc0dOhQnXvuufrHP/6hF154Qenp6ZKkO++8U/v27VPv3r112mmnSTLuKpWUlOjBBx/Ueeedp9dff92j2JOMovD666/XjTfeqMGDB6tjx4666qqrmn1+Wlqaxo4dqw4dOljqruzLE088oYyMDF1yySW66qqrNGnSJHXs2FHt2rVr8XsD8SbJ1XRBGgAQEiNHjlT//v21bNky29/7k08+UXZ2tv7xj39o5MiRtr8/EMsodgAgxL788ktVVFRo3Lhx2rlzp84666wWv+drr72mr7/+WgMGDNCBAwdUVFSkmpoaffjhh7Z3qAZiHX12ACDEBg4cqC+//FL33XefLYWOZOwK+81vfqOPPvpIHTt21JAhQ7Ry5UoKHcAL7uwAAIC4RkAZAADENYodAAAQ1yh2AABAXKPYAQAAcY1iBwAAxDWKHQAAENcodgAAQFyj2AEAAHHt/wN6VCdOABRX4wAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(df.Hours, df.Scores, color=\"blue\")\n", + "plt.ylabel(\"Scores\")\n", + "plt.xlabel(\"Hours of studying\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0068030a", + "metadata": {}, + "outputs": [], + "source": [ + "# print(df)\n", + "train, test = train_test_split(df, test_size=0.20, random_state=42)\n", + "# test, evaluate = train_test_split(test, test_size=0.5, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "bf8122b1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MzO1detW9e3bV//4xz/01FNPSTIzNj169Aja4JqbmzVixAjdddddkqQLLrhAb7/9th566CFdf/31AV/35ptvVlFRkev3hoYGCh4ghmVnWzsvK0vKz3efhqqTf5tbsY8VEHkCurNTUFCga665RhkZGUpLS9PYsWMlmdNbw4cPD9rg0tLSdM4557gdGzp0qA4ePChJSk1NlSTV19e7nVNfX+96zpPu3bvrtNNOc/sBELumT/ddbNjt0vDhbTLIqlSOapShZm8TWTablJlpVjQtrjV2rPTTn5qPFDpAeAVU7EyfPl1bt27Vn//8Z23evFldupiXOfPMM4Oa2RkzZoz27t3rduy9997TN7/5TUnSoEGDlJqaqnXr1rmeb2ho0Pbt2zVq1KigjQNAdEtIMLdsaE9RkfTxx22PN8uufN1/8p8J4wBRydEBx48fd7z77ruOEydOdOQyXr366quOrl27Ou68807Hvn37HCtWrHAkJSU5nnzySdc5d999t6NPnz6O5557zvHWW285Jk2a5Bg0aJDjyy+/tPw+x44dc0hyHDt2LBQfA0CEmDvX4bDbHQ5zosr8sdvN4w6Hw7F+vftzLX+u1LOOg8pwP5iZ6XA8+2xYPxMQz6x+fwe09LyxsVGzZs1yBYXfe+89nXnmmZo1a5YGDBigefPmBa0Ye/HFF3XzzTdr3759GjRokIqKijRt2jTX8w6HQwsWLNDDDz+so0eP6nvf+57Kysp01llnWX4Plp4D8aOpyVx1VVVlZnmmT3dfbp6VJa/Lx+0ylHtGpZ66r05dBhDGAcItpHtj5efna/PmzSotLdWPfvQjvfXWWzrzzDP13HPPaeHChXrjjTc6NPjORrEDxDdnT526OmnfPmnhQvN4y/86OmesWFUFRA6r398BrcZau3atnn76aY0cOVK2Fg0lhg0bpiqrazwBIAKUl5srsFoGk/v1Mx9bZngyMsxoDoUOEH0CKnY+/PBD9e/fv83xL774wq34AYBI5uyp0/r+9iefmMduu00aPJjl40C0C2g11ogRI/TXv/7V9buzwHn00UdZBQUgKhhG2546Tg6HOW316KPS1VezfByIdgHd2bnrrrt06aWXavfu3fr66691//33a/fu3dqyZYs2bNgQ7DECgE8tczdW7sRUVrbtqdPSyV0gVFlpFjsAoldAd3a+973v6c0339TXX3+t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DgAAiGkUOwAAIKZR7AAAgJhGsQMAAGIaxQ4AAIhpFDsAACCmUewAAICYRrEDICasXbtW3/rWt2S321VQUBDWsdxwww1+tbZfuHChzj///JCNB4h3FDtAnPH2RVxRUSGbzaajR492+piC4Ve/+pXy8vJUU1OjO+64w+/XZ2VlqbS0NPgDs2DOnDluGx8CCC42AgXQqU6cOKFu3boF9Zqff/65jhw5ookTJyo9PT2o1+4MvXr1Uq9evcI9DCBmcWcHgFfPPvushg0bpu7duysrK0v33nuv2/M2m01r1651O9anTx8tX75cknTgwAHZbDY9/fTT+v73v68ePXpoxYoV+s9//qPLL79cp59+unr27Klhw4bpb3/7m9dxfPrpp/rZz36m008/XUlJSbr00ku1b98+SeYdqd69e0uSfvCDH8hms6mioqLNNRwOhxYuXKiBAweqe/fuSk9P10033SRJGjt2rP7zn/+osLBQNptNNptNkufppdLSUmVlZbl+NwxDRUVF6tOnj/r166fi4mK13HLwiSeeUL9+/XT8+HG361xxxRW67rrrPL6P8+7b7373O6Wlpalfv36aMWOGTpw44Tqnrq5Ol112mRITEzVo0CCtXLkyrHengEhGsQPAox07dujqq6/WlClTtGvXLi1cuFDz5893FTL+mDdvnvLz87Vnzx5NnDhRM2bM0PHjx7Vx40bt2rVL99xzT7t3Nm644Qa9/vrrev7557V161Y5HA79+Mc/1okTJzR69Gjt3btXklmc1dXVafTo0W2u8eyzz+q+++7TH//4R+3bt09r167V8OHDJUnl5eXKyMjQ7bffrrq6OtXV1Vn+bPfee6+WL1+uP//5z9q0aZM++eQTrVmzxvX8VVddJcMw9Pzzz7uOHTlyRH/961/185//3Ot1169fr6qqKq1fv16PP/64li9f7vbv/mc/+5k++OADVVRU6Nlnn9XDDz+sI0eOWB43EE+YxgLi0IsvvtimuDAMw+33pUuXavz48Zo/f74k6ayzztLu3bu1ZMkS3XDDDX69X0FBgXJzc12/Hzx4UJMnT3YVG2eeeabX1+7bt0/PP/+8Nm/e7CpiVqxYoczMTK1du1ZXXXWV+vfvL0nq27evUlNTPV7n4MGDSk1N1YQJE9StWzcNHDhQ3/3ud12vs9vt6t27t9fXe1NaWqqbb77Z9fkeeughvfTSS67nExMTNXXqVD322GO66qqrJElPPvmkBg4cqLFjx3q97umnn65ly5bJbrdryJAhuuyyy7Ru3TpNmzZN7777rv71r3/ptdde04gRIyRJjz76qAYPHuzX2IF4wZ0dIA6NGzdOO3fudPt59NFH3c7Zs2ePxowZ43ZszJgx2rdvX5vCyBfnF7LTTTfdpEWLFmnMmDFasGCB3nrrLa+v3bNnj7p27aqLL77Ydaxfv346++yztWfPHstjuOqqq/Tll1/qzDPP1LRp07RmzRp9/fXXfn2O1o4dO6a6ujq3sXXt2rXN5502bZr++c9/qra2VpK0fPly3XDDDa7pMk+GDRsmu93u+j0tLc1152bv3r3q2rWrLrzwQtfz3/rWt3T66ad36PMAsYpiB4hDPXv21Le+9S23nwEDBvh9HZvN5pZPkeSWK2n5fi398pe/1Pvvv6/rrrtOu3bt0ogRI/T73//e7/f3R2Zmpvbu3auysjIlJiZq+vTpuuSSSzyO16lLly6WPp8vF1xwgc477zw98cQT2rFjh9555x2fd8dah7htNpuam5v9fm8AFDsAvBg6dKg2b97sdmzz5s0666yzXHcczjjjDLd8y759+9TY2Gjp+pmZmfr1r3+t8vJyzZ49W4888ojXcXz99dfavn2769jHH3+svXv36pxzzvHrMyUmJuryyy/XAw88oIqKCm3dulW7du2SJCUkJLS5Y3XGGWfo8OHDbgXPzp07Xf+cnJystLQ0t7F9/fXX2rFjR5v3/uUvf6nly5frscce04QJE5SZmenX2Fs6++yz9fXXX+uNN95wHdu/f78+/fTTgK8JxDKKHQAezZ49W+vWrdMdd9yh9957T48//riWLVumOXPmuM75wQ9+oGXLlumNN97Q66+/rl//+teWlpUXFBTopZdeUnV1tf79739r/fr1Gjp0qMdzBw8erEmTJmnatGnatGmT3nzzTV177bUaMGCAJk2aZPnzLF++XH/605/09ttv6/3339eTTz6pxMREffOb35Rk9tnZuHGjamtr9dFHH0kyV2l9+OGHKikpUVVVlR588EH9/e9/d7tufn6+7r77bq1du1bvvvuupk+f7rFX0dSpU3Xo0CE98sgj7QaTrRgyZIgmTJigG2+8Ua+++qreeOMN3XjjjUpMTGx3agyIVxQ7ADy68MIL9cwzz+ipp57Sueeeq1tvvVW333672/TLvffeq8zMTOXk5Gjq1KmaM2eOkpKSfF7bMAzNmDFDQ4cO1Y9+9COdddZZKisr83r+Y489posuukg/+clPNGrUKDkcDv3tb3/zq19Pnz599Mgjj2jMmDH69re/rX/961964YUX1K9fP0nS7bffrgMHDig7O1tnnHGGJPOuUllZmR588EGdd955evXVV92KPcksCq+77jpdf/31GjVqlHr37q0rr7yyzfsnJydr8uTJ6tWrl1/dlb154oknlJKSoksuuURXXnmlpk2bpt69e6tHjx4dvjYQa2yO1hPSAICQGD9+vIYNG6YHHngg6Nc+dOiQMjMz9a9//Uvjx48P+vWBaEaxAwAh9umnn6qiokJ5eXnavXu3zj777A5f85VXXtHnn3+u4cOHq66uTsXFxaqtrdV7770X9A7VQLSjzw4AhNgFF1ygTz/9VPfcc09QCh3JXBX229/+Vu+//7569+6t0aNHa8WKFRQ6gAfc2QEAADGNgDIAAIhpFDsAACCmUewAAICYRrEDAABiGsUOAACIaRQ7AAAgplHsAACAmEaxAwAAYtr/B8c/eloJo4EMAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure()\n", + "ax1 = fig.add_subplot()\n", + "ax1.scatter(train.Hours, train.Scores, color=\"blue\")\n", + "ax1.scatter(test.Hours, test.Scores, color=\"red\")\n", + "plt.ylabel(\"Scores\")\n", + "plt.xlabel(\"Hours of studying\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "70a01055", + "metadata": {}, + "source": [ + "Find the best fitted line based on distribution of data. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "92f95186", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Coefficients:\t [[9.86089296]]\n", + "Intercept:\t [1.93973905]\n" + ] + } + ], + "source": [ + "reg = linear_model.LinearRegression()\n", + "train_x = np.asanyarray(train[['Hours']])\n", + "train_y = np.asanyarray(train[['Scores']])\n", + "reg.fit(train_x, train_y)\n", + "\n", + "print(\"Coefficients:\\t\", reg.coef_)\n", + "print(\"Intercept:\\t\", reg.intercept_)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a3bb7499", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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TJ3qfwPTpLUDkIAi2sYqKCjQunXr1KlTJ7388st64oknJFk5NqHmyYSioaFBAwcO1B133CFJGjBggD744AM98MADuvrqqyO+b2ZmpjIzM6M1TQAJbuJEacaMxnN2fvMb6ZRT7NtCmKYV4xSNbryBJ60dgMQS0cpOcXGxxo8fr/z8fOXl5WnY0X+qV61apf79+0dtcnl5eTrttNO8xvr27avPPvtMkpSbmytJ2rNnj9c1e/bscT8HABkZ0rRpwa+ZNk1av95/RcflWf1UDWZoncoBJJaIgp2JEydq3bp1+tvf/qa1a9eqRQvrNieddFJUc3aGDBmibdu2eY19+OGHOvHEEyVZycq5ublasWKF+/m6ujqtX79egwYNito8ACS/QHVxHA5rvLQ0cA0cU4Z+qudtniDQAZJBk46e19fXq6qqSr169VLLltEvxrxhwwYNHjxYf/jDH3T55Zfrrbfe0oQJE7Ro0SKNHz9eknVi649//KPX0fP333+fo+cAbAWroFxZaSUje7KrnVO50mSbCkgAoX5/RxTsHDx4UNdff707UfjDDz/USSedpOuvv17dunXTrFmzIp+5jxdeeEE33nijtm/frp49e2ratGmaMGGC+3nTNHXzzTdr0aJF2rdvn84991yVl5frlFNOCfk9CHYASFZOT48eVjKy7ZaVpO4FJrVygAQR02BnypQpWrt2rcrKynTBBRfo/fff10knnaRnn31Wt9xyi959990mTb65EewA6c2zps727dKcm/0DnZd0oS42XuIIOZBAYlpUcPny5XryySf1wx/+UIZHnYl+/fppR6gFLQAgAVRUSFOmHEtMDtTyoaBAerqMQAdIRhEFO1988YW6dOniN/7NN994BT8AkMhcNXVMM3Cn8qVLTK0MVkEZQMKL6DTWwIED9eKLL7p/dwU4Dz30EKegACQFp9Na0QkU6MzUXepeYOryy62aOQQ6QPKKaGXnjjvu0IUXXqgtW7boyJEjuvfee7Vlyxa9+eabeuONN6I9RwBoVMi9rI5avVraudOUafPffO4GntXWdZy8ApJbRCs75557rt577z0dOXJE/fv31z//+U916dJF69at01lnnRXtOQJAUCH1svIxbLgRPNA5KlDtHQDJI+yVncOHD+s3v/mNZs+e7dWUEwDiwTPvxpOrl5Xt6Smb3MJCvaoVKvQbz8uL4mQB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kE2aNEkffPCB1qxZE++ppL3q6mpNmTJFr776qlq3bh3v6cBDQ0ODBg4cqDvuuEOSNGDAAH3wwQd64IEHCHbi6KmnntLjjz+uJUuWqF+/ftq0aZOKi4vVtWtX/l7SANtYCMnkyZP1wgsvaOXKlcrPz4/3dNLexo0btXfvXp155plq2bKlWrZsqTfeeEMLFixQy5Yt5XQ64z3FtJWXl6fTTjvNa6xv37767LPP4jQjSNLMmTM1a9YsjR07Vv3799dVV12lqVOnat68efGeGjzk5uZKkvbs2eM1vmfPHvdzkSDYQVCmaWry5MlatmyZXn/9dfXs2TPeU4KkESNGaPPmzdq0aZP7Z+DAgRo/frw2bdokh8MR7ymmrSFDhviVZ/jwww914oknxmlGkKSDBw+qRQvvrzyHw6GGhoY4zQh2evbsqdzcXK1YscI9VldXp/Xr12vQoEER35dtLAQ1adIkLVmyRM8++6zat2/v3jPNzs5WVlZWnGeXvtq3b++XN9W2bVt17tyZfKo4mzp1qgYPHqw77rhDl19+ud566y0tWrRIixYtivfU0toll1yi22+/Xd27d1e/fv307rvvav78+frlL38Z76mlnQMHDuijjz5y/15VVaVNmzapU6dO6t69u4qLizV37lz17t1bPXv21OzZs9W1a1f3ia2ImEAQkmx/Hn744XhPDT5+9KMfmVOmTIn3NGCa5vPPP2+efvrpZmZmptmnTx9z0aJF8Z5S2qurqzOnTJlidu/e3WzdurV50kknmf/3f/9nHjp0KN5TSzsrV660/V65+uqrTdM0zYaGBnP27NlmTk6OmZmZaY4YMcLctm1bk96TOjsAACClkbMDAABSGsEOAABIaQQ7AAAgpRHsAACAlEawAwAAUhrBDgAASGkEOwAAIKUR7AAAgJRGsAMgJSxfvlwnn3yyHA6HiouL4zqXa665JqzS9rfccou+//3vx2w+QLoj2AHSTKAv4srKShmGoX379jX7nKLhN7/5jcaMGaPq6mrddtttYb++R48eKisri/7EQjBjxgyvxocAootGoACa1eHDh9WqVauo3vPAgQPau3evRo4cqa5du0b13s2hXbt2ateuXbynAaQsVnYABPTMM8+oX79+yszMVI8ePXT33Xd7PW8YhpYvX+411rFjRy1evFiS9Mknn8gwDD355JP60Y9+pNatW+vxxx/Xp59+qksuuUTHHXec2rZtq379+umll14KOI+vv/5aP//5z3XcccepTZs2uvDCC7V9+3ZJ1opU+/btJUnnn3++DMNQZWWl3z1M09Qtt9yi7t27KzMzU127dtUNN9wgSRo2bJg+/fRTTZ06VYZhyDAMSfbbS2VlZerRo4f7d6fTqWnTpqljx47q3LmzSkpK5Nly8NFHH1Xnzp116NAhr/tceumluuqqq2zfx7X69qc//Ul5eXnq3LmzJk2apMOHD7uv2bVrly666CJlZWWpZ8+eWrJkSVxXp4BERrADwNbGjRt1+eWXa+zYsdq8ebNuueUWzZ492x3IhGPWrFmaMmWKtm7dqpEjR2rSpEk6dOiQVq1apc2bN+vOO+8MurJxzTXX6O2339Zzzz2ndevWyTRN/eQnP9Hhw4c1ePBgbdu2TZIVnO3atUuDBw/2u8czzzyje+65R3/5y1+0fft2LV++XP3795ckVVRUKD8/X7feeqt27dqlXbt2hfzZ7r77bi1evFh/+9vftGbNGn311VdatmyZ+/nLLrtMTqdTzz33nHts7969evHFF/XLX/4y4H1XrlypHTt2aOXKlXrkkUe0ePFir//tf/7zn+vzzz9XZWWlnnnmGS1atEh79+4Ned5AOmEbC0hDL7zwgl9w4XQ6vX6fP3++RowYodmzZ0uSTjnlFG3ZskV33XWXrrnmmrDer7i4WEVFRe7fP/vsM40ePdodbJx00kkBX7t9+3Y999xzWrt2rTuIefzxx1VQUKDly5frsssuU5cuXSRJnTp1Um5uru19PvvsM+Xm5qqwsFCtWrVS9+7d9YMf/MD9OofDofbt2wd8fSBlZWW68cYb3Z/vgQce0CuvvOJ+PisrS+PGjdPDDz+syy67TJL02GOPqXv37ho2bFjA+x533HFauHChHA6H+vTpo4suukgrVqzQhAkT9J///EevvfaaNmzYoIEDB0qSHnroIfXu3TusuQPpgpUdIA0NHz5cmzZt8vp56KGHvK7ZunWrhgwZ4jU2ZMgQbd++3S8waozrC9nlhhtu0Ny5czVkyBDdfPPNev/99wO+duvWrWrZsqXOOecc91jnzp116qmnauvWrSHP4bLLLtO3336rk046SRMmTNCyZct05MiRsD6Hr9raWu3atctrbi1btvT7vBMmTNA///lP1dTUSJIWL16sa665xr1dZqdfv35yOBzu3/Py8twrN9u2bVPLli115plnup8/+eSTddxxxzXp8wCpimAHSENt27bVySef7PXTrVu3sO9jGIZXfookr7wSz/fz9Otf/1off/yxrrrqKm3evFkDBw7Un//857DfPxwFBQXatm2bysvLlZWVpYkTJ+q8886zna9LixYtQvp8jRkwYIDOOOMMPfroo9q4caP+/e9/N7o65pvEbRiGGhoawn5vAAQ7AALo27ev1q5d6zW2du1anXLKKe4VhxNOOMErv2X79u06ePBgSPcvKCjQb3/7W1VUVGj69Ol68MEHA87jyJEjWr9+vXvsv//9r7Zt26bTTjstrM+UlZWlSy65RAsWLFBlZaXWrVunzZs3S5IyMjL8VqxOOOEE7d692yvg2bRpk/vP2dnZysvL85rbkSNHtHHjRr/3/vWvf63Fixfr4YcfVmFhoQoKCsKau6dTTz1VR44c0bvvvuse++ijj/T1119HfE8glRHsALA1ffp0rVixQrfddps+/PBDPfLII1q4cKFmzJjhvub888/XwoUL9e677+rtt9/Wb3/725COlRcXF+uVV15RVVWV3nnnHa1cuVJ9+/a1vbZ3794aNWqUJkyYoDVr1ui9997TlVdeqW7dumnUqFEhf57Fixfrr3/9qz744AN9/PHHeuyxx5SVlaUTTzxRklVnZ9WqVaqpqdGXX34pyTql9cUXX6i0tFQ7duzQfffdp3/84x9e950yZYr++Mc/avny5frPf/6jiRMn2tYqGjdunHbu3KkHH3wwaGJyKPr06aPCwkJde+21euutt/Tuu+/q2muvVVZWVtCtMSBdEewAsHXmmWfqqaee0hNPPKHTTz9dc+bM0a233uq1/XL33XeroKBAQ4cO1bhx4zRjxgy1adOm0Xs7nU5NmjRJffv21QUXXKBTTjlF5eXlAa9/+OGHddZZZ+niiy/WoEGDZJqmXnrppbDq9XTs2FEPPvighgwZou9973t67bXX9Pzzz6tz586SpFtvvVWffPKJevXqpRNOOEGStapUXl6u++67T2eccYbeeustr2BPsoLCq666SldffbUGDRqk9u3b62c/+5nf+2dnZ2v06NFq165dWNWVA3n00UeVk5Oj8847Tz/72c80YcIEtW/fXq1bt27yvYFUY5i+G9IAgJgYMWKE+vXrpwULFkT93jt37lRBQYFee+01jRgxIur3B5IZwQ4AxNjXX3+tyspKjRkzRlu2bNGpp57a5Hu+/vrrOnDggPr3769du3appKRENTU1+vDDD6NeoRpIdtTZAYAYGzBggL7++mvdeeedUQl0JOtU2O9//3t9/PHHat++vQYPHqzHH3+cQAewwcoOAABIaSQoAwCAlEawAwAAUhrBDgAASGkEOwAAIKUR7AAAgJRGsAMAAFIawQ4AAEhpBDsAACCl/X9OXRTvxFOFyQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(train.Hours, train.Scores, color=\"blue\")\n", + "plt.plot(train_x, reg.coef_[0][0]*train_x + reg.intercept_[0], \"-r\")\n", + "# y = theta1 x + theta0\n", + "plt.ylabel(\"Scores\")\n", + "plt.xlabel(\"Hours of studying\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "42079719", + "metadata": {}, + "source": [ + "Testing model based on Test data. Measure the R2 and MSE." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e109f595", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean absolute error: 3.17\n", + "Residual sum of squares (MSE): 0.41\n", + "R2-score: 0.97\n" + ] + } + ], + "source": [ + "test_x = np.asanyarray(test[['Hours']])\n", + "test_y = np.asanyarray(test[['Scores']])\n", + "\n", + "test_y_ = reg.predict(test_x)\n", + "\n", + "print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y_ - test_y)))\n", + "print(\"Residual sum of squares (MSE): %.2f\" % np.mean(test_y_ - test_y)**2)\n", + "print(\"R2-score: %.2f\" % r2_score(test_y_, test_y))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "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.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/regression/simple_linear_regression/simple_regression.md b/regression/simple_linear_regression/simple_regression.md new file mode 100644 index 0000000..030c201 --- /dev/null +++ b/regression/simple_linear_regression/simple_regression.md @@ -0,0 +1,289 @@ +# Simple Regression + +Configure the project. Indeed you create a dataset in csv format. + + +```python +! rm -rf *.csv +! unzip ./dataset/archive.zip +! head -n 1 *.csv | head -n 2 | tail -n 1 > data.csv && for file in *.csv; do (tail -n +2 "$file"; echo) >> data.csv; done && sed -i '/^$/d' data.csv +``` + + Archive: ./dataset/archive.zip + inflating: score.csv + inflating: score_updated.csv + + +Import needed libraries + + +```python +import matplotlib.pyplot as plt +import pandas as pd +import numpy as np +import pylab as pl +from sklearn.model_selection import train_test_split +from sklearn import linear_model +from sklearn.metrics import r2_score + +%matplotlib inline +``` + +Read data from data.csv using pandas and store in data frame structure. Also shuffle data to have uniform distribution. + + +```python +df = pd.read_csv("data.csv") +df.head() +df = df.sample(frac=1.0, random_state=42).reset_index(drop=True) +df.head() +``` + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HoursScores
07.469
13.835
23.530
31.619
45.147
+
+ + + + +```python +# summarize data +df.describe() +``` + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HoursScores
count121.000000121.000000
mean5.21487653.495868
std2.49918924.988705
min1.00000012.000000
25%3.00000030.000000
50%5.10000054.000000
75%7.40000075.000000
max9.80000099.000000
+
+ + + +Print the histogram chart of data + + +```python +viz = df[["Hours", "Scores"]] +viz.hist() +plt.show() +``` + + + +![png](simple_regression_files/simple_regression_9_0.png) + + + +Print scatter chart of data to recognize the patterns of data. Based on the below chart we must answer to this question "Is Linear Simple Regression good or not?" + + +```python +plt.scatter(df.Hours, df.Scores, color="blue") +plt.ylabel("Scores") +plt.xlabel("Hours of studying") +plt.show() +``` + + + +![png](simple_regression_files/simple_regression_11_0.png) + + + + +```python +# print(df) +train, temp = train_test_split(df, test_size=0.25, random_state=42) +test, evaluate = train_test_split(temp, test_size=0.5, random_state=42) +``` + + +```python +fig = plt.figure() +ax1 = fig.add_subplot() +ax1.scatter(train.Hours, train.Scores, color="blue") +ax1.scatter(test.Hours, test.Scores, color="red") +ax1.scatter(evaluate.Hours, evaluate.Scores, color="green") +plt.ylabel("Scores") +plt.xlabel("Hours of studying") +plt.show() +``` + + + +![png](simple_regression_files/simple_regression_13_0.png) + + + +Find the best fitted line based on distribution of data. + + +```python +reg = linear_model.LinearRegression() +train_x = np.asanyarray(train[['Hours']]) +train_y = np.asanyarray(train[['Scores']]) +reg.fit(train_x, train_y) + +print("Coefficients:\t", reg.coef_) +print("Intercept:\t", reg.intercept_) +``` + + Coefficients: [[9.86801899]] + Intercept: [1.90944816] + + + +```python +plt.scatter(train.Hours, train.Scores, color="blue") +plt.plot(train_x, reg.coef_[0][0]*train_x + reg.intercept_[0], "-r") +# y = theta1 x + theta0 +plt.ylabel("Scores") +plt.xlabel("Hours of studying") +``` + + + + + Text(0.5, 0, 'Hours of studying') + + + + + +![png](simple_regression_files/simple_regression_16_1.png) + + + +Testing model based on Test data. Measure the R2 and MSE. + + +```python +test_x = np.asanyarray(test[['Hours']]) +test_y = np.asanyarray(test[['Scores']]) + +test_y_ = reg.predict(test_x) + +print("Mean absolute error: %.2f" % np.mean(np.absolute(test_y_ - test_y))) +print("Residual sum of squares (MSE): %.2f" % np.mean(test_y_ - test_y)**2) +print("R2-score: %.2f" % r2_score(test_y_, test_y)) +``` + + Mean absolute error: 2.95 + Residual sum of squares (MSE): 1.62 + R2-score: 0.97 + diff --git a/regression/simple_linear_regression/simple_regression_files/simple_regression_11_0.png b/regression/simple_linear_regression/simple_regression_files/simple_regression_11_0.png new file mode 100644 index 0000000..1c0b5cf Binary files /dev/null and b/regression/simple_linear_regression/simple_regression_files/simple_regression_11_0.png differ diff --git a/regression/simple_linear_regression/simple_regression_files/simple_regression_13_0.png b/regression/simple_linear_regression/simple_regression_files/simple_regression_13_0.png new file mode 100644 index 0000000..80ff701 Binary files /dev/null and b/regression/simple_linear_regression/simple_regression_files/simple_regression_13_0.png differ diff --git a/regression/simple_linear_regression/simple_regression_files/simple_regression_16_1.png b/regression/simple_linear_regression/simple_regression_files/simple_regression_16_1.png new file mode 100644 index 0000000..776262d Binary files /dev/null and b/regression/simple_linear_regression/simple_regression_files/simple_regression_16_1.png differ diff --git a/regression/simple_linear_regression/simple_regression_files/simple_regression_9_0.png b/regression/simple_linear_regression/simple_regression_files/simple_regression_9_0.png new file mode 100644 index 0000000..26d9c4b Binary files /dev/null and b/regression/simple_linear_regression/simple_regression_files/simple_regression_9_0.png differ