{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", "
\n", "

Ekstrakcja informacji

\n", "

7. Regresja liniowa [ćwiczenia]

\n", "

Jakub Pokrywka (2021)

\n", "
\n", "\n", "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Regresja liniowa" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## import bibliotek" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "from pathlib import Path\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn.linear_model import LinearRegression\n", "plt.rcParams['figure.figsize'] = [10, 5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zbiór \n", "\n", "https://git.wmi.amu.edu.pl/kubapok/mieszkania2-below1m-public" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ładowanie zbioru train" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "DATA_DIR = Path('/home/kuba/Syncthing/przedmioty/2020-02/ISI/zajecia7_regresja_liniowa/mieszkania2')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "with open(DATA_DIR / 'names') as f_names:\n", " names = f_names.read().rstrip('\\n').split('\\t')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "mieszkania_train = pd.read_csv(DATA_DIR/'train/in.tsv', sep ='\\t', names=names)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
isNewroomsfloorlocationsqrMetres
0False31Centrum78
1False32Sołacz62
2False30Sołacz15
3False40Sołacz14
4False30Sołacz15
\n", "
" ], "text/plain": [ " isNew rooms floor location sqrMetres\n", "0 False 3 1 Centrum 78\n", "1 False 3 2 Sołacz 62\n", "2 False 3 0 Sołacz 15\n", "3 False 4 0 Sołacz 14\n", "4 False 3 0 Sołacz 15" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mieszkania_train.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "with open(DATA_DIR/'train'/'expected.tsv','r') as train_exp_f:\n", " Y_train = np.array([float(x.rstrip('\\n')) for x in train_exp_f.readlines()])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([476118., 459531., 411557., ..., 320000., 364000., 209000.])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y_train" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "mieszkania_train['price'] = Y_train" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "X_train = mieszkania_train['sqrMetres'].to_numpy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Wizualizacja danych" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
isNewroomsfloorlocationsqrMetresprice
0False31Centrum78476118.0
1False32Sołacz62459531.0
2False30Sołacz15411557.0
3False40Sołacz14496416.0
4False30Sołacz15406032.0
.....................
1652True20Grunwald51299000.0
1653True22Centrum53339000.0
1654True34Stare65320000.0
1655True31Nowe67364000.0
1656True33Grunwald50209000.0
\n", "

1657 rows × 6 columns

\n", "
" ], "text/plain": [ " isNew rooms floor location sqrMetres price\n", "0 False 3 1 Centrum 78 476118.0\n", "1 False 3 2 Sołacz 62 459531.0\n", "2 False 3 0 Sołacz 15 411557.0\n", "3 False 4 0 Sołacz 14 496416.0\n", "4 False 3 0 Sołacz 15 406032.0\n", "... ... ... ... ... ... ...\n", "1652 True 2 0 Grunwald 51 299000.0\n", "1653 True 2 2 Centrum 53 339000.0\n", "1654 True 3 4 Stare 65 320000.0\n", "1655 True 3 1 Nowe 67 364000.0\n", "1656 True 3 3 Grunwald 50 209000.0\n", "\n", "[1657 rows x 6 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mieszkania_train" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAFICAYAAAAYvikoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABISklEQVR4nO3dfXwV1b0v/s834UEeAkGDQQlCgIBEVJTUSilWW3w6cMQe5dxaK9aHek89pxe19R49cKmHC6ft9fyq9vyK/rxUK31SsRUsaK148EApWkNFnlJIJFDCQwAhECBIJOv3x8zerD3JTNaezOyZvffn/XrxGpK99+y110wy36z1ne8SpRSIiIiIKLMKom4AERERUT5iEEZEREQUAQZhRERERBFgEEZEREQUAQZhRERERBFgEEZEREQUgawMwkTkORHZLyKbDJ//9yKyRUQ2i8gvw24fERERUWckG+uEichVAI4BWKSUGtvJcysAvAzgi0qpwyJyrlJqfybaSUREROQmK0fClFKrABzSvyciI0TkdyKyTkRWi8iF9kPfAPBjpdRh+7UMwIiIiChyWRmEuXgWwLeUUuMBfAfAAvv7owCMEpE1IvKuiNwQWQuJiIiIbN2ibkAQRKQvgM8BWCwiiW/3tLfdAFQAuBpAGYBVInKxUqopw80kIiIiSsqJIAzWiF6TUmpcB481AHhPKdUKoF5EtsEKyt7PYPuIiIiIUuTEdKRS6iisAGs6AIjlUvvhJbBGwSAiJbCmJ7dH0EwiIiKipKwMwkTkVwDWAhgtIg0icg+A2wHcIyIfAtgMYJr99DcBfCwiWwCsBPCwUurjKNpNRERElJCVJSqIiIiIsl1WjoQRERERZTsGYUREREQRyLq7I0tKStSwYcOibgYRERFRp9atW3dQKTWwo8eyLggbNmwYqquro24GERERUadEZKfbY5yOJCIiIooAgzAiIiKiCDAIIyIiIooAgzAiIiKiCDAIIyIiIooAgzAiIiKiCIQWhInIcyKyX0Q2uTwuIvIjEakTkQ0icnlYbSEiIiKKmzBHwn4K4AaPx28EUGH/uw/A0yG2hYiIiChWQgvClFKrABzyeMo0AIuU5V0AxSJyXljtISIiIoqTKHPCBgPYpX3dYH+PiIhs9QePY87STag/eDzqphBRwLIiMV9E7hORahGpPnDgQNTNISLKmOfX1GPR2p14fk191E0hooBFGYTtBjBE+7rM/l47SqlnlVJVSqmqgQM7XAMzK/EvXKLctrr2AK5/YhVW1/r/4/GuieWYMWEo7ppYHmDLiCgOogzCXgMww75L8koAR5RSeyNsT8bxL1yi3DZvWQ22NjZj3rIa3/soL+mDudPGorykT4AtI6I46BbWjkXkVwCuBlAiIg0AvgugOwAopZ4B8DqAvwFQB+AEgLvCaktcJf6y5V+4RLlp9tQxmLesBrOnjom6KUQUQ6KUiroNaamqqlLV1dVRN4OIiIioUyKyTilV1dFjWZGYT0REwWNeKlG0GIQREeUp5qUSRSu0nDAiIoo35qUSRYtBGBFRnkrceUlE0eB0JBEREVEEGIQRERERRYBBGBEREVEEGIQRERERRYBBGBFRjDjXmwxi/UkiiicGYUREMeJcbzKI9SeJKJ4YhBERxcjsqWMwurQoud6k82siyh1cO5KIiIgoJFw7koiIiChmGIQRERERRYBBGBEREVEEGIQREeWR+oPHMWfpJtQfPB51U4jyHoMwIqI88vyaeixauxPPr6mPuilEea9b1A0gIqLMuWtiecqWiKLDIIyIKI+Ul/TB3Gljo24GEYHTkURERESRYBBGRLHGRHIiylUMwogo1phITkS5ikEYEcXaXRPLMWPCUCaSI/6jgplsX9z7gsgEgzAiirVEInl5SZ+omxK5uI8KZrJ9ce8LIhO8O5KIKEvEvbxEJtsX974gMiFKqajbkJaqqipVXV0ddTOIKEPqDx7H82vqcdfEco6GEVHWEZF1Sqmqjh7jdCQRxRqnnYgoV3E6kohijdNORJSrGIQRUayxwjsR5SpORxIRERFFgEEYERERUQQYhBERERFFgEEYERERUQQYhBERERFFgEEYEaUt39btC+Pz5lsfElF7DMKIKMk0MMi3AqphfN5860Miao91wogoKREYAPCszZVvBVTD+Lz51odE1B7XjiSiJK7TSEQULK+1IzkSRkRJrE5PRJQ5zAkjIiIiigCDMCIiIqIIMAgjIkoTy0sQURAYhBERpYnlJYgoCEzMJyJKE8tLEFEQOBJGRJSmxF2kLONBpjiFHT9xOCYMwoiIiELGKez4icMxCXU6UkRuAPAUgEIAC5VS33c8fgGAFwAU2895RCn1ephtIiIiyjROYcdPHI5JaBXzRaQQwDYA1wJoAPA+gNuUUlu05zwL4AOl1NMiUgngdaXUMK/9smI+ERERZQuvivlhTkdeAaBOKbVdKXUKwIsApjmeowD0s//fH8CeENtDREREFBthBmGDAezSvm6wv6d7DMDXRKQBwOsAvhVie6iL4pDESJnD431GtvVFtrWXKF9FnZh/G4CfKqXKAPwNgJ+JSLs2ich9IlItItUHDhzIeCPJEockRsocHu8zsq0vsq29RPkqzMT83QCGaF+X2d/T3QPgBgBQSq0VkbMAlADYrz9JKfUsgGcBKycsrAaTtzgkMVLm8HifkW19kW3tJcpXYSbmd4OVmP8lWMHX+wC+qpTarD3nDQAvKaV+KiJjALwNYLDyaBQT84mIiChbRJKYr5T6FMA/AXgTQA2Al5VSm0VkrojcZD/t2wC+ISIfAvgVgK97BWBEREREuSLUOmF2za/XHd+bo/1/C4CJYbaBiIiIKI6iTszPGbwbiSj78Oc2XOxfIm8MwgLCu5GIsg9/bsPF/iXyFup0ZD7h3UgUZ6trD2DeshrMnjoGkyoGRt2c2ODPbbjYv9GrP3gcz6+px10Ty7ngfAyFdndkWHh3JFH6rn9iFbY2NmN0aRHefPCqqJtDRBkyZ+kmLFq7EzMmDMXcaWOjbk5e8ro7kiNhRHlg9tQxyZEwIsofHI2MN46EEREREYUkqgW8iYhyAu/yI6IwMAij2OMFkKLGu/yIKAwMwij2eAGkqN01sRwzJgzNibwa/lETDfY7dYRBGMVeHC+A/IUab0Efn/KSPpg7bWxO3OLPP2qiwX6njvDuSIq9xAUwThK/UAHErm3E4+OFd8tFg/1OHWEQRuQDf6HGG4+Puzj+UZMP2O/UEZaoICIiIgoJS1QQERERxQyDsAgxuZuIiCh/MQiLEO+WISIiyl9MzI8Qk4eJskP9weN4fk097ppYnhNlKogoHjgSFqFcqj1ElMuCGLVm+gEROTEII6KcE3TAE0TB4LDTD1bXHsD1T6zC6toDoeyfiILHIIyIck7QAY9z1NpPkBf2yg/zltVga2Mz5i2rCWX/RBQ8BmGUMzgSQAlhBzx+gryw0w9mTx2D0aVFmD11TCj7J6LgsVgr5Yzrn1iFrY3NGF1ahDcfvCrq5lAOY6I+EZlisVbKC9k8EhBl0jYTxtOnj2qx/4jILwZhlDMmVQzEmw9ehUkVA6NuStqirBnn9t4MLsyw3h8R+cUgLEJBXOR4ocwNzhymTB5Xt/wpBhdmws4/yyT+PiHKLBZrjVDiIgcAc6eNjWwfFL3E9FZCJo+r870TWEzYjFv/ZSP+PiHKLAZhEQriIscLZW6Kw3HNpeCCzMThvCPKJ7w7koiIiCgkvDuSiIiIKGYYhBERERFFgEEYEWUN3r1HRLmEQRgRZQ2WzSCiXMK7I4koa/DuPSLKJRwJI6KsEfYi2LmC07bZhccrfzEII4qh1bUHcP0Tq7C69kDUTaEsxGnb7MLjlb8YhBFp9OAnyr9O5y2rwdbGZsxbVpPx9yZLHEcnTNuUS0sp5QMer/zFIIxIowc/Uf51OnvqGIwuLcLsqWMy/t5xE1UwFMfRCdM2BT1tG8eANJdwmj1/MTGfSDN76hjMW1aD2VPHoGxAbwDRJIGXDeiNzw4/O9mGfBbVeoZxvAkgqjZxTUmicHDZIsoL9QeP4/k19bhrYnlW/LU5Z+kmLFq7EzMmDM3qi14Q/Z5txy4X8RgQ+cdliyjvxXFqyUtXc0SCmD4KYh9++11/b07VRI/HgCgcnI6kvBDHqSUviYueX0FMHwWxD7/9zukvIsoHDMIoL3Q1qMk2QQSdQezDb79nW9BMROQHc8KIiIiIQsKcMCIiIqKYYRBGFENR1WViPajMcetr5/fjUkCYiILHIIwohqK6mzPb7iLNZm597fx+XAoIE1HwQk3MF5EbADwFoBDAQqXU9zt4zt8DeAyAAvChUuqrYbaJKBtElZieyffN99pTbn3t/H5cCggTUfBCS8wXkUIA2wBcC6ABwPsAblNKbdGeUwHgZQBfVEodFpFzlVL7vfbLxHyi3JArBWmJiLxElZh/BYA6pdR2pdQpAC8CmOZ4zjcA/FgpdRgAOgvAKHxR5pww3yW/cNFiIsp3YQZhgwHs0r5usL+nGwVglIisEZF37elLilCUOSfMdzkjDgFp2G0wrcJu2g79eXHov3RkW3uJKBhRF2vtBqACwNUAygCsEpGLlVJN+pNE5D4A9wHABRdckOEm5pcoi2SyQOcZT63YhiXr9+BoSytmTh4VSe5UXKrWm7ZDfx6AWLTdNO8tLn1NRJkVZhC2G8AQ7esy+3u6BgDvKaVaAdSLyDZYQdn7+pOUUs8CeBawcsJCazFFWlk+36ram4rqAh2XoNi0HR09L+q2mx67uPQ1EWVWmEHY+wAqRKQcVvD1FQDOOx+XALgNwPMiUgJrenJ7iG0iygozJ49Cv17dIw0osi0odrY3yLb7vZPTNLjKtr7OFfl+hy5FL7ScMKXUpwD+CcCbAGoAvKyU2iwic0XkJvtpbwL4WES2AFgJ4GGl1MdhtYmix9yXjjn7Rc+XMs2dylVxyBX024agjx1/foIVh3OL8pvxSJiIDAVQoZRaISK9AHRTSjV7vUYp9TqA1x3fm6P9XwF4yP5HeYC5Lx1jv7iLw1RdHNoA8DwJWlyOK+UvozphIvINWInxZyulRtj1vZ5RSn0p7AY6sU5Ydov78P/q2gPJwpiTKgZm7H3j3i8ULtPjz/OEKPt41QkzDcLWw6r79Z5S6jL7exuVUhcH2VATDMIoTNc/sQpbG5sxurQIbz54VdTNoTzBwrVEuSuIYq2f2AVXEzvsBmuZISLf4pjfMnvqGIwuLcLsqWMibUcc+yafhX08WLiWKD+ZBmH/JSL/AqCXiFwLYDGA34bXLMoHcUmK1S+wZQN647PDz06u0ReVuPQNWcI+Hvl+8wVRvjJNzH8EwD0ANgL477CS7ReG1SjKD3FJio1jkc+49A1Zrq0sxXvbD+HaytKom0JEOcQ0COsF4Dml1P8Fkotz9wJwIqyGUe6LS20kPeBpOHyiyxfbIJKn3fom7MRsJn537K0tjdja2Iy3tjRm9IYNIsptptORb8MKuhJ6AVgRfHPyC/N+4kGfCtIvtn6FOXUV9rQYp0E7xpwtIgqD6UjYWUqpY4kvlFLHRCTapJkcwJo/8RPENGCYU4lhT1NyGrRjcRm1JaLcYjoSdlxELk98ISLjAbSE06T8wb+uc5NXkrXp6Kfb88JO4Paz/ziO6MaxTXG0YGUdRs16AwtW1mX0fXl8iCymQdgDABaLyGoR+QOAl2AtSURdwDui4icu031xnBZ0u3DGsa1xbFMcPbmiFqdOt+HJFbUZfV8eHyKL0XSkUup9EbkQwGj7W1uVUq3hNYsoGqbTcWEv6BzHaUG36fM4tjWObYqjByZX4MkVtXhgckVG35fHh8jiWTFfRL6olPpPEfm7jh5XSv0mtJa5YMV8ioN8rHDOOycpgecCkbmuVMz/gr392w7+TQ2shURZxiufb3XtAVz/xCqsrj1gvD/THBk/+w4Kp88pIQ7Ticwro1zgGYQppb4rIgUA3lBK3eX4d3eG2kg5JFd+cXoFJPOW1WBrYzPmLasx3p/pRc2572zqz2xqa7bLh2WW4hAIEnVVp4n5Sqk2AP8zA22hPJAPvzj9rD9pelFz7jub+jPKtuZbABhEX3v1WRxGReMQCBJ1lWmdsBUi8h1Yd0UmfyKVUodCaRXlrHxIyJ1UMRBvPpheVXXTOlTOfYfZn0Hn/UR57E1r8uVKrpOzr/18rrjXMWTtNsoFpkHYfwOgANzv+P7wYJtDuS7uvzgXrKxL3i12/zUjo25Op8Lsz6ADlyiPvWkAGPfAw5Szr/18rnz4g4koaqZBWCWsAOzzsIKx1QCeCatRRFGNSOh1k7IhCAua3u+moylPrdiGJev34GhLK578ymWu+4tyZMk0AMzVwMPP54r7H0xEucC0WOsLAMYA+BGA/4AVlL0QVqOIosofemByBXoUFmS8blJc6P3uzPvxc0yyKWcNCD7XKS65aHHI4QpaXPqWqCtMR8LGKqUqta9XisiWMBpEBEQ3InH/NSONRsDiMsITNK9+d3vslvFlqNnbjFvGl6W1v3zgZxpwde0BzFtWg9lTx2BSRXq5hfkkV6aOKb+ZjoT9WUSuTHwhIp8FwIqpIfLzV14u/WUY97/coxrhCfsYe/W722Mv/HEHtjY244U/7khrf/nAzx18fkqc5CPeHUm5wDQIGw/gjyKyQ0R2AFgL4DMislFENoTWujyWD1M/2SyqC0Acj/Ff9h1N2ZrKpT8a3PgJQv2UOMlH+R7gU24wnY68IdRWZIlMTkH5mcbJl6mfrh6HII5jVEnLXsc4qinSCwf1Q8Phk7hwUL+0XqdPJ/UoLMBza+px98RyzJ5a2ckr0xeH6WPTNvgpcZKP4jJtG4dzi7KX0UiYUmqn17+wGxkXmRyF8PNXXrb/ZWg6MtLV4xDH0SRTzmOs99n85VuwaO1OzF8eTLqm6fGYNaUSMyYMxawp6QVP+mjic2vq0aaA50I6JnE45uarImzB8EeXY94y6zguWFmHUbPewIKVdb7fOxdHHeMybRuHc4uyl+l0JIE5CGF7asU2LFq7E0+t2Ob5vK4eh1w6jnqffXTgGAAkt0Hu24vf4F9/3d0Ty1EgwN1pHhM9uPAKNNyOeRDBiel6nqbnnTMg1cum+BW3QCGIfo/LtG0u/T6hzGMQloZsH2nKFV09DkEcxziOLMydNhajS4swd9rYQNq3v/lkytZNMBfUSmz/3pS0pyL14MIr0HA75kEEJ6YjMqbnnTMgDaJsyrWVpRhdWoRrK0t97yNIQfS7NW17VeR3kPK6QF1hmhNGFLqZk0ehX6/uWfEX5axXN+CPHx1C3f5m/PIbE1Iey2Suit5n5SV9krlEc5Zu6vLt+3uPnEzZuomyVEBHOXKZzqOcPXVM8ngHYfbUypRg1LRsipe3tjRia2Mz3trSGHnQAuRP/ipRZzgSlgXCHnWJ46hOHHj1y8bdR1O2On1kJKqSEs4pEj/tuP/qkSju1R33X+0dAEQ5HROHUdG4jMh4iduUGUePiCwMwrJA2PkccckXiUM79GDFqz1zplaiuFd3zOlg+kzPVYnqMzkvcqb5Xbo1dQfR1NKKNXUH2z1mmgdlKohgNQ7nT1wx6CGKJ05HZoGwh+6vrSzFe9sPRZ4vEocpCn1qzas906uGYHrVkA73oZcYKBvQ23Uf2Uwf7fvs8LO7PB0ZxJRmHM4fIqJ0iFIq6jakpaqqSlVX52ax/qjqzTzw4gdYsn4Pbh53frsFmPNNXGr+BN0OP/vzeo2e91Y2oHeX2xpVvy+u3oX5y2swa8oY16CaiKgrRGSdUqqqw8cYhAXP7wUlkUw9Y8LQjCY453sQFpfASxfVuZBvxv3r79HU0oriXt2x/rvXRd0cIspBXkEYc8JCYJqb4syDiSp5dubkUZgxYShmTh6V0feNC7fjFWWRzLglUqcjm270uO+q4ehRWID7rhoedVOySjYdY6I4YxAWAtMLqPPiH1XybL4l7ZoGv1EWyXQ7Jtlw8cumBPl9R0/i1Ok27DvqXYaDUmXTMSaKMybmh8B0XUEmEkfDmQTudrwemFyBJ1fUdrlIZldvetCnS6OsyaXzqoWWTed1NrU1TthvRMHgSFiE4jIClQ2jK0HyGqnU++L+a0Zi2/wbu1QoUy+SmQ63UhmZrHy+uHoXxv3r77G4ele7NnlVidfP6yDOrTDPT9OfwTj+jETZpmzuN6I4YRAWobj8gsq3qQWvC0jQfeE3t0uv66XvI4igzvSx+ctr0NTSivnLrUBL7xvTdfv85kf62UeYgl4c3cnP74I49EtnsqGNRFHidGQagr6LLi5TS5xaOCPovjCdmjbdh2n7nNOFXufa/OVbsKJmP/Y0tWDhnZ9Jfn/WlDHJ8g3O99aXSPL6ubh4cH8U9+qOiwf392yvV/vicH4GvTi6k5/fBXHol85kQxuJosQSFWkIumxAHEsjRCmTay6Gyeu4mh7zrp4b1z+xClsbmzG6tAhvPniV5/6u+feVqD94AuUlvbHyO9ek3QavnwtnO8L6vGHQ29Rw+ITruRnEMY3j5yeiYLBERUCCLhsQRE5YXKY0g+CVZ+Qmjp/fawrGdHqmeschvLZ+D6p3HPLVBud0ode5NnfaWIwuLWoXQJkudeT1c2E6bRl0fmTQyyB5rQ9peky9nheX/FAiyixOR6YhiKmloMVlSjMI904qx/zlNbh3knmQG5fPr49keE3BmE7P6PlYfiq560snBfncjnj9XHR1335lchmkoJ9HRPmDI2FZLpuLejpt3H0ETS2t2Lj7iOfz9FEO089vuuC03xEUfZTDa1TD9M7BW8eXoUCsrWn7gh4VnDiyBMW9umPiyBLf7+W3TV39LEH8XAQ9OhX2aFccR4WJyBuDsDQ4b9mPw/5yaRrDT5Fb089vOtVpOgXnt+06r+mp1bUH0aasrelrgr4TbcE7dWhqacWCd9qvGODd9jMBr982dfWzOM+LMAOUuNwBGJd2EJE5TkemoatTRGHvL9u5TWs5k5b9TOvMnjommVjtZX/zyZStKT9T1XohV+dndGuv87ObToP6MWJgX9QfPIERA/u2e8zrvfSA95k7xhu1ye8xNk1oD3raOsx+9ysu7SAicwzC0uC8Zb+r7rtqOJ5cUct16zphWuHei2lu0l8PtaRsu8rrjk9nzS/9M5YN6I3PDj8bZQN6p7zG+dmdfRNkXtysKZU4v7hXhxd1r2OgB5Cmx8rvMTYNroIOUMLsd7/imLNKRN4YhKVhetWQQEesTNety/fb1/1eQP3024WDitBwuAUXDiryfJ5pOQ19VMgZBHb0uRL/dwsunO8b5uiH34u6n2R8v5/D9HVBBygcdSKiIISaEyYiN4jIVhGpE5FHPJ53i4goEemwjkZcueWZPLz4Qwx7ZDkeXvyh5+v9LvQdtGxL6NXbG3Sl9Ts/NwyjS4tw5+eGeT7v4cUfYmtjc6fH2KtEg5635Mxhcjs35izdhK2NzZizdFO7fWQzv8vgRFXaIlf6nYiiFVoQJiKFAH4M4EYAlQBuE5HKDp5XBGAmgPfCaktY3JK4F69rSNm6Mf1FHvYdkHFP6HW2T//aK5HeT7+ZLgvUfPLTlK0br/pSXtzuojyv/1kAkNzqsi2Y9sN5LgT9md1+FkzvriUiSkeYI2FXAKhTSm1XSp0C8CKAaR08738D+AGA9DKhY2y6XVZguqO8gF9h/9XtJ1jJ5AXf2T7T9vrpN9N9P3bTRSju1R2P3XSR8b790gODc4us4CuxdVvoOwjOwCMOgYjz+GRqrU8/hYSJiDoTZhA2GIBee6HB/l6SiFwOYIhSanmI7QjNzMmjMGPCUMycPAoLVtZh1Kw3sGBlHR6ffil2fH8KHp9+adRNNOInWPFbysEPZ/v0r/VjEISGwyfw3vZDaDh8wvN506uGYP13rwvtrla9fIkeGIwqLUKPwgKMKrVy1vQgRH+es/yJVzkUPbjSnzdnyWZr6nPJZgBo97WbTAZrYa5ioQe4ppX/gxCHYJeIMiOyOmEiUgDghwC+bfDc+0SkWkSqDxyIzy8m/Rf2kytqcep0G55cURt1s/JK0KOEzpyrqDz22mY0tbTisdc2p3zGZ1dtx6nTbXh21XYAqUGI/jy9/AmQWg7FOYqpj/LMXbYFTS2tmLtsC4p7dweA5Pa84rOSW6+8PNNgzc9oqnPkK8xRYv293O5W7Qq3z+816pYPU85E+STMIGw3AH2YoMz+XkIRgLEA3hGRHQCuBPBaR8n5SqlnlVJVSqmqgQPjubDzA5Mr0KOwAA9MrvC9j6CLwYYp6BEoJ/1iM2/ZFgx/dDnmLdsS+nslamJ1VBsrk4rO6payTZg1ZQyKe3VPlklxC0Kcz9O/dgYy+ijPyIHWfkYO7IOmllMAkNyeW9QzudX34dyfM3hz42c0Nez8SLfVGPxOe/q5ccRr1C3u+ZtElJ4wS1S8D6BCRMphBV9fAfDVxINKqSMAkuuhiMg7AL6jlKoOsU2huf+akbj/mpFpvcZZQiHuxVud7Q2zJpFeouHn7+5EmwKeW1OP2VPb3dvhyq1ERft+34IVNfuxp6kFd35uGHYdaun07siwTb3kfDy3ph5TLzk/pb1+y6Q4X1fcqzsuHtwfAPDa+j3Y2tiM19bvwdBz+uCDXUcw9Jw+eGh8WUrB2JmTR6Ffr+4dltTQ/3/g2MnkNujyKqbnnen7Okt+uNX/8luSwquOmV6sV+dV4oOlMYhyS2gjYUqpTwH8E4A3AdQAeFkptVlE5orITWG9bzZx/lXrHL2ImyD+CjedTtFHIe6eWI4CAe5O88LjNtLi/Bwf7T+e3JreHekliCmjn727A23K2vrpd+d0pG7h6no0tbRi4Wprf/rdvPoIp/POTreSGs7RuAsH9UtuvdpuOprqZ71M0z5zTv25jbT5nfb0Grnzc66xNAZRbgm1WKtS6nUArzu+N8fluVeH2ZY4cv5VG3QxWFOmhUeD+CvctMK5PuIxe2plWiNgnXF+jrk3X5T8/Imcn658xqdWbMOS9XtwtKUVT37lMl/7aD2tklu3ERMvXqs7XFLWH1sbm3FJmTUSNn18GRava8D08WW+RjgXV+9Kvtf0qiG4/qJBqN5xGNdfNAhVw84G0HF/mr6XV3/qj82cPCrtpYScy0OZLp1lSt+f6dJM+V6cmSifcAHvCHn9VZvJBFzT2++D+Cs87JwendtIi/Nz6CM+QY80OO90Mz2uiYr9Fw4q8hwxcduf192bS9fvSdl29W5e56ibPtLmtwirH34WdjdNuA9iFNj0pgLmfRHlDwZhMZXJX8T3TipHca/uuHdS+IFRJgNPPwGVaTV+L3rw5wxwTZPREyUoRpUWeQaubvvzavu0ceenbE1fp984oj/POY2uJ5ab9qFXEVavaUv9MT8BvvN93cpDXFtZitGlRcnRSD/nhmn7MvmHChFFi2tHxlQmE3A37j6CppZWbNx9JNIbAkynKrvKa7pHbwMAX+1JnUpNne7a33wyZeumpG9PFIi19TNF6DWFV73jcMpW53UM9BGvm8adn/I8/bzRR5f0/fUoLMBza+px98TydtPLzvPddIFsZ9+4Tf25cU71uq31qY9GdpTAb8L0OHIh7szh1C9FjSNhGeDnr+ZMTuM4/8qPSqZGALxGGfW+CKJfnMnte4+cTG69jt2itdYdoXpA2JFbxpdhdGkRbhlfZlzkU6/3BbiXZXDSR7y8njd/+RYsWrsT85dvSXnec2vqk3e5OpmunWnKdCT51+sasLWxGb+2b05wKw9x8eD+KXeUcrQqN3Dql6LGICwDwvxBD2LfzgtRpoS9GLMbrwvo0+98hK2NzXj6nY/S6hfTYHjutLEYXVqEudPGphw75+vdpgydteT0NuqFZvXgrD2VstWnNL2OgZ5n5lZZHki921R/nvMuV68+01/np4J8EEGS3r6n3q5FU0srnnq7tl37KHsxmKaoMQjLALcf9CCWJ8nmXyJeAWQQI3ym+9Cft7HhCAAkt6ZMg2F9qq5HYQEKxJqmc75+7faPU7YJc39rV7T/rVW49tgnnya3eqFZZwCpn2v6aJxXX3jxWrPy/mtGoLhXd9x/zYiU18yeWont35uSnIr0W0bChGmQ5Mw3098rtX2pgSt1LNsq+jOYpqgxCMsAtx/0IJbICeKXiH4hCuKXqGlw6RVAhnE3mtv39a+/efUI9CgswDevHpHWqgBun8XZn/qo0wtrrVpgL6zd0f712jVf78+R59oV7e1t357dkttZUyoxY8JQzJrSvpyHvpSQPhoHpB5/0353W7MSSM0x9NNnTmGu2+j8+dHfS5+OvuGi81AgwA0XndfpPk1/hnJxjUhO7xGlh4n5AdETPKt3HEqpm+TmvP5nof7gCZzX/6xA3tdvIKYnAs9ZuqnLyfFuyc1e7+tkemOC1+d324fz+/r2+TX1OHW6DfuOnkwrQdrtuV4J3GPP74cPdh3B2PP7tXv9zMkVmL+8BjMnV6T055jzipIV7a3nnalir+/DWd1+xLl9UP/xcYw4t0+7iuz660z7XX+es+0tp06nbNPtM6cg1m00/TnR+ybxR9JbWxrx2vo9aFPAK+saOq1ZZ5q0rx/XS8r2JGu1+S0VEges6E+UHo6EdYGen6P/BehVrTyVOLbp8/uXp74eo2litinTkQvTnCCv55mWfNBHHZyjH/rXegDhfF+vdjy8+EMMe2Q5Hl78Ycr3nQndE0eWoLhXd0wcWYKHrhuN0aVFeOi60e32t6buIJpaWrGm7mBKfzpH5+Ys2YhFa3dizpKNKe371i/WYdHanfjWL9YBgOcomVu/e43UeI3A/vrPDSnbrtIT/Z3cjonXCKQp/Wfh1vFlKBDg1g5z7Nxf50U/rvqqBdmM03tE6WEQlgbnL3Y92NJ/8d531XD0KCzAfVcN99zf3qaTKdswaw856XeqmSZmm3LeEejGK4DUAwA/F1Dn/h/9zUZsbWzGo7/Z2O55er8ncqh+va7Bc9rSeazcLqLOJYL+bbmV0/Vvy7cYL1vjVUx2dd3Hya3evk17mwEgufVzXP3kYgHwtcyU17n/F/szJLY60ylnP/Q++92mfWhTwO827UvrdV704zqixBrlS2yJKD9wOjIN+kLPC+/8jOvSMPuOnkxOaXnRl8vpaP8m/NYUutsuGXD3xHIcPPZJ2q8PgtfUhXMKzs0t48tQs7cZt4wv81wW5j//kgh02idW69NHowcVoWZfM0YPKmrXPr2mlOnSRPdOKsf85TXJQrhNLZ8mt17LEXW0WHZHBvXriX1HP8Ggfj1T2ru27iBqDxxHxUD/wbSz7ab8LDPlNYV3wTm90dDUggvOaR+gmE45m/anq64PWnta+PUrkucuEeUPjoSl4S/7mlO2+i37+l/epvWlnCNGHx04lrLtKq/RBf1OtXQS0INsg9eIgdcUnE4fTXKOmOn7/97fXYLRpUX43t9d0m4f+mjigq+Nx4wJQ7Hga+M932vrvqMAkNze+3lr9Ofez6deRJ1J6vfYz7vn8+WeJTDc+sZZouLb141Gca/u+PZ1o1NeM9R+3dAujGg62x7mnW9ePzO9exSmbHVu/eQ15ezHzC9VoLhXd8z8UoWv13emqyU5iCg7MQhLg76en5N+ITedZnKaPn4IehQWYPr4YKrWm07JBLGUkNvzTJeFcTJdz1Hvd69q9F5TpG77n/XqBixauxOzXt0AIDW/q86uhZXYOssvdNQ+r+eZemzpZjS1tOKxpZsBAP/2ujUl/m+vp04Zek3hOen5gV5tD/PON78/M6a6GkCa3vEZhCDumiai7MAgLA3XXzQIxb264/qLBrV7TL+Q+83TWrp+D06dbksurNxVQSTZ+ylZ4NUGv3lGbvR+X7fjEAAkt37oSeAbd1ujXImtnt9182WDASC5dVO94xBeW78H1R20yWuEzy1o6NG9IGXbdKI1ZZtwoT2Fe6HHVG6CWyX7oKvYe3HewKB/fr0Mh19dDSD9fnav4M/tscTd0l25a5qIsgODsDQ4k6zdmE59OEeFgl5IO4gk+64uOuxVh8k5teb8Ol2fnE7d+pEY6di4+wjmTK1Eca/umGOPWult32AXc01s3Rb+9rpT1usO0Ide+gCL1u7EQy99kPKaHoUFKdvxFxSnbBPu/NwwjC4twp2fG9aufU6mifRh3vm2YOVHaGppxYKVHwFIDZr06v/OUTvTEa6uBpB+P7vXTSVugWHvHt1Sttkk24q1EkWNQVgagg6S9AKagL8pj7Arywd94dWnBZ0Binlpj44VOLY6r8+4YGUdRs16AwtW1qXkX1cNOxs3jTsfVcPObtd2ZxkO/WKr/9+0tIHzguwM8hJGnNs3ZbvBHqXbsPtoSlDvzDfzGgnq6hRpEEbYxWcTWz1o0j/LT/5gjdr95A/t71j14u/u0I7LuKRDX9HAKZtXu3DDYq1E6WEQlga9dlM63EZ4zivumbId1O8s9CgswKB+3tMQ+sU2iF96fktA6EzboV/M9AWhAaRVi6kjP7j1EhT36o4f3No++V5vnx50AcCTK2px6nQbnlxRi+72CFP3DpYS8roQu+WjvbJul13k03t0z3lBHtCnR8o24dyininbByZXoEdhAR5wFHV1Xvz9LEaeyQRxZx0zt6CpuFe3lG3QgYx+jPVpWr8/Z/pUqulaqUFMv0YlFwNLojBl3095hullD/zSR3j0CvrOfJ5nV23HqdNteHbVdtx/zUjX/ekX22fusO7ii/qXnmmlbGdpB70/VtceRJuytn5MrxriukKB3r7rn1iVDLruv2YkHphcgSdX1OKByRV4/M2tAICGwy3tPtNDL63HB7uasLHhCJpaTqH+4AnMWboJK79zTcp6jPO/fEmyHEIiv+9IS/uREJ2z1MjN4wbjuTX1uHnc4JRz0FlqYWBRT/TuUYiBRT0xe+qYZMmTxAhY4kKuJ76XDehtVD3edOUDv1bXHki2d1LFQNdSK/pntqYka0JZwghILZWhl3G5/cqhANL/OdPbblpJXy+7km38lswhylcMwjqh/+L0W2vo1vFleG5NfbsRntrGYylbt7pjTvrFNohfel2uoYRgfvnqnytoevumjTsfi9c1YNq48wEAGxqacOp0GzY0NGH4wD746MBxDB/YBw2HTyTreJWX9MEme5p40+4j+MLogag/eCK5aPbcaWM7bPs9nz9zIU/HS+9bI2gvvb8Lp063pVy89X7WA/z1370uGSyVDeidckydSzOZBANhHg/A3/JW5SV9Up5r+llMOZdj0qdo/ezfz5JQesDcWcFjIspunI7shD687pVX4pVU7jbC8+C1o9CjsAAPXmvdHTeo/1ko7XcWBnVyV5RpRfo4CrMmmSlnvtXvNjcmt3pdKeednPrxct4pqx8TfXr39iuH4mtXDk2OpJgqG9ArufWa4nFO6SZ41ckynfZ2nmduNx84meZPmS5v5TUtajr9ZXrTh+lyWab0fZjmpXFKjyh/MAgLiD4i4fzlPamiBAVibXX3XzMS2+bfmJx6DLp8g9fFS29jEHllphcsrwtR0J/frX3l9tIwie0NF5Umt3o+jjNI0I/XU2/XoqmlFU+9Xev5vn77tvmT1uTWq8/0gsGm9GnvdOifxetzmX5m0z8mvM4L08DGz00fQfxc+NkH118kyh+cjuyE6fI0+lSic4rkpWp7aql6l+cdaG7TP87cGZ1zqR6d13SP3kbTaRIvQUwLdXX6a3H1ruQxcAYlevvetEe+Ett/vnEMzu13VvLzJ6bxnFNfel+3nrbqYCS2+nt3NL2bbt9eOKgfGg6fxIWD+qX1OhOm095OHZ0nHX2uIM4nnX5eeJ3vXkw/s75//XP4fd+g+4KIcguDsIDoSeGJkgaJX7wXD+6HP350CBcPTr2gOn+xWyMD7UcFnMHUvGVbknlGznwhnVdQo18cnLlPfrhdbJyfccHKumQSvPPmA7fP70Xf/5ylm9DS2oY5Sze1C8L0Kbiis7rh6MlPUXSWdfr/4y/WYcveZlTvOITPjSjBz9/diR6FBbj9yqEpbdcD8hEDi9B49GOMGGgVQ3XmZunHQv+/HlADSP7fmSw/a0olzi/u1enF2zQ40N/X6wYGnTOodeb9uQXbQSdnlw3ojc8OPzvZR36CfWe5ETfO/SfeY87STb7e16sv/AZ2RJQ7OB3ZCT2HyXR6zzmdMP/Ll2DGhKGY/+XU0gmmUxXOaTH91nmv/BHTpXpMpwG9Pr/bFIrzM+rlIIKg51+dbmsDgORWp0/BjbWD4cS2xl7ap2ZvMxbadagW/sF7ys1ZKsItN8tJX5Lm0d9swNbGZjz6mw3t3isRGDccPmH8+b34mer1W7ct6IKdet/4zZfS9+HVPrf9+ynxAXj3BWtqERGDsE6YBitev1DdAhTnUi1unMGUXuE8iPwR0wRpPxdy58VLr2vl5Jb4bVol/ew+PVO2Or0G2a5DLQCQ3F5kL+1z0XlFKQVfnRfkiSNLUNyrOyaOLGl3g4Gem+V14U3cTWltz5SGdb7Xd17+EFsbm/Gdlz/srIuN+Ck0fN9Vw9GjsAD3XTU8rfcKOrhoOXU6ufV7vuv96+dn1e/all7vxQR8IuJ0ZBpMp/dM6csgOaeHvKYqZk+tDLS6+b4jJ9F49CT2HWm/8HXq+6afs/XD32/F1sZm/PD3WzGpYiDuv2akaw00fSoIQPL/ie3CP9Rj9tTKlOdNHFmCd7YewMSRJe1qSOl9uGzDHrQpYNmGPdh39BMAwK7DVhC2yR4J27S3GfdqJSWcU0nO4+U2zeQ1ZaZPMzYcPuFaauTYqU9Ttm70/DOv3EF9NQbTJP59R0/i1Ok27DvqfV44XVtZmpze9mI6HfeKXfPslXUNeHz6pSmPeeUBuvHzs+o3t8vrdaypRUQcCUuD6fSeqWnjzkePwoJkvSpdJqcqTKed9NwcU5vsZXUSW9OpIP3/3QutEaPEVn9MD4ycx+f+n1dj0dqduP/n1ThiF8Q9cqIV9m6SW92Oj4+jTVlbp0vK+qds3fQoLECBnFnf0Y3en//ws2oMe2Q5/uFn1QCAf7x6JHoUFuAfrx7pWV7BdKTWz6iL3yk4t1Ej57E3Pcf729XxE1ud6bmrv5efn1W/I3C805GIvDAIi9DS9Xtw6nRbsqq6LpNTFYmLbGcXWz9LEzlroZnmMOkXr88MGwAAya3+mNdU6l/2HUtuLxtaDAC4bGgx+vXqDgDJbc9CJLcbdzcBsLbOoOHVD3anbHV6vtyitTvRppAyqpeg96HeF3qtMgD47YfWufHbD/d4Bhp6G736wisYcMv18zsF53buOs8f03P8P756OUaXFuE/vnp5u8dMc/E49UdEccQgLEJ+L5pBS1xkO7vYml7I9Iutsxba/uZPUrZur9O53dgAeI9OXjiob3Kr76OPHXUltgPsHLIBfXqi5ZSV1N9yqq1de/raz+/bs7BdgKaPQnnlvbn1oV6rDAD+sq85ufUKNPQ2+i3i6zaCpudipeONjXvx4p924Y2Ne1O+7/zspue413S5aZ00jkgRURyJUirqNqSlqqpKVVdXZ+z9/OScZJugP6NXrs81j7+D+o+Po/ycPlj58NXGr/PzXm6POXOn7n3hfayo2Y/JY87FO1sP4NM2hW4Fgrce+kLK6/XnnV/cC4vW7sSMCUMxd9pYz3wsP22/8clVqNnXjDGDivDGA1f52ocpt7YPf3Q52hRQIMD2700x3t+oWW/g1Ok29CgswLb5N/pqk27cv/4eTS2tKO7VHeu/e12X90dElEkisk4pVdXRYxwJ64Tf2/RNeOVHPbz4Qwx7ZDkeXhzM3XFeTJdLMuVd4b0MPQoLML2q/eLEbq9z9pOeI6WPBDn7TC/zoE+5zfzln7G1sRkzf/lnAEDT8VPJ7ZcvGwwA+PJlg9u1R1+qyDmq42cUyquf/mWKNUr6L51MswUxwuPW9lsuL0vZmnIbCfQqceLFdMoxTEGX3SAiAhiEdSrMC4BzuktPzl5s3xGW2AYttQRE15cLMr1IeeXBue3D2U9zf7sFTS2tmPvbLSnJ484+0z+X/v9DLdYdh4lt9V+bktvqnYes/9tbnX4TQNjTW37zsYK0u+lEytaUcwo6we955mdppqCxphcRhYFBWCfCvAA4R1P05Ozp463Rh8Q2aPpFxbROmOn+vHjdEeqWtO/sp4vtuxMvLuuPp9/5CFsbm/H0Ox+16zO9Npb+vnoiPgAM7Ns9uU2t45XKq59Mg1DT55nWkAvTh/YC54mtKf0z6qNfQZxnUfF7pygRkRfWCYuQs07QDReV4nebG3HDRaV4fPql7WoiBUmvX+RcI7Gr+/Pyyz/9FadOt+GXf/pru5GS/c0nU7Zu5n/54mQe1E3/8QcAwMaGI/jlN65M6bM3N+9DU0sr3ty8Dxt3H8Gp0214Ye0OLPz6FSn1xMoG9MaBY0dQNqC353JBXiU6nGtxuuVpmS6741VDLlMuLeuPP350CJd2UpLDSf+M720/lBz9euaO8WmXOImLX69rwNbGZvx6XUPaNz4QEblhEOaQyfXcnO/1zB0d5u2FIuhCkab7O3riVMpWt9e++22v4y445yLqv3h3Z3J9xzl/W+m6MPNHB44lt8dO2sVPT36aMtU3qWIgtu23nrdt/zHPz6G3Y+bkUSnHTg9CvQIt02C1q4uZB+GbV4/Ex8dq8M2r2xfX9fo50T/jtZWlyc+RzrqP+v4BcI1FIspJnI50yGTuh5+6W2EL+72Ot55Obp3vdf/VI1Hcqzvud1z0N9rTYYmtvnamflOBM/F7+vgh1k0A44fgtisuQIEAt11xQbvpzcRIz6Vl/VOS/r36YtarG7Bo7U7MenUDAGDOko1YtHYn5izZ6FnKwzSXzG+5CTd+jqszL03vX9Olf/TPkU6tLrd6alFxLlNFRBQEjoQ5+F2eJMz3SmcEoauCfi/niMnAvj2w7+gpDOzbo90I16sfNKCppRWvftCQMgW33Q4cEtvRpX1Rs+8YRpf2bZfsnfj/mw8ObHcTQJsCVtcexOyplSmfTR/x+cYL1Tj5aRv+15JN+PvPDEnpC32JoJv+X3sa1F4JYHXdxynbuNGPqz465RXkOc9Pva+fuWN8ymO6hxd/iMXrGjB9fFnK9HA6o6/6e89fbq0ZeuwT7yWcwsQlhogoDBwJc4hjUcdMVvsO4r30URfniMnHx1tTtrpEQJPYJgy3j0Viu+BrVZgxYSgWfK0qJeHeuUi1ngjulRSuj/icOm0Vaz11uq1dX+glL775hRHoUViAb35hBABg0shzkts43kmnfxZn4Oo2Sub8WdD70OvnJIg7e/X99+1p/a2Y2OriWDoijm0ionhiEBYh04t1JgPDIN5rxk/eswqZ/uS9dnf53TxucHJb0rcnCgQo6WtVrHcGNsk2DeyTstXpo136ItVA6pSe/n/nWox6gFJ+jpU0Xn5O73Z9oQcvzsWtbxo3GMW9uuOmcYN9BbJ+a2jpvC7+Xks9mZ6HplOk/c7qlrLtKq+pwDgGvHFsExHFE6cjI5TJqc9M2nW4Jbl96u1taGppxVNvb8P0qiFYUWPlF62oacTxT04n11icPbWyXWCT4BwJ0afWJlWUoHZ/MyZVlOD2K4cC6Lw/9QK806uGJEe4rq0sxSenrRUkElvdvZPKMX95De6dVI6qYWenvJe+z/XfvS7tqas5Szaj/uPjmLNkc7uVBEyZTiVbwdSZQCro8/DHt18e6E0FXlOBcfwZimObiCieOBIWoThOfQZBXwfxpL3uYGJ7+ERrcuusrK6PIOmjOs6REP15r6xrQJsCXlnXYNyfzgK8+gjXBWf3AoDkVqePtDnfq6tFfUec2ydl64ffqeSgz8MgbiowndLz0/awpwtz9eeaiILHICwgzAM545k7qrDj+1PwzB1VSAwoJbbdCyW5dVZW1y9e+pSO86Kmf20a/OjHx1mAV5+e693DGm1LbHVeBTurhp2Nm8adnxwhSzCdZpw1pRIzJgzFrCmV7dprKpcu/mFO6YU9XcjfBURkikFYQPIhD8Tr4uL22LGTrSnbsef3S24XrKzDqFlvYMHKunb7Mx3VMV3RwOv4mI7ceC0l5LZ/06V6nAFUHM+nTAYXYd6MEsS+71j4LoY9shx3LHy33WNxPHZEFE/MCQtIPuSBeOUcuT1WUFAAtLVZWwBDz+mDD3YdwdBz+uDJFbU4dboNT66obVc93ysPaMHKOjy5ohYPTK5o9zo3QRwfr324Pea36Oq1laXJPLW4yGSplDBLQgSxb6+SJPnwu4CIgsEgLCD5UEfI6+LiFjQU9+6GxqOnUNzbOtVuGV+Gmr3NuGV8GUaVFiWDqXR4BW9uTI+PVzkEr324PeZMgjflrOofBwwuzpg08hysrvs4WZpElw+/C4goGAzCyJjXxcU5VZcY/fn36eNSRoL0582dNtY4iNI9MLkiGbwFvcyUXpA1SnEMeBhcnPGze6+MuglElANCzQkTkRtEZKuI1InIIx08/pCIbBGRDSLytogMDbM9FB49aV3Pg3LmW3klt5vmHOkJ/bmaf9PVJPtsSw531m4jIsoHoQVhIlII4McAbgRQCeA2Eal0PO0DAFVKqUsAvALg/4TVHuo6rwu7PsJlWp3eyU9AFXQCd64Eddn2OfQ6a0D2BZFERH6EOR15BYA6pdR2ABCRFwFMA7Al8QSl1Ert+e8C+FqI7aEucq71qNOnz8pL+iTzoJzThX6S270EPUUWx2lAP7Ltc8yaMgbzl9ckS41k8iYAIqKohDkdORiAPrfQYH/PzT0A3gixPeTCdCoosYByRwspu02fOUdkvKbZ4lh40897BbEEUVdlW80wZ6mRTK6XSpQOjtJSkGJRJ0xEvgagCsDjLo/fJyLVIlJ94EB0F7ZcpU8Fef2C8bpz0E3YF9Ogp9289mf6Xqa1wchd3IJIXngpIdum+inewpyO3A1Ar6BZZn8vhYhMBjALwBeUUp90tCOl1LMAngWAqqqq9ov6UZfoU0Fe00BxuXNQF/S0WxDTpfoak5QbOD1KCdk21U/xJkqFE9OISDcA2wB8CVbw9T6AryqlNmvPuQxWQv4NSqlak/1WVVWp6urqEFqcv/S8LQC+Sj64lYqYs3QTFq3diRkThubNxSvozxx0GY64v28csS+IyC8RWaeUqurosdBGwpRSn4rIPwF4E0AhgOeUUptFZC6AaqXUa7CmH/sCWCwiAPBXpdRNYbWJOub8K98kcHBelNxGCvLxr8agP7Pet3dNLM9YMMDRnzNYI42IwhBqsVal1OsAXnd8b472/8lhvj+Z8RM0OC/QbhXz8/HiFeYdm5kMjPIxgCYiyqRYJOaTf34ThvXXmSZB669xFl31qv9FXaMfn0zeNRi35HgiolzDZYuynN+RET+v018DIGVtQ46aZEY+jiwSEeUqBmFZzm/w4+d1Hb0m8X8GB2cwiZuIiEyEdndkWHh3JMVdPt4RSkREHYvk7kiifMWpWSIiMsHE/BzGKt/RYEI7ERGZYBCWw0yX18iVYG3esi0Y/uhyzFu2pfMnB+yOhe9i2CPLccfCdzP+3kRElJ0YhOUw03IGubIW2nNr6tGmrG2mra77OGVLRETUGQZhOcx0WiyTtafCdPfEchSItc20SSPPSdkm5MooIxERBY93RxIFgGtnEhFRR3h3JFHIuHYmERGli0EY5b0giqu6BVssYktERG4YhFHeC2JRbAZbRESULgZhlPc4ZUhERFFgEEZ5j6NYREQUBZaoICIiIooAgzAKBOthERERpYdBGAUijlX3GRgSEVGcMSeMAhHH5PYg7nokIiIKC4MwCkQck9vjGBgSERElcDqScpbp2pk6TmESEVGmMAgj0sQxty0qDEiJiMLF6UgiDacwz2BOHRFRuBiEEWnimNsWFQakREThYhBGRB1iQEpEFC7mhBERERFFgEEYERERUQQYhBERERFFgEEYERERUQQYhBERERFFgEEYERERUQQYhBERERFFgEEYERERUQQYhBERERFFgEEYERERUQREKRV1G9IiIgcA7Iy6HQEqAXAw6kbECPvjDPbFGeyLM9gXZ7AvzmBfpIpTfwxVSg3s6IGsC8JyjYhUK6Wqom5HXLA/zmBfnMG+OIN9cQb74gz2Raps6Q9ORxIRERFFgEEYERERUQQYhEXv2agbEDPsjzPYF2ewL85gX5zBvjiDfZEqK/qDOWFEREREEeBIGBEREVEEGIRlkIgMEZGVIrJFRDaLyEz7+2eLyFsiUmtvB0Td1kwRkUIR+UBEltlfl4vIeyJSJyIviUiPqNuYCSJSLCKviMhfRKRGRCbk63khIg/aPx+bRORXInJWPp0XIvKciOwXkU3a9zo8F8TyI7tfNojI5dG1PHguffG4/XOyQUReFZFi7bFH7b7YKiLXR9LokHTUF9pj3xYRJSIl9td5d17Y3/+WfW5sFpH/o30/tucFg7DM+hTAt5VSlQCuBPCPIlIJ4BEAbyulKgC8bX+dL2YCqNG+/gGAJ5RSIwEcBnBPJK3KvKcA/E4pdSGAS2H1Sd6dFyIyGMD/AFCllBoLoBDAV5Bf58VPAdzg+J7buXAjgAr7330Ans5QGzPlp2jfF28BGKuUugTANgCPAoD9u/QrAC6yX7NARAoz19TQ/RTt+wIiMgTAdQD+qn07784LEbkGwDQAlyqlLgLw7/b3Y31eMAjLIKXUXqXUn+3/N8O60A6GdeK8YD/tBQA3R9LADBORMgBTACy0vxYAXwTwiv2UvOgLEekP4CoAPwEApdQppVQT8vS8ANANQC8R6QagN4C9yKPzQim1CsAhx7fdzoVpABYpy7sAikXkvIw0NAM66gul1O+VUp/aX74LoMz+/zQALyqlPlFK1QOoA3BFxhobMpfzAgCeAPA/AegJ3nl3XgD4JoDvK6U+sZ+z3/5+rM8LBmEREZFhAC4D8B6AUqXUXvuhfQBKo2pXhj0J65dHm/31OQCatF+wDbCC1FxXDuAAgOftqdmFItIHeXheKKV2w/oL9q+wgq8jANYhP88Lndu5MBjALu15+dY3dwN4w/5/3vWFiEwDsFsp9aHjobzrCwCjAEyy0xb+S0Q+Y38/1n3BICwCItIXwK8BPKCUOqo/pqzbVXP+llURmQpgv1JqXdRtiYFuAC4H8LRS6jIAx+GYesyj82IArL9cywGcD6APOpiCyWf5ci50RkRmwUrx+EXUbYmCiPQG8C8A5kTdlpjoBuBsWKk+DwN42Z5diTUGYRkmIt1hBWC/UEr9xv52Y2Ko2N7ud3t9DpkI4CYR2QHgRVjTTU/BGjbvZj+nDMDuaJqXUQ0AGpRS79lfvwIrKMvH82IygHql1AGlVCuA38A6V/LxvNC5nQu7AQzRnpcXfSMiXwcwFcDt6kydpXzrixGw/lj50P49WgbgzyIyCPnXF4D1e/Q39hTsn2DNsJQg5n3BICyD7Kj8JwBqlFI/1B56DcCd9v/vBLA0023LNKXUo0qpMqXUMFhJk/+plLodwEoAt9pPy5e+2Adgl4iMtr/1JQBbkIfnBaxpyCtFpLf985Loi7w7LxzczoXXAMyw74a7EsARbdoyJ4nIDbDSGG5SSp3QHnoNwFdEpKeIlMNKSv9TFG3MBKXURqXUuUqpYfbv0QYAl9u/T/LuvACwBMA1ACAiowD0gLWAd7zPC6UU/2XoH4DPw5pG2ABgvf3vb2DlQr0NoBbACgBnR93WDPfL1QCW2f8fDusHpA7AYgA9o25fhvpgHIBq+9xYAmBAvp4XAP4VwF8AbALwMwA98+m8APArWPlwrbAurPe4nQsABMCPAXwEYCOsu0oj/wwh90UdrByfxO/QZ7Tnz7L7YiuAG6Nuf9h94Xh8B4CSPD4vegD4uf17488AvpgN5wUr5hMRERFFgNORRERERBFgEEZEREQUAQZhRERERBFgEEZEREQUAQZhRERERBFgEEZEOU9ErhYRJSL3at8bZ3/vO5289mZ7EWAiokAxCCOinKZV2t8E4O+1h24D4FxzryM3A+gwCNP2TUSUNv4CIaKsYC9q/jKsZUcKAfxvWAt8PwngBIA/ABiulJoqIo/BWtZlOKwq/P8fgJ0A+olIKaxlf24A8Lq2/xGwClwOtPf3DVhr0d0E4AsiMhvALbBWvVgPq/jyr0TkHQA/BNAXVoXuryul9orI/wDwD7DWN9yilPpKCN1CRFmMQRgRZYsbAOxRSk0BABHpD2t064uwqqi/5Hh+JYDPK6VaRORq+3uvAJgO4ANYVbU/0Z7/LIB/UErVishnASxQSn1RRF6DtaLDK/b7AkAPpVSVvRbsfwGYppQ6ICL/DcB8AHfDWoS9XCn1iYgUB9gPRJQjGIQRUbbYCOD/EZEfAFgGoBnWYt+1ACAiPwdwn/b815RSLY59vAwrWLsQ1tInn7Nf29f+/2I7yAKs5ZLcJAK+0QDGAnjLfl0hrOVUAGsJql+IyBJYS1EREaVgEEZEWUEptU1ELoe13uo8WGspejnewT72iUgrgGsBzIQdhMHKj21SSo0zbE5i3wJgs1JqQgfPmQLgKgB/C2CWiFyslPrUcP9ElAeYmE9EWUFEzgdwQin1cwCPwwqghtm5XICVaG9iDoB/VkqdTnxDKXUUQL2ITLffS0TkUvvhZgBFLvvaCmCgiEywX9ddRC4SkQIAQ5RSKwH8M4D+sHLGiIiSOBJGRNniYgCPi0gbgFYA3wRQAmC5iJwAsBruwVKSUuqPLg/dDuBpOwG/O4AXYd09+SKA/2sn2t/q2NcpEbkVwI/sHLVusG4U2Abg5/b3BMCPlFJN6X1cIsp1opSKug1ERF1mJ99/Ryk1NeKmEBEZ4XQkERERUQQ4EkZEREQUAY6EEREREUWAQRgRERFRBBiEEREREUWAQRgRERFRBBiEEREREUWAQRgRERFRBP5/ojTffhND43kAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(x='sqrMetres',y='price', data = mieszkania_train, linewidth = 0, s = 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pytanie- Jaki jest baseline naszego systemu?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Czym jest regresja liniowa?- przypadek jednowymiarowy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![regresja liniowa 1](obrazki/1.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![regresja liniowa 2](obrazki/2.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![regresja liniowa 3](obrazki/3.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![regresja liniowa 4](obrazki/4.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## wzór na regresję w przypadku jednowymiarowym?\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$Y = a*X_1 + b$\n", "\n", "$Y = w_1 * X_1 + w_0$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zadanie - napisać funkcję predict_score(sqr_metres) która zwraca cenę mieszkania zgodnie z modelem regresji liniowej ( 5 minut) \n", "\n", "Należy samemu wymyślić współczynniki modelu" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def predict_price(sqr_metres):\n", " return 2000* sqr_metres + 200000" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "240000" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_price(20)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "280000" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_price(40)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "310000" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_price(55)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "200000" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_price(0)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "Y_train_predicted = predict_price(X_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mierzenie błędu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![RMSE 1](obrazki/6.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![a](obrazki/5.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zadanie - napisać funkcję, która liczy błąd średniowadratowy na całym zbiorze (7 minut)\n", "\n", "rmse(Y_true, Y_predicted)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def rmse(Y_true, Y_predicted):\n", " return np.sqrt(np.sum((Y_true - Y_predicted)**2)/ len(Y_true)) " ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(np.array([300_000, 250_000]), np.array([300_000, 250_000]))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "70799.01129253148" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(np.array([305_000, 250_000]) ,np.array([300_000, 350_000]) )" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "80622.57748298549" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(np.array([300_000, 250_000]), np.array([330_000, 360_000]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zadanie - za pomocą rmse policzyć błąd dla baseline (3 minuty)\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([357461.18628244, 357461.18628244, 357461.18628244, ...,\n", " 357461.18628244, 357461.18628244, 357461.18628244])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.ones_like(Y_train) * Y_train.mean()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "125698.71268014389" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_train, np.ones_like(Y_train) * Y_train.mean())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zadanie - za pomocą rmse policzyc błąd dla predykcji (2 minuty)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "123420.02227684396" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_train, Y_train_predicted)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Na jakim zbiorze najlepiej sprawdzać wyniki?\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![RMSE 2](obrazki/7.png)\n", "\n", "![RMSE 3](obrazki/8.png)\n", "\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "mieszkania_dev = pd.read_csv(DATA_DIR/'dev-0'/'in.tsv', sep = '\\t', names = names)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "with open(DATA_DIR/'dev-0'/'expected.tsv','r') as dev_exp_f:\n", " Y_dev = np.array([float(x.rstrip('\\n')) for x in dev_exp_f.readlines()])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "mieszkania_dev['price'] = Y_dev" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "X_dev = mieszkania_dev['sqrMetres'].to_numpy()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAncAAAE9CAYAAABp4UT1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAoFklEQVR4nO3df7RdZXng8e8jAUQE+ZE0pQTlWiMSaUW4g2EQxoJAUMawWqu4XCWl1EwrrYjtVGxZMkW6lk47RZiltFSEZHREpFYyFE0DUqUMIBe0/EpDIjGSFMJFfhYcBPvMH/u9eO7l3pObm7PvOWef72ets84+7/7xvmffnXufvO9+3h2ZiSRJkprhZd1ugCRJkjrH4E6SJKlBDO4kSZIaxOBOkiSpQQzuJEmSGsTgTpIkqUHmdLsBvWLu3Ll54IEHdrsZkiRJ23THHXc8mpnzJltncFcceOCBjIyMdLsZkiRJ2xQRm6Za57CsJElSgxjcSZIkNYjBnSRJUoMY3EmSJDWIwZ0kSVKDGNxJkiQ1iMGdJElSgxjcSZIkNYjBnSRJUoMY3EmSJHXAxkef4ePX3MPGR5/pajsM7iRJkjrg8ps3svKWTVx+88autsNny0qSJHXA6UcNjXvvFoM7SZKkDhiauzvnLz2k281wWFaSJKlJDO4kSZIaxOBOkiSpQQzuJEmSGsTgTpIkqUEM7iRJkhrE4E6SJKlBDO4kSZIaxOBOkiSpQWoN7iLirIi4JyLujYgPl7J9ImJNRKwv73uX8oiIiyNiQ0TcFRGHtRxnWdl+fUQsayk/PCLuLvtcHBHRrg5JkqSmqy24i4hDgA8ARwBvAk6OiNcB5wA3ZOZC4IbyGeAkYGF5LQcuKcfZBzgPeEs51nktwdolpY6x/ZaU8qnqkCRJarQ6e+4OBm7LzGcz8wXgW8CvAkuBFWWbFcApZXkpsDIrtwJ7RcR+wInAmsx8LDMfB9YAS8q6PTPz1sxMYOWEY01WhyRJUqPVGdzdAxwdEftGxCuAdwAHAPMz86GyzcPA/LK8P/Bgy/6bS1m78s2TlNOmDkmSpEabU9eBM3NtRHwK+AfgGeB7wE8nbJMRkXW1YVt1RMRyqiFgXv3qV9fZDEmSpFlRa0JFZl6WmYdn5jHA48D9wNYypEp5f6RsvoWqZ2/MglLWrnzBJOW0qWNi+y7NzOHMHJ43b97Mv6gkSVKPqDtb9ufK+6up7rf738AqYCzjdRlwTVleBZxWsmYXA0+WodXVwAkRsXdJpDgBWF3WPRURi0uW7GkTjjVZHZIkSY1W27Bs8bcRsS/wPHBmZj4REZ8EroqIM4BNwHvKttdR3Ze3AXgWOB0gMx+LiE8At5ftzs/Mx8ryB4ErgN2Ar5cXwFR1SJIkNVpUiaYaHh7OkZGRbjdDkiRpmyLijswcnmydT6iQJElqEIM7SZKkBjG4kyRJahCDO0mSpAYxuJMkSWoQgztJkqQGMbiTJElqEIM7SZKkBjG4kyRJahCDO0mSpAYxuJMkSWoQgztJkqQGMbiTJElqEIM7SZKkBjG4kyRJahCDO0mSpAYxuJMkSWoQgztJkqQGMbiTJElqEIM7SZKkBjG4kyRJahCDO0mSpAapNbiLiLMj4t6IuCcivhQRL4+IoYi4LSI2RMSXI2KXsu2u5fOGsv7AluN8rJSvi4gTW8qXlLINEXFOS/mkdUiSJDVdbcFdROwPfAgYzsxDgJ2AU4FPARdm5uuAx4Ezyi5nAI+X8gvLdkTEorLfG4ElwGcjYqeI2An4DHASsAh4X9mWNnVIkiQ1Wt3DsnOA3SJiDvAK4CHgWODqsn4FcEpZXlo+U9YfFxFRyq/MzOcycyOwATiivDZk5gOZ+RPgSmBp2WeqOiRJkhqttuAuM7cAfwH8kCqoexK4A3giM18om20G9i/L+wMPln1fKNvv21o+YZ+pyvdtU4ckSVKj1TksuzdVr9sQ8AvA7lTDqj0jIpZHxEhEjIyOjna7OZIkSTuszmHZtwMbM3M0M58HvgocBexVhmkBFgBbyvIW4ACAsv5VwI9ayyfsM1X5j9rUMU5mXpqZw5k5PG/evB35rpIkST2hzuDuh8DiiHhFuQ/uOOA+4Ebg3WWbZcA1ZXlV+UxZ/83MzFJ+asmmHQIWAt8BbgcWlszYXaiSLlaVfaaqQ5IkqdHqvOfuNqqkhjuBu0tdlwIfBT4SERuo7o+7rOxyGbBvKf8IcE45zr3AVVSB4TeAMzPzp+Weut8DVgNrgavKtrSpQ5IkqdGi6ujS8PBwjoyMdLsZkiRJ2xQRd2Tm8GTrfEKFJElSgxjcSZIkNYjBnSRJUoMY3EmSJDWIwZ0kSVKDGNxJkiQ1iMGdJElSgxjcSZIkNYjBnSRpIGx89Bk+fs09bHz0mW43RaqVwZ0kaSBcfvNGVt6yictv3tjtpki1mtPtBkiSNBtOP2po3LvUVAZ3kqSBMDR3d85feki3myHVzmFZSZKkBjG4kyRJahCDO0kdZUaiJHWXwZ2kjjIjUZK6y4QKSR1lRqIkdZfBnaSOMiNRkrrLYVlJkqQGMbiTJElqEIM7SZKkBjG4kyRJapDagruIOCgivtfyeioiPhwR+0TEmohYX973LttHRFwcERsi4q6IOKzlWMvK9usjYllL+eERcXfZ5+KIiFI+aR2SJElNV1twl5nrMvPQzDwUOBx4Fvg74BzghsxcCNxQPgOcBCwsr+XAJVAFasB5wFuAI4DzWoK1S4APtOy3pJRPVYckSVKjzdaw7HHA9zNzE7AUWFHKVwCnlOWlwMqs3ArsFRH7AScCazLzscx8HFgDLCnr9szMWzMzgZUTjjVZHZIkSY02W8HdqcCXyvL8zHyoLD8MzC/L+wMPtuyzuZS1K988SXm7OiRJkhqt9uAuInYB3gV8ZeK60uOWddbfro6IWB4RIxExMjo6WmczJEmSZsVs9NydBNyZmVvL561lSJXy/kgp3wIc0LLfglLWrnzBJOXt6hgnMy/NzOHMHJ43b94Mv54kSVLvmI3g7n38bEgWYBUwlvG6DLimpfy0kjW7GHiyDK2uBk6IiL1LIsUJwOqy7qmIWFyyZE+bcKzJ6pAkSWq0Wp8tGxG7A8cD/6Wl+JPAVRFxBrAJeE8pvw54B7CBKrP2dIDMfCwiPgHcXrY7PzMfK8sfBK4AdgO+Xl7t6pAkSWq0qG5J0/DwcI6MjHS7GZIkSdsUEXdk5vBk63xChSRJUoMY3EmSJDWIwZ0kSVKDGNxJkiQ1iMGdJElSgxjcSZIkNYjBnSRJUoMY3ElT2PjoM3z8mnvY+Ogz3W6KJEnTZnAnTeHymzey8pZNXH7zxm43RZKkaav18WNSPzv9qKFx75Ik9QODO2kKQ3N35/ylh3S7GZIkbReHZSVJkhrE4E6SJKlBDO4kSZIaxOBOkiSpQQzuJEmSGsTgTpIkqUEM7iRJkhrE4E6SJKlBDO4kSZIaxOBOkiSpQQzuJEmSGqTW4C4i9oqIqyPiXyJibUQcGRH7RMSaiFhf3vcu20ZEXBwRGyLirog4rOU4y8r26yNiWUv54RFxd9nn4oiIUj5pHZIkSU1Xd8/dRcA3MvMNwJuAtcA5wA2ZuRC4oXwGOAlYWF7LgUugCtSA84C3AEcA57UEa5cAH2jZb0kpn6oOSZKkRqstuIuIVwHHAJcBZOZPMvMJYCmwomy2AjilLC8FVmblVmCviNgPOBFYk5mPZebjwBpgSVm3Z2bempkJrJxwrMnqUBdtfPQZPn7NPWx89JluN0WSpMaqs+duCBgFLo+I70bE5yJid2B+Zj5UtnkYmF+W9wcebNl/cylrV755knLa1KEuuvzmjay8ZROX37yx202RJKmx6gzu5gCHAZdk5puBZ5gwPFp63LLGNrStIyKWR8RIRIyMjo7W2QwBpx81xGlHvobTjxrqdlOkxrKHXFKdwd1mYHNm3lY+X00V7G0tQ6qU90fK+i3AAS37Lyhl7coXTFJOmzrGycxLM3M4M4fnzZs3oy+p6RuauzvnLz2Eobm7d7sp6mMGL+3ZQy6ptuAuMx8GHoyIg0rRccB9wCpgLON1GXBNWV4FnFayZhcDT5ah1dXACRGxd0mkOAFYXdY9FRGLS5bsaROONVkdkvqcwUt79pBLmlPz8X8f+GJE7AI8AJxOFVBeFRFnAJuA95RtrwPeAWwAni3bkpmPRcQngNvLdudn5mNl+YPAFcBuwNfLC+CTU9Qhqc+NBS0GL5Mb6yGXNLiiuiVNw8PDOTIy0u1mSJIkbVNE3JGZw5Otm/awbES8JiLeXpZ3i4g9OtVASZIkdca0gruI+ABVQsRfl6IFwNdqapMkSZJmaLo9d2cCRwFPAWTmeuDn6mqU1FRmekqS6jbd4O65zPzJ2IeImEPN89NJTWSmpySpbtPNlv1WRPwxsFtEHE+Vpfp/6muW1ExmekqS6jatbNmIeBlwBtUcc0E199znskGptmbLSpKkftEuW3a6PXe7AZ/PzL8pB9yplD3bmSZKkiSpE6Z7z90NVMHcmN2A6zvfHEmSJO2I6QZ3L8/Mfxv7UJZfUU+TJGl2mcUsqUmmG9w9ExGHjX2IiMOBH9fTJEmaXWYxS2qS6d5z92HgKxHxr1QJFT8PvLeuRklSq42PPsPlN2/k9KOGGJq7e8ePbxbz1Oo+95I6b1rBXWbeHhFvAA4qResy8/n6miVJPzPWswZw/tJDOn78obm713LcJqj73EvqvLbBXUQcm5nfjIhfnbDq9RFBZn61xrZJEmDPWjd57qX+03aeu4j408w8LyIun2R1ZuZv1de02eU8d5IkqV/MeJ67Eti9DPh6Zl5VS+skSZLUMdvMls3Mfwf+aBbaIkmSpB003alQro+IP4yIAyJin7FXrS2TJEnSdpvuVCjvBRL44ITy13a2OZIkSdoR0w3uFlEFdm+lCvJuAv6qrkZJkiRpZqY7LLsCOBi4GPifVMHeiroaJUmaPT5+rXf5s9FMTLfn7pDMXNTy+caIuK+OBkmSZpcTFfcufzaaiekGd3dGxOLMvBUgIt4COCmcJDWAExX3Ln82mom2kxi/uFHEWqpHj/2wFL0aWAe8QDWZ8S/X1sJZ4iTGkiSpX8x4EuMWS2ZY8Q+Ap4GfAi9k5nCZQuXLwIHAD4D3ZObjERHARcA7gGeB38zMO8txlgHnlsNekJkrSvnhwBXAbsB1wFmZmVPVMZPvIEmS1E+mlVCRmZvavbax+69k5qEt0eU5wA2ZuRC4oXwGOAlYWF7LgUsASqB2HvAW4AjgvIjYu+xzCfCBlv2WbKMOSZKkRptutmwnLeVnmbYrgFNayldm5VZgr4jYDzgRWJOZj5XetzXAkrJuz8y8Naux5ZUTjjVZHZIkSY1Wd3CXwD9ExB0RsbyUzc/Mh8ryw8D8srw/8GDLvptLWbvyzZOUt6tjnIhYHhEjETEyOjq63V9O0o5p0jQPTfoukvpb3cHdWzPzMKoh1zMj4pjWlaXHbdsZHTugXR2ZeWlmDmfm8Lx58+pshqRJjE3zcPnNG7vdlB3WpO8iqb9NN6FiRjJzS3l/JCL+juqeua0RsV9mPlSGVh8pm28BDmjZfUEp2wK8bUL5P5byBZNsT5s6JPWQJk3z0KTvIqm/1dZzFxG7R8QeY8vACcA9wCpgWdlsGXBNWV4FnBaVxcCTZWh1NXBCROxdEilOAFaXdU9FxOKSaXvahGNNVoek7VD3UOPQ3N05f+khDM3dfVbrrcNU30WSZludw7LzgX+KiH8GvgP8fWZ+A/gkcHxErAfeXj5DNZXJA8AG4G+onmVLZj4GfAK4vbzOL2WUbT5X9vk+8PVSPlUd0kCaabDUraFGhzglaeZqG5bNzAeAN01S/iPguEnKEzhzimN9Hvj8JOUjwEuexzJVHdKgmukjjLo11OgQpyTN3LSeUDEIfEKFmmzjo89w+c0bOf2oIYcNJakB2j2hohvz3EmaZd28H6wf75+TWnkNq98Y3EmqlffPqd95Davf1DoViiR5/5z6ndew+o333BXecydJkvqF99xJkiQNCIM7qcfVcTP3TetHOfHCb3PTep+pLElNY3An9bg6bua+4Nq1rNv6NBdcu7Zjx5Qk9QYTKqQeV8fN3OeefDAXXLuWc08+uGPHlCT1BhMqChMqJO2IuieKdiJqSa1MqJCkmtU9F5pzrUmaLodlpQFkL1Dn1T0XmnOtSZougztpAI31AgGcv/SQLremGcYe8davx5fUHAZ30gCyF0iSmsvgThpA9gJJUnOZUCE1RB2THfeDQf3ekjQVgzupIQY1m3JQv7ckTcVhWakhBvU+ukH93pI0FScxLpzEWFIvcboaSe04ibEk9RmHmyXNlMOyktSDHG6WNFP23EnqCWa9jjc2XY1DspK2V+3BXUTsFBHfjYhry+ehiLgtIjZExJcjYpdSvmv5vKGsP7DlGB8r5esi4sSW8iWlbENEnNNSPmkdknqXw5CS1Bmz0XN3FrC25fOngAsz83XA48AZpfwM4PFSfmHZjohYBJwKvBFYAny2BIw7AZ8BTgIWAe8r27arQ1KPOv2oIU478jUOQ0rSDqo1uIuIBcA7gc+VzwEcC1xdNlkBnFKWl5bPlPXHle2XAldm5nOZuRHYABxRXhsy84HM/AlwJbB0G3VI6lEOQ0pSZ9Tdc/dp4I+Afy+f9wWeyMwXyufNwP5leX/gQYCy/smy/YvlE/aZqrxdHY3iPUrqtO25prz+JKk31RbcRcTJwCOZeUdddeyoiFgeESMRMTI6Otrt5mw371FSp23PNdUr159BpiSNV+dUKEcB74qIdwAvB/YELgL2iog5pWdtAbClbL8FOADYHBFzgFcBP2opH9O6z2TlP2pTxziZeSlwKVSTGO/Y1519TpWgTtuea6pXrr+xIBPg/KWHdLUtktQLauu5y8yPZeaCzDyQKiHim5n5fuBG4N1ls2XANWV5VflMWf/NrB6fsQo4tWTTDgELge8AtwMLS2bsLqWOVWWfqepoFO9R6n391qvUD9fUTetHOfHCb3PT+qq33UQMSRqvG/PcfRT4SERsoLo/7rJSfhmwbyn/CHAOQGbeC1wF3Ad8AzgzM39aeuV+D1hNlY17Vdm2XR3SrOqVocs6dOu7XXDtWtZtfZoLrq2S8PshIJWk2eSzZQufLas6NPn5oN36bjetH+WCa9dy7skHc/TCebNWryT1knbPljW4KwzuNEiaGnS2fi9g2t+xqedDUnO1C+58/Jg0gHpxuLgT9ye2fq9+zPxtp9/u35TUPXVmy0rqUb2S6dqqE1mvk32vfsr8bcesYEnTZXCn2jjUpe0x3QBrutfVWKLFdGzPtt3SDwGopN7gsKxq0w9DXU3Wbhhvuj+b2RwKnG7Wa7u213HN9cpwqFnBkqbLnjvVxp6G7modxjv9qKFxvV3T/dm0O0a3tGt7Hdecw6GS+o3BnWrTD0NdTdYa6EwMUDY//iy3PfAYxy+a3zZQa3eMmejEUH2766qOa87/pEjqN06FUjgVippsYlB14oXfZt3Wpzlo/h6sPvuYGR1jJj5+zT2svGUTpx35GgN/SdoB7aZCsedOaqiJwVhrMHXuyQe/OBHwTI8xE/aCSVL9TKiQZtFs3px/0fX3s/KWTVx0/f0vWXf0wnmsPvuYbT7hod0xZsKkgO7qleQQSfUyuJNmUZMyiA0U+k+Trj9JU3NYVtvN+etm7vhF819MZKjbWW9/PXvutvMODYG2O0aTskgH5Zp2WFwaDAZ32m5N+qM+29bct5V1W59mzX1ba3/ofSfukWt3jCYFCr045UsdzGCXBoPBnbZbv/9R72YvTb+fu1ZNChQ6PeWLJHWTU6EUToUyu7oZYDkdh9oZlCFaSf3NqVDUc7rZO9Kk3jN1XpN6JCUNJrNlVZt22ZSnHzXEaUe+pisBltNxzMzEn2dTs2VvWj/KiRd+m5vWj3a7KZI0IwZ3A6Bbf4TbTbvQpACrSUHOxMCm9btN/Hk2dVqNC65dy7qtT3PBtWu73RRJmhGHZQdAt4ZAB2X4sx9vwJ/qvrLWwGb12fNekkXa7r0ppvv0DknqVSZUFE1OqPAG8XrPwcRj98P5niqp5Kb1oy8GNkcvnNcX30WSBlG7hAqDu6JJwZ1/kF9qNjNkO11XHT9PrxFJ6m9myw6YfhwmrNtsDiF2uq46fp5mhEpSc9UW3EXEy4FvA7uWeq7OzPMiYgi4EtgXuAP4jcz8SUTsCqwEDgd+BLw3M39QjvUx4Azgp8CHMnN1KV8CXATsBHwuMz9Zyieto67v2muaei/UjpjNYKbTdfnzlCRtjzqzZZ8Djs3MNwGHAksiYjHwKeDCzHwd8DhV0EZ5f7yUX1i2IyIWAacCbwSWAJ+NiJ0iYifgM8BJwCLgfWVb2tQxEOrORG1Sdmg/aFJmsSSpfrUFd1n5t/Jx5/JK4Fjg6lK+AjilLC8tnynrj4uIKOVXZuZzmbkR2AAcUV4bMvOB0it3JbC07DNVHeqApk6B0aucd02StD1qneeu9LB9D3gEWAN8H3giM18om2wG9i/L+wMPApT1T1INq75YPmGfqcr3bVOH2phuj1wdExDbGzi1Js+71is/915px0z0c9sl1aPW4C4zf5qZhwILqHra3lBnfdsrIpZHxEhEjIyO2isy3R65OoYJB6U3cCZ/iM89+WAOmr/HNudd68cevl75ufdKO2aiE203QJSaZVayZTPziYi4ETgS2Csi5pSetQXAlrLZFuAAYHNEzAFeRZVYMVY+pnWfycp/1KaOie26FLgUqqlQdviL9rlu3rjfb0kDM51KZCaZr0cvnMfqs+dtc7uJExD3g175ufdKO2aiE203w15qltp67iJiXkTsVZZ3A44H1gI3Au8umy0DrinLq8pnyvpvZjUJ3yrg1IjYtWTBLgS+A9wOLIyIoYjYhSrpYlXZZ6o6BsJM/xfe6R657WlHJ+qezd6H1t6S7ekxm+6Qdp09fL2kV5JFeqUdM9GJtnfzWc+SOq/OYdn9gBsj4i6qQGxNZl4LfBT4SERsoLo/7rKy/WXAvqX8I8A5AJl5L3AVcB/wDeDMMtz7AvB7wGqqoPGqsi1t6hgIvTLENNvtmM36jl80n4Pm78Hxi+a/5J64doHZdP8Qz+S7VD18x3D0wv7otVPv6OfgVtJL1TYsm5l3AW+epPwBqvvvJpb/P+DXpzjWnwF/Nkn5dcB1061jUPTKENNst2M261tz31bWbX2aNfdtfcmzSDsxxNUrP0NJUv/x8WNFkx4/1iua/Iirdt+t09+7H59dK0mqV7vHj9WaLavBNtvDsnXfc9d6/HbDWO3WzaSNE89jrwy7S5J6k8+WVW1me2ix7oy/Thx/JseYeB4dspUkteOwbOGwbP+re7iy9fjAtOq6af3oi/fjHb1wXs8MqfZKOyRJM9NuWNbgrjC40/b4+DX3sPKWTZx25Gva9sCdeOG3Wbf1aQ6avwerzz5mFlvY3nTbL0nqTe2CO4dlpRmY7tDoxEzaXuHQriQ1lz13Rd09dw6DSZKkTjFbtgeY4dgsPotTktSrHJadJQ6DNYvP4pQk9Sp77maJj/fpjNmcy66dup/F2doOewklSdvD4E59pe7h7dbjd+IZsRNNN1C76Pr7WXnLJi66/v6BHNI3oJWkmXNYVn2ldXi7jiSV1uNfdP39fO17/8pTP36eT5/6ksckz0gnJjEeBA57S9LMGdypr4z1mMHP5mqDKgCYOGHwjh6/DtMN1M56++vZc7edXwxcO92mXs/eHsSAVpI6xWFZ9a2J971dcO1a1m19mguuXduRYb1fO3wBB83fg187fAHQmaHC6Q7n1n2PZq8P9XqPqiTNnMFdH/E+pPEmBgC/ffQQe+22M7999FBHgpc1921l3danWXPfVqAzAVGv/AzrTgiRJHWPw7J9xPuQ2rt7y5M88ePnuXvLkx0Z1pt4jE4cs1d+hnUPP0uSuscnVBT98GzZXr9Pqtv64fz0QxslSb2v3RMqDO6KfgjuNH2dSK6QJKlX+fgxDZzW5ApJkgaJwZ0a6dyTD+ag+Xtw7skHA/UmMvRKkoQkSWBwpx4308Dp6IXzWH32MS8OydY59UevTysiSRosZsuqp3Uqu7TOSXGdcFeS1Etq67mLiAMi4saIuC8i7o2Is0r5PhGxJiLWl/e9S3lExMURsSEi7oqIw1qOtaxsvz4ilrWUHx4Rd5d9Lo6IaFeH+k+n5mOrc1JcJ9yVJPWSOodlXwD+IDMXAYuBMyNiEXAOcENmLgRuKJ8BTgIWltdy4BKoAjXgPOAtwBHAeS3B2iXAB1r2W1LKp6pDfcbASZKk7VNbcJeZD2XmnWX5aWAtsD+wFFhRNlsBnFKWlwIrs3IrsFdE7AecCKzJzMcy83FgDbCkrNszM2/Naj6XlROONVkdkiRJjTYrCRURcSDwZuA2YH5mPlRWPQzML8v7Aw+27La5lLUr3zxJOW3qkKS+Z4a2pHZqD+4i4pXA3wIfzsynWteVHrdaZ1FuV0dELI+IkYgYGR0drbMZktQxZmhLaqfW4C4idqYK7L6YmV8txVvLkCrl/ZFSvgU4oGX3BaWsXfmCScrb1TFOZl6amcOZOTxvnk8xkNQfOpVoJKmZ6syWDeAyYG1m/mXLqlXAWMbrMuCalvLTStbsYuDJMrS6GjghIvYuiRQnAKvLuqciYnGp67QJx5qsDknqeyYaSWqnznnujgJ+A7g7Ir5Xyv4Y+CRwVUScAWwC3lPWXQe8A9gAPAucDpCZj0XEJ4Dby3bnZ+ZjZfmDwBXAbsDXy4s2dUiSJDVaVLekaXh4OEdGRrrdDEmSpG2KiDsyc3iydT5+TD3NrEBJkraPwZ162kyzAg0KJUmDymfLqqfN9LmtnXomrSRJ/cbgTj1tLCtwe800KJQkqd8Z3KmRZhoUSpLU77znTpIkqUEM7iRJkhrE4E6aJjNwJUn9wOBOmiYf1i5J6gcmVEjTZAauJKkfGNxJ02QGriSpHzgsK0mS1CAGd5IkSQ1icCdJktQgBneSJEkNYnAnSZLUIAZ3kiRJDWJwJ0mS1CAGd5IkSQ1icCdJktQgBneSJEkNEpnZ7Tb0hIgYBTZ1ux0dNBd4tNuN6DGek/E8H+N5PsbzfIzn+RjP8zFeN87HazJz3mQrDO4aKiJGMnO42+3oJZ6T8Twf43k+xvN8jOf5GM/zMV6vnQ+HZSVJkhrE4E6SJKlBDO6a69JuN6AHeU7G83yM5/kYz/MxnudjPM/HeD11PrznTpIkqUHsuZMkSWoQg7sGiIgDIuLGiLgvIu6NiLNK+T4RsSYi1pf3vbvd1tkUETtFxHcj4tryeSgibouIDRHx5YjYpdttnC0RsVdEXB0R/xIRayPiyEG+PiLi7PJv5Z6I+FJEvHyQro+I+HxEPBIR97SUTXo9ROXicl7uiojDutfy+kxxTv68/Ju5KyL+LiL2aln3sXJO1kXEiV1pdI0mOx8t6/4gIjIi5pbPjb9GpjofEfH75Rq5NyL+e0t5V68Pg7tmeAH4g8xcBCwGzoyIRcA5wA2ZuRC4oXweJGcBa1s+fwq4MDNfBzwOnNGVVnXHRcA3MvMNwJuozstAXh8RsT/wIWA4Mw8BdgJOZbCujyuAJRPKproeTgIWltdy4JJZauNsu4KXnpM1wCGZ+cvA/cDHAMrv11OBN5Z9PhsRO81eU2fFFbz0fBARBwAnAD9sKR6Ea+QKJpyPiPgVYCnwpsx8I/AXpbzr14fBXQNk5kOZeWdZfprqD/f+VBfdirLZCuCUrjSwCyJiAfBO4HPlcwDHAleXTQbmfETEq4BjgMsAMvMnmfkEA3x9AHOA3SJiDvAK4CEG6PrIzG8Dj00onup6WAqszMqtwF4Rsd+sNHQWTXZOMvMfMvOF8vFWYEFZXgpcmZnPZeZGYANwxKw1dhZMcY0AXAj8EdB6w37jr5EpzsfvAp/MzOfKNo+U8q5fHwZ3DRMRBwJvBm4D5mfmQ2XVw8D8brWrCz5N9Qvo38vnfYEnWn5Rb6YKgAfBEDAKXF6GqT8XEbszoNdHZm6h+h/2D6mCuieBOxjc62PMVNfD/sCDLdsN4rkB+C3g62V5IM9JRCwFtmTmP09YNZDnA3g9cHS5neNbEfEfSnnXz4fBXYNExCuBvwU+nJlPta7LKi16IFKjI+Jk4JHMvKPbbekRc4DDgEsy883AM0wYgh2w62Nvqv9ZDwG/AOzOJMNPg2yQrofpiIg/obr95Yvdbku3RMQrgD8GPt7ttvSQOcA+VLdD/VfgqjJK1HUGdw0RETtTBXZfzMyvluKtY13j5f2RqfZvmKOAd0XED4ArqYbbLqIaKphTtlkAbOlO82bdZmBzZt5WPl9NFewN6vXxdmBjZo5m5vPAV6mumUG9PsZMdT1sAQ5o2W6gzk1E/CZwMvD+/NncYYN4Tn6R6j9E/1x+ty4A7oyIn2cwzwdUv1u/Woajv0M1UjSXHjgfBncNUP6ncBmwNjP/smXVKmBZWV4GXDPbbeuGzPxYZi7IzAOpbmr9Zma+H7gReHfZbJDOx8PAgxFxUCk6DriPAb0+qIZjF0fEK8q/nbHzMZDXR4uprodVwGklI3Ix8GTL8G2jRcQSqts73pWZz7asWgWcGhG7RsQQVSLBd7rRxtmSmXdn5s9l5oHld+tm4LDy+2VQr5GvAb8CEBGvB3YBHqUXro/M9NXnL+CtVEModwHfK693UN1ndgOwHrge2Kfbbe3CuXkbcG1Zfm35B7YB+Aqwa7fbN4vn4VBgpFwjXwP2HuTrA/hT4F+Ae4D/Bew6SNcH8CWq+w2fp/ojfcZU1wMQwGeA7wN3U2UZd/07zNI52UB179TY79W/atn+T8o5WQec1O32z8b5mLD+B8DcQblGprg+dgG+UH6P3Akc2yvXh0+okCRJahCHZSVJkhrE4E6SJKlBDO4kSZIaxOBOkiSpQQzuJEmSGsTgTpJmKCLeFhEZEb/dUnZoKfvDbex7SnnAuCR1lMGdJM1Ay9Ms7gHe07LqfcDEZ29O5hRg0uCu5diStN38BSJpoEXE7sBVVI8I2gn4BPAk8GngWeCfgNdm5skR8d+oHsP0WqonXfw1sAnYMyLmUz2yawlwXcvxf5Fqgtd55XgfoHoe5buA/xQR5wK/RvWUme9RTUr+pYj4R+AvgVdSzXr/m5n5UER8CPgdqmed3peZp9ZwWiT1MYM7SYNuCfCvmflOgIh4FVVv3LFUTyj48oTtFwFvzcwfR8TbStnVwK8D36Waqf65lu0vBX4nM9dHxFuAz2bmsRGxiurpKVeXegF2yczh8qzobwFLM3M0It4L/BnwW8A5wFBmPhcRe3XwPEhqCIM7SYPubuB/RMSngGuBp4GNmbkeICK+ACxv2X5VZv54wjGuogoC30D1mKL/WPZ9ZVn+SgneoHrU2VTGAsmDgEOANWW/nagefQTVI+S+GBFfo3qUnCSNY3AnaaBl5v0RcRjV85gvoHq+ajvPTHKMhyPieeB44CxKcEd1X/MTmXnoNJszduwA7s3MIyfZ5p3AMcB/Bv4kIn4pM1+Y5vElDQATKiQNtIj4BeDZzPwC8OdUgdmB5V45qBIkpuPjwEcz86djBZn5FLAxIn691BUR8aay+mlgjymOtQ6YFxFHlv12jog3RsTLgAMy80bgo8CrqO7Jk6QX2XMnadD9EvDnEfHvwPPA7wJzgb+PiGeBm5g6CHtRZv7fKVa9H7ikJE7sDFxJlU17JfA3JUHi3ROO9ZOIeDdwcbkHcA5Vgsf9wBdKWQAXZ+YT2/d1JTVdZGa32yBJPaskTfxhZp7c5aZI0rQ4LCtJktQg9txJkiQ1iD13kiRJDWJwJ0mS1CAGd5IkSQ1icCdJktQgBneSJEkNYnAnSZLUIP8fSSxMRbJ8ewoAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(x='sqrMetres',y='price', data = mieszkania_dev, linewidth = 0, s = 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Zadanie - policzyć rmse dla predykcji ze zbioru deweloperskiego modelu baseline i naszego modelu regresji liniowej" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "Y_dev_predicted = predict_price(X_dev)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "117309.3154367544" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_dev, np.ones_like(Y_dev) * Y_dev.mean())" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "104227.56492755697" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_dev, Y_dev_predicted)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Przypadek wielowymiarowy" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAFICAYAAAAYvikoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAyWUlEQVR4nO3dfXzV5Znn8e+VkGCEACoQlSigkAiC1ZJpSxmttmBxYaSO466dtrq2HXd02vrQ7b6chaUdFnbamZ2qM1vtum592J3RyjgVCzoqHa0somMoWIE0gCAlKCEqDwECCcm9f5yTTn4HFLrrua8D9+f9evG6knMO3NfvnJBznfvRQggCAABAXGXeCQAAAKSIIgwAAMABRRgAAIADijAAAAAHFGEAAAAOKMIAAAAcHJdFmJn9yMx2mNmaY3z8vzazdWa21sz+rtj5AQAAHI0dj/uEmdklkvZKejiEMOEojx0r6TFJnw4h7DSz4SGEHTHyBAAAeD/HZU9YCOFFSe/1vc3MzjWzfzSzlWa2zMzOy9/1R5J+EELYmf+7FGAAAMDdcVmEvY/7JH09hDBJ0r+XdE/+9jpJdWa23MxeNrPpbhkCAADk9fNO4MNgZgMlfVLSQjPrvbl/PvaTNFbSpZJqJb1oZhNDCLsipwkAAPAbJ0QRplyP3q4QwoVHuK9F0ishhC5Jm81svXJF2asR8wMAAMg4IYYjQwh7lCuwrpEky/lI/u4nlOsFk5kNVW54cpNDmgAAAL9xXBZhZvaIpBWS6s2sxcy+IukLkr5iZq9JWitpVv7hz0h618zWSXpe0rdCCO965A0AANDruNyiAgAA4Hh3XPaEAQAAHO8owgAAABwcd6sjhw4dGkaNGuWdBgAAwFGtXLnynRDCsCPdd9wVYaNGjVJjY6N3GgAAAEdlZlve7z6GIwEAABxQhAEAADigCAMAAHBAEQYAAOCAIgwAAMABRRgAAICDohVhZvYjM9thZmve534zs782s41m9ksz+2ixcgEAACg1xewJe1DS9A+4/wpJY/N/bpR0bxFzAQAAKClFK8JCCC9Keu8DHjJL0sMh52VJQ8zsjGLlAwAAUEo854SNkLS1z/ct+dsAF5vf2ae5i9Zo8zv7vFMBACTguJiYb2Y3mlmjmTW2tbV5p4MT1APLN+vhFVv0wPLN3qkAABLgWYRtk3RWn+9r87cdJoRwXwihIYTQMGzYEc/APGEsbNyqC//sWS1s3Hr0B+NDdcOU0bpu8kjdMGW0dyoAgAR4FmFPSrouv0ryE5J2hxDedsynJCxY0qRdHV1asKTJO5XkjB46QPNmTdDooQO8UwEAJKCYW1Q8ImmFpHozazGzr5jZH5vZH+cf8pSkTZI2Svofkm4uVi7Hk9kzxmlIVYVmzxjnnQoAACgiCyF45/BbaWhoCI2Njd5pAAAAHJWZrQwhNBzpvuNiYj6QAlZnAkBaKMKAEsHqTABISz/vBADk9K7KZHUmAKSBIgwoEb2rMwEAaWA4EgAAwAFFGAAAgAOKMAAAAAcUYQAAAA4owoC8e57fqLrZT+ue5zd6pwIASABFGJB319IN6uzu0V1LN3inAgBIAEUYkHfr1LGqLC/TrVPHeqcCAEgA+4QBeTdfNkY3XzbGOw0AQCLoCQMAAHBAEQYAAOCAIgwAAMABRViJ2fzOPs1dtEab39nnnQoAACgiirAS88DyzXp4xRY9sHyzdyoAAKCIWB1ZYm6YMjoTAQDAiYkirMSMHjpA82ZN8E4DAAAUGcORAAAADijCCjAxHgAAxEARVoCJ8QAAIAaKsALTxteovqZa08bXeKfiwrsn0Lt9AABioQgr8Ny6VjW3tuu5da3eqbjw7gn0bh8AgFhYHVkg9S0ivK/fu30AAGKxEIJ3Dr+VhoaG0NjY6J0G8KHb/M4+PbB8s26YMlqjhw7wTgcA8CEws5UhhIYj3cdwJFAiGIoFgLQwHAmUCIZiASAtFGFAieC0BABIC8ORAAAADijCAAAAHFCEAQAAOKAIAwAAcEARBgAA4IAiDBneZzd6t+8p5WsHgBRRhCHDe8NQ7/Y9pXztFKAAUsQ+Ycjw3jDUu31PKV97bwEqib3SACSDsyMBuOPcTAAnqg86O5KeMADuOC0AQIqYEwYAAOCAIgwAAMABRViJYZUYAABpoAgrMSlvUwAAQEqYmF9iUt6mAACAlNATVoDhQAAAEANFWAHv4UDv9gEAQBxFHY40s+mS7pZULun+EMJ3C+4/W9JDkobkH3NHCOGpYuZ0NN7Dgd7tAwCAOIq2Y76ZlUtaL2mapBZJr0r6fAhhXZ/H3CdpVQjhXjMbL+mpEMKoD/p32TEfAAAcLz5ox/xiDkd+TNLGEMKmEEKnpEclzSp4TJA0KP/1YElvFTEfAACAklHMImyEpK19vm/J39bXdyR90cxaJD0l6etFzOe4kPrCgGUb2vTZO1/Usg1t3qlEl/prDwCp8Z6Y/3lJD4YQaiX9K0n/y8wOy8nMbjSzRjNrbGs7sd+cU5+YP39xk5pb2zV/cZN3KtGl/toDQGqKOTF/m6Sz+nxfm7+tr69Imi5JIYQVZnaSpKGSdvR9UAjhPkn3Sbk5YcVKuBSkPjF/zsxxmr+4SXNmjvNOJbrUX3sASE0xJ+b3U25i/meUK75elfSHIYS1fR7ztKQfhxAeNLNxkn4maUT4gKSYmA8AAI4XLhPzQwiHJH1N0jOSmiQ9FkJYa2bzzOzK/MO+KemPzOw1SY9I+rcfVIABAACcKIq6T1h+z6+nCm6b2+frdZKmFDMHAACAUuQ9Mb/kpL5Czfv6vdsHACAWirACqa9Q875+7/YBAIilqMORxyPvFWqb39mnB5Zv1g1TRmv00AHR2/e+fs/2l21o+83KzIvHDovePgAgLUVbHVksJ/rqyLmL1ujhFVt03eSRmjdrgnc6SfnsnS+qubVd9TXVeua2S7zTAQCcAD5odSQ9YSXGuycqZSnvUQYAiI+eMAAAgCLxOsAbxyFWJwIAEAdFWIHUixBWJwIAEAdzwgosWLJOS5t26K1dHbr/+t/xTic65qQBABAHPWEF3tixLxNTM3roAM2bNcFlewyka9mGNn32zhe1bEObdyoAEA1FWIF5nztf9TXVmve5871TAZIxf3GTmlvbNX9xk3cqABANRViBi8cO0zO3XcJmnUBEc2aOU31NNduDAEgKc8IAuMt9+OGDD4C00BMGAADggCKsQOpbVAAAgDgowgqwTxYAAIiBOWEF2CcLiG/zO/v0wPLNumHKaLZHAZAMesIKeO+TxXAoUkQPNIAUUYSVGO83I+9NMylC03TDlNG6bvJIeqABJIUirMR4vxl5b5rpXYQCABALRViJ8R4OnXXhmaosL9OsC890ad+7CIUPim8AKWJiPjIWrX5Lnd09WrT6Ld182Zjo7fcWoUgLC2IApIiesBLjPSfqqxeP1pCqCn314vTeDL2f+5R59wADgAeKsBJz99L1enjFFt29dL1L+69v261dHV16fdtul/Y9MSQGAIiJIqyAd2/I3oOHMjG2lOdkeV+798pUAEBcFGEFvHtDBvbvl4mxpTws5H3t3itTAQBxMTG/gPcE4Vum1mlQVUWSPVGpmzNznOYvbtKcmeO8UwEARGAhBO8cfisNDQ2hsbHROw0AAICjMrOVIYSGI93HcCQAAIADijAAAAAHFGEoKd6rUwEAiIUiDCXFe3UqAACxsDoSJcV7dSoAALHQE1aA4TAAABADRVgBhsN8eT7/7FgPAIiJIqyA99E1qZs2vkb1NdWaNr4mett/+vjram5t158+/nr0tiV6YT3x3APwQBGGkvLculY1t7bruXWt0ds+1NOTibHRC+uH5x6ABybmF7h76Xo9sfot7eno0l3XXuSdTnI8J+ZPGDFY2/fs0IQRg6O3LbEowRPPPQAPFGHI2PzOPj2wfLNumDI6uUO8Z88YrzOHVLm9EfceII74eO4BeKAIK5D6Adq9wzKSXN6UFixZp6VNO/TWrg7df/3vRG2bN2I/KRf/ANJFEVYg9Tdi72GZN9r2ZiLS4F38A4AHijBkeBeh82ZN0PzFTZozc5xbDojPu/gHAA8WQvDO4bfS0NAQGhsbvdMAAAA4KjNbGUJoONJ9bFEBAADggCKsgPemjd67ti9s3KoL/+xZLWzc6tJ+yrx/9gAAcVGEFfDetHH+4iY1t7Zr/uIml/YXLGnSro4uLVji037KvH/2AABxFbUIM7PpZtZsZhvN7I73ecy/NrN1ZrbWzP6umPkcC+9ji+bMHKf6mmq3iemzZ4zTkKoKzZ7BxPjYvH/26IkDgLiKNjHfzMolrZc0TVKLpFclfT6EsK7PY8ZKekzSp0MIO81seAhhxwf9u0zMB4pj7qI1enjFFl03eSTbRADAh8RrYv7HJG0MIWwKIXRKelTSrILH/JGkH4QQdkrS0QqwFNAbkS7v1967Jw4AUlPMImyEpL6zu1vyt/VVJ6nOzJab2ctmNr2I+RwX7l66Xg+v2KK7l653ad+7EEh5YYD3a9+7Rxw71gNAHN4T8/tJGivpUkmfl/Q/zGxI4YPM7EYzazSzxra24q4a9F6d6M17crjnwgDvAhQAkJZiFmHbJJ3V5/va/G19tUh6MoTQFULYrNwcsrGF/1AI4b4QQkMIoWHYsGFFS1jyX514y9Q6XTd5pG6ZWufSvveQlOfCAO8C1Pu1BwDEVcxji16VNNbMRitXfF0r6Q8LHvOEcj1gD5jZUOWGJzcVMaejmjNznOuxOd7HBnm378n76JyUn3sASFHResJCCIckfU3SM5KaJD0WQlhrZvPM7Mr8w56R9K6ZrZP0vKRvhRDeLVZOx+LiscP0zG2X6OKxxe1xez+pD4nN++k67ero0ryfrjv6gwEAOI4dc0+YmY2UNDaEsNTMqiT1CyG0f9DfCSE8Jempgtvm9vk6SLo9/wf6lyExSUn2ikysHaSX3nhPE2sHRW879eceABDXMRVhZvZHkm6UdKqkc5Wb3/VDSZ8pXmpp8h4S83bTpWP07t4m3XTpmOhtez/3yza0/WYo3KsnFgAQz7EOR/6JpCmS9khSCGGDpOHFSiplqW8T8Ny6VjW3tuu5da3R2/Z+7r0XhQAA4jrWIuxgfsNVSZKZ9ZNUnK32naU+J8ub5+pM79f+qxeP1pCqCn314jR7QQEgNcdahP3czP6jpCozmyZpoaSfFi8tP94bZqbOszfKe4uK5Rvf0a6OLi3f+I5L+wCAuI51Yv4dkr4i6XVJ/065yfb3FyspT3sPHspEpMN7ThgAIC3H2hNWJelHIYRrQgh/IOlH+dtOOAP798tExOU5JNiyc79e2fSeWnbuj962xGatnryHogGk6ViLsJ8pW3RVSVr64afj7+pJtaqvqdbVk2q9U0mS55Cg98R474UBKfMeigaQpmPt7jkphLC395sQwl4zO7lIObnquzqPbQLi8xwS9D4tAX4Yigbg4Vh7wvaZ2Ud7vzGzSZI6ipOSr2nja1RfU61p42tc2r/n+Y2qm/207nl+Y5Lte/I+LQF+6IUE4OFYi7BbJS00s2Vm9n8k/Vi5I4lOOI+vbFFza7seX9ni0v5dSzeos7tHdy3dkGT7DAsBAFJxTEVYCOFVSedJuknSH0saF0JYWczEUnXr1LGqLC/TrVPHJtl+yvuEAQDS8oFzwszs0yGEfzKz3y+4q87MFEL4hyLm5uKWqXUaVFXhNjfk5svG6ObL4h/Z0+uKiWdo+54DumLiGS7t9w4LeeDsSABATEebmP8pSf8k6feOcF+QdMIVYZ5FQCm4+X83qmn7Xr26+V09feunore/+Z19emD5Zt0wZXT0+TlMzgYAxPSBRVgI4dtmVibp6RDCY5FycuVZBEjSwsatWrCkSbNnjNM1DWdFb7+5dW8mxubZG5V6AQ4AiOuoc8JCCD2S/kOEXEqC98TwBUuatKujSwuW+OxV9eUpo1VmuejBc3Uqc8IAADEd6+rIpWb2783sLDM7tfdPUTNz4jkxXJJmzxinIVUVmj3DZ6+qOTPHa9Ofz9CcmeNd2r/3hY1qbm3XvS/E3yLDuwAHAKTlWDdr/TfKzQG7ueD2cz7cdPx5D0m1tR/U/s5utbUfdMvB0+vb9mRiTMwJA5AS7+k3OPaesPGSfiDpNUmrJf2NpPOLlJOrhY1bdeGfPauFjVtd2vfep8vbTZ86V5XlZbrpU+dGb5sNOwHE5jkNgt5/f8dahD0kaZykv1auABufv+2E4z0n67rJI1VmuejBe17U9j0H1Nndo+17Dri0DwAxeRZC3tNvcOzDkRNCCH0nCT1vZuuKkZC32TPG/WZ1ooc3392nnpCLHrz3ypo2vkavbHrP7dgoAGnxHpLznAbhPf0Gx94T9gsz+0TvN2b2cUmNxUnJ1zUNZ2n1ty932R5Ckn61vT0TY/P+ZNT3APXYvHsBvdsHPCzb0KbP3vmilm1oc2nfe0iOaRBpO9aesEmSXjKzX+e/P1tSs5m9LimEEC4oSnYJOu/0arXs7NB5p1e7tO/9ycjzU6F3L+DdS9fridVvaU9Hl+669qLo7SNN3j1B8xc3qbm1XfMXN+mZ24ZFb58FOfB0rD1h0yWNVm4H/U/lv54uaaaOvJv+cct7Yv5nzz9dQ6oq9NnzT3dp/0v3v6xRdyzRl+5/2aV9z0+FnnuUAV68e4LmzByn+ppqzZnpMwWEnih4OtYDvLd80J9iJxnTvJ+u066OLs37qc+Utzk/+aV2dXRpzk9+6dL+so3vZmJsnkNynkOhUu7c0usmj9QtU+tc2vfkPSTlPRTs2b73FISLxw7TM7ddoovHxu8FA7wda09YMsYMH5iJsR3szsbYJpxRnYmx3b10vR5esUV3L10fve2JIwZrSFWFJo4YHL1tKe1P5H2HpDx49wZ5tp/yzx3gjSKsQFVlWSbGVlYQY+vqycbYtuRXhW5xWB16/7LN2tXRpfuX+bwRe/fGePIekvLuDfJuH4APirACb+8+kImxfe8PLtCQqgp97w981jqMHnpyJsa2cce+TIzJuxDw7o3x5D0k5d0b5N0+AB8UYQVuvnSMhlRV6OZLx3in4uLZta2ZGNv0CadnYkzehQC9IQCQFoqwAj9Z1aJdHV36yaoWl/bnLc4vDFjsszCgPr81Rr3TFhn/uHZ7JsbkPTmc3hAASAtFWIHXWnZnYmwTRwzKxNju+eIkXTd5pO754iSX9j2v33tyOAAgLRRhBT5SOzgTY7vp0jGqr6nWTU7DoY1vvqcnV7+lxjffc2n/qotqNaSqQlddVBu9be85YQCAtFCEFVhw1QW6bvJILbjKZ2K8915V31m0Vrs6uvSdRWtd2vdcoeg9JwwAkBaKsALe83I6OrszMbbKirJMjC3l3ijvOWkAgLgowkrM479oycTYKvtZJsaWcm8Uc9IAIC0UYQW8z46srxmYibFNHDEkE2Njw9I0ewEBIEUUYQW+vWiNdnV06duL1ri0/3sfGaHK8jL93kdGuLT/0bNPUWV5mT569iku7XseW+RdANaecrI+fs6pqj3FZ6NcwIP3/zvAE0VYge6ekImx/eCFjers7tEPXtjo0v69P39Dnd09uvfnb7i0v+Xd/ZkYk2cBKKW9Yz7Sxc89UtbPO4FSM2nUqXrpjXc1adSpLu17nx05fGCl2g8c0vCBlS7t/2r7nkxMSe9O+eyYj5Twc4+UUYQVuOnSc/Xu3k7ddOm5Lu1798S17OzIxNgGVJaro6tHAyrLo7d99aRaNb3drqsnxd+jTPqXlblASvi5R8oYjizw/Web1dzaru8/2+zSvvexQYfyxd8hpyLwwvxctAsd5qR579HGFhUAkBaKsAJrtu3JxNhOG9g/E2P75uX1qiwv0zcvr3dpf/aM8bpu8kjNnjE+etveB2jPXbRGza3tmuu0KAQAEBdFWIHrPzlKZZaLKZpYO1ijhw7QRKdjm55+/W09+s9b9fTrb0dv+3tPN+nhFVv0vad99uk6d9jATASAExkrYynCDtPZ3aOekIse9nceysTYbnt0lZpb23Xbo6tc2r9r6QZ1dvforqUborf9j2tbMzG26z85SvU11W4fALz3yEsZb0ZIEStjKcIOM3HEYA2pqtDEET49QW/s2JeJse3s6MrE2D593rBMjGn6+TWZGNvjK1vU3Nqux1f6nJawYEmTdnV0acESduyPjTcjpMh7CkgpYHVkgb96tlm7Orr0V88265qGs6K3X9GvLBNjqxs+UE3b96puuM+Q2PKN72ZiTD/8UkP0NkvJ7BnjtGBJk2bPYMf+2NimASliZSw9YYdp7ziUibH9+e9PVH1Ntf789ye6tF9/+qBMjK32lKpMjMl7SOjqSbWqr6l22yLjmoaztPrbl7t8+Ehd75vR6KEDvFNJDquS4amoRZiZTTezZjPbaGZ3fMDjrjazYGbuXRGf//jZKrNc9LB99wG17jmg7bsPuLTvXQi8vbsjE2Py3jH/O0+uVXNru77z5FqX9gEP3h9+5i9uUnNru+YvZhge8RWtCDOzckk/kHSFpPGSPm9mh+07YGbVkm6R9Eqxcvlt/OxXreoJuejhP+XPrvxPTtsUPPTSm2pubddDL73p0v7eg92ZGLftQ5kY2xtt+zIRSIH3fLg5M8epvqZac2YyDI/4itkT9jFJG0MIm0IInZIelTTrCI/7z5K+J8mn66eA9zYBnV09mRjbP29+LxNju31anSrLy3T7tLrobQ/s3y8TY7sm3/t4jVMvJODBe3L2xWOH6ZnbLtHFY+MvBgKK+W4zQlLfte4tkj7e9wFm9lFJZ4UQlpjZt4qYyzEbddoAlVkueujfr0wdh3rU32li/p4DhzIxtmHV/XVyZbmGVcffrHZja3smxnbzZWNUVVnO5GwkhcnZSJnbxHwzK5P0fUnfPIbH3mhmjWbW2NZW3MmTP1q+WT0hFz10HOrJxNTM++k67ero0ryfrove9pq32zMxNu9hGaTJe04WkLJiFmHbJPVdZlWbv61XtaQJkl4wszclfULSk0eanB9CuC+E0BBCaBg2rLhdxr1HJjodnehuUP/yTIxt+KD+mRiTFcTYpo2vUX1NtaaN99mnjDfjNFH8A36KWYS9KmmsmY02s0pJ10p6svfOEMLuEMLQEMKoEMIoSS9LujKE0FjEnErexWNOy8TY9uQnxO9xmBgvSVvf25+JMZ2XPzT9PKfD0+994Q01t7br3hfecGnf882YAtCP95wsIGVFK8JCCIckfU3SM5KaJD0WQlhrZvPM7MpitXu8W711dyampqs7ZGJM7flVke1OqyNf+/WuTIzN87QIemP8sEcZ4Keoc8JCCE+FEOpCCOeGEBbkb5sbQnjyCI+9tBR6waoqyjIxttpTTsrE2EbmN0kd6bBZqvQvP5Aez/7Zp1ZlYmx1+R64OqeeuL6nRcRGbwyAFLFjfoEB+e0JBjhtU/De/q5MTK397oIY08mV/TIxtpGnnZyJse3Onxe62+HcUHpjAKSIIqxAR2d3JsbWmV8V2em0OnLgSeWZGNupJ1dkYkzv7u3MxNi8Tyu46OxTMjElzEkD4IEirMD+fPG136kI827/7d0HMzG2wVWVmRjTqq27MjG259a1qrm1Xc+t8zmtYcFVE3Xd5JFacJXPuaWemJPmJ/UCmLMr00YRVsB7Tla/MsvE2Pr3s0yM7TPjhqvMcjE13vOiUh4S9H7uU5Z6AczZlWmjCCsQ8rtEBafdovble8D2OfWEHTwUMjG2R175tXpCLsbmuShAklp27tcrm95Ty87423OkLuUC1FvqBTBnV6bNZwZyCevu6clExFVZUaZ9Xd2qdFidamWSevLRwTceWaWd+7v0jUdWadXcy32SACJL/dii3NmVnFuZKnrCCnjPifLm3RvkuTChMj8EXOk0FLwrvyJ1l9PKVOamAGnh/7w/irACFeWWibGNHTYgE2Prn++B6u+0T5rncGxXTzbG9pXfHa0yy0UPzE1JExPj0y1EvvHIKjW3tusbj6zyTiVZFGEFzhx0UibGtqFtXybGdv4ZgzIxJSMGn5SJsX3hEyP1xU+M1Bc+MdKl/VkXnqnK8jLNuvDM6G2n/EYoSTPvflGj7liimXe/GL3tBUvW6eEVW7RgybrobUv+ReDcRWvU3NquuYvWuLTvaWe+132nU+87KMIOs2VnRyampjF/ZE6j09E5nrxfe+9VYgtXblVnd48WrtwavW3vXjjvInDN2+2ZGNOv8m3+yqFtyf/n/txhAzMxJV/N975/1an3HRRhh+mdDuQ0LSh51f3LMzGmhrOHZGJs3qvEPN+MvFeI3fpobljm1kd9hmUGn9QvE2M674zqTIxt2vga1ddUa9r4Gpf2Z88Yr+smj9TsGeNd2vc0Z+Z4bfrzGZozM71rl/x7YSWKsMN8pHZwJqbGe2L+mOEDMzGm2lNPzsTUXP/JUaqvqdb1nxzlnUp03osifmf0qZkYk/fr7r1JMduTpMu7F1aiCDvMaQP7Z2JqQkGMbf2OvZkY0472A5kYm/cvhMdXtqi5tV2Pr2yJ3rZ3T9Qp+WOyTnE4LsubdxHk3QPszbM3phR6gjx598JKFGGH2ZafD7Qt0Tlh3kXY2adUZWJMzdvbMzG2iSMGa0hVhSaO8OmF3XvwUCbGtCt/aPguh8PDJenOay9SfU217rz2Ipf2PXkXQd49Ud6FiOeHr7uXrtfDK7bo7qXro7ddCrw/gEgUYYdZ39qeianxnhO3+Z39mRjT7nwBsNupELjnhY3a1dGle17Y6NL+wP79MjGmuuHVmRhb7Skn6+PnnKraU3yGoj2fe+8iyHtRhHcPdCn0xqTK+wOIRBF2mMp+ZZmYmp6QjbEdyG/SesBhs9beJh2aliSdkd8a4wynLTKunlSr+ppqXT2pNnrbI/I9nyMcekAl/x6BuppqVZaXqa4mfhHq3RM094m1uS0inljr0r73G7Fnb8wtU+t03eSRumVqXfS2S4H3BxCJIuwwB/M7dR702rETyRpefVImxnbvC2+oubVd977whkv7njyHYiXp3p+/oc7uHt378/jPvXdP0LnDB2RibN5vxJ5FoPe1g7MjD+M9JwrpunpSrZrebnfpiZKk1/J7w73msEec53CcpN/0Ann1Bk0cMUgvvfGeJo6Iv0ly75u/V0/Q7BnjdeaQqmQn5qd+dmbqKMIKeBdhg/qXa8/Bbg1y2CerFIwdNkAb2va5Hdvk6aGX3lRza7seeulNXTw2/oG+Z592spq2t+vs0+LPi7plap0GVVW4vRFvyp9QscnppIoFV12gB5Zvdu0N8eLdPuCJ4cgCg/PFz2CnIqgjPwza4TQcOiG/YeMEp40bP1U/XGWWi6l5Y8e+TIztQP5n7oDDz573sIj3uZ2e1+89Jwx+eO39UYQV2H2wOxNj68rPiO9ymhm/Lr89wzqnbRru/z+b1RNyMTYriLE1jDolE2Ob97nzVV9TrXmfO9+lfU8p7xzuPScMfnjt/VGEFbh4zGmZGFtleTbG5r060tM5+SHQc5yGQhetfisTY7t47DA9c9slLkOhqX8i97x+79WB8MNr748irMR0dWcj4tny7r5MjK0uvzqszmmV2D3Pb1Td7Kd1z/Px9ylL/RO55/V7DwXDT+qvfSl8+KMIK7Bs47uZGJtZNiIe733C1rzdnomx3bl0vTq7e3Snw15ZqW9YSY8EEF8pfPijCCsxKQ8Hps57KPy0AZWZGNP3n21Wc2u7vv9sc/S2S0HqPRLwUQo9QZ5K4cMPRVgB78nZ5ZaNqakoy8aUrNq6KxNje3dvZybGtOatPZmIeBY2btWFf/asFjZudWk/9ULAUyn0BHkqhQ8/Cb7VfbCqfpaJsXWHbExOwuOxe/Mrcvc6rcy9bVqdKsvLdNu0+EeYXD95lMosF1PkWYgsWNKkXR1dWrCkKXrbkv+RUSkrhZ6g1FGEFdh/KGQi4urKV59dCVah08+vycTYrph4hq792Fm6YuIZ0dvu7O5RT8jFFHkWIjdeco4qy8t04yXnRG8bvkqhJyh17JiPjIGV5drb2a2BTntkDBtYqba9nRo2MP68JG8//FKDa/u9QxOSou9gPm18jV7Z9F6yE/N3tB/IxJjWt7ars7tH61t9FoR4n5bgbdmGNs1f3KQ5M8e5bA8DX/SEFfCek9U7Cuo0GqqD+aWBB52WCE4ZMzQTU+I9N8ZzaOK5da1qbm3Xc+tao7ddCt7efSATU5J6b8z8xU1qbm3X/MU+w8HwRRFW4Jz8L4JznH4hlOerv3KnKvDk/Iz4k51mxm/Mfxrf6PCpvLIsG2PzniTbsnO/Xtn0nlp27o/edupzUxpGnpqJMVWUl2Ui4pozc5zqa6o1Z+Y471SS4/3BV6IIO8yG/AG+G5wO8vXeosL72CbPvbI6e7IxNu9CZO4Ta9Xc2q65T6yN3rZnAVgKPE9LePwXLZmIuDxPqkid9wdfiSLsMN5bVPTvV5aJqRk2sCITU+I9LDPk5IpMjCn1IZlbp45VZXmZbp06NnrbX56SO7z8y4n2QiJd3h98JYqww4SCGNu+fA/UPqeeqKr8MGSV03DkrAtrVWa5GFtZQYxt2YY2ffbOF7VsQ5tL+23tBzMxptSHZG6+bIzWL7hCN182JnrbKR9eLvn/v4Mf7w++EkXYYbx7wrydlO+BO8mpJ+7Bl95UT8jF2L78u/kegd91Gg5ctCY3HLhojUv7w6orMzEmhmTgJeVe2FKYE5U6irACvTszOO3Q4N4Tt7ezOxNj659fkNDfYWHCotXb1BNy0cOQqopMjG3re/szEWnwPLi9FMy68ExVlpdp1oVneqcSXSnMiUodRViB3lFAp9FAd+6bpZZZNkbUlj+up83h2B5J2tXRlYmxdXT1ZCLScOdz+YPbn0tzx/pFq99SZ3ePy6IIb9PG16i+pjrZ/flKAUUYSsqfXDpGleVl+pNL48+NGTtsQCbGNm/WBNXXVEffKLXXd648X0OqKvSdK8+P3jbDIn4mjBicialJeT5i6vvzlQKKsBLjPSfN+wDt59ZtV2d3j55btz1623sOHMrE2LbvPqDWPQe03WnDzoZRp+rKC89Uw6j4e1UtWLJOD6/YogVL1kVvW0q7CLz98jrV11Tr9svjnxkq+T/3Kc9HLIXVgZ5KYSieIqyA9wq54YMqMzE27wPEf9myOxNjaj/QlYmxpXyQ8hs79mVibCnPjXnopTfV3NquhxwWw0hpP/eS7+rMUlgd6OmupRvU2d2ju5ZucMuBIqxARf68oAqnc4POHHxyJkbnvDLglAGVmRjThWcPycTYZs8YpyFVFZo9I71hkZsvO1dDqip082XnurSfco/AG217MzG2lJ97Ke3Vmd489+frRRFW4OChkImxbdjRnomxXX5+TSbG9uUpo1VZXuayceSCqy7QdZNHasFVF0RvW/IdDpRyBylfN3mkbpkaf1jq9W27taujS69vi98DKqXdI+A9FzHl515Ke06aN8/9+XpRhBWoyveAVTn1hO3NL8vc67Q88+VN72VibCmvVLr9x6v08Iotuv3Hq7xTie70QSepsrxMpw86yTsVF57zolKeE1UKeP7TRhFWoCPfA9bh1BNWkd+aocJhiwbJf0jMc8+e23+8Ol8ErY7etiSteWtPJsbmOTfnvhc3qbO7R/e9uCl626Ug9XlRQKoowgqcdcpJmRjbhBGDMjG2axrO0upvX65rGs5yad+zJ2xNfihsjdOQ2G1T61RZXqbbHIYDJd+5OTdeco4qy8t04yXnRG+7FKQ+LwpIFUVYgW98pk5Dqir0jc/4vBGOPG1AJsbmvVzcc37EbdPyRdA0n9fee36C59yc7XsOqLO7R9v3+GzP4S31eVFAqvoV8x83s+mS7pZULun+EMJ3C+6/XdJXJR2S1CbpyyGELcXM6Wi++3Rum4DvPt3k0ht09aRaNb3drqsnxT/AWsptU/DE6re0p6NLd117kUsOXm6+bIzrBM2U9fYA0RMEICVF6wkzs3JJP5B0haTxkj5vZuMLHrZKUkMI4QJJfy/pL4qVz7HyPjrGewfjvQcPZWJsLNdOEz1BAFJUzOHIj0naGELYFELolPSopFl9HxBCeD6E0Hta8MuSfLp/+qgbXp2JsXmf5TWwf79MjI3l2gCAVBSzCBshaWuf71vyt72fr0h6uoj5HJOd+w9mYmyPr2xRc2u7Hl/Z4tK+515Rku9ybe/5cPDDaw/AQ0lMzDezL0pqkPSX73P/jWbWaGaNbW3FPdph+57OTIzNezjQe1jI882QbQLSxWsPwEMxi7BtkvrObK/N35ZhZlMlzZZ0ZQjhiN1PIYT7QggNIYSGYcOK20MyPb9T/HSnHeO9hwO9ewQ83wy9twnwfu5T5v3aA0hTMd/pX5U01sxGK1d8XSvpD/s+wMwukvTfJU0PIewoYi7H7IdfanBt/5apdRpUVeH2ZuC9OnLiiMEaUlWhiSMGR2/bW28BKsntCJlU9fYAA0BMResJCyEckvQ1Sc9IapL0WAhhrZnNM7Mr8w/7S0kDJS00s9Vm9mSx8jlW3r0R3sOB3sOh9y/brF0dXbp/WfyeMO8hKXpjACAtRR3zCiE8Jempgtvm9vl6ajHb/39Bb4SvOTPHaf7iJpfVkd57VdEbAwBp8Zl4VMJSHg6TpP2d3ZkYW251pM9BthRBAICYSmJ1ZCnxHA4rBW/vOpCJAACgOCjCCnhvFuo9J23e585XfU215n3ufJf2AQBIBcORBTyHwyT/OWne1w8AQCoowkqM9+RwAAAQB8ORBbyHA723qAAAAHFQhBW4/cer9PCKLbr9x6u8U3GxbEObPnvni1q2objHQ5Vi+99a+JpG3bFE31r4WvS2AQDpoQgrsOatPZmYmvmLm9Tc2q75i5uSa39h/tD0hU6HpwMA0kIRVuC2qXWqLC/TbVPrvFNx4b061LP9aybVZmJs3kPhAIC4LITgncNvpaGhITQ2NnqnUTSb39mnB5Zv1g1TRjMvLDFzF63Rwyu26LrJI9k0FgBOEGa2MoRwxIOpWR1ZYry3qIAfVsYCQFoowgp490TxRpwujk0CgLRQhBXw7onijRgAgDRQhBWgJwoAAMRAEVaAnigAABADW1QAAAA4oAhDSWGvLABAKijCClAE+OpdGPHA8s3eqQAAUFTMCSvgvToydSyMAACkgiKsAEWALxZGAABSwXBkgd4igCODfDAcDABIBUUYSornnDAKQABATAxHoqR4DgczHxAAEBNFGEqK55ww5gMCAGKiCAPyWBQAAIiJOWEAAAAOKMIAAAAcUIQBAAA4oAgDAABwQBEGAADggCIMAADAAUUYAACAA4owAAAABxRhAAAADijCAAAAHFgIwTuH34qZtUnaUuRmhkp6p8htlLKUrz/la5fSvn6uPV0pX3/K1y7Fuf6RIYRhR7rjuCvCYjCzxhBCg3ceXlK+/pSvXUr7+rn2NK9dSvv6U752yf/6GY4EAABwQBEGAADggCLsyO7zTsBZytef8rVLaV8/156ulK8/5WuXnK+fOWEAAAAO6AkDAABwQBFWwMymm1mzmW00szu884nFzM4ys+fNbJ2ZrTWzW7xz8mBm5Wa2yswWe+cSk5kNMbO/N7NfmVmTmU32zikmM7st/3O/xsweMbOTvHMqFjP7kZntMLM1fW471cyeM7MN+XiKZ47F9D7X/5f5n/1fmtlPzGyIY4pFc6Rr73PfN80smNlQj9yK7f2u3cy+nn/t15rZX8TOiyKsDzMrl/QDSVdIGi/p82Y23jeraA5J+mYIYbykT0j6k4Suva9bJDV5J+Hgbkn/GEI4T9JHlNBzYGYjJH1DUkMIYYKkcknX+mZVVA9Kml5w2x2SfhZCGCvpZ/nvT1QP6vDrf07ShBDCBZLWS/rT2ElF8qAOv3aZ2VmSLpf069gJRfSgCq7dzC6TNEvSR0II50v6r7GTogjL+pikjSGETSGETkmPKvcCnfBCCG+HEH6R/7pduTfhEb5ZxWVmtZJmSLrfO5eYzGywpEsk/U9JCiF0hhB2uSYVXz9JVWbWT9LJkt5yzqdoQggvSnqv4OZZkh7Kf/2QpM/FzCmmI11/COHZEMKh/LcvS6qNnlgE7/PaS9Kdkv6DpBN2kvj7XPtNkr4bQjiYf8yO2HlRhGWNkLS1z/ctSqwQkSQzGyXpIkmvOKcS213K/SLqcc4jttGS2iQ9kB+Kvd/MBngnFUsIYZtyn4B/LeltSbtDCM/6ZhVdTQjh7fzX2yXVeCbj7MuSnvZOIhYzmyVpWwjhNe9cHNRJutjMXjGzn5vZ78ROgCIMGWY2UNLjkm4NIezxzicWM5spaUcIYaV3Lg76SfqopHtDCBdJ2qcTezgqIz//aZZyxeiZkgaY2Rd9s/ITckvmT9gekQ9iZrOVm5rxt965xGBmJ0v6j5LmeufipJ+kU5WbgvMtSY+ZmcVMgCIsa5uks/p8X5u/LQlmVqFcAfa3IYR/8M4nsimSrjSzN5Ubhv60mf1v35SiaZHUEkLo7fn8e+WKslRMlbQ5hNAWQuiS9A+SPumcU2ytZnaGJOVj9GEZb2b2byXNlPSFkM7eTecq9+HjtfzvvlpJvzCz012ziqdF0j+EnH9WbhQk6sIEirCsVyWNNbPRZlap3OTcJ51ziiJf/f9PSU0hhO975xNbCOFPQwi1IYRRyr3u/xRCSKI3JISwXdJWM6vP3/QZSescU4rt15I+YWYn5/8ffEYJLUzIe1LS9fmvr5e0yDGX6MxsunJTEa4MIez3zieWEMLrIYThIYRR+d99LZI+mv+dkIInJF0mSWZWJ6lSkQ8zpwjrIz8x82uSnlHul/BjIYS1vllFM0XSl5TrAVqd//OvvJNCNF+X9Ldm9ktJF0r6L77pxJPvAfx7Sb+Q9LpyvxdP2F3EzewRSSsk1ZtZi5l9RdJ3JU0zsw3K9Qx+1zPHYnqf6/9vkqolPZf/3fdD1ySL5H2uPQnvc+0/knROftuKRyVdH7sXlB3zAQAAHNATBgAA4IAiDAAAwAFFGAAAgAOKMAAAAAcUYQAAAA4owgCc0MzsG2bWZGbbzOy/eecDAL0owgCc6G6WNE3S7A/jH8sf8g0A/98owgCcsPKbbp6j3IHMp/S5fZSZ/ZOZ/dLMfmZmZx/l9gfN7Idm9oqkv/C4FgAnHoowACesEMIfS3pLuaNJdva5628kPRRCuEC5w5r/+ii3S7lz9T4ZQri96IkDSAJFGIAUTZb0d/mv/5ek3z3K7ZK0MITQHSc9ACmgCAOAY7PPOwEAJxaKMAApeknStfmvvyBp2VFuB4APHat8AKTo65IeMLNvSWqTdMNRbgeAD52FELxzAAAASA7DkQAAAA4owgAAABxQhAEAADigCAMAAHBAEQYAAOCAIgwAAMABRRgAAIADijAAAAAH/xfeijJvzhT/mAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(x='floor',y='price', data = mieszkania_train, linewidth = 0, s = 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$Y = w_1 * X_1 + w_2 * X_1 + w_3 * X_3 + w_0$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zadanie. Napisać analogiczną funkcję predict_price(sqr_metres, floor), policzyć rmse dla takiego modelu ( 7 minut)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "def predict_price(sqr_metres, floor):\n", " return 4000* sqr_metres + (-1000)* floor + 100000" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "298000" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_price(50, 2)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "295000" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predict_price(50, 5)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "Y_dev_predicted = predict_price(mieszkania_dev['sqrMetres'], mieszkania_dev['floor'])" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "117436.43511182851" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_dev, np.mean(Y_train))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "100227.89896326358" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_dev, Y_dev_predicted)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## jak dobrać najlepsze parametry?" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.lmplot(x='sqrMetres',y='price', data = mieszkania_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "lm_model = LinearRegression()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearRegression()" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lm_model.fit(mieszkania_train[['isNew','rooms', 'floor', 'sqrMetres']], Y_train)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "Y_train_predicted = lm_model.predict(mieszkania_train[['isNew','rooms', 'floor', 'sqrMetres']])" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "103308.92502763818" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_train, Y_train_predicted)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "Y_dev_predicted = lm_model.predict(mieszkania_dev[['isNew','rooms', 'floor', 'sqrMetres']])" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "84157.87889057388" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse(Y_dev, Y_dev_predicted)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/kuba/anaconda3/envs/zajeciaei/lib/python3.10/site-packages/sklearn/base.py:450: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "array([469449.27836213])" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lm_model.predict(np.array(([[0, 4, 3, 70]])))" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/kuba/anaconda3/envs/zajeciaei/lib/python3.10/site-packages/sklearn/base.py:450: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "array([455982.54297977])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lm_model.predict(np.array(([[0, 4, 3, 60]])))" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 4522.65059749, 73763.4125433 , -78.83243119, 1346.67353824])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lm_model.coef_" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "80364.9778059895" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lm_model.intercept_" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "455982.5429800203" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0 * 4522.65059749 + 4* 73763.4125433 + 3 * (-78.83243119) + 60 * 1346.67353824 + 80364.97780599032" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "with open(DATA_DIR/'dev-0'/'out.tsv','w') as f_out_file:\n", " for line in Y_dev_predicted:\n", " f_out_file.write(str(line))\n", " f_out_file.write('\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Uwaga - regresja linowa działa dobrze tylko dla danych, gdzie występuje korelacja liniowa" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![RMSE 5](obrazki/9.png)\n", "\n", "![6](obrazki/10.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zadanie domowe\n", "\n", "\n", "- https://gonito.net/challenge/retroc2\n", "- termin 17.05\n", "- należy użyć wektoryzacji (np tf-dif)\n", "- wynik zaliczający to max 50 RMSE dla dev-0 \n", "- punkty: 60, dla 3 najlepszych wyników na test-A: 80,\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "author": "Jakub Pokrywka", "email": "kubapok@wmi.amu.edu.pl", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "lang": "pl", "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.10.4" }, "subtitle": "7.Regresja liniowa[ćwiczenia]", "title": "Ekstrakcja informacji", "year": "2021" }, "nbformat": 4, "nbformat_minor": 4 }