retroc2/train.ipynb

1729 lines
133 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Ekstrakcja informacji </h1>\n",
"<h2> 7. <i>Regresja liniowa</i> [ćwiczenia]</h2> \n",
"<h3> Jakub Pokrywka (2021)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"# Regresja liniowa"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## import bibliotek"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Zbiór \n",
"\n",
"https://git.wmi.amu.edu.pl/kubapok/mieszkania2-below1m-public"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## ładowanie zbioru train"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"DATA_DIR = Path('/Users/adamwojdyla/Documents/Studia/Magisterskie/1_sem/EKS/aitech-eks/cw/mieszkania2-below1m-public')"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"with open(DATA_DIR / 'names') as f_names:\n",
" names = f_names.read().rstrip('\\n').split('\\t')"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"mieszkania_train = pd.read_csv(DATA_DIR/'train/in.tsv', sep ='\\t', names=names)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>isNew</th>\n",
" <th>rooms</th>\n",
" <th>floor</th>\n",
" <th>location</th>\n",
" <th>sqrMetres</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>Centrum</td>\n",
" <td>78</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>Sołacz</td>\n",
" <td>62</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>Sołacz</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>False</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>Sołacz</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>Sołacz</td>\n",
" <td>15</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mieszkania_train.head()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"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": 19,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([476118., 459531., 411557., ..., 320000., 364000., 209000.])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y_train"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"mieszkania_train['price'] = Y_train"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"X_train = mieszkania_train['sqrMetres'].to_numpy()"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Wizualizacja danych"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>isNew</th>\n",
" <th>rooms</th>\n",
" <th>floor</th>\n",
" <th>location</th>\n",
" <th>sqrMetres</th>\n",
" <th>price</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>Centrum</td>\n",
" <td>78</td>\n",
" <td>476118.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>Sołacz</td>\n",
" <td>62</td>\n",
" <td>459531.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>Sołacz</td>\n",
" <td>15</td>\n",
" <td>411557.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>False</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>Sołacz</td>\n",
" <td>14</td>\n",
" <td>496416.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>Sołacz</td>\n",
" <td>15</td>\n",
" <td>406032.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1652</th>\n",
" <td>True</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>Grunwald</td>\n",
" <td>51</td>\n",
" <td>299000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1653</th>\n",
" <td>True</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>Centrum</td>\n",
" <td>53</td>\n",
" <td>339000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1654</th>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>Stare</td>\n",
" <td>65</td>\n",
" <td>320000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1655</th>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>Nowe</td>\n",
" <td>67</td>\n",
" <td>364000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1656</th>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>Grunwald</td>\n",
" <td>50</td>\n",
" <td>209000.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1657 rows × 6 columns</p>\n",
"</div>"
],
"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": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mieszkania_train"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='sqrMetres', ylabel='price'>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAl4AAAFFCAYAAAA92ONDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABSwUlEQVR4nO3deXgUVbo/8G9n34AEAsEASaAZxKBMjKJhRjaVAYXxDioSGREdRb06OKDXcRtBva74E0HcRnwuOqKimdEZxBUBWcQggkHZpYEEEgkEEkL2rX5/JN05XUlXKpXauvv7eR6fMqS7+tSp7q4357z1HockSRKIiIiIyHAhVjeAiIiIKFgw8CIiIiIyCQMvIiIiIpMw8CIiIiIyCQMvIiIiIpMw8CIiIiIyiV8FXjt27MCMGTMUH/Phhx9i6tSpuPrqq/Hyyy+b1DIiIiKijoVZ3QC1li5dipUrVyI6OtrnYwoKCvDee+/h7bffRkREBF588UXU19cjPDzcxJYSERERtc9vRrxSUlKwZMkSz8/79u3DjBkzMGPGDMyePRtnzpzB5s2bce655+L+++/HDTfcgMzMTAZdREREZBt+M+I1YcIEHD161PPzI488gqeeegqDBw9GTk4O3njjDURFReH777/He++9h9raWkyfPh0ZGRno3r27hS0nIiIiauY3gZecy+XCY489BgCor69HWloafv3rX+Oiiy5CXFwc4uLiMGjQIBw+fBjDhw+3uLVEREREfhx4DRw4EM8++yySk5Oxbds2nDhxAgMHDsS7776L2tpaNDY2wuVyISUlxeqmEhEREQHw48Dr0Ucfxf3334+GhgY4HA48+eSTGDhwIK655hpcf/31kCQJd955J+Lj461uKhEREREAwCFJkmR1I4iIiIiCgd/c1UhERETk7xh4EREREZnEL3K8mpqa0NgYODOioaGOgDqermJ/tGJftGJftGJftGJftGJfeLNTf4SHh/r8nV8EXo2NEsrKqqxuhm7i42MC6ni6iv3Rin3Rin3Rin3Rin3Rin3hzU790bt3N5+/41QjERERkUkYeBERERGZhIEXERERkUkYeBERERGZhIEXERERkUkYeBERERGZhIEXERERkUkMC7x27NiBGTNmtPn3tWvX4pprrsG0adPwwQcfGPXyRERERLZjSAHVpUuXYuXKlYiOjvb69/r6ejz9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Y7OysrBixQrP2o6TJk3CJ598AgBYs2YNLr/8cgDNi1A/8sgjeOmll7B8+XIkJSXho48+wh133IHBgwfjz3/+MwBg0KBBWLFiBSRJwqeffop3330X77zzDr766iscPHgQq1atwi233IL33nsP48aNs92CvERkLwy8iMj2rr32WnTv3h233nor3nnnHQDN69YBwIABA9CvXz/PYwcOHOj13Msvvxxr167F0aNH0bt3b0RFRQEATp06hePHj2POnDmYMWMGvvnmGxQWFrZ5bff+9u/fj6KiItx000246aabUFZWhvz8fDz44IPIzc3FDTfcgO3bt3O0i4gU8RuCiGxvzZo1uOCCC/DWW29h4sSJ+PDDD7F9+3YAzQvRFxcXex7rcDi8nhsbG4uBAwfiueeew+TJkz3/npCQgL59++KVV17B22+/jTvuuANZWVkICQlBU1OT53HuQGrQoEEYPHgw/vGPf+Dtt9/G1VdfjbPPPhvvv/8+Zs+ejeXLlwMAVq9ebVg/EJH/Y44XEdneueeei/vvvx+vvvoqmpqasGTJEqxatQrZ2dlISkpCWJjyV9nvf/97zJs3DwsXLsThw4cBNAdUDz/8MG677TZIkoTY2FgsWLAAcXFxqK+vx3PPPecZHQOAoUOHYuTIkbj++utRV1eH4cOHIykpCcOHD8ftt9+O2NhYxMTEYOzYsQb2BBH5Oy6STUR+77e//S2++eYbq5tBRNQhTjUSERERmYQjXkREREQm4YgXERERkUkYeBERERGZhIEXERERkUkYeBERERGZhIEXERERkUkYeBERERGZ5P8D9Or4bXs0yWwAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.scatterplot(x='sqrMetres',y='price', data = mieszkania_train, linewidth = 0, s = 5)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"### Pytanie- Jaki jest baseline naszego systemu?"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Czym jest regresja liniowa?- przypadek jednowymiarowy"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![regresja liniowa 1](obrazki/1.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![regresja liniowa 2](obrazki/2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![regresja liniowa 3](obrazki/3.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![regresja liniowa 4](obrazki/4.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## wzór na regresję w przypadku jednowymiarowym?\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"$Y = a*X_1 + b$\n",
"\n",
"$Y = w_1 * X_1 + w_0$"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"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": 25,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def predict_price(sqr_metres):\n",
" return 2000* sqr_metres + 200000"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"240000"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price(20)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"280000"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price(40)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"310000"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price(55)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"200000"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price(0)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"Y_train_predicted = predict_price(X_train)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Mierzenie błędu"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![RMSE 1](obrazki/6.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![a](obrazki/5.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"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": 31,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def rmse(Y_true, Y_predicted):\n",
" return np.sqrt(np.sum((Y_true - Y_predicted)**2)/ len(Y_true)) \n",
"\n",
"def "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0])"
]
},
"execution_count": 32,
"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": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Zadanie - za pomocą rmse policzyć błąd dla baseline (3 minuty)\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Zadanie - za pomocą rmse policzyc błąd dla predykcji (2 minuty)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Na jakim zbiorze najlepiej sprawdzać wyniki?\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![RMSE 2](obrazki/7.png)\n",
"\n",
"![RMSE 3](obrazki/8.png)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"mieszkania_dev = pd.read_csv(DATA_DIR/'dev-0'/'in.tsv', sep = '\\t', names = names)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"mieszkania_dev['price'] = Y_dev"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"X_dev = mieszkania_dev['sqrMetres'].to_numpy()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f25f7e3efd0>"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"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": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"# Zadanie - policzyć rmse dla predykcji ze zbioru deweloperskiego modelu baseline i naszego modelu regresji liniowej"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"Y_dev_predicted = predict_price(X_dev)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"117309.3154367544"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rmse(Y_dev, np.ones_like(Y_dev) * Y_dev.mean())"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"104227.56492755697"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rmse(Y_dev, Y_dev_predicted)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Przypadek wielowymiarowy"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f25f7d67e20>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"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": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"$Y = w_1 * X_1 + w_2 * X_1 + w_3 * X_3 + w_0$"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Zadanie. Napisać analogiczną funkcję predict_price(sqr_metres, floor), policzyć rmse dla takiego modelu ( 7 minut)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def predict_price(sqr_metres, floor):\n",
" return 4000* sqr_metres + (-1000)* floor + 100000"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"298000"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price(50, 2)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"295000"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price(50, 5)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"Y_dev_predicted = predict_price(mieszkania_dev['sqrMetres'], mieszkania_dev['floor'])"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'rmse' is not defined",
"output_type": "error",
"traceback": [
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
"\u001B[0;32m<ipython-input-1-090db4c912bf>\u001B[0m in \u001B[0;36m<module>\u001B[0;34m\u001B[0m\n\u001B[0;32m----> 1\u001B[0;31m \u001B[0mrmse\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mY_dev\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mnp\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mmean\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mY_train\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m",
"\u001B[0;31mNameError\u001B[0m: name 'rmse' is not defined"
]
}
],
"source": [
"rmse(Y_dev, np.mean(Y_train))"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"100227.89896326358"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rmse(Y_dev, Y_dev_predicted)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## jak dobrać najlepsze parametry?"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<seaborn.axisgrid.FacetGrid at 0x7f25f7cdd8e0>"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.lmplot(x='sqrMetres',y='price', data = mieszkania_train)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"lm_model = LinearRegression()"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression()"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm_model.fit(mieszkania_train[['isNew','rooms', 'floor', 'sqrMetres']], Y_train)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"Y_train_predicted = lm_model.predict(mieszkania_train[['isNew','rooms', 'floor', 'sqrMetres']])"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"103308.92502763818"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rmse(Y_train, Y_train_predicted)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"Y_dev_predicted = lm_model.predict(mieszkania_dev[['isNew','rooms', 'floor', 'sqrMetres']])"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"84157.8788905739"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rmse(Y_dev, Y_dev_predicted)"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([469449.27836213])"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm_model.predict(np.array(([[0, 4, 3, 70]])))"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([455982.54297977])"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm_model.predict(np.array(([[0, 4, 3, 60]])))"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 4522.65059749, 73763.4125433 , -78.83243119, 1346.67353824])"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm_model.coef_"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": [
"80364.97780599032"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm_model.intercept_"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"455982.5429800203"
]
},
"execution_count": 66,
"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": 67,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"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": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Uwaga - regresja linowa działa dobrze tylko dla danych, gdzie występuje korelacja liniowa"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"![RMSE 5](obrazki/9.png)\n",
"\n",
"![6](obrazki/10.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Zadanie domowe\n",
"Zadanie domowe, proszę wybrać jedno z dwóch:\n",
"\n",
"\n",
"- sforkować repozytorium <https://git.wmi.amu.edu.pl/kubapok/auta-public>\n",
"- Opis zadadania znajduje się w README.md\n",
"- stworzyć model regresji liniowej dla tego zbioru (można użyć gotowych bibliotek)\n",
"- dodać skrypty z rozwiązaniem oraz predykcje dla dev-0 i test-A i sprawdzić czy ewaluacja jest poprawna za pomocą geval\n",
"- wynik zaliczający to max 50_000 RMSE dla dev-0\n",
"- termin 18.05, 50 punktów,Zadanie proszę oddać w MS TEAMS umieszczając link do repo (repo powinno mieć uprawnienia do odczytu dla użytkownika kubapok lub być publiczne).\n",
"- punkty: 40, dla 3 najlepszych wyników na test-A: 70\n",
"\n",
"LUB:\n",
"\n",
"analogicznie dla <https://git.wmi.amu.edu.pl/kubapok/retroc2>\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,"
]
}
],
"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.9.12"
},
"subtitle": "7.Regresja liniowa[ćwiczenia]",
"title": "Ekstrakcja informacji",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}