done ex4
This commit is contained in:
1 parent
c360807ab5
commit
8ec28596c0
2 files changed
+1125
No files matched your search
@@ -0,0 +1,202 @@
|
|||||||
|
living_area,nb_rooms,rent_price
|
||||||
|
69,3,1810
|
||||||
|
95,3.5,2945
|
||||||
|
21,1.5,685
|
||||||
|
20,1,720
|
||||||
|
33,1.5,830
|
||||||
|
13,1,850
|
||||||
|
17,1,850
|
||||||
|
27,1,855
|
||||||
|
32,1,875
|
||||||
|
26,1.5,890
|
||||||
|
25,1,890
|
||||||
|
31,1,900
|
||||||
|
18,1,900
|
||||||
|
24,1,900
|
||||||
|
25,1,920
|
||||||
|
25,1,930
|
||||||
|
27,1,950
|
||||||
|
37,2,955
|
||||||
|
28,1,960
|
||||||
|
39,1,970
|
||||||
|
31,1,980
|
||||||
|
25,1,980
|
||||||
|
25,1,980
|
||||||
|
29,1.5,1000
|
||||||
|
38,1,1015
|
||||||
|
16,1,1040
|
||||||
|
20,1,1060
|
||||||
|
50,2,1100
|
||||||
|
37,1.5,1130
|
||||||
|
33,2,1160
|
||||||
|
40,1,1200
|
||||||
|
46,1,1210
|
||||||
|
45,2,1235
|
||||||
|
19,1,1250
|
||||||
|
45,2,1310
|
||||||
|
56,2,1315
|
||||||
|
60,2.5,1320
|
||||||
|
23,1,1350
|
||||||
|
49,2,1370
|
||||||
|
51,1.5,1385
|
||||||
|
48,2,1390
|
||||||
|
51,1,1400
|
||||||
|
41,2,1400
|
||||||
|
47,2,1410
|
||||||
|
45,2,1410
|
||||||
|
47,2,1415
|
||||||
|
37,1.5,1420
|
||||||
|
52,2,1445
|
||||||
|
45,2,1450
|
||||||
|
43,2,1450
|
||||||
|
26,1.5,1470
|
||||||
|
49,2,1480
|
||||||
|
49,2.5,1490
|
||||||
|
39,1,1530
|
||||||
|
60,2,1530
|
||||||
|
65,2.5,1580
|
||||||
|
60,3,1590
|
||||||
|
60,3,1590
|
||||||
|
47,1,1595
|
||||||
|
57,2,1630
|
||||||
|
65,2,1640
|
||||||
|
33,1,1650
|
||||||
|
56,2.5,1660
|
||||||
|
69,3,1690
|
||||||
|
61,2.5,1690
|
||||||
|
60,3,1690
|
||||||
|
47,1.5,1700
|
||||||
|
49,2,1700
|
||||||
|
60,2.5,1700
|
||||||
|
72,3,1715
|
||||||
|
70,2.5,1730
|
||||||
|
59,2,1750
|
||||||
|
30,1,1750
|
||||||
|
39,2,1750
|
||||||
|
25,1,1780
|
||||||
|
68,3,1790
|
||||||
|
63,3,1790
|
||||||
|
78,2,1790
|
||||||
|
50,2.5,1800
|
||||||
|
70,3,1810
|
||||||
|
75,2.5,1830
|
||||||
|
60,3,1840
|
||||||
|
70,3.5,1840
|
||||||
|
28,1,1850
|
||||||
|
62,2.5,1860
|
||||||
|
90,3,1870
|
||||||
|
78,3.5,1920
|
||||||
|
80,2,1930
|
||||||
|
72,3,1940
|
||||||
|
78,3.5,1950
|
||||||
|
62,2.5,1980
|
||||||
|
80,3.5,1990
|
||||||
|
80,3.5,2000
|
||||||
|
75,4,2030
|
||||||
|
68,3,2040
|
||||||
|
76,3.5,2060
|
||||||
|
81,3,2080
|
||||||
|
92,3,2085
|
||||||
|
75,3,2090
|
||||||
|
82,3.5,2130
|
||||||
|
80,3.5,2130
|
||||||
|
95,4,2145
|
||||||
|
85,4.5,2160
|
||||||
|
58,2.5,2160
|
||||||
|
33,1.5,2170
|
||||||
|
94,4.5,2190
|
||||||
|
100,3.5,2250
|
||||||
|
77,3.5,2270
|
||||||
|
80,3.5,2270
|
||||||
|
80,3.5,2290
|
||||||
|
92,3.5,2320
|
||||||
|
92,3.5,2335
|
||||||
|
99,4.5,2335
|
||||||
|
98,3,2358
|
||||||
|
90,4.5,2360
|
||||||
|
96,3,2380
|
||||||
|
92,4.5,2380
|
||||||
|
86,4.5,2390
|
||||||
|
73,3,2400
|
||||||
|
80,3.5,2400
|
||||||
|
96,3,2403
|
||||||
|
72,3.5,2410
|
||||||
|
91,4,2420
|
||||||
|
53,2.5,2425
|
||||||
|
60,2.5,2490
|
||||||
|
95,3.5,2500
|
||||||
|
97,4.5,2530
|
||||||
|
103,4.5,2550
|
||||||
|
105,5,2550
|
||||||
|
112,3.5,2550
|
||||||
|
110,4,2560
|
||||||
|
107,5,2570
|
||||||
|
65,1.5,2570
|
||||||
|
97,4.5,2590
|
||||||
|
110,4.5,2625
|
||||||
|
102,4.5,2635
|
||||||
|
101,4.5,2675
|
||||||
|
98,3.5,2700
|
||||||
|
109,4.5,2710
|
||||||
|
120,5,2710
|
||||||
|
107,4,2720
|
||||||
|
125,3.5,2725
|
||||||
|
120,4.5,2750
|
||||||
|
108,5,2805
|
||||||
|
130,5.5,2820
|
||||||
|
112,4.5,2825
|
||||||
|
121,4.5,2830
|
||||||
|
118,4.5,2840
|
||||||
|
107,4.5,2840
|
||||||
|
87,3.5,2850
|
||||||
|
114,4,2850
|
||||||
|
110,4.5,2870
|
||||||
|
118,4.5,2875
|
||||||
|
126,5.5,2900
|
||||||
|
112,4.5,2915
|
||||||
|
93,3,2945
|
||||||
|
80,3.5,2950
|
||||||
|
116,4.5,3050
|
||||||
|
145,4,3050
|
||||||
|
95,4.5,3080
|
||||||
|
100,3.5,3090
|
||||||
|
98,3.5,3090
|
||||||
|
94,4.5,3100
|
||||||
|
110,4.5,3150
|
||||||
|
100,4.5,3160
|
||||||
|
110,2,3180
|
||||||
|
109,4.5,3220
|
||||||
|
131,5,3300
|
||||||
|
133,5,3300
|
||||||
|
86,2.5,3350
|
||||||
|
84,3,3400
|
||||||
|
145,4,3450
|
||||||
|
113,4.5,3490
|
||||||
|
130,3.5,3500
|
||||||
|
108,3,3525
|
||||||
|
94,4.5,3570
|
||||||
|
136,4.5,3765
|
||||||
|
140,4.5,3765
|
||||||
|
125,3.5,3790
|
||||||
|
156,5.5,3930
|
||||||
|
91,3.5,3950
|
||||||
|
130,4.5,3965
|
||||||
|
102,4.5,4061
|
||||||
|
130,4.5,4200
|
||||||
|
142,5.5,4260
|
||||||
|
88,3.5,4310
|
||||||
|
178,6.5,4760
|
||||||
|
150,4.5,4800
|
||||||
|
185,5.5,4900
|
||||||
|
164,6.5,5160
|
||||||
|
214,5.5,5200
|
||||||
|
191,6,5229
|
||||||
|
156,5.5,5250
|
||||||
|
145,5,5383
|
||||||
|
175,5,5460
|
||||||
|
150,4.5,5500
|
||||||
|
129,5.5,5560
|
||||||
|
160,4,5775
|
||||||
|
201,5.5,6200
|
||||||
|
240,6.5,6700
|
||||||
|
145,5,7383
|
||||||
|
@@ -0,0 +1,923 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "18bdba27",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# PW4 - Linear Regression"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "3629bfdf",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Imports"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 141,
|
||||||
|
"id": "d6eb2aab",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import random\n",
|
||||||
|
"import pandas as pd\n",
|
||||||
|
"import numpy as np\n",
|
||||||
|
"from numpy.linalg import inv\n",
|
||||||
|
"import matplotlib.pyplot as plt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "e69e5d68",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Load data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "ba14bf9f",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Define the path to the file containing the data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 142,
|
||||||
|
"id": "5f3f924f",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"datafile = \"lausanne-appart.csv\""
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "adfab574",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Read the data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 143,
|
||||||
|
"id": "5108e239",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"dataset = pd.read_csv(datafile)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "5a97d4cc",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Display first rows"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 144,
|
||||||
|
"id": "34222aff",
|
||||||
|
"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>living_area</th>\n",
|
||||||
|
" <th>nb_rooms</th>\n",
|
||||||
|
" <th>rent_price</th>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </thead>\n",
|
||||||
|
" <tbody>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>0</th>\n",
|
||||||
|
" <td>69</td>\n",
|
||||||
|
" <td>3.0</td>\n",
|
||||||
|
" <td>1810</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>1</th>\n",
|
||||||
|
" <td>95</td>\n",
|
||||||
|
" <td>3.5</td>\n",
|
||||||
|
" <td>2945</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>2</th>\n",
|
||||||
|
" <td>21</td>\n",
|
||||||
|
" <td>1.5</td>\n",
|
||||||
|
" <td>685</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>3</th>\n",
|
||||||
|
" <td>20</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>720</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>4</th>\n",
|
||||||
|
" <td>33</td>\n",
|
||||||
|
" <td>1.5</td>\n",
|
||||||
|
" <td>830</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </tbody>\n",
|
||||||
|
"</table>\n",
|
||||||
|
"</div>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
" living_area nb_rooms rent_price\n",
|
||||||
|
"0 69 3.0 1810\n",
|
||||||
|
"1 95 3.5 2945\n",
|
||||||
|
"2 21 1.5 685\n",
|
||||||
|
"3 20 1.0 720\n",
|
||||||
|
"4 33 1.5 830"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 144,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"dataset.head()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "2ec4b8eb",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Exercise 1 - Visualize the data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "dbf6b9cf",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"a) Plot a histogram to visualize the distribution of the renting price"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 145,
|
||||||
|
"id": "ad07d4cd",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGwCAYAAACzXI8XAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKHJJREFUeJzt3Xt01OWdx/HPhCSTcMmEQEgCJhAEuQpyWxivBaIBWStL2kNZbAFpu7iBArFVU0Vgd9uw9hSsLgTbItB1kS1uwQsWhABBMaAEAsRLCgqFCkmsNDckF5Nn//AwOiVAEhJ+85D365zfOczzPPOb7+85w+Rznvn95ucyxhgBAABYKMjpAgAAAJqKIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYK1gpwtoaXV1dTp9+rQ6dOggl8vldDkAAKABjDEqLy9X165dFRR06XWX6z7InD59WvHx8U6XAQAAmuDUqVO64YYbLtl/3QeZDh06SPpyIiIiIhyuBgAANERZWZni4+N9f8cv5boPMhe+ToqIiCDIAABgmSudFsLJvgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrBTtdAK69Ho9tdrqERjuxZILTJQAAAhArMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWo4GmUWLFsnlcvltffv29fVXVlYqNTVVnTp1Uvv27ZWSkqKioiIHKwYAAIHE8RWZAQMG6MyZM77trbfe8vXNnz9fr776qjZs2KDs7GydPn1akyZNcrBaAAAQSIIdLyA4WLGxsRe1l5aWatWqVVq3bp3GjBkjSVq9erX69eunvXv3atSoUfXur6qqSlVVVb7HZWVlLVM4AABwnOMrMkePHlXXrl3Vs2dPTZ06VSdPnpQk5ebmqqamRklJSb6xffv2VUJCgnJyci65v4yMDHk8Ht8WHx/f4scAAACc4WiQGTlypNasWaMtW7YoMzNTx48f1x133KHy8nIVFhYqNDRUkZGRfs+JiYlRYWHhJfeZnp6u0tJS33bq1KkWPgoAAOAUR79aGj9+vO/fgwYN0siRI9W9e3f9/ve/V3h4eJP26Xa75Xa7m6tEAAAQwBz/aunrIiMjddNNN+nYsWOKjY1VdXW1SkpK/MYUFRXVe04NAABofQIqyFRUVOijjz5SXFychg0bppCQEGVlZfn6CwoKdPLkSXm9XgerBAAAgcLRr5Z+/OMf67777lP37t11+vRpLVy4UG3atNGUKVPk8Xg0c+ZMpaWlKSoqShEREZozZ468Xu8lr1gCAACti6NB5i9/+YumTJmizz77TNHR0br99tu1d+9eRUdHS5KWLVumoKAgpaSkqKqqSsnJyVqxYoWTJQMAgADiMsYYp4toSWVlZfJ4PCotLVVERITT5QSEHo9tdrqERjuxZILTJQAArqGG/v0OqHNkAAAAGoMgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWsFOFwA0RI/HNjtdQqOdWDLB6RIA4LrHigwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrBUyQWbJkiVwul+bNm+drq6ysVGpqqjp16qT27dsrJSVFRUVFzhUJAAACSkAEmXfffVfPPfecBg0a5Nc+f/58vfrqq9qwYYOys7N1+vRpTZo0yaEqAQBAoHE8yFRUVGjq1Kn6zW9+o44dO/raS0tLtWrVKi1dulRjxozRsGHDtHr1ar399tvau3fvJfdXVVWlsrIyvw0AAFyfHA8yqampmjBhgpKSkvzac3NzVVNT49fet29fJSQkKCcn55L7y8jIkMfj8W3x8fEtVjsAAHCWo0Fm/fr1OnDggDIyMi7qKywsVGhoqCIjI/3aY2JiVFhYeMl9pqenq7S01LedOnWqucsGAAABItipFz516pTmzp2rbdu2KSwsrNn263a75Xa7m21/AAAgcDm2IpObm6vi4mINHTpUwcHBCg4OVnZ2tp555hkFBwcrJiZG1dXVKikp8XteUVGRYmNjnSkaAAAEFMdWZMaOHasjR474tc2YMUN9+/bVo48+qvj4eIWEhCgrK0spKSmSpIKCAp08eVJer9eJkgEAQIBxLMh06NBBAwcO9Gtr166dOnXq5GufOXOm0tLSFBUVpYiICM2ZM0der1ejRo1yomQAABBgHAsyDbFs2TIFBQUpJSVFVVVVSk5O1ooVK5wuCwAABAiXMcY4XURLKisrk8fjUWlpqSIiIpwuJyD0eGyz0yW0CieWTHC6BACwVkP/fjv+OzIAAABNRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArBXsdAE26/HYZqdLAACgVWNFBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrcdNIoIXYeFPRE0smOF0CADQKKzIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYK0mBZmePXvqs88+u6i9pKREPXv2vOqiAAAAGqJJQebEiROqra29qL2qqkqffPLJVRcFAADQEI26aeQrr7zi+/fWrVvl8Xh8j2tra5WVlaUePXo0W3EAAACX06ggM3HiREmSy+XStGnT/PpCQkLUo0cP/fKXv2y24gAAAC6nUUGmrq5OkpSYmKh3331XnTt3bpGiAAAAGqJRQeaC48ePN3cdAAAAjdakICNJWVlZysrKUnFxsW+l5oLnn3/+qgsDAAC4kiYFmcWLF+vf/u3fNHz4cMXFxcnlcjV3XQAAAFfUpCCzcuVKrVmzRt/97nebux4AAIAGa9LvyFRXV+vWW29t7loAAAAapUlB5vvf/77WrVvX3LUAAAA0SpO+WqqsrNSvf/1rbd++XYMGDVJISIhf/9KlSxu0n8zMTGVmZurEiROSpAEDBujJJ5/U+PHjfa/z8MMPa/369aqqqlJycrJWrFihmJiYppQNAACuM00KMocPH9Ytt9wiScrPz/fra8yJvzfccIOWLFmi3r17yxijtWvX6v7779fBgwc1YMAAzZ8/X5s3b9aGDRvk8Xg0e/ZsTZo0SXv27GlK2QAA4DrjMsYYp4v4uqioKP3iF7/Qt771LUVHR2vdunX61re+JUn68MMP1a9fP+Xk5GjUqFH1Pr+qqkpVVVW+x2VlZYqPj1dpaakiIiKatdYej21u1v0BTjuxZILTJQCApC//fns8niv+/W7SOTItoba2VuvXr9e5c+fk9XqVm5urmpoaJSUl+cb07dtXCQkJysnJueR+MjIy5PF4fFt8fPy1KB8AADigSV8tjR49+rJfIe3YsaPB+zpy5Ii8Xq8qKyvVvn17bdy4Uf3791deXp5CQ0MVGRnpNz4mJkaFhYWX3F96errS0tJ8jy+syAAAgOtPk4LMhfNjLqipqVFeXp7y8/MvupnklfTp00d5eXkqLS3VSy+9pGnTpik7O7spZUmS3G633G53k58PAADs0aQgs2zZsnrbFy1apIqKikbtKzQ0VL169ZIkDRs2TO+++65+9atfafLkyaqurlZJSYnfqkxRUZFiY2ObUjYAALjONOs5Mg888MBV32eprq5OVVVVGjZsmEJCQpSVleXrKygo0MmTJ+X1eq+2VAAAcB1o8k0j65OTk6OwsLAGj09PT9f48eOVkJCg8vJyrVu3Trt27dLWrVvl8Xg0c+ZMpaWlKSoqShEREZozZ468Xu8lr1gCAACtS5OCzKRJk/weG2N05swZ7d+/XwsWLGjwfoqLi/W9731PZ86ckcfj0aBBg7R161bdfffdkr78CisoKEgpKSl+P4gHAAAgNfF3ZGbMmOH3OCgoSNHR0RozZozuueeeZiuuOTT0OvSm4HdkcL3hd2QABIqG/v1u0orM6tWrm1wYAABAc7mqc2Ryc3P1wQcfSPryPklDhgxplqIAAAAaoklBpri4WN/5zne0a9cu36XRJSUlGj16tNavX6/o6OjmrBEAAKBeTbr8es6cOSovL9d7772ns2fP6uzZs8rPz1dZWZl+9KMfNXeNAAAA9WrSisyWLVu0fft29evXz9fWv39/LV++POBO9gUAANevJq3I1NXVKSQk5KL2kJAQ1dXVXXVRAAAADdGkIDNmzBjNnTtXp0+f9rV98sknmj9/vsaOHdtsxQEAAFxOk4LMf/3Xf6msrEw9evTQjTfeqBtvvFGJiYkqKyvTs88+29w1AgAA1KtJ58jEx8frwIELine truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"\n",
|
||||||
|
"plt.hist(dataset[\"rent_price\"])\n",
|
||||||
|
"plt.xlabel(\"Rent price\")\n",
|
||||||
|
"plt.ylabel(\"Count\")\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "602770ae",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"b) Plot a histogram to visualize the distribution of the living area"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 146,
|
||||||
|
"id": "ac0c9f07",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAGwCAYAAABCV9SaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJEpJREFUeJzt3XtwVPX9//HXYkK4hN2QAEnQhARELnJREHFtpQqRgJQBia3StCKD1wZUUIupIuLYgdEWqBbFVi46FbG04A3EgWCCl0AhchGUjDBBqJBEpckmaC6Sz/eP/tifK0Fz2eTs8nk+ZnaGPefsyXtzJstzTs5uXMYYIwAAgHNcG6cHAAAAaA1EDwAAsALRAwAArED0AAAAKxA9AADACkQPAACwAtEDAACsEOH0AC2trq5Ox44dU6dOneRyuZweBwAANIAxRhUVFerevbvatAnOOZpzPnqOHTumpKQkp8cAAABNcPToUV1wwQVB2dc5Hz2dOnWS9L9vmtvtdngaAADQED6fT0lJSf7/x4PhnI+e07/ScrvdRA8AAGEmmJemcCEzAACwAtEDAACsQPQAAAArED0AAMAKRA8AALAC0QMAAKxA9AAAACsQPQAAwApEDwAAsALRAwAArED0AAAAKxA9AADACkQPAACwAtEDAACsQPQAAAArRDg9ANAQKQ+ud3qERju8YJzTIwAAvoMzPQAAwApEDwAAsALRAwAArED0AAAAKxA9AADACkQPAACwAtEDAACsQPQAAAArED0AAMAKRA8AALAC0QMAAKxA9AAAACsQPQAAwApEDwAAsALRAwAArED0AAAAKxA9AADACkQPAACwAtEDAACsQPQAAAArED0AAMAKRA8AALAC0QMAAKxA9AAAACsQPQAAwApEDwAAsALRAwAArBAy0bNgwQK5XC7de++9/mVVVVXKyspSXFycoqOjlZGRoZKSEueGBAAAYSskomfHjh167rnnNGjQoIDlM2fO1BtvvKE1a9YoLy9Px44d06RJkxyaEgAAhDPHo6eyslKZmZn629/+ps6dO/uXl5eXa9myZVq4cKFGjhypoUOHasWKFfrggw+0bds2BycGAADhyPHoycrK0rhx45SWlhawvKCgQLW1tQHL+/btq+TkZOXn5591f9XV1fL5fAE3AACACCe/+OrVq/Xhhx9qx44dZ6wrLi5W27ZtFRMT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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"\n",
|
||||||
|
"plt.hist(dataset[\"living_area\"])\n",
|
||||||
|
"plt.xlabel(\"Living Area\")\n",
|
||||||
|
"plt.ylabel(\"Count\")\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "b9a954dd",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"c) Plot a scatter plot of renting price as a function of living area"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 147,
|
||||||
|
"id": "6d015af9",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"\n",
|
||||||
|
"plt.scatter(dataset[\"living_area\"], dataset[\"rent_price\"])\n",
|
||||||
|
"plt.xlabel(\"Living Area\")\n",
|
||||||
|
"plt.ylabel(\"Rent price\")\n",
|
||||||
|
"\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "9c787c4b",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Exercise 2 - Normal equations for linear regression"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "859bbd89",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"a) Implement the closed form solution to this problem using the following normal equation:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "cf1d5eda",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"<div><div style=\"display: table-cell; width: 100%;\"><center>$\\theta = (X^{T}X)^{-1}X^{T}\\vec{y}$</center></div><div style=\"display: table-cell; width: 100%;\">$(3)$</div></div>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "c3c8e4c1",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Assuming $x$ is the living area and $y$ is the renting price. Use `numpy` for the vector operations. Plot the computed line on top of the scatter plot of exercise 1."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 148,
|
||||||
|
"id": "19ffbbd9",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Theta : [240.07710727 26.33242457]\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAGwCAYAAABfKeoBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbgtJREFUeJzt3XlcVFX/B/DPgOzK4AYDbuAuIW65TJqVoqhkWtaT5J5ZGrZgJVm5tZn6K582tXKr3J4sy9ww3FPHJRQVSVPDcGFJEHBjkbm/P8YZucwM3Blm5/N+vXg9ce6ZO+cyj/L1nO/5HpkgCAKIiIiIqEpu9h4AERERkbNg4EREREQkEQMnIiIiIokYOBERERFJxMCJiIiISCIGTkREREQSMXAiIiIikqiWvQfgDNRqNa5cuYI6depAJpPZezhEREQkgSAIuH79OkJCQuDmZpm5IgZOEly5cgVNmjSx9zCIiIjIDBcvXkTjxo0tci8GThLUqVMHgOYH7+/vb+fREBERkRSFhYVo0qSJ7ve4JTBwkkC7POfv78/AiYiIyMlYMs2GyeFEREREEjFwIiIiIpKIgRMRERGRRAyciIiIiCRi4EREREQkEQMnIiIiIokYOBERERFJxMCJiIiISCIGTkREREQSsXI4EZEDKVMLOJyeh5zrRQis441uYfXg7sbDxYkcBQMnIiIHkZiaidkb05BZUKRrC5Z7Y+bgcAyICLbjyIhIi0t1REQOIDE1E5NWHhUFTQCQVVCESSuPIjE1004jI6LyGDgREdlZmVrA7I1pEAxc07bN3piGMrWhHkRkSwyciIjs7HB6nt5MU3kCgMyCIhxOz7PdoIjIIAZORER2lnPdeNBkTj8ish4GTkREdhZYx9ui/YjIehg4ERHZWbewegiWe8NY0QEZNLvruoXVs+WwiMgABk5ERHbm7ibDzMHhAKAXPGm/nzk4nPWciBwAAyciIgcwICIYi0Z2hkIuXo5TyL2xaGRn1nEichAsgElE5CAGRASjX7iClcOJHBgDJyIiB+LuJoOyRX17D4OIjOBSHREREZFEDJyIiIiIJGLgRERERCQRAyciIiIiiRg4EREREUnEwImIiIhIIgZORERERBIxcCIiIiKSyK6BU2hoKGQymd5XXFwcAKCoqAhxcXGoX78+ateujWHDhiE7O1t0j4yMDMTExMDX1xeBgYF44403cOfOHVGf3bt3o3PnzvDy8kLLli2xYsUKWz0iERERuRC7Bk5HjhxBZmam7ispKQkA8NRTTwEA4uPjsXHjRqxbtw579uzBlStX8MQTT+heX1ZWhpiYGJSUlODAgQP49ttvsWLFCsyYMUPXJz09HTExMXjkkUeQkpKCV199Fc899xy2bdtm24clIiIipycTBEGw9yC0Xn31VWzatAlnz55FYWEhGjZsiNWrV+PJJ58EAJw+fRrt2rWDSqVCjx49sHXrVjz66KO4cuUKgoKCAACLFy9GQkIC/v33X3h6eiIhIQGbN29Gamqq7n2GDx+O/Px8JCYmShpXYWEh5HI5CgoK4O/vb/kHJyIiIouzxu9vh8lxKikpwcqVK/Hss89CJpMhOTkZpaWliIqK0vVp27YtmjZtCpVKBQBQqVRo3769LmgCgOjoaBQWFuLUqVO6PuXvoe2jvYchxcXFKCwsFH0REREROUzg9MsvvyA/Px9jx44FAGRlZcHT0xMBAQGifkFBQcjKytL1KR80aa9rr1XWp7CwELdv3zY4ljlz5kAul+u+mjRpUt3HIyIiIhfgMIHT0qVLMXDgQISEhNh7KJg2bRoKCgp0XxcvXrT3kIiIiMgB1LL3AADgn3/+wfbt27F+/Xpdm0KhQElJCfLz80WzTtnZ2VAoFLo+hw8fFt1Lu+uufJ+KO/Gys7Ph7+8PHx8fg+Px8vKCl5dXtZ+LiIiIXItDzDgtX74cgYGBiImJ0bV16dIFHh4e2LFjh67tzJkzyMjIgFKpBAAolUqcPHkSOTk5uj5JSUnw9/dHeHi4rk/5e2j7aO9BREREJJXdAye1Wo3ly5djzJgxqFXr3gSYXC7H+PHjMWXKFOzatQvJyckYN24clEolevToAQDo378/wsPDMWrUKBw/fhzbtm3DO++8g7i4ON2M0cSJE/H3339j6tSpOH36NBYuXIgffvgB8fHxdnleIiIicl52X6rbvn07MjIy8Oyzz+pdW7BgAdzc3DBs2DAUFxcjOjoaCxcu1F13d3fHpk2bMGnSJCiVSvj5+WHMmDF49913dX3CwsKwefNmxMfH49NPP0Xjxo2xZMkSREdH2+T5iIiIyHU4VB0nR8U6TkRERM7Hpes4ERERETk6Bk5EREREEjFwIiIiIpLI7snhREREVHOVqQUcTs9DzvUiBNbxRrewenB3k9l7WEYxcCIiIiK7SEzNxOyNacgsKNK1Bcu9MXNwOAZEBNtxZMZxqY6IiIhsLjE1E5NWHhUFTQCQVVCESSuPIjE1004jqxwDJyIiIrKpMrWA2RvTYKgekrZt9sY0lKkdr2ISAyciIiKyqcPpeXozTeUJADILinA4Pc92g5KIgRMRERHZVM5140GTOf1siYETERER2VRgHW+L9rMlBk5ERERkU93C6iFY7g1jRQdk0Oyu6xZWz5bDkoSBExEREdmUu5sMMweHA4Be8KT9fubgcIes58TAiYiIiGxuQEQwFo3sDIVcvBynkHtj0cjODlvHiQUwiYiIyC4GRASjX+sGuPDxQvzTuj18OnZg5XAiIiIigzZtgvvgwWgBoEVkJHD8uL1HVCUGTkRERGRbxcVAo0ZAbu69tkcftd94TMAcJyIiIrKdNWsAb29x0LRnD/DBB/Ybkwk440RERETWd/MmUKcOIJQ7RqV3b2DXLsDNeeZxnGekRERE5Jy++gqoXVscNP3xh2amyYmCJoAzTkRERGQt164B9SoUsXz8ceCnnwCZ4+6cq4xzhXlERETkHObP1w+aTp0C1q932qAJ4IwTERERWVJODhAUJG4bOxZYvtwuw7E0zjgRERGRZbz9tn7Q9PffLhM0AZxxIiIiouq6eBFo2lTcNmUK8PHH9hmPFTFwIiIiIvPFxQELF4rbLl8GQkLsMx4r41IdERERme6vvzRJ3uWDpnff1ZQccNGgCeCMExEREZkqNhZYu1bcdvUqUL++fcZjQ5xxIiIisoAytQDV+VxsSLkM1flclKmFql/kbE6c0MwylQ+aPv1UM8tUA4ImgDNORERE1ZaYmonZG9OQWVCkawuWe2Pm4HAMiAi248gsRBCAgQOBbdvE7QUFgL+/fcZkJ5xxIiIiqobE1ExMWnlUFDQBQFZBESatPIrE1Ew7jcxCDh7UHItSPmhatkwTTNWwoAngjBMREZHZytQCZm9Mg6FFOQGADMDsjWnoF66Au5uTVctWq4Hu3TVnymn5+QH//gv4+NhvXHbGGSciIiIzHU7P05tpKk8AkFlQhMPpebYblCXs2AG4u4uDph9/BG7cqNFBE8AZJyIiIrPlXDceNJnTz+5KS4G2bTXVvrWaNAHOnQM8Pe03LgfCGSciIiIzBdbxtmg/u9qwQRMclQ+aEhOBjAwGTeVwxomIiMhM3cLqIVjujayCIoN5TjIACrk3uoXVs/XQpCsq0hSsvHbtXluHDkBysma5jkQ440RERGQmdzcZZg4OB6AJksrTfj9zcLjjJoavXKnJWSofNP3+O5CSwqDJCAZORERE1TAgIhiLRnaGQi5ejlPIvbFoZGfHrON044amkOWoUffaHnlEs5OuVy/7jcsJcKmOiIiomgZEBKNfuAKH0/OQc70IgXU0y3MOOdO0aBHw4ovituRkoHNn+4zHyTBwIiIisgB3NxmULRz42JG8PP1jUYYNA9at08w+kSR2X6q7fPkyRo4cifr168PHxwft27fHH+XqRgiCgBkzZiA4OBg+Pj6IiorC2bNnRffIy8vDiBEj4O/vj4CAAIwfPx43btwQ9Tlx4gQefPBBeHt7o0mTJpg3b55Nno+IiMjuPvpIP2j6809NbSYGTSaxa+B07do19OzZEx4eHti6dSvS0tLw8ccfo27duro+8+bNw2effYbFixfj0KFD8PPzQ3R0NIqK7tXEGDFiBE6dOoWkpCRs2rQJe/fuxfPPP6+7XlhYiP79+6NZs2ZITk7G/PnzMWvWLHz99dc2fV4iIiKbysrSBEbTpt1re+45zXEpbdvab1zOTLCjhIQEoVevXkavq9VqQaFQCPPnz9e15efnC15eXsKaNWsEQRCEtLQ0AYBw5MgRXZ+tW7cKMplMuHz5siAIgrBw4UKhbt26QnFxsei927RpY/B9i4qKhIKCAt3XxYsXBQBCQUFBtZ6XiIjIZhISBEETIt37Sk+396hsqqCgwOK/v+064/Trr7/i/vvvx1NPPYXAwEB06tQJ33zzje56eno6srKyEBUVpWuTy+Xo3r07VCoVAEClUiEgIAD333+/rk9UVBTc3Nxw6NAhXZ/evXvDs1wBr+joaJw5cwbXym/BvGvOnDmQy+W6ryZNmlj82YmIiKwiI0MzyzR37r2211/XhE6hoXYblquwa+D0999/Y9GiRWjVqhW2bduGSZMm4eWXX8a3334LAMjKygIABAUFiV4XFBSku5aVlYXAwEDR9Vq1aqFevXqiPobuUf49yps2bRoKCgp0XxcvXrTA0xIREVnZxIlAs2bititXgPnz7TMeF2TXXXVqtRr3338/PvzwQwBAp06dkJqaisWLF2PMmDF2G5eXlxe8vLzs9v5EREQmOXNGP2fp/feBt9+2z3hcmF1nnIKDgxEeHi5qa9euHTIyMgAACoUCAJCdnS3qk52drbumUCiQk5Mjun7nzh3k5eWJ+hi6R/n3ICIicjqCAPznP/pBU24ugyYrsWvg1LNnT5w5c0bU9tdff6HZ3WnGsLAwKBQK7NixQ3e9sLAQhw4dglKpBAAolUrk5+cjOTlZ12fnzp1Qq9Xo3r2Line truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"X = dataset[\"living_area\"].to_frame()\n",
|
||||||
|
"X.insert(0, \"x0\", 1) # add the column full of ones at the start, this represents x0\n",
|
||||||
|
"X = np.array(X)\n",
|
||||||
|
"\n",
|
||||||
|
"y = np.array(dataset[\"rent_price\"])\n",
|
||||||
|
"\n",
|
||||||
|
"theta = np.linalg.inv(X.T @ X) @ X.T @ y \n",
|
||||||
|
"\n",
|
||||||
|
"print(f\"Theta : {theta}\")\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"plt.scatter(dataset[\"living_area\"], dataset[\"rent_price\"])\n",
|
||||||
|
"plt.xlabel(\"Living Area\")\n",
|
||||||
|
"plt.ylabel(\"Rent price\")\n",
|
||||||
|
"\n",
|
||||||
|
"y_regr = theta[0] + theta[1] * X[:,1]\n",
|
||||||
|
"plt.plot(X[:,1], y_regr, color='red', label='Regression line')\n",
|
||||||
|
"\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "ccc5d7b9",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"b) Compute the overall cost value according to the following equation:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "31a38211",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"<div><div style=\"display: table-cell; width: 100%;\"><center>$J(\\theta) = \\frac{1}{2N} \\sum_{n=1}^{N} (h_{\\theta}(\\mathbf{x}_{n}) - y_{n})^{2}$</center></div><div style=\"display: table-cell; width: 100%;\">$(2)$</div></div>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "db65a2fa",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
" Overall cost : 138034.95779787414\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"def cost_J(y_pred, y):\n",
|
||||||
|
" return (1/(2*len(y))) * np.sum((y_pred - y)**2)\n",
|
||||||
|
"\n",
|
||||||
|
"y_pred = X @ theta\n",
|
||||||
|
"# print(y_pred)\n",
|
||||||
|
"# print(X)\n",
|
||||||
|
"closed_form_cost = cost_J(y_pred, y)\n",
|
||||||
|
"print(f\" Overall cost : {closed_form_cost}\")"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "38fed9aa",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Exercise 3 - Gradient descent for linear regression"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "d946ac48",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Implement the _full batch_ gradient descent algorithm for the previous problem. As seen in the\n",
|
||||||
|
"theory, the update rules are:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "9d1618d6",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"<div><div style=\"display: table-cell; width: 100%;\"><center>$\\theta_{0} \\leftarrow \\theta_{0} - \\alpha \\frac{1}{N} \\sum_{n=1}^{N} (h_{\\theta}(\\mathbf{x}_{n}) - y_{n})$</center></div><div style=\"display: table-cell; width: 100%;\">$(6)$</div></div>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "6c0049d3",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"<div><div style=\"display: table-cell; width: 100%;\"><center>$\\theta_{1} \\leftarrow \\theta_{1} - \\alpha \\frac{1}{N} \\sum_{n=1}^{N} (h_{\\theta}(\\mathbf{x}_{n}) - y_{n}) x_{n,1}$</center></div><div style=\"display: table-cell; width: 100%;\">$(7)$</div></div>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "3e0f8c42",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"**Remark** You need to iterate several times over the training set. If you have problems of convergence, you need to use a smaller value of $\\alpha$. Values such as $0.000001$ are common."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "9ca79a3d",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Theta = [240.07710713 26.33242457]\n",
|
||||||
|
"Cost = 138034.95779787414\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"\n",
|
||||||
|
"theta = np.zeros((2))\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"alpha = 0.0001 # i got the best results with those parameters\n",
|
||||||
|
"\n",
|
||||||
|
"max_iter = 1000000\n",
|
||||||
|
"costs = []\n",
|
||||||
|
"\n",
|
||||||
|
"for i in range(0, max_iter): # we could also use a delta on the cost function with a while to stop when the cost is not improving but we wanted to see the curve after x iterations\n",
|
||||||
|
" y_pred = X @ theta\n",
|
||||||
|
" theta[0] = theta[0] - alpha * (1/len(y)) * np.sum(y_pred - y)\n",
|
||||||
|
" theta[1] = theta[1] - alpha * (1/len(y)) * np.sum((y_pred - y) * X[:,1]) \n",
|
||||||
|
"\n",
|
||||||
|
" c = cost_J(y_pred, y) # to plot the costs over iters\n",
|
||||||
|
" costs.append(c)\n",
|
||||||
|
"\n",
|
||||||
|
"y_pred = X @ theta\n",
|
||||||
|
"print(f\"Theta = {theta}\")\n",
|
||||||
|
"print(f\"Cost = {cost_J(y_pred, y)}\")\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "da5121b6",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"a) Plot the cost value (Equation 2) as a function of the iterations. What do you observe?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 167,
|
||||||
|
"id": "5a34ad43",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAG+CAYAAABBOgSxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKDRJREFUeJzt3X10VNW9//HPJJAJSmYk0jzB8CxPkpAYeQhIga7YlLIouf5Elq0ktYDX2+BCub29RrzS+tBQBaWrF0GqkFKLsViBFikPjY38hFhLTJaAFEVogsoE+CGZJNUAmfP7gzI2JYk5IclmZt6v5VnJ7Nl7zne2Wc7HM+ec7bAsyxIAAIAhEaYLAAAA4Y0wAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwKqjCye/duzZgxQ0lJSXI4HNq8ebPt17AsS8uWLdPQoUPldDrVp08fPfHEEx1fLAAAaJNupguwo76+XqNHj9b3vvc93Xbbbe16jYULF2rnzp1atmyZkpOTdebMGZ05c6aDKwUAAG3lCNaF8hwOhzZt2qTs7OxAW0NDgxYvXqyXXnpJZ8+e1ahRo/TTn/5UU6ZMkSQdOnRIKSkpOnDggIYNG2amcAAA0ERQfU3zZRYsWKDS0lIVFRXp3Xff1axZs/SNb3xDH3zwgSTp97//vQYNGqStW7dq4MCBGjBggObNm8eREQAADAqZMFJVVaV169Zp48aNmjRpkgYPHqwf/OAHuuWWW7Ru3TpJ0tGjR1VZWamNGzdq/fr1KiwsVFlZmW6//XbD1QMAEL6C6pyR1uzfv1+NjY0aOnRok/aGhgZdf/31kiS/36+GhgatX78+0O+FF15Qenq6Dh8+zFc3AAAYEDJhpK6uTpGRkSorK1NkZGST53r27ClJSkxMVLdu3ZoElhEjRki6eGSFMAIAQNcLmTCSlpamxsZGnTx5UpMmTWq2z8SJE3XhwgV9+OGHGjx4sCTp/ffflyT179+/y2oFAABfCKqraerq6nTkyBFJF8PH008/ralTpyo2Nlb9+vXTXXfdpT179mj58uVKS0vTqVOnVFxcrJSUFE2fPl1+v19jxoxRz549tWLFCvn9fuXl5cnlcmnnzp2G3x0AAOEpqMJISUmJpk6dell7bm6uCgsLdf78eT3++ONav369Pv74Y/Xu3Vvjx4/Xj3/8YyUnJ0uSPvnkE913333auXOnrr32Wk2bNk3Lly9XbGxsV78dAACgIAsjAAAg9ITMpb0AACA4EUYAAIBRQXE1jd/v1yeffKKYmBg5HA7T5QAAgDawLEu1tbVKSkpSRETLxz+CIox88skn8ng8pssAAADtcPz4cfXt27fF54MijMTExEi6+GZcLpfhagAAQFv4fD55PJ7A53hLgiKMXPpqxuVyEUYAAAgyX3aKBSewAgAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjArrMPKj3x3UXc//WWWVZ0yXAgBA2ArrMPLuR2f15pHT+n9150yXAgBA2ArrMAIAAMwjjAAAAKMIIwAAwCjCCAAAMMpWGFm1apVSUlLkcrnkcrmUkZGhP/zhDy32LywslMPhaLJFR0dfcdEAACB0dLPTuW/fvlq6dKluuOEGWZalX/7yl5o5c6bKy8t14403NjvG5XLp8OHDgccOh+PKKgYAACHFVhiZMWNGk8dPPPGEVq1apbfeeqvFMOJwOJSQkND+CgEAQEhr9zkjjY2NKioqUn19vTIyMlrsV1dXp/79+8vj8WjmzJk6ePDgl752Q0ODfD5fkw0AAIQm22Fk//796tmzp5xOp+69915t2rRJI0eObLbvsGHDtHbtWm3ZskUvvvii/H6/JkyYoI8++qjVfRQUFMjtdgc2j8djt0wAABAkHJZlWXYGnDt3TlVVVaqpqdErr7yi559/Xm+88UaLgeSfnT9/XiNGjNCdd96pxx57rMV+DQ0NamhoCDz2+XzyeDyqqamRy+WyU26rbnt2j96pOqvn5qQr60a+SgIAoCP5fD653e4v/fy2dc6IJEVFRWnIkCGSpPT0dP3lL3/Rz372Mz333HNfOrZ79+5KS0vTkSNHWu3ndDrldDrtlgYAAILQFd9nxO/3NzmK0ZrGxkbt379fiYmJV7rbDsGVPQAAmGfryEh+fr6mTZumfv36qba2Vhs2bFBJSYl27NghScrJyVGfPn1UUFAgSXr00Uc1fvx4DRkyRGfPntVTTz2lyspKzZs3r+PfCQAACEq2wsjJkyeVk5OjEydOyO12KyUlRTt27NCtt94qSaqqqlJExBcHWz799FPNnz9fXq9XvXr1Unp6uvbu3dum80sAAEB4sH0CqwltPQHGrv+zaq/KKj/lBFYAADpBWz+/WZsGAAAYRRgBAABGEUYAAIBRhBEAAGAUYQQAABhFGAEAAEYRRiRd/Rc3AwAQuggjAADAqLAOI6xMAwCAeWEdRgAAgHmEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgFGEEAAAYRRgBAABGEUYkSdwPHgAAUwgjAADAKMIIAAAwKqzDiIPFaQAAMC6swwgAADCPMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMKIJIulaQAAMIYwAgAAjCKMAAAAo8I6jDjE4jQAAJgW1mEEAACYRxgBAABGEUYAAIBRhBEAAGCUrTCyatUqpaSkyOVyyeVyKSMjQ3/4wx9aHbNx40YNHz5c0dHRSk5O1rZt266oYAAAEFpshZG+fftq6dKlKisr0759+/S1r31NM2fO1MGDB5vtv3fvXt15552aO3euysvLlZ2drezsbB04cKBDigcAAMHPYVlXdv/R2NhYPfXUU5o7d+5lz82ePVv19fXaunVroG38+PFKTU3V6tWr27wPn88nt9utmpoauVyuKym3iTtWl+rtv53Rqu/cpGnJiR32ugAAoO2f3+0+Z6SxsVFFRUWqr69XRkZGs31KS0uVmZnZpC0rK0ulpaWtvnZDQ4N8Pl+TDQAAhCbbYWT//v3q2bOnnE6n7r33Xm3atEkjR45stq/X61V8fHyTtvj4eHm93lb3UVBQILfbHdg8Ho/dMm1haRoAAMyxHUaGDRumiooK/fnPf9Z//Md/KDc3V++9916HFpWfn6+amprAdvz48Q59fQAAcPXoZndAVFSUhgwZIklKT0/XX/7yF/3sZz/Tc889d1nfhIQEVVdXN2mrrq5WQkJCq/twOp1yOp12SwMAAEHoiu8z4vf71dDQ0OxzGRkZKi4ubtK2a9euFs8x6XIsTQMAgHG2jozk5+dr2rRp6tevn2pra7VhwwaVlJRox44dkqScnBz16dNHBQUFkqSFCxdq8uTJWr58uaZPn66ioiLt27dPa9as6fh3AgAAgpKtMHLy5Enl5OToxIkTcrvdSklJ0Y4dO3TrrbdKkqqqqhQR8cXBlgkTJmjDhg16+OGH9dBDD+mGG27Q5s2bNWrUqI59FwAAIGjZCiMvvPBCq8+XlJRc1jZr1izNmjXLVlEAACB8sDYNAAAwijACAACMIowAAACjCCMAAMAowoikK1sqEAAAXAnCCAAAMIowAgAAjCKMAAAAo8I6jLA0DQAA5oV1GAEAAOYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgFGFEkiUWpwEAwBTCCAAAMIowAgAAjCKMAAAAo8I6jDhYnAYAAOPCOowAAADzCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCiCSLu8EDAGAMYQQAABhFGAEAAEYRRgAAgFGEEQAAYFRYhxGHWJwGAADTwjqMAAAA8wgjAADAKMIIAAAwijACAACMIowAAACjbIWRgoICjRkzRjExMYqLi1N2drYOHz7c6pjCwkI5HI4mW3R09BUVDQAAQoetMPLGG28oLy9Pb731lnbt2qXz58/r61//uurr61sd53K5dOLEicBWWVl5RUV3NJamAQDAnG52Om/fvr3J48LCQsXFxamsrExf/epXWxzncDiUkJDQvgoBAEBIu6JzRmpqaiRJsbGxrfarq6tT//795fF4NHPmTB08eLDV/g0NDfL5fE02AAAQmtodRvx+v+6//35NnDhRo0aNarHfsGHDtHbtWm3ZskUvvvii/H6/JkyYoI8++qjFMQUFBXK73YHN4/G0t0wAAHCVa3cYycvL04EDB1RUVNRqv4yMDOXk5Cg1NVWTJ0/Wq6++qq985St67rnnWhyTn5+vmpqawHb8+PH2lgkAAK5yts4ZuWTBggXaunWrdu/erb59+9oa2717d6WlpenIkSMt9nE6nXI6ne0pzRYHS9MAAGCcrSMjlmVpwYIF2rRpk15//XUNHDjQ9g4bGxu1f/9+JSYm2h4LAABCj60jI3l5edqwYYO2bNmimJgYeb1eSZLb7VaPHj0kSTk5OerTp48KCgokSY8++qjGjx+vIUOG6OzZs3rqqadUWVmpefPmdfBbAQAAwchWGFm1apUkacqUKU3a161bp+9+97uSpKqqKkVEfHHA5dNPP9X8+fPl9XrVq1cvpaena+/evRo5cuSVVQ4AAEKCrTBiWV9+e7CSkpImj5955hk988wztooCAADhg7VpAACAUYQRte2IDwAA6ByEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgVFiHEdamAQDAvLAOIwAAwDzCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwK6zDiEIvTAABgWliHEQAAYB5hBAAAGEUYAQAARhFGAACAUYQRAABgFGFEkmWZrgAAgPBFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARoV1GHGwNA0Line truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"plt.plot(range(0, len(costs)), costs)\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "63917be0",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"In this scenario, we can clearly observe a plateau of the cost function. This means that we have reached a local minimum while trying to minimise the cost."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "c5903f37",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"b) Imagine a stopping criterion, i.e. when do we stop iterating on the training set?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "93905b85",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"The stopping criterion can be a small delta between each calculations of the cost. Like if the cost did not change of at least delta, this means we are in a plateau and should stop."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "7667bec1",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"c) Plot the computed line $h_{\\theta}(\\mathbf{x})$ on top of the scatter plot of exercise 1."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 152,
|
||||||
|
"id": "e80c04b3",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"plt.scatter(dataset[\"living_area\"], dataset[\"rent_price\"])\n",
|
||||||
|
"plt.xlabel(\"Living Area\")\n",
|
||||||
|
"plt.ylabel(\"Rent price\")\n",
|
||||||
|
"\n",
|
||||||
|
"y_regr = theta[0] + theta[1] * X[:,1]\n",
|
||||||
|
"plt.plot(X[:,1], y_regr, color='red', label='Regression line')\n",
|
||||||
|
"\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "d1fdf27b",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"d) Compute the final cost value according to Equation 2 and compare it to the one of exercise 2. What can you conclude?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 153,
|
||||||
|
"id": "5e594f32",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"The best cost value is 138034.95779787409, the exercice 2 cost value is 138034.95779787414\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"\n",
|
||||||
|
"print(f\"The best cost value is {best_cost}, the exercice 2 cost value is {closed_form_cost}\")"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "cd10b91b",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"We took some time to experiment with the alpha and max_iter values to try to get the best possible result. It seems that the closed form formula is the best one but we can get really close by tweaking those two values. "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "54727ff1",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Exercise 4 - Stochastic gradient descent for linear regression"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "32a00957",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Implement the stochastic gradient descent algorithm for the previous problem. As seen in the theory, the update rules are:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "636920d2",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"<div><div style=\"display: table-cell; width: 100%;\"><center>$\\theta_{i} \\leftarrow \\theta_{i} - \\alpha (h_{\\theta}(\\mathbf{x}_{n}) - y_{n}) x_{n,i}$</center></div><div style=\"display: table-cell; width: 100%;\">$(8)$</div></div>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "3f693388",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"144176.78676766725\n",
|
||||||
|
"[ 0.32486065 28.59143527]\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"import random\n",
|
||||||
|
"theta = np.zeros((2))\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"alpha = 0.000001 # i got the best results with those parameters\n",
|
||||||
|
"\n",
|
||||||
|
"max_iter = 1000\n",
|
||||||
|
"costs = []\n",
|
||||||
|
"\n",
|
||||||
|
"best_cost = np.inf\n",
|
||||||
|
"\n",
|
||||||
|
"for i in range(0, max_iter): # we could also use a delta on the cost function with a while to stop when the cost is not improving but we wanted to see the curve after x iterations\n",
|
||||||
|
" rand = int(random.random() * X.shape[0])\n",
|
||||||
|
" y_pred_stoch = X[rand] @ theta\n",
|
||||||
|
" theta[0] = theta[0] - alpha * (y_pred_stoch - y[rand])\n",
|
||||||
|
" theta[1] = theta[1] - alpha * (y_pred_stoch - y[rand]) * X[rand,1]\n",
|
||||||
|
"\n",
|
||||||
|
" y_pred = X @ theta\n",
|
||||||
|
" costs.append(cost_J(y_pred, y))\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"y_pred = X @ theta\n",
|
||||||
|
"print(cost_J(y_pred, y))\n",
|
||||||
|
"print(theta)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 178,
|
||||||
|
"id": "edbc5a14",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"plt.plot(range(0, len(costs)), costs)\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "cb73d7c1",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"a) Plot the computed line $h_{\\theta}(\\mathbf{x})$ on top of the scatter plot of exercise 1."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 179,
|
||||||
|
"id": "f73c6af3",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"plt.scatter(dataset[\"living_area\"], dataset[\"rent_price\"])\n",
|
||||||
|
"plt.xlabel(\"Living Area\")\n",
|
||||||
|
"plt.ylabel(\"Rent price\")\n",
|
||||||
|
"\n",
|
||||||
|
"y_regr = theta[0] + theta[1] * X[:,1]\n",
|
||||||
|
"plt.plot(X[:,1], y_regr, color='red', label='Regression line')\n",
|
||||||
|
"\n",
|
||||||
|
"plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "16e1eec7",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"b) How many samples do you need to visit for reaching the convergence?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "fd7870eb",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"The biggest improvements are made before the first 300ish iterations but smaller improvements still occur after that. If we were very limited in cpu time, we would tell that the convergence vas reached around 300 samples"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "c185d7bc",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"c) What kind of stopping criterion could we use here?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "235f3ac0",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"We would use the delta of the global cost function. When we compute the cost function, we can stop the iterations when the result is not improving more than a set delta."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "5e7ce003",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"d) Compute the final cost value according to Equation 2 and compare it to the one of exercise 2 and 3. What can you conclude?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 180,
|
||||||
|
"id": "dbcb6f22",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"144176.78676766725\n",
|
||||||
|
"[ 0.32486065 28.59143527]\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Your code here\n",
|
||||||
|
"y_pred = X @ theta\n",
|
||||||
|
"print(cost_J(y_pred, y))\n",
|
||||||
|
"print(theta)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "27a8e7fd",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"The result is really close to both of the other methods but the stochastic is way faster because we dont loop trough the whole dataset for each update. The stochastic might have a slightly worse final result because it is harder to find the exact perfect values but its speed and efficency compensates this."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "a8a85676",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Exercise 5 - Review questions"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "84f82d3d",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"a) The linear regression has a mathematical _closed form_ solution. Then, in which conditions would we prefer a gradient descent algorithm to compute the regression model?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "eecbe019",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"_Your answer here_"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "3696b258",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"b) Outliers in a data set can be defined as values that are out of the \"usual\" range in comparison with other values. They typically come from noise or anomalies in the data capturing process. What is the impact of an outlier in the stochastic gradient descent process? What if we have many outliers? _Hint_: look at the equation of the MSE, and to the equation of the update rule."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "4873219d",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"_Your answer here_"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "22dce221",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"c) In the case of stochastic gradient descent, what is the danger of having a too large or too small $\\alpha$ value? Could you think of a better (more advanced) strategy as the one stated in Slide 36?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "d1536554",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"_Your answer here_"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "07bdad8b",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"d) Let's assume we expect that the target variable $y$ has a dependency to the square and to the cube of one of the feature $x_d$ in our multi-variable training set $(x_1, \\ldots, x_d, \\ldots, x_D)$. How would you proceed? Do we need to take precautions in terms of numerical stability?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "d4f242c5",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"_Your answer here_"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "b7cf619b",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"e) _Advanced_. Could we use a descent algorithm without computing the gradient? If yes, give a pseudo code of the algorithm to find $(\\theta_{0}, \\theta_{1})$ using a linear regression $h_{\\theta}(x) = \\theta_0 + \\theta_1 x$."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "89317af1",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"_Your answer here_"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "2b0997fa",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": ".venv",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3",
|
||||||
|
"version": "3.12.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
Reference in new issue
Block a user