aitech-eks-pub/cw/07_regresja_liniowa_ODPOWIE...

1378 lines
126 KiB
Plaintext
Raw 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": {},
"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": [
"<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": 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": [
"<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": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mieszkania_train"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f25f864e220>"
]
},
"execution_count": 11,
"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_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": [
"![a](obrazki/1.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![a](obrazki/2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![a](obrazki/3.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![a](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": [
"![a](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": [
"![a](obrazki/7.png)\n",
"\n",
"![a](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": [
"<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": {},
"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": 34,
"metadata": {},
"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": {},
"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": {},
"source": [
"## Przypadek wielowymiarowy"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"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": {},
"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": 37,
"metadata": {},
"outputs": [],
"source": [
"def predict_price(sqr_metres, floor):\n",
" return 4000* sqr_metres + (-1000)* floor + 100000"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"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": {},
"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": {},
"outputs": [],
"source": [
"Y_dev_predicted = predict_price(mieszkania_dev['sqrMetres'], mieszkania_dev['floor'])"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"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": {},
"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": {},
"source": [
"## jak dobrać najlepsze parametry?"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"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": {},
"source": [
"## https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"lm_model = LinearRegression()"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"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": {},
"outputs": [],
"source": [
"Y_train_predicted = lm_model.predict(mieszkania_train[['isNew','rooms', 'floor', 'sqrMetres']])"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"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": {},
"outputs": [],
"source": [
"Y_dev_predicted = lm_model.predict(mieszkania_dev[['isNew','rooms', 'floor', 'sqrMetres']])"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"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": {
"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": {},
"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": {},
"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": {},
"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": {
"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": {},
"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": [
"![a](obrazki/9.png)\n",
"\n",
"![a](obrazki/10.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"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": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}