Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img width=\"800px\" src=\"../fidle/img/00-Fidle-header-01.svg\"></img>\n",
"# <!-- TITLE --> [FIT1] - Complexity Syndrome\n",
"<!-- DESC --> Illustration of the problem of complexity with the polynomial regression\n",
"<!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP) -->\n",
" - Visualizing and understanding under and overfitting\n",
"## What we're going to do :\n",
"\n",
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
"We are looking for a polynomial function to approximate the observed series : \n",
"$ y = a_n\\cdot x^n + \\dots + a_i\\cdot x^i + \\dots + a_1\\cdot x + b $ \n",
"\n",
"\n",
"## Step 1 - Import and init"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>\n",
"\n",
"div.warn { \n",
" background-color: #fcf2f2;\n",
" border-color: #dFb5b4;\n",
" border-left: 5px solid #dfb5b4;\n",
" padding: 0.5em;\n",
" font-weight: bold;\n",
" font-size: 1.1em;;\n",
" }\n",
"\n",
"\n",
"\n",
"div.nota { \n",
" background-color: #DAFFDE;\n",
" border-left: 5px solid #92CC99;\n",
" padding: 0.5em;\n",
" }\n",
"\n",
"\n",
"\n",
"</style>\n",
"\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"FIDLE 2020 - Practical Work Module\n",
"Version : 0.2.9\n",
"Run time : Tuesday 18 February 2020, 17:23:05\n",
"TensorFlow version : 2.0.0\n",
"Keras version : 2.2.4-tf\n"
]
}
],
"source": [
"import numpy as np\n",
"import math\n",
"import random\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import sys\n",
"\n",
"sys.path.append('..')\n",
"import fidle.pwk as ooo\n",
"\n",
"ooo.init()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 2 - Preparation of learning data :"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nombre de points : 100 a=[-1.40023862 1.64009905 1.89987647 1.24972783 1.17765272 1.90935391\n",
" 1.11259327] deg=7 bruit=2000\n"
]
},
{
"data": {
"text/markdown": [
"#### Before normalization :"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Données d'aprentissage brute :\n",
"(100 points visibles sur 100)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"X : mean= +0.2539 std= +2.9283 min= -4.9332 max= +4.9177\n",
"Y : mean= -2914.8537 std= +5532.3607 min= -23848.6013 max= +5139.0627\n"
]
},
{
"data": {
"text/markdown": [
"#### After normalization :"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Données d'aprentissage normalisées :\n",
"(100 points visibles sur 100)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"X_norm : mean= +0.0000 std= +1.0000 min= -1.7714 max= +1.5927\n",
"Y_norm : mean= -0.0000 std= +1.0000 min= -3.7839 max= +1.4558\n"
]
}
],
"source": [
"# ---- Parameters\n",
"\n",
"n = 100\n",
"\n",
"xob_min = -5\n",
"xob_max = 5\n",
"\n",
"deg = 7\n",
"a_min = -2\n",
"a_max = 2\n",
"\n",
"noise = 2000\n",
"\n",
"# ---- Train data\n",
"# X,Y : data\n",
"# X_norm,Y_norm : normalized data\n",
"\n",
"X = np.random.uniform(xob_min,xob_max,(n,1))\n",
"# N = np.random.uniform(-noise,noise,(n,1))\n",
"N = noise * np.random.normal(0,1,(n,1))\n",
"\n",
"a = np.random.uniform(a_min,a_max, (deg,))\n",
"fy = np.poly1d( a )\n",
"\n",
"Y = fy(X) + N\n",
"\n",
"# ---- Data normalization\n",
"#\n",
"X_norm = (X - X.mean(axis=0)) / X.std(axis=0)\n",
"Y_norm = (Y - Y.mean(axis=0)) / Y.std(axis=0)\n",
"\n",
"# ---- Data visualization\n",
"\n",
"width = 12\n",
"height = 6\n",
"nb_viz = min(2000,n)\n",
"\n",
"def vector_infos(name,V):\n",
" m=V.mean(axis=0).item()\n",
" s=V.std(axis=0).item()\n",
" print(\"{:8} : mean={:+12.4f} std={:+12.4f} min={:+12.4f} max={:+12.4f}\".format(name,m,s,V.min(),V.max()))\n",
"\n",
"\n",
"print(\"Nombre de points : {} a={} deg={} bruit={}\".format(n,a,deg,noise))\n",
"\n",
"ooo.display_md('#### Before normalization :')\n",
"print(\"\\nDonnées d'aprentissage brute :\")\n",
"print(\"({} points visibles sur {})\".format(nb_viz,n))\n",
"plt.figure(figsize=(width, height))\n",
"plt.plot(X[:nb_viz], Y[:nb_viz], '.')\n",
"plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
"plt.xlabel('x axis')\n",
"plt.ylabel('y axis')\n",
"plt.show()\n",
"vector_infos('X',X)\n",
"vector_infos('Y',Y)\n",
"\n",
"ooo.display_md('#### After normalization :')\n",
"print(\"\\nDonnées d'aprentissage normalisées :\")\n",
"print(\"({} points visibles sur {})\".format(nb_viz,n))\n",
"plt.figure(figsize=(width, height))\n",
"plt.plot(X_norm[:nb_viz], Y_norm[:nb_viz], '.')\n",
"plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
"plt.xlabel('x axis')\n",
"plt.ylabel('y axis')\n",
"plt.show()\n",
"vector_infos('X_norm',X_norm)\n",
"vector_infos('Y_norm',Y_norm)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 3 - Polynomial regression with NumPy\n",
"### 3.1 - Underfitting"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"def draw_reg(X_norm, Y_norm, x_hat,fy_hat, size):\n",
" plt.figure(figsize=size)\n",
" plt.plot(X_norm, Y_norm, '.')\n",
"\n",
" x_hat = np.linspace(X_norm.min(), X_norm.max(), 100)\n",
"\n",
" plt.plot(x_hat, fy_hat(x_hat))\n",
" plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
" plt.xlabel('x axis')\n",
" plt.ylabel('y axis')\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nombre de degrés : 1 a_hat=[ 2.15635737e-01 -1.26046371e-16]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"reg_deg=1\n",
"\n",
"a_hat = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
"fy_hat = np.poly1d( a_hat )\n",
"\n",
"print(\"Nombre de degrés : {} a_hat={}\".format(reg_deg, a_hat))\n",
"draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], x_hat,fy_hat, (width,height))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.2 - Good fitting"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nombre de degrés : 5 a_hat=[ 0.09676506 -0.49102546 -0.19674074 0.41539174 -0.00888844 0.51187173]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"reg_deg=5\n",
"\n",
"a_hat = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
"fy_hat = np.poly1d( a_hat )\n",
"\n",
"print(\"Nombre de degrés : {} a_hat={}\".format(reg_deg, a_hat))\n",
"draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], x_hat,fy_hat, (width,height))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.3 - Overfitting"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nombre de degrés : 24 a_hat=[-3.39583761e-01 3.66524802e+00 1.35968152e+01 -5.33709389e+01\n",
" -1.54708597e+02 3.43661072e+02 8.76139324e+02 -1.29075459e+03\n",
" -2.93637308e+03 3.13537269e+03 6.25956959e+03 -5.14495063e+03\n",
" -8.72124478e+03 5.75688179e+03 7.93008239e+03 -4.30734159e+03\n",
" -4.57884398e+03 2.04404969e+03 1.58025869e+03 -5.55090657e+02\n",
" -2.89374022e+02 7.05282858e+01 2.12619645e+01 -2.67799255e+00\n",
" 3.95718335e-01]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"reg_deg=24\n",
"\n",
"a_hat = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
"fy_hat = np.poly1d( a_hat )\n",
"\n",
"print(\"Nombre de degrés : {} a_hat={}\".format(reg_deg, a_hat))\n",
"draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], x_hat,fy_hat, (width,height))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"<img width=\"80px\" src=\"../fidle/img/00-Fidle-logo-01.svg\"></img>"
]
}
],
"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.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}