├── Lectures_Videos.MD
├── Part 02 - Python Quick Tutorial - Pandas and Data preprocessing
├── 0_python_intro_v1.ipynb
├── README.md
├── house_mean_normalized.csv
├── house_mean_normalized.xlsx
├── house_price_ds.csv
└── pandas_tutorial.ipynb
├── Part 03 - Linear Regression Python
├── 3_linear_regression.ipynb
└── README.md
├── Part 04 - Logistic Regression with Python
├── README.md
└── logistic_regression.ipynb
├── Part 05 - Constructing a Neural Network Models - Regression model with Python (Tensorflow & Keras)
├── BostonHousing.csv
├── README.md
└── example1-v3_regression.ipynb
├── Part 06 - Constructing a Binary Classifier Using Neural Network with Python (Tensorflow & Keras)
├── Ex01-NN_classification.ipynb
├── README.md
└── datasets_14370_19291_pima-indians-diabetes.csv
├── Part 07 - Constructing a Multi-Class Classifier Using Neural Network with Python (Tensorflow & Keras)
├── Ex04-NN-multi-class.ipynb
└── README.md
├── Part 08 - Constructing a Binary Classifier Using SVM with Python
├── Ex02-SVM.ipynb
└── README.md
├── Part 09 - Constructing Multi-Class Classifier Using SVM with Python
├── Ex03-SVM_multiple_class.ipynb
└── README.md
├── Part 10 - Dimensionality Reduction - Principal Component Analysis using Python
├── README.md
└── module-11-pca.ipynb
├── Part 11 - Unsupervised Learning - K-Means Clustering with Python
├── README.md
└── module-10-kmeans.ipynb
└── README.md
/Lectures_Videos.MD:
--------------------------------------------------------------------------------
1 | # Introduction to Machine Learning - Full Course.
2 | This course covers the basics of machine learning. Here is a list of 14 lectures with videos for the class.
3 | This Lectures were taught and recorded by Zeyad Hailat.
4 |
5 | [For the applied part and Python code for the methods please refer to the Python Tutorial here.](https://github.com/zhailat/Introduction-to-machine-learning-Python/blob/master/README.md)
6 |
7 | ## Lecture 01 - Introduction to Machine Learning
8 | [Youtube Video](https://www.youtube.com/watch?v=82LjjOeDS7E&feature=youtu.be)
9 |
10 | ## lecture 02 - Linear Regression with one variable
11 | [Youtube Video](https://www.youtube.com/watch?v=6tkxP5exYH0&feature=youtu.be)
12 |
13 | ## Lecture 03 - Linear Regression with Multiple Variables
14 | [Youtube Video](https://www.youtube.com/watch?v=RR3mjo5T7IE&feature=youtu.be)
15 |
16 | ## Lecture 04 - Logistic Regression
17 | [Youtube Video](https://www.youtube.com/watch?v=H370nQNj0UI&feature=youtu.be)
18 |
19 | ## Lecture 05- Regularization
20 | [Youtube Video](https://www.youtube.com/watch?v=NlKsE7l4oU0&feature=youtu.be)
21 |
22 | ## Lecture 06 - Neural Networks: Representation
23 | [Youtube Video](https://www.youtube.com/watch?v=Ll8mjZquWvc&feature=youtu.be)
24 |
25 | ## Lecture 07 - Neural Network
26 | [Youtube Video](https://www.youtube.com/watch?v=yfkQ372ypUg&feature=youtu.be)
27 |
28 | ## Lecture 08 - Advice for applying machine learning - Video
29 | [Youtube Video](https://www.youtube.com/watch?v=6tMd82VVyVM&feature=youtu.be)
30 |
31 | ## Lecture 09 –Machine Learning System Design
32 | [Youtube Video](https://www.youtube.com/watch?v=bY-uBgkW1VI&feature=youtu.be)
33 |
34 | ## Lecture - Support Vector Machine (SVM)
35 | [Youtube Video](https://www.youtube.com/watch?v=L1uMfw-IHcI&feature=youtu.be)
36 |
37 | ## Lecture 11 – Unsupervised learning – Clustering
38 | [Youtube Video](https://www.youtube.com/watch?v=KP835GYW2Sk&feature=youtu.be)
39 |
40 |
41 | ## Lecture 12 - Dimensionality Reduction \ Principal Component Analysis PCA
42 | [Youtube Video](https://www.youtube.com/watch?v=GxpZxvIIRDU&feature=youtu.be)
43 |
44 |
45 | ## Lecture 13 - Anomaly Detection
46 | [Youtube Video](https://www.youtube.com/watch?v=rKXsDuCYYFk&feature=youtu.be
47 |
48 | ## Lecture 14 Application Example Photo OCR
49 | [Youtube Video](https://www.youtube.com/watch?v=PjnS2bs0YKw&feature=youtu.be
50 |
51 |
--------------------------------------------------------------------------------
/Part 02 - Python Quick Tutorial - Pandas and Data preprocessing/0_python_intro_v1.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Welcome to Jupyter Lab tutorial\n",
8 | "## Level 2\n",
9 | "### Level 3\n",
10 | "\n",
11 | "this is tutorial to go over Python."
12 | ]
13 | },
14 | {
15 | "cell_type": "markdown",
16 | "metadata": {
17 | "colab_type": "text",
18 | "id": "SejNSmRmnBYF"
19 | },
20 | "source": [
21 | "# Python Tutorial Notebook\n"
22 | ]
23 | },
24 | {
25 | "cell_type": "markdown",
26 | "metadata": {
27 | "colab_type": "text",
28 | "id": "CCTFTBDTD5nA"
29 | },
30 | "source": [
31 | "#### Basic Syntax\n",
32 | "\n",
33 | "```python\n",
34 | "\n",
35 | "result_list = [output_exp for var in input_list if (condition on var is true)]\n",
36 | "```"
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "execution_count": 4,
42 | "metadata": {
43 | "colab": {},
44 | "colab_type": "code",
45 | "id": "qv6vvJ1G9tt_"
46 | },
47 | "outputs": [],
48 | "source": [
49 | "nums = range(100)\n",
50 | "squares = []\n",
51 | "\n",
52 | "for num in nums:\n",
53 | " squares.append(num**2) # num * num"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 3,
59 | "metadata": {
60 | "colab": {},
61 | "colab_type": "code",
62 | "id": "elSIhi5r95d5"
63 | },
64 | "outputs": [],
65 | "source": [
66 | "nums = range(100)\n",
67 | "squares = [num**2 for num in nums]"
68 | ]
69 | },
70 | {
71 | "cell_type": "code",
72 | "execution_count": 5,
73 | "metadata": {
74 | "colab": {},
75 | "colab_type": "code",
76 | "id": "k_P6Bo5Z-hlk"
77 | },
78 | "outputs": [],
79 | "source": [
80 | "nums = range(100)\n",
81 | "odd_squares = []\n",
82 | "\n",
83 | "for num in nums:\n",
84 | " if num % 2 == 1: # Odd value\n",
85 | " odd_squares.append(num**2)"
86 | ]
87 | },
88 | {
89 | "cell_type": "code",
90 | "execution_count": 7,
91 | "metadata": {
92 | "colab": {},
93 | "colab_type": "code",
94 | "id": "x2D8-uhV-yyO"
95 | },
96 | "outputs": [],
97 | "source": [
98 | "# list comprehensions are (often) more concise\n",
99 | "nums = range(100)\n",
100 | "odd_squares = [num ** 2 for num in nums if num % 2 == 1]"
101 | ]
102 | },
103 | {
104 | "cell_type": "markdown",
105 | "metadata": {
106 | "colab_type": "text",
107 | "id": "lsM4SC68_g-r"
108 | },
109 | "source": [
110 | "#### Dict comprehensions"
111 | ]
112 | },
113 | {
114 | "cell_type": "code",
115 | "execution_count": 8,
116 | "metadata": {
117 | "colab": {},
118 | "colab_type": "code",
119 | "id": "UXrHcXUf_zD4"
120 | },
121 | "outputs": [],
122 | "source": [
123 | "nums = range(100)\n",
124 | "# Empty dictionary (hashtable.)\n",
125 | "odd_dict = {}\n",
126 | "\n",
127 | "for num in nums:\n",
128 | " if num % 2 == 1: # Odd\n",
129 | " odd_dict[num] = num **2\n",
130 | " # e.g., key: 3 => value: 3 *3"
131 | ]
132 | },
133 | {
134 | "cell_type": "code",
135 | "execution_count": 10,
136 | "metadata": {
137 | "colab": {},
138 | "colab_type": "code",
139 | "id": "j0SpOloPAIVx"
140 | },
141 | "outputs": [],
142 | "source": [
143 | "nums = range(100)\n",
144 | "odd_dict = {num : num ** 2 for num in nums if num % 2 == 1}"
145 | ]
146 | },
147 | {
148 | "cell_type": "markdown",
149 | "metadata": {
150 | "colab_type": "text",
151 | "id": "sgpdmB8-Nzei"
152 | },
153 | "source": [
154 | "\n",
155 | "- Jupyter notebooks provide built-in commands called **magics** to address common problems in the data analysis workflow\n",
156 | "\n"
157 | ]
158 | },
159 | {
160 | "cell_type": "markdown",
161 | "metadata": {
162 | "colab_type": "text",
163 | "id": "DaOA_ijjBFy7"
164 | },
165 | "source": [
166 | "#### Timing\n",
167 | "\n",
168 | "- likely the most useful magic functions are `time` and `timeit`\n",
169 | "\n",
170 | "- `time` times the amount of time used for a single run of the line of code or cell\n",
171 | "- `timeit` runs multiple trials of the line of code or cell to provide a more accurate measurement of the execution time"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": 11,
177 | "metadata": {
178 | "colab": {
179 | "base_uri": "https://localhost:8080/",
180 | "height": 54
181 | },
182 | "colab_type": "code",
183 | "id": "4mCnkqHnBwNV",
184 | "outputId": "dc267321-f744-4cba-809e-6ca06ae259f6"
185 | },
186 | "outputs": [
187 | {
188 | "name": "stdout",
189 | "output_type": "stream",
190 | "text": [
191 | "CPU times: user 55.6 ms, sys: 8.81 ms, total: 64.4 ms\n",
192 | "Wall time: 66.9 ms\n"
193 | ]
194 | }
195 | ],
196 | "source": [
197 | "%time odd_squares = [num ** 2 for num in range(100000) if num % 2 == 1]"
198 | ]
199 | },
200 | {
201 | "cell_type": "code",
202 | "execution_count": 12,
203 | "metadata": {
204 | "colab": {
205 | "base_uri": "https://localhost:8080/",
206 | "height": 35
207 | },
208 | "colab_type": "code",
209 | "id": "ngdZvR1QB6Lh",
210 | "outputId": "a7c80663-e866-4a0f-9ed4-a3b47e1650f4"
211 | },
212 | "outputs": [
213 | {
214 | "name": "stdout",
215 | "output_type": "stream",
216 | "text": [
217 | "6.75 ms ± 984 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
218 | ]
219 | }
220 | ],
221 | "source": [
222 | "%timeit odd_squares = [num ** 2 for num in range(10000) if num % 2 == 1]"
223 | ]
224 | },
225 | {
226 | "cell_type": "code",
227 | "execution_count": 13,
228 | "metadata": {
229 | "colab": {
230 | "base_uri": "https://localhost:8080/",
231 | "height": 54
232 | },
233 | "colab_type": "code",
234 | "id": "Cs5dc0wdCWkP",
235 | "outputId": "0450fe4b-5c6e-4d13-f683-c15fc1d06257"
236 | },
237 | "outputs": [
238 | {
239 | "name": "stdout",
240 | "output_type": "stream",
241 | "text": [
242 | "CPU times: user 7 µs, sys: 1 µs, total: 8 µs\n",
243 | "Wall time: 17.2 µs\n"
244 | ]
245 | }
246 | ],
247 | "source": [
248 | "# we can also time entire cells\n",
249 | "%time\n",
250 | "\n",
251 | "nums = range(100000)\n",
252 | "odd_squares = []\n",
253 | "\n",
254 | "for num in nums:\n",
255 | " if num % 2 == 1:\n",
256 | " odd_squares.append(num**2)"
257 | ]
258 | },
259 | {
260 | "cell_type": "code",
261 | "execution_count": 14,
262 | "metadata": {
263 | "colab": {
264 | "base_uri": "https://localhost:8080/",
265 | "height": 35
266 | },
267 | "colab_type": "code",
268 | "id": "oCC75kOFC8tI",
269 | "outputId": "2b23853e-212c-46ec-94cb-5a883e7b106a"
270 | },
271 | "outputs": [
272 | {
273 | "name": "stdout",
274 | "output_type": "stream",
275 | "text": [
276 | "76 ms ± 23.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
277 | ]
278 | }
279 | ],
280 | "source": [
281 | "%%timeit\n",
282 | "\n",
283 | "nums = range(100000)\n",
284 | "odd_squares = []\n",
285 | "\n",
286 | "for num in nums:\n",
287 | " if num % 2 == 1:\n",
288 | " odd_squares.append(num**2)"
289 | ]
290 | },
291 | {
292 | "cell_type": "markdown",
293 | "metadata": {
294 | "colab_type": "text",
295 | "id": "TEzyDxq6DD7N"
296 | },
297 | "source": [
298 | "#### Other useful Magics\n",
299 | "\n",
300 | "- `%who_ls`: lists all active variables in the namespace\n",
301 | "- `%reset`: resets the namespace and all named variables\n",
302 | "- `%debug`: activate the python debugger\n",
303 | "- `%lsmagic`: list all the available magic commands"
304 | ]
305 | },
306 | {
307 | "cell_type": "markdown",
308 | "metadata": {
309 | "colab_type": "text",
310 | "id": "oECU2uJZN0S1"
311 | },
312 | "source": [
313 | "### Out of Scope?\n",
314 | "\n",
315 | "- A quirk of Python variables is that they are scoped to the innermost function, and control blocks like `if` don't count"
316 | ]
317 | },
318 | {
319 | "cell_type": "code",
320 | "execution_count": 22,
321 | "metadata": {
322 | "colab": {},
323 | "colab_type": "code",
324 | "id": "pMi1WlM6yZKt"
325 | },
326 | "outputs": [
327 | {
328 | "name": "stdout",
329 | "output_type": "stream",
330 | "text": [
331 | "I've been initialized!\n"
332 | ]
333 | }
334 | ],
335 | "source": [
336 | "# Will this code throw an exception? What is the output?\n",
337 | "if True:\n",
338 | " x = \"I've been initialized!\"\n",
339 | "print(x)"
340 | ]
341 | },
342 | {
343 | "cell_type": "code",
344 | "execution_count": 23,
345 | "metadata": {
346 | "colab": {},
347 | "colab_type": "code",
348 | "id": "uUCWpHACG4bg"
349 | },
350 | "outputs": [
351 | {
352 | "name": "stdout",
353 | "output_type": "stream",
354 | "text": [
355 | "I've been initialized!\n"
356 | ]
357 | }
358 | ],
359 | "source": [
360 | "# Will this code throw an exception? What is the output?\n",
361 | "if False:\n",
362 | " x = \"I've been initialized!\"\n",
363 | "print(x)"
364 | ]
365 | },
366 | {
367 | "cell_type": "markdown",
368 | "metadata": {
369 | "colab_type": "text",
370 | "id": "rXDlHyltbXvF"
371 | },
372 | "source": [
373 | "### Imports\n",
374 | "\n",
375 | "- we need to import the NumPy module below in order to use it\n",
376 | "- we often use the `as` syntax to alias the module name to an abbreviation"
377 | ]
378 | },
379 | {
380 | "cell_type": "code",
381 | "execution_count": 15,
382 | "metadata": {
383 | "colab": {},
384 | "colab_type": "code",
385 | "id": "1DQPHorfbVFK"
386 | },
387 | "outputs": [],
388 | "source": [
389 | "# subsequent references to the numpy module can use 'np'\n",
390 | "import numpy as np"
391 | ]
392 | },
393 | {
394 | "cell_type": "markdown",
395 | "metadata": {
396 | "colab_type": "text",
397 | "id": "RIdCV4VrnZY1"
398 | },
399 | "source": [
400 | "### Rolling 5 Dice\n"
401 | ]
402 | },
403 | {
404 | "cell_type": "markdown",
405 | "metadata": {
406 | "colab_type": "text",
407 | "id": "JJm-06_nZxbk"
408 | },
409 | "source": [
410 | "\n",
411 | "```python\n",
412 | "y = np.zeros(5) \n",
413 | "roll_idx = np.array(range(5))\n",
414 | "y[roll_idx] = np.floor(np.random.uniform(0,6, roll_idx.shape))\n",
415 | "```\n",
416 | "\n",
417 | "---\n",
418 | "\n",
419 | "\n",
420 | "- `np.zeros(5)` creates an array of zeros of shape (5,)\n",
421 | " - **Note:** this is a 1D array with 5 elements, which is different than an 2D array with only one column, shape (5,1)\n",
422 | "- `np.array(range(5))` creates an array \\[0,1,2,3,4\\] of shape (5,)\n",
423 | "- `np.random.uniform(0,6, roll_idx.shape)` samples from the uniform distribution in the range \\[0, 6) in the given shape\n",
424 | "- `np.floor` rounds down to the nearest integer\n",
425 | " - **Note:** we're using zero-indexed dice, so our possible rolls are \\[0,1,2,3,4,5\\]\n",
426 | " \n",
427 | "*Tip: If you are unsure of a function's arguments or return signature, you can run `help(function_name)` to print the docstring*"
428 | ]
429 | },
430 | {
431 | "cell_type": "code",
432 | "execution_count": 16,
433 | "metadata": {
434 | "colab": {},
435 | "colab_type": "code",
436 | "id": "vVqHU3URbN2_"
437 | },
438 | "outputs": [
439 | {
440 | "name": "stdout",
441 | "output_type": "stream",
442 | "text": [
443 | "Help on built-in function uniform:\n",
444 | "\n",
445 | "uniform(...) method of numpy.random.mtrand.RandomState instance\n",
446 | " uniform(low=0.0, high=1.0, size=None)\n",
447 | " \n",
448 | " Draw samples from a uniform distribution.\n",
449 | " \n",
450 | " Samples are uniformly distributed over the half-open interval\n",
451 | " ``[low, high)`` (includes low, but excludes high). In other words,\n",
452 | " any value within the given interval is equally likely to be drawn\n",
453 | " by `uniform`.\n",
454 | " \n",
455 | " .. note::\n",
456 | " New code should use the ``uniform`` method of a ``default_rng()``\n",
457 | " instance instead; see `random-quick-start`.\n",
458 | " \n",
459 | " Parameters\n",
460 | " ----------\n",
461 | " low : float or array_like of floats, optional\n",
462 | " Lower boundary of the output interval. All values generated will be\n",
463 | " greater than or equal to low. The default value is 0.\n",
464 | " high : float or array_like of floats\n",
465 | " Upper boundary of the output interval. All values generated will be\n",
466 | " less than or equal to high. The default value is 1.0.\n",
467 | " size : int or tuple of ints, optional\n",
468 | " Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n",
469 | " ``m * n * k`` samples are drawn. If size is ``None`` (default),\n",
470 | " a single value is returned if ``low`` and ``high`` are both scalars.\n",
471 | " Otherwise, ``np.broadcast(low, high).size`` samples are drawn.\n",
472 | " \n",
473 | " Returns\n",
474 | " -------\n",
475 | " out : ndarray or scalar\n",
476 | " Drawn samples from the parameterized uniform distribution.\n",
477 | " \n",
478 | " See Also\n",
479 | " --------\n",
480 | " randint : Discrete uniform distribution, yielding integers.\n",
481 | " random_integers : Discrete uniform distribution over the closed\n",
482 | " interval ``[low, high]``.\n",
483 | " random_sample : Floats uniformly distributed over ``[0, 1)``.\n",
484 | " random : Alias for `random_sample`.\n",
485 | " rand : Convenience function that accepts dimensions as input, e.g.,\n",
486 | " ``rand(2,2)`` would generate a 2-by-2 array of floats,\n",
487 | " uniformly distributed over ``[0, 1)``.\n",
488 | " Generator.uniform: which should be used for new code.\n",
489 | " \n",
490 | " Notes\n",
491 | " -----\n",
492 | " The probability density function of the uniform distribution is\n",
493 | " \n",
494 | " .. math:: p(x) = \\frac{1}{b - a}\n",
495 | " \n",
496 | " anywhere within the interval ``[a, b)``, and zero elsewhere.\n",
497 | " \n",
498 | " When ``high`` == ``low``, values of ``low`` will be returned.\n",
499 | " If ``high`` < ``low``, the results are officially undefined\n",
500 | " and may eventually raise an error, i.e. do not rely on this\n",
501 | " function to behave when passed arguments satisfying that\n",
502 | " inequality condition. The ``high`` limit may be included in the\n",
503 | " returned array of floats due to floating-point rounding in the\n",
504 | " equation ``low + (high-low) * random_sample()``. For example:\n",
505 | " \n",
506 | " >>> x = np.float32(5*0.99999999)\n",
507 | " >>> x\n",
508 | " 5.0\n",
509 | " \n",
510 | " \n",
511 | " Examples\n",
512 | " --------\n",
513 | " Draw samples from the distribution:\n",
514 | " \n",
515 | " >>> s = np.random.uniform(-1,0,1000)\n",
516 | " \n",
517 | " All values are within the given interval:\n",
518 | " \n",
519 | " >>> np.all(s >= -1)\n",
520 | " True\n",
521 | " >>> np.all(s < 0)\n",
522 | " True\n",
523 | " \n",
524 | " Display the histogram of the samples, along with the\n",
525 | " probability density function:\n",
526 | " \n",
527 | " >>> import matplotlib.pyplot as plt\n",
528 | " >>> count, bins, ignored = plt.hist(s, 15, density=True)\n",
529 | " >>> plt.plot(bins, np.ones_like(bins), linewidth=2, color='r')\n",
530 | " >>> plt.show()\n",
531 | "\n"
532 | ]
533 | }
534 | ],
535 | "source": [
536 | "help(np.random.uniform)"
537 | ]
538 | },
539 | {
540 | "cell_type": "markdown",
541 | "metadata": {
542 | "colab_type": "text",
543 | "id": "aKCQs6kZIsRC"
544 | },
545 | "source": [
546 | "#### What is the value and shape of y?"
547 | ]
548 | },
549 | {
550 | "cell_type": "code",
551 | "execution_count": 17,
552 | "metadata": {
553 | "colab": {},
554 | "colab_type": "code",
555 | "id": "WAkm_b74JDHu"
556 | },
557 | "outputs": [
558 | {
559 | "name": "stdout",
560 | "output_type": "stream",
561 | "text": [
562 | "[4. 5. 3. 0. 1.]\n",
563 | "(5,)\n"
564 | ]
565 | }
566 | ],
567 | "source": [
568 | "y = np.zeros(5) \n",
569 | "roll_idx = np.array(range(5))\n",
570 | "y[roll_idx] = np.floor(np.random.uniform(0,6, roll_idx.shape))\n",
571 | "print(y)\n",
572 | "print(y.shape)"
573 | ]
574 | },
575 | {
576 | "cell_type": "code",
577 | "execution_count": 29,
578 | "metadata": {
579 | "colab": {},
580 | "colab_type": "code",
581 | "id": "5gNLxBvRKq9P"
582 | },
583 | "outputs": [
584 | {
585 | "name": "stdout",
586 | "output_type": "stream",
587 | "text": [
588 | "[[2.]\n",
589 | " [4.]\n",
590 | " [5.]\n",
591 | " [4.]\n",
592 | " [1.]]\n",
593 | "(5, 1)\n"
594 | ]
595 | }
596 | ],
597 | "source": [
598 | "y = np.zeros((5,1)) \n",
599 | "roll_idx = np.array(range(5))\n",
600 | "# note the need for a second index, since y is now a 2D array!\n",
601 | "y[roll_idx, 0] = np.floor(np.random.uniform(0,6, roll_idx.shape))\n",
602 | "print(y)\n",
603 | "print(y.shape)"
604 | ]
605 | },
606 | {
607 | "cell_type": "code",
608 | "execution_count": 30,
609 | "metadata": {
610 | "colab": {},
611 | "colab_type": "code",
612 | "id": "t1PSQlx1MltF"
613 | },
614 | "outputs": [
615 | {
616 | "name": "stdout",
617 | "output_type": "stream",
618 | "text": [
619 | "[[0. 5. 0. 0. 5.]\n",
620 | " [0. 5. 0. 0. 5.]\n",
621 | " [0. 5. 0. 0. 5.]\n",
622 | " [0. 5. 0. 0. 5.]\n",
623 | " [0. 5. 0. 0. 5.]]\n",
624 | "(5, 5)\n"
625 | ]
626 | }
627 | ],
628 | "source": [
629 | "y = np.zeros((5,5)) \n",
630 | "roll_idx = np.array(range(5))\n",
631 | "# : is shorthand for selecting all indices along an axis. More on indexing later\n",
632 | "# What happens if we run y[:, roll_idx] instead?\n",
633 | "y[roll_idx, :] = np.floor(np.random.uniform(0,6, roll_idx.shape))\n",
634 | "print(y)\n",
635 | "print(y.shape)"
636 | ]
637 | },
638 | {
639 | "cell_type": "markdown",
640 | "metadata": {
641 | "colab_type": "text",
642 | "id": "UolGS4qzZNoe"
643 | },
644 | "source": [
645 | "### Re-rolling"
646 | ]
647 | },
648 | {
649 | "cell_type": "markdown",
650 | "metadata": {
651 | "colab_type": "text",
652 | "id": "8N7ejrAGZ028"
653 | },
654 | "source": [
655 | "#### Random number generation\n",
656 | "```python\n",
657 | "np.random.seed(0)\n",
658 | "```\n",
659 | "\n",
660 | "---\n",
661 | "\n",
662 | "- `np.random.seed(0)` sets the seed of the Numpy's random number generator to 0, ensuring that subsequent calls to `np.random` functions are reproducible\n",
663 | " - note that any `int`, not just 0, will work as a reproducible seed"
664 | ]
665 | },
666 | {
667 | "cell_type": "code",
668 | "execution_count": 31,
669 | "metadata": {
670 | "colab": {
671 | "base_uri": "https://localhost:8080/",
672 | "height": 35
673 | },
674 | "colab_type": "code",
675 | "id": "z7EvAUxXZO5L",
676 | "outputId": "7f655f3b-2bd4-4fb5-a310-97cf569f04b6"
677 | },
678 | "outputs": [
679 | {
680 | "name": "stdout",
681 | "output_type": "stream",
682 | "text": [
683 | "[3. 4. 3. 3. 2.]\n"
684 | ]
685 | }
686 | ],
687 | "source": [
688 | "# Here we're using the random seed to make sure our first roll is reproducible\n",
689 | "np.random.seed(0)\n",
690 | "y = np.zeros(5) \n",
691 | "roll_idx = np.array(range(5))\n",
692 | "y[roll_idx] = np.floor(np.random.uniform(0,6, roll_idx.shape))\n",
693 | "print(y)"
694 | ]
695 | },
696 | {
697 | "cell_type": "markdown",
698 | "metadata": {
699 | "colab_type": "text",
700 | "id": "JbJLraMAakrk"
701 | },
702 | "source": [
703 | "- 3 is the most common, so we want to re-roll indices 1 and 4"
704 | ]
705 | },
706 | {
707 | "cell_type": "markdown",
708 | "metadata": {
709 | "colab_type": "text",
710 | "id": "A6sRQgncdWsa"
711 | },
712 | "source": [
713 | "#### How do we get the indices to re-roll?"
714 | ]
715 | },
716 | {
717 | "cell_type": "code",
718 | "execution_count": 18,
719 | "metadata": {
720 | "colab": {
721 | "base_uri": "https://localhost:8080/",
722 | "height": 35
723 | },
724 | "colab_type": "code",
725 | "id": "89OQPeMuciO5",
726 | "outputId": "e69b4f21-f35e-4f9d-e873-80170edf38e7"
727 | },
728 | "outputs": [
729 | {
730 | "data": {
731 | "text/plain": [
732 | "array([ True, True, False, True, True])"
733 | ]
734 | },
735 | "execution_count": 18,
736 | "metadata": {},
737 | "output_type": "execute_result"
738 | }
739 | ],
740 | "source": [
741 | "# check which entries of y aren't 3 \n",
742 | "y != 3"
743 | ]
744 | },
745 | {
746 | "cell_type": "code",
747 | "execution_count": 33,
748 | "metadata": {
749 | "colab": {
750 | "base_uri": "https://localhost:8080/",
751 | "height": 35
752 | },
753 | "colab_type": "code",
754 | "id": "YxLH3YWVdn5G",
755 | "outputId": "8f95baf8-7145-4f92-a006-761687bec8bf"
756 | },
757 | "outputs": [
758 | {
759 | "data": {
760 | "text/plain": [
761 | "(array([1, 4]),)"
762 | ]
763 | },
764 | "execution_count": 33,
765 | "metadata": {},
766 | "output_type": "execute_result"
767 | }
768 | ],
769 | "source": [
770 | "# return the indices that are \"True\" -- interpreted as non-zero by Numpy\n",
771 | "# note the return shape! np.nonzero returns a tuple of arrays, one for each axis\n",
772 | "np.nonzero(y != 3)"
773 | ]
774 | },
775 | {
776 | "cell_type": "code",
777 | "execution_count": 34,
778 | "metadata": {
779 | "colab": {
780 | "base_uri": "https://localhost:8080/",
781 | "height": 35
782 | },
783 | "colab_type": "code",
784 | "id": "T6Oq9g3rfWaT",
785 | "outputId": "4bbcc9c1-34ac-454d-f93d-228e4c3c124e"
786 | },
787 | "outputs": [
788 | {
789 | "name": "stdout",
790 | "output_type": "stream",
791 | "text": [
792 | "[1 4]\n"
793 | ]
794 | }
795 | ],
796 | "source": [
797 | "# assign the new roll_idx\n",
798 | "roll_idx = np.nonzero(y != 3)[0]\n",
799 | "print(roll_idx)"
800 | ]
801 | },
802 | {
803 | "cell_type": "markdown",
804 | "metadata": {
805 | "colab_type": "text",
806 | "id": "xp4ODaGQgBrE"
807 | },
808 | "source": [
809 | "#### The general re-roll case\n"
810 | ]
811 | },
812 | {
813 | "cell_type": "code",
814 | "execution_count": 36,
815 | "metadata": {
816 | "colab": {
817 | "base_uri": "https://localhost:8080/",
818 | "height": 35
819 | },
820 | "colab_type": "code",
821 | "id": "M6n1rIXog94x",
822 | "outputId": "cd4f5e41-3fb6-4829-82da-02a429a60b9f"
823 | },
824 | "outputs": [
825 | {
826 | "name": "stdout",
827 | "output_type": "stream",
828 | "text": [
829 | "[0, 0, 1, 3, 1, 0]\n"
830 | ]
831 | }
832 | ],
833 | "source": [
834 | "# count the number of dice we've rolled for each number\n",
835 | "counts = [sum(y == i) for i in range(6)]\n",
836 | "print(counts)"
837 | ]
838 | },
839 | {
840 | "cell_type": "code",
841 | "execution_count": 37,
842 | "metadata": {
843 | "colab": {
844 | "base_uri": "https://localhost:8080/",
845 | "height": 35
846 | },
847 | "colab_type": "code",
848 | "id": "aGxLQAa4hL_s",
849 | "outputId": "4d358ab0-fbbd-44e0-d4b3-6f54e0966654"
850 | },
851 | "outputs": [
852 | {
853 | "name": "stdout",
854 | "output_type": "stream",
855 | "text": [
856 | "3\n"
857 | ]
858 | }
859 | ],
860 | "source": [
861 | "# Find the idx of the most common roll\n",
862 | "max_idx = np.argmax(counts)\n",
863 | "print(max_idx)"
864 | ]
865 | },
866 | {
867 | "cell_type": "code",
868 | "execution_count": 38,
869 | "metadata": {
870 | "colab": {
871 | "base_uri": "https://localhost:8080/",
872 | "height": 35
873 | },
874 | "colab_type": "code",
875 | "id": "-H5cVmBhh2fN",
876 | "outputId": "1499defb-9090-4938-c096-002cf0538130"
877 | },
878 | "outputs": [
879 | {
880 | "name": "stdout",
881 | "output_type": "stream",
882 | "text": [
883 | "[1 4]\n"
884 | ]
885 | }
886 | ],
887 | "source": [
888 | "# update the indices to re-roll accordingly\n",
889 | "roll_idx = np.nonzero(y != max_idx)[0] \n",
890 | "print(roll_idx)"
891 | ]
892 | },
893 | {
894 | "cell_type": "markdown",
895 | "metadata": {
896 | "colab_type": "text",
897 | "id": "zQitGbIOiYXP"
898 | },
899 | "source": [
900 | "### Putting it all together"
901 | ]
902 | },
903 | {
904 | "cell_type": "code",
905 | "execution_count": 42,
906 | "metadata": {
907 | "colab": {},
908 | "colab_type": "code",
909 | "id": "zzdvu2Q8ibEo"
910 | },
911 | "outputs": [],
912 | "source": [
913 | "def yamslam():\n",
914 | " \"\"\"Plays one round of yamslam, re-rolling 5 dice up to 3 times.\n",
915 | " \n",
916 | " Also prints exuberantly if we do get a yamslam.\n",
917 | " \n",
918 | " Returns:\n",
919 | " int: 1 if we got a yamslam, 0 if not\n",
920 | " \"\"\"\n",
921 | " y = np.zeros(5) \n",
922 | " roll_idx = np.array(range(5))\n",
923 | " for reroll in range(3): # 3 rerolls\n",
924 | " y[roll_idx] = np.floor(np.random.uniform(0,6,roll_idx.shape))\n",
925 | " counts = [sum(y == i) for i in range(6)]\n",
926 | " max_idx = np.argmax(counts)\n",
927 | "\n",
928 | " if np.max(counts) == 5:\n",
929 | " print('YAMSLAM!')\n",
930 | " return 1\n",
931 | " \n",
932 | " roll_idx = np.nonzero(y != max_idx)[0] \n",
933 | " \n",
934 | " # we've run all 3 re-rolls but still didn't get a yamslam\n",
935 | " return 0 "
936 | ]
937 | },
938 | {
939 | "cell_type": "markdown",
940 | "metadata": {
941 | "colab_type": "text",
942 | "id": "nXqnulr7HPwQ"
943 | },
944 | "source": [
945 | "#### Running multiple trials"
946 | ]
947 | },
948 | {
949 | "cell_type": "code",
950 | "execution_count": 43,
951 | "metadata": {
952 | "colab": {
953 | "base_uri": "https://localhost:8080/",
954 | "height": 145
955 | },
956 | "colab_type": "code",
957 | "id": "dlOCYgYHjm37",
958 | "outputId": "74732f07-346c-448b-86bc-f38e2df19104"
959 | },
960 | "outputs": [
961 | {
962 | "name": "stdout",
963 | "output_type": "stream",
964 | "text": [
965 | "Probability of yamslam: 0.0\n",
966 | "CPU times: user 162 ms, sys: 8.1 ms, total: 170 ms\n",
967 | "Wall time: 300 ms\n"
968 | ]
969 | }
970 | ],
971 | "source": [
972 | "%%time\n",
973 | "\n",
974 | "yamslam_trials = []\n",
975 | "for i in range(100):\n",
976 | " yamslam_trials.append(yamslam())\n",
977 | " \n",
978 | "print(\"Probability of yamslam: {}\".format(np.mean(yamslam_trials)))"
979 | ]
980 | },
981 | {
982 | "cell_type": "markdown",
983 | "metadata": {
984 | "colab_type": "text",
985 | "id": "8h3sk1fCKT9A"
986 | },
987 | "source": [
988 | "#### Improving the code\n",
989 | "\n",
990 | "```python\n",
991 | "counts = [sum(y == i) for i in range(6)]\n",
992 | "max_idx = np.argmax(counts)\n",
993 | "```\n",
994 | "\n",
995 | "---\n",
996 | "\n",
997 | "- `np.bincounts` produces the same result for `count` as our list comprehension\n",
998 | "\n",
999 | "- More importantly, what is the above code effectively calculating?"
1000 | ]
1001 | },
1002 | {
1003 | "cell_type": "code",
1004 | "execution_count": 19,
1005 | "metadata": {
1006 | "colab": {},
1007 | "colab_type": "code",
1008 | "id": "6PWxgtwDK9jt"
1009 | },
1010 | "outputs": [],
1011 | "source": [
1012 | "# We're calculating the mode!\n",
1013 | "from scipy.stats import mode\n",
1014 | "\n",
1015 | "np.random.seed(0)\n",
1016 | "y = np.zeros(5) \n",
1017 | "roll_idx = np.array(range(5))\n",
1018 | "y[roll_idx] = np.floor(np.random.uniform(0,6, roll_idx.shape))\n",
1019 | "roll_idx = np.nonzero(y != mode(y)[0])[0] "
1020 | ]
1021 | },
1022 | {
1023 | "cell_type": "markdown",
1024 | "metadata": {
1025 | "colab_type": "text",
1026 | "id": "yM6HdUKGbk0u"
1027 | },
1028 | "source": [
1029 | "*Tip: before implementing a mathematical operation, check the documentation to see if it's already part of the library -- chances are, it is.*"
1030 | ]
1031 | },
1032 | {
1033 | "cell_type": "markdown",
1034 | "metadata": {
1035 | "colab_type": "text",
1036 | "id": "AsZCm8iMRCQn"
1037 | },
1038 | "source": [
1039 | "## Working with Arrays"
1040 | ]
1041 | },
1042 | {
1043 | "cell_type": "markdown",
1044 | "metadata": {
1045 | "colab_type": "text",
1046 | "id": "E6ZklmXKUZml"
1047 | },
1048 | "source": [
1049 | "### Vectorization\n",
1050 | "\n",
1051 | "- before writing a loop, consider if the operation can be *vectorized*\n",
1052 | "- vectorization is the application of an operation over an entire array, instead of element by element\n",
1053 | "- Results in more concise code, and many vectorized implementations of functions are optimized"
1054 | ]
1055 | },
1056 | {
1057 | "cell_type": "code",
1058 | "execution_count": 20,
1059 | "metadata": {
1060 | "colab": {
1061 | "base_uri": "https://localhost:8080/",
1062 | "height": 35
1063 | },
1064 | "colab_type": "code",
1065 | "id": "YiQUYih_HrBQ",
1066 | "outputId": "b5445dd8-d195-4eb2-8f01-ee5abc1009bd"
1067 | },
1068 | "outputs": [
1069 | {
1070 | "name": "stdout",
1071 | "output_type": "stream",
1072 | "text": [
1073 | "14.7 ms ± 5.81 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
1074 | ]
1075 | }
1076 | ],
1077 | "source": [
1078 | "%%timeit\n",
1079 | "\n",
1080 | "# Don't do this!!\n",
1081 | "vec = np.array(range(10000))\n",
1082 | "sum_v = 0\n",
1083 | "for i in range(10000):\n",
1084 | " sum_v += vec[i]"
1085 | ]
1086 | },
1087 | {
1088 | "cell_type": "code",
1089 | "execution_count": 21,
1090 | "metadata": {
1091 | "colab": {
1092 | "base_uri": "https://localhost:8080/",
1093 | "height": 35
1094 | },
1095 | "colab_type": "code",
1096 | "id": "ub-efOtIQ0Hw",
1097 | "outputId": "51f11ea2-341f-460d-df5e-685e98e7fcfc"
1098 | },
1099 | "outputs": [
1100 | {
1101 | "name": "stdout",
1102 | "output_type": "stream",
1103 | "text": [
1104 | "4.73 ms ± 1.42 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
1105 | ]
1106 | }
1107 | ],
1108 | "source": [
1109 | "%%timeit\n",
1110 | "\n",
1111 | "# Vectorize instead\n",
1112 | "vec = np.array(range(10000))\n",
1113 | "sum_v = np.sum(vec)"
1114 | ]
1115 | },
1116 | {
1117 | "cell_type": "markdown",
1118 | "metadata": {
1119 | "colab_type": "text",
1120 | "id": "P_fwPXc2YlhI"
1121 | },
1122 | "source": [
1123 | "#### Watch the axes\n",
1124 | "\n",
1125 | "- What is the behavior of `np.sum()` if our array has more than one dimension?\n",
1126 | "- Use the `axis` argument: specifies which axis to sum along\n",
1127 | "- Many other vectorized functions take the axis argument, so keep in mind which dimension you want the operation applied to"
1128 | ]
1129 | },
1130 | {
1131 | "cell_type": "code",
1132 | "execution_count": null,
1133 | "metadata": {
1134 | "colab": {},
1135 | "colab_type": "code",
1136 | "id": "mimyqZlXZAeU"
1137 | },
1138 | "outputs": [],
1139 | "source": [
1140 | "A = np.array([[1,2,3], [4,5,6], [7,8,9]])\n",
1141 | "print(A)\n",
1142 | "print(A.shape)"
1143 | ]
1144 | },
1145 | {
1146 | "cell_type": "code",
1147 | "execution_count": null,
1148 | "metadata": {
1149 | "colab": {},
1150 | "colab_type": "code",
1151 | "id": "Qfiv6uMXZ37b"
1152 | },
1153 | "outputs": [],
1154 | "source": [
1155 | "# By default, axis=None and np.sum will sum all elements of the array\n",
1156 | "print(np.sum(A))"
1157 | ]
1158 | },
1159 | {
1160 | "cell_type": "code",
1161 | "execution_count": null,
1162 | "metadata": {
1163 | "colab": {},
1164 | "colab_type": "code",
1165 | "id": "j4_Z0eaW54lO"
1166 | },
1167 | "outputs": [],
1168 | "source": [
1169 | "# axis=0 sums along rows, producing column totals\n",
1170 | "print(np.sum(A, axis=0))"
1171 | ]
1172 | },
1173 | {
1174 | "cell_type": "code",
1175 | "execution_count": null,
1176 | "metadata": {
1177 | "colab": {},
1178 | "colab_type": "code",
1179 | "id": "iNz43b8f55nj"
1180 | },
1181 | "outputs": [],
1182 | "source": [
1183 | "# axis=0 sums along columns, producing row totals\n",
1184 | "print(np.sum(A, axis=1))"
1185 | ]
1186 | },
1187 | {
1188 | "cell_type": "markdown",
1189 | "metadata": {
1190 | "colab_type": "text",
1191 | "id": "79785kJ1cP1Z"
1192 | },
1193 | "source": [
1194 | "- vectorization doesn't always work -- post to Piazza or come to office hours if you have questions!"
1195 | ]
1196 | },
1197 | {
1198 | "cell_type": "markdown",
1199 | "metadata": {
1200 | "colab_type": "text",
1201 | "id": "SNYwdwZfbu3A"
1202 | },
1203 | "source": [
1204 | "### Indexing"
1205 | ]
1206 | },
1207 | {
1208 | "cell_type": "markdown",
1209 | "metadata": {
1210 | "colab_type": "text",
1211 | "id": "ABrS3lThcuYe"
1212 | },
1213 | "source": [
1214 | "#### Slicing\n",
1215 | "\n",
1216 | "- the standard rules of slicing and indexing from Python apply to Numpy arrays\n",
1217 | "- `i:j:k` syntax corresponds to starting at index `i`, ending at index `j` with step size `k`\n",
1218 | " - omitting `k` implies a step size of 1\n",
1219 | "- `i:` selects all indices beginning at index `i`\n",
1220 | "- `:j` selects all indices up to but not including index `j`\n",
1221 | "- `:` by itself selects all indices along an axis"
1222 | ]
1223 | },
1224 | {
1225 | "cell_type": "code",
1226 | "execution_count": null,
1227 | "metadata": {
1228 | "colab": {},
1229 | "colab_type": "code",
1230 | "id": "xn5sfm4NdzIr"
1231 | },
1232 | "outputs": [],
1233 | "source": [
1234 | "# start with list of 0 to 9\n",
1235 | "vec = np.array(range(10))\n",
1236 | "print(vec)"
1237 | ]
1238 | },
1239 | {
1240 | "cell_type": "code",
1241 | "execution_count": null,
1242 | "metadata": {
1243 | "colab": {},
1244 | "colab_type": "code",
1245 | "id": "oM5x5NW95lEk"
1246 | },
1247 | "outputs": [],
1248 | "source": [
1249 | "# selects indices 2,3,4 (not including 5)\n",
1250 | "print(vec[2:5])"
1251 | ]
1252 | },
1253 | {
1254 | "cell_type": "code",
1255 | "execution_count": null,
1256 | "metadata": {
1257 | "colab": {},
1258 | "colab_type": "code",
1259 | "id": "Ah19Gxr65mxP"
1260 | },
1261 | "outputs": [],
1262 | "source": [
1263 | "# selects indices 2,4,6\n",
1264 | "print(vec[2:7:2])"
1265 | ]
1266 | },
1267 | {
1268 | "cell_type": "code",
1269 | "execution_count": null,
1270 | "metadata": {
1271 | "colab": {},
1272 | "colab_type": "code",
1273 | "id": "JOIMr8o35pYz"
1274 | },
1275 | "outputs": [],
1276 | "source": [
1277 | "# selects indices starting with 5 to the end\n",
1278 | "print(vec[5:])"
1279 | ]
1280 | },
1281 | {
1282 | "cell_type": "code",
1283 | "execution_count": null,
1284 | "metadata": {
1285 | "colab": {},
1286 | "colab_type": "code",
1287 | "id": "EOoZgXKX5rCv"
1288 | },
1289 | "outputs": [],
1290 | "source": [
1291 | "# selects indices up to, but not including, index 5\n",
1292 | "print(vec[:5])"
1293 | ]
1294 | },
1295 | {
1296 | "cell_type": "code",
1297 | "execution_count": null,
1298 | "metadata": {
1299 | "colab": {},
1300 | "colab_type": "code",
1301 | "id": "ZJLwfTtD5sJG"
1302 | },
1303 | "outputs": [],
1304 | "source": [
1305 | "# select everything, since vec is a 1D array\n",
1306 | "print(vec[:])"
1307 | ]
1308 | },
1309 | {
1310 | "cell_type": "code",
1311 | "execution_count": null,
1312 | "metadata": {
1313 | "colab": {},
1314 | "colab_type": "code",
1315 | "id": "R_5EMjlhe5Ch"
1316 | },
1317 | "outputs": [],
1318 | "source": [
1319 | "# same idea with 2D arrays, but with two axes\n",
1320 | "A = np.array([[1,2,3], [4,5,6], [7,8,9]])\n",
1321 | "print(A)"
1322 | ]
1323 | },
1324 | {
1325 | "cell_type": "code",
1326 | "execution_count": null,
1327 | "metadata": {
1328 | "colab": {},
1329 | "colab_type": "code",
1330 | "id": "SzvOzYHe5xj3"
1331 | },
1332 | "outputs": [],
1333 | "source": [
1334 | "# select the element in the 0-index row and 1-index column\n",
1335 | "print(A[0,1])"
1336 | ]
1337 | },
1338 | {
1339 | "cell_type": "code",
1340 | "execution_count": null,
1341 | "metadata": {
1342 | "colab": {},
1343 | "colab_type": "code",
1344 | "id": "3QOOtP7t5zRA"
1345 | },
1346 | "outputs": [],
1347 | "source": [
1348 | "# select the 0-index column\n",
1349 | "print(A[:, 0])"
1350 | ]
1351 | },
1352 | {
1353 | "cell_type": "code",
1354 | "execution_count": null,
1355 | "metadata": {
1356 | "colab": {},
1357 | "colab_type": "code",
1358 | "id": "B_Qkt7mw50Jk"
1359 | },
1360 | "outputs": [],
1361 | "source": [
1362 | "# select the first two rows\n",
1363 | "print(A[:2, :])"
1364 | ]
1365 | },
1366 | {
1367 | "cell_type": "code",
1368 | "execution_count": null,
1369 | "metadata": {
1370 | "colab": {},
1371 | "colab_type": "code",
1372 | "id": "xTK4-FtJ504v"
1373 | },
1374 | "outputs": [],
1375 | "source": [
1376 | "# select the last two columns of the last two rows\n",
1377 | "print(A[1:, 1:])"
1378 | ]
1379 | },
1380 | {
1381 | "cell_type": "markdown",
1382 | "metadata": {
1383 | "colab_type": "text",
1384 | "id": "oUZ7wxbkZmTz"
1385 | },
1386 | "source": [
1387 | "#### Logical Indexing\n",
1388 | "\n",
1389 | "- we can select according to boolean conditions across axes as well"
1390 | ]
1391 | },
1392 | {
1393 | "cell_type": "code",
1394 | "execution_count": null,
1395 | "metadata": {
1396 | "colab": {},
1397 | "colab_type": "code",
1398 | "id": "PN58rgWNZkNX"
1399 | },
1400 | "outputs": [],
1401 | "source": [
1402 | "%%timeit\n",
1403 | "\n",
1404 | "np.random.seed(0)\n",
1405 | "num_animals = 100000\n",
1406 | "animal_weights = np.random.uniform(0, 50, num_animals)\n",
1407 | "\n",
1408 | "# Don't do this!!\n",
1409 | "is_dog = np.zeros(num_animals)\n",
1410 | "is_cat = np.zeros(num_animals)\n",
1411 | "\n",
1412 | "for i in range(num_animals):\n",
1413 | " if animal_weights[i] > 30:\n",
1414 | " is_dog[i] = 1\n",
1415 | " else:\n",
1416 | " is_cat[i] = 1"
1417 | ]
1418 | },
1419 | {
1420 | "cell_type": "code",
1421 | "execution_count": null,
1422 | "metadata": {
1423 | "colab": {},
1424 | "colab_type": "code",
1425 | "id": "ONgVXnf1b_hK"
1426 | },
1427 | "outputs": [],
1428 | "source": [
1429 | "%%timeit\n",
1430 | "\n",
1431 | "np.random.seed(0)\n",
1432 | "num_animals = 100000\n",
1433 | "animal_weights = np.random.uniform(0, 50, num_animals)\n",
1434 | "\n",
1435 | "# Use logical indexing instead, see the speed difference\n",
1436 | "is_dog = animal_weights > 30\n",
1437 | "is_cat = animal_weights <= 30"
1438 | ]
1439 | },
1440 | {
1441 | "cell_type": "code",
1442 | "execution_count": null,
1443 | "metadata": {
1444 | "colab": {},
1445 | "colab_type": "code",
1446 | "id": "Pv_6QnEF42Ha"
1447 | },
1448 | "outputs": [],
1449 | "source": [
1450 | "np.random.seed(0)\n",
1451 | "num_animals = 100000\n",
1452 | "animal_weights = np.random.uniform(0, 50, num_animals)\n",
1453 | "\n",
1454 | "# Use logical indexing for conditional selections\n",
1455 | "dog_weights = animal_weights[animal_weights > 30]\n",
1456 | "cat_weights = animal_weights[animal_weights <= 30]"
1457 | ]
1458 | }
1459 | ],
1460 | "metadata": {
1461 | "colab": {
1462 | "collapsed_sections": [],
1463 | "name": "python_intro.ipynb",
1464 | "provenance": [],
1465 | "toc_visible": true
1466 | },
1467 | "kernelspec": {
1468 | "display_name": "Python 3",
1469 | "language": "python",
1470 | "name": "python3"
1471 | },
1472 | "language_info": {
1473 | "codemirror_mode": {
1474 | "name": "ipython",
1475 | "version": 3
1476 | },
1477 | "file_extension": ".py",
1478 | "mimetype": "text/x-python",
1479 | "name": "python",
1480 | "nbconvert_exporter": "python",
1481 | "pygments_lexer": "ipython3",
1482 | "version": "3.7.7"
1483 | }
1484 | },
1485 | "nbformat": 4,
1486 | "nbformat_minor": 4
1487 | }
1488 |
--------------------------------------------------------------------------------
/Part 02 - Python Quick Tutorial - Pandas and Data preprocessing/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 02 - Python Quick Tutorial - Pandas and Data preprocessing/house_mean_normalized.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhailat/Introduction-to-machine-learning-Python/b6eddb8ff52797e318afb07686cc53e59b443890/Part 02 - Python Quick Tutorial - Pandas and Data preprocessing/house_mean_normalized.xlsx
--------------------------------------------------------------------------------
/Part 03 - Linear Regression Python/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 04 - Logistic Regression with Python/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 05 - Constructing a Neural Network Models - Regression model with Python (Tensorflow & Keras)/BostonHousing.csv:
--------------------------------------------------------------------------------
1 | "crim","zn","indus","chas","nox","rm","age","dis","rad","tax","ptratio","b","lstat","medv"
2 | 0.00632,18,2.31,"0",0.538,6.575,65.2,4.09,1,296,15.3,396.9,4.98,24
3 | 0.02731,0,7.07,"0",0.469,6.421,78.9,4.9671,2,242,17.8,396.9,9.14,21.6
4 | 0.02729,0,7.07,"0",0.469,7.185,61.1,4.9671,2,242,17.8,392.83,4.03,34.7
5 | 0.03237,0,2.18,"0",0.458,6.998,45.8,6.0622,3,222,18.7,394.63,2.94,33.4
6 | 0.06905,0,2.18,"0",0.458,7.147,54.2,6.0622,3,222,18.7,396.9,5.33,36.2
7 | 0.02985,0,2.18,"0",0.458,6.43,58.7,6.0622,3,222,18.7,394.12,5.21,28.7
8 | 0.08829,12.5,7.87,"0",0.524,6.012,66.6,5.5605,5,311,15.2,395.6,12.43,22.9
9 | 0.14455,12.5,7.87,"0",0.524,6.172,96.1,5.9505,5,311,15.2,396.9,19.15,27.1
10 | 0.21124,12.5,7.87,"0",0.524,5.631,100,6.0821,5,311,15.2,386.63,29.93,16.5
11 | 0.17004,12.5,7.87,"0",0.524,6.004,85.9,6.5921,5,311,15.2,386.71,17.1,18.9
12 | 0.22489,12.5,7.87,"0",0.524,6.377,94.3,6.3467,5,311,15.2,392.52,20.45,15
13 | 0.11747,12.5,7.87,"0",0.524,6.009,82.9,6.2267,5,311,15.2,396.9,13.27,18.9
14 | 0.09378,12.5,7.87,"0",0.524,5.889,39,5.4509,5,311,15.2,390.5,15.71,21.7
15 | 0.62976,0,8.14,"0",0.538,5.949,61.8,4.7075,4,307,21,396.9,8.26,20.4
16 | 0.63796,0,8.14,"0",0.538,6.096,84.5,4.4619,4,307,21,380.02,10.26,18.2
17 | 0.62739,0,8.14,"0",0.538,5.834,56.5,4.4986,4,307,21,395.62,8.47,19.9
18 | 1.05393,0,8.14,"0",0.538,5.935,29.3,4.4986,4,307,21,386.85,6.58,23.1
19 | 0.7842,0,8.14,"0",0.538,5.99,81.7,4.2579,4,307,21,386.75,14.67,17.5
20 | 0.80271,0,8.14,"0",0.538,5.456,36.6,3.7965,4,307,21,288.99,11.69,20.2
21 | 0.7258,0,8.14,"0",0.538,5.727,69.5,3.7965,4,307,21,390.95,11.28,18.2
22 | 1.25179,0,8.14,"0",0.538,5.57,98.1,3.7979,4,307,21,376.57,21.02,13.6
23 | 0.85204,0,8.14,"0",0.538,5.965,89.2,4.0123,4,307,21,392.53,13.83,19.6
24 | 1.23247,0,8.14,"0",0.538,6.142,91.7,3.9769,4,307,21,396.9,18.72,15.2
25 | 0.98843,0,8.14,"0",0.538,5.813,100,4.0952,4,307,21,394.54,19.88,14.5
26 | 0.75026,0,8.14,"0",0.538,5.924,94.1,4.3996,4,307,21,394.33,16.3,15.6
27 | 0.84054,0,8.14,"0",0.538,5.599,85.7,4.4546,4,307,21,303.42,16.51,13.9
28 | 0.67191,0,8.14,"0",0.538,5.813,90.3,4.682,4,307,21,376.88,14.81,16.6
29 | 0.95577,0,8.14,"0",0.538,6.047,88.8,4.4534,4,307,21,306.38,17.28,14.8
30 | 0.77299,0,8.14,"0",0.538,6.495,94.4,4.4547,4,307,21,387.94,12.8,18.4
31 | 1.00245,0,8.14,"0",0.538,6.674,87.3,4.239,4,307,21,380.23,11.98,21
32 | 1.13081,0,8.14,"0",0.538,5.713,94.1,4.233,4,307,21,360.17,22.6,12.7
33 | 1.35472,0,8.14,"0",0.538,6.072,100,4.175,4,307,21,376.73,13.04,14.5
34 | 1.38799,0,8.14,"0",0.538,5.95,82,3.99,4,307,21,232.6,27.71,13.2
35 | 1.15172,0,8.14,"0",0.538,5.701,95,3.7872,4,307,21,358.77,18.35,13.1
36 | 1.61282,0,8.14,"0",0.538,6.096,96.9,3.7598,4,307,21,248.31,20.34,13.5
37 | 0.06417,0,5.96,"0",0.499,5.933,68.2,3.3603,5,279,19.2,396.9,9.68,18.9
38 | 0.09744,0,5.96,"0",0.499,5.841,61.4,3.3779,5,279,19.2,377.56,11.41,20
39 | 0.08014,0,5.96,"0",0.499,5.85,41.5,3.9342,5,279,19.2,396.9,8.77,21
40 | 0.17505,0,5.96,"0",0.499,5.966,30.2,3.8473,5,279,19.2,393.43,10.13,24.7
41 | 0.02763,75,2.95,"0",0.428,6.595,21.8,5.4011,3,252,18.3,395.63,4.32,30.8
42 | 0.03359,75,2.95,"0",0.428,7.024,15.8,5.4011,3,252,18.3,395.62,1.98,34.9
43 | 0.12744,0,6.91,"0",0.448,6.77,2.9,5.7209,3,233,17.9,385.41,4.84,26.6
44 | 0.1415,0,6.91,"0",0.448,6.169,6.6,5.7209,3,233,17.9,383.37,5.81,25.3
45 | 0.15936,0,6.91,"0",0.448,6.211,6.5,5.7209,3,233,17.9,394.46,7.44,24.7
46 | 0.12269,0,6.91,"0",0.448,6.069,40,5.7209,3,233,17.9,389.39,9.55,21.2
47 | 0.17142,0,6.91,"0",0.448,5.682,33.8,5.1004,3,233,17.9,396.9,10.21,19.3
48 | 0.18836,0,6.91,"0",0.448,5.786,33.3,5.1004,3,233,17.9,396.9,14.15,20
49 | 0.22927,0,6.91,"0",0.448,6.03,85.5,5.6894,3,233,17.9,392.74,18.8,16.6
50 | 0.25387,0,6.91,"0",0.448,5.399,95.3,5.87,3,233,17.9,396.9,30.81,14.4
51 | 0.21977,0,6.91,"0",0.448,5.602,62,6.0877,3,233,17.9,396.9,16.2,19.4
52 | 0.08873,21,5.64,"0",0.439,5.963,45.7,6.8147,4,243,16.8,395.56,13.45,19.7
53 | 0.04337,21,5.64,"0",0.439,6.115,63,6.8147,4,243,16.8,393.97,9.43,20.5
54 | 0.0536,21,5.64,"0",0.439,6.511,21.1,6.8147,4,243,16.8,396.9,5.28,25
55 | 0.04981,21,5.64,"0",0.439,5.998,21.4,6.8147,4,243,16.8,396.9,8.43,23.4
56 | 0.0136,75,4,"0",0.41,5.888,47.6,7.3197,3,469,21.1,396.9,14.8,18.9
57 | 0.01311,90,1.22,"0",0.403,7.249,21.9,8.6966,5,226,17.9,395.93,4.81,35.4
58 | 0.02055,85,0.74,"0",0.41,6.383,35.7,9.1876,2,313,17.3,396.9,5.77,24.7
59 | 0.01432,100,1.32,"0",0.411,6.816,40.5,8.3248,5,256,15.1,392.9,3.95,31.6
60 | 0.15445,25,5.13,"0",0.453,6.145,29.2,7.8148,8,284,19.7,390.68,6.86,23.3
61 | 0.10328,25,5.13,"0",0.453,5.927,47.2,6.932,8,284,19.7,396.9,9.22,19.6
62 | 0.14932,25,5.13,"0",0.453,5.741,66.2,7.2254,8,284,19.7,395.11,13.15,18.7
63 | 0.17171,25,5.13,"0",0.453,5.966,93.4,6.8185,8,284,19.7,378.08,14.44,16
64 | 0.11027,25,5.13,"0",0.453,6.456,67.8,7.2255,8,284,19.7,396.9,6.73,22.2
65 | 0.1265,25,5.13,"0",0.453,6.762,43.4,7.9809,8,284,19.7,395.58,9.5,25
66 | 0.01951,17.5,1.38,"0",0.4161,7.104,59.5,9.2229,3,216,18.6,393.24,8.05,33
67 | 0.03584,80,3.37,"0",0.398,6.29,17.8,6.6115,4,337,16.1,396.9,4.67,23.5
68 | 0.04379,80,3.37,"0",0.398,5.787,31.1,6.6115,4,337,16.1,396.9,10.24,19.4
69 | 0.05789,12.5,6.07,"0",0.409,5.878,21.4,6.498,4,345,18.9,396.21,8.1,22
70 | 0.13554,12.5,6.07,"0",0.409,5.594,36.8,6.498,4,345,18.9,396.9,13.09,17.4
71 | 0.12816,12.5,6.07,"0",0.409,5.885,33,6.498,4,345,18.9,396.9,8.79,20.9
72 | 0.08826,0,10.81,"0",0.413,6.417,6.6,5.2873,4,305,19.2,383.73,6.72,24.2
73 | 0.15876,0,10.81,"0",0.413,5.961,17.5,5.2873,4,305,19.2,376.94,9.88,21.7
74 | 0.09164,0,10.81,"0",0.413,6.065,7.8,5.2873,4,305,19.2,390.91,5.52,22.8
75 | 0.19539,0,10.81,"0",0.413,6.245,6.2,5.2873,4,305,19.2,377.17,7.54,23.4
76 | 0.07896,0,12.83,"0",0.437,6.273,6,4.2515,5,398,18.7,394.92,6.78,24.1
77 | 0.09512,0,12.83,"0",0.437,6.286,45,4.5026,5,398,18.7,383.23,8.94,21.4
78 | 0.10153,0,12.83,"0",0.437,6.279,74.5,4.0522,5,398,18.7,373.66,11.97,20
79 | 0.08707,0,12.83,"0",0.437,6.14,45.8,4.0905,5,398,18.7,386.96,10.27,20.8
80 | 0.05646,0,12.83,"0",0.437,6.232,53.7,5.0141,5,398,18.7,386.4,12.34,21.2
81 | 0.08387,0,12.83,"0",0.437,5.874,36.6,4.5026,5,398,18.7,396.06,9.1,20.3
82 | 0.04113,25,4.86,"0",0.426,6.727,33.5,5.4007,4,281,19,396.9,5.29,28
83 | 0.04462,25,4.86,"0",0.426,6.619,70.4,5.4007,4,281,19,395.63,7.22,23.9
84 | 0.03659,25,4.86,"0",0.426,6.302,32.2,5.4007,4,281,19,396.9,6.72,24.8
85 | 0.03551,25,4.86,"0",0.426,6.167,46.7,5.4007,4,281,19,390.64,7.51,22.9
86 | 0.05059,0,4.49,"0",0.449,6.389,48,4.7794,3,247,18.5,396.9,9.62,23.9
87 | 0.05735,0,4.49,"0",0.449,6.63,56.1,4.4377,3,247,18.5,392.3,6.53,26.6
88 | 0.05188,0,4.49,"0",0.449,6.015,45.1,4.4272,3,247,18.5,395.99,12.86,22.5
89 | 0.07151,0,4.49,"0",0.449,6.121,56.8,3.7476,3,247,18.5,395.15,8.44,22.2
90 | 0.0566,0,3.41,"0",0.489,7.007,86.3,3.4217,2,270,17.8,396.9,5.5,23.6
91 | 0.05302,0,3.41,"0",0.489,7.079,63.1,3.4145,2,270,17.8,396.06,5.7,28.7
92 | 0.04684,0,3.41,"0",0.489,6.417,66.1,3.0923,2,270,17.8,392.18,8.81,22.6
93 | 0.03932,0,3.41,"0",0.489,6.405,73.9,3.0921,2,270,17.8,393.55,8.2,22
94 | 0.04203,28,15.04,"0",0.464,6.442,53.6,3.6659,4,270,18.2,395.01,8.16,22.9
95 | 0.02875,28,15.04,"0",0.464,6.211,28.9,3.6659,4,270,18.2,396.33,6.21,25
96 | 0.04294,28,15.04,"0",0.464,6.249,77.3,3.615,4,270,18.2,396.9,10.59,20.6
97 | 0.12204,0,2.89,"0",0.445,6.625,57.8,3.4952,2,276,18,357.98,6.65,28.4
98 | 0.11504,0,2.89,"0",0.445,6.163,69.6,3.4952,2,276,18,391.83,11.34,21.4
99 | 0.12083,0,2.89,"0",0.445,8.069,76,3.4952,2,276,18,396.9,4.21,38.7
100 | 0.08187,0,2.89,"0",0.445,7.82,36.9,3.4952,2,276,18,393.53,3.57,43.8
101 | 0.0686,0,2.89,"0",0.445,7.416,62.5,3.4952,2,276,18,396.9,6.19,33.2
102 | 0.14866,0,8.56,"0",0.52,6.727,79.9,2.7778,5,384,20.9,394.76,9.42,27.5
103 | 0.11432,0,8.56,"0",0.52,6.781,71.3,2.8561,5,384,20.9,395.58,7.67,26.5
104 | 0.22876,0,8.56,"0",0.52,6.405,85.4,2.7147,5,384,20.9,70.8,10.63,18.6
105 | 0.21161,0,8.56,"0",0.52,6.137,87.4,2.7147,5,384,20.9,394.47,13.44,19.3
106 | 0.1396,0,8.56,"0",0.52,6.167,90,2.421,5,384,20.9,392.69,12.33,20.1
107 | 0.13262,0,8.56,"0",0.52,5.851,96.7,2.1069,5,384,20.9,394.05,16.47,19.5
108 | 0.1712,0,8.56,"0",0.52,5.836,91.9,2.211,5,384,20.9,395.67,18.66,19.5
109 | 0.13117,0,8.56,"0",0.52,6.127,85.2,2.1224,5,384,20.9,387.69,14.09,20.4
110 | 0.12802,0,8.56,"0",0.52,6.474,97.1,2.4329,5,384,20.9,395.24,12.27,19.8
111 | 0.26363,0,8.56,"0",0.52,6.229,91.2,2.5451,5,384,20.9,391.23,15.55,19.4
112 | 0.10793,0,8.56,"0",0.52,6.195,54.4,2.7778,5,384,20.9,393.49,13,21.7
113 | 0.10084,0,10.01,"0",0.547,6.715,81.6,2.6775,6,432,17.8,395.59,10.16,22.8
114 | 0.12329,0,10.01,"0",0.547,5.913,92.9,2.3534,6,432,17.8,394.95,16.21,18.8
115 | 0.22212,0,10.01,"0",0.547,6.092,95.4,2.548,6,432,17.8,396.9,17.09,18.7
116 | 0.14231,0,10.01,"0",0.547,6.254,84.2,2.2565,6,432,17.8,388.74,10.45,18.5
117 | 0.17134,0,10.01,"0",0.547,5.928,88.2,2.4631,6,432,17.8,344.91,15.76,18.3
118 | 0.13158,0,10.01,"0",0.547,6.176,72.5,2.7301,6,432,17.8,393.3,12.04,21.2
119 | 0.15098,0,10.01,"0",0.547,6.021,82.6,2.7474,6,432,17.8,394.51,10.3,19.2
120 | 0.13058,0,10.01,"0",0.547,5.872,73.1,2.4775,6,432,17.8,338.63,15.37,20.4
121 | 0.14476,0,10.01,"0",0.547,5.731,65.2,2.7592,6,432,17.8,391.5,13.61,19.3
122 | 0.06899,0,25.65,"0",0.581,5.87,69.7,2.2577,2,188,19.1,389.15,14.37,22
123 | 0.07165,0,25.65,"0",0.581,6.004,84.1,2.1974,2,188,19.1,377.67,14.27,20.3
124 | 0.09299,0,25.65,"0",0.581,5.961,92.9,2.0869,2,188,19.1,378.09,17.93,20.5
125 | 0.15038,0,25.65,"0",0.581,5.856,97,1.9444,2,188,19.1,370.31,25.41,17.3
126 | 0.09849,0,25.65,"0",0.581,5.879,95.8,2.0063,2,188,19.1,379.38,17.58,18.8
127 | 0.16902,0,25.65,"0",0.581,5.986,88.4,1.9929,2,188,19.1,385.02,14.81,21.4
128 | 0.38735,0,25.65,"0",0.581,5.613,95.6,1.7572,2,188,19.1,359.29,27.26,15.7
129 | 0.25915,0,21.89,"0",0.624,5.693,96,1.7883,4,437,21.2,392.11,17.19,16.2
130 | 0.32543,0,21.89,"0",0.624,6.431,98.8,1.8125,4,437,21.2,396.9,15.39,18
131 | 0.88125,0,21.89,"0",0.624,5.637,94.7,1.9799,4,437,21.2,396.9,18.34,14.3
132 | 0.34006,0,21.89,"0",0.624,6.458,98.9,2.1185,4,437,21.2,395.04,12.6,19.2
133 | 1.19294,0,21.89,"0",0.624,6.326,97.7,2.271,4,437,21.2,396.9,12.26,19.6
134 | 0.59005,0,21.89,"0",0.624,6.372,97.9,2.3274,4,437,21.2,385.76,11.12,23
135 | 0.32982,0,21.89,"0",0.624,5.822,95.4,2.4699,4,437,21.2,388.69,15.03,18.4
136 | 0.97617,0,21.89,"0",0.624,5.757,98.4,2.346,4,437,21.2,262.76,17.31,15.6
137 | 0.55778,0,21.89,"0",0.624,6.335,98.2,2.1107,4,437,21.2,394.67,16.96,18.1
138 | 0.32264,0,21.89,"0",0.624,5.942,93.5,1.9669,4,437,21.2,378.25,16.9,17.4
139 | 0.35233,0,21.89,"0",0.624,6.454,98.4,1.8498,4,437,21.2,394.08,14.59,17.1
140 | 0.2498,0,21.89,"0",0.624,5.857,98.2,1.6686,4,437,21.2,392.04,21.32,13.3
141 | 0.54452,0,21.89,"0",0.624,6.151,97.9,1.6687,4,437,21.2,396.9,18.46,17.8
142 | 0.2909,0,21.89,"0",0.624,6.174,93.6,1.6119,4,437,21.2,388.08,24.16,14
143 | 1.62864,0,21.89,"0",0.624,5.019,100,1.4394,4,437,21.2,396.9,34.41,14.4
144 | 3.32105,0,19.58,"1",0.871,5.403,100,1.3216,5,403,14.7,396.9,26.82,13.4
145 | 4.0974,0,19.58,"0",0.871,5.468,100,1.4118,5,403,14.7,396.9,26.42,15.6
146 | 2.77974,0,19.58,"0",0.871,4.903,97.8,1.3459,5,403,14.7,396.9,29.29,11.8
147 | 2.37934,0,19.58,"0",0.871,6.13,100,1.4191,5,403,14.7,172.91,27.8,13.8
148 | 2.15505,0,19.58,"0",0.871,5.628,100,1.5166,5,403,14.7,169.27,16.65,15.6
149 | 2.36862,0,19.58,"0",0.871,4.926,95.7,1.4608,5,403,14.7,391.71,29.53,14.6
150 | 2.33099,0,19.58,"0",0.871,5.186,93.8,1.5296,5,403,14.7,356.99,28.32,17.8
151 | 2.73397,0,19.58,"0",0.871,5.597,94.9,1.5257,5,403,14.7,351.85,21.45,15.4
152 | 1.6566,0,19.58,"0",0.871,6.122,97.3,1.618,5,403,14.7,372.8,14.1,21.5
153 | 1.49632,0,19.58,"0",0.871,5.404,100,1.5916,5,403,14.7,341.6,13.28,19.6
154 | 1.12658,0,19.58,"1",0.871,5.012,88,1.6102,5,403,14.7,343.28,12.12,15.3
155 | 2.14918,0,19.58,"0",0.871,5.709,98.5,1.6232,5,403,14.7,261.95,15.79,19.4
156 | 1.41385,0,19.58,"1",0.871,6.129,96,1.7494,5,403,14.7,321.02,15.12,17
157 | 3.53501,0,19.58,"1",0.871,6.152,82.6,1.7455,5,403,14.7,88.01,15.02,15.6
158 | 2.44668,0,19.58,"0",0.871,5.272,94,1.7364,5,403,14.7,88.63,16.14,13.1
159 | 1.22358,0,19.58,"0",0.605,6.943,97.4,1.8773,5,403,14.7,363.43,4.59,41.3
160 | 1.34284,0,19.58,"0",0.605,6.066,100,1.7573,5,403,14.7,353.89,6.43,24.3
161 | 1.42502,0,19.58,"0",0.871,6.51,100,1.7659,5,403,14.7,364.31,7.39,23.3
162 | 1.27346,0,19.58,"1",0.605,6.25,92.6,1.7984,5,403,14.7,338.92,5.5,27
163 | 1.46336,0,19.58,"0",0.605,7.489,90.8,1.9709,5,403,14.7,374.43,1.73,50
164 | 1.83377,0,19.58,"1",0.605,7.802,98.2,2.0407,5,403,14.7,389.61,1.92,50
165 | 1.51902,0,19.58,"1",0.605,8.375,93.9,2.162,5,403,14.7,388.45,3.32,50
166 | 2.24236,0,19.58,"0",0.605,5.854,91.8,2.422,5,403,14.7,395.11,11.64,22.7
167 | 2.924,0,19.58,"0",0.605,6.101,93,2.2834,5,403,14.7,240.16,9.81,25
168 | 2.01019,0,19.58,"0",0.605,7.929,96.2,2.0459,5,403,14.7,369.3,3.7,50
169 | 1.80028,0,19.58,"0",0.605,5.877,79.2,2.4259,5,403,14.7,227.61,12.14,23.8
170 | 2.3004,0,19.58,"0",0.605,6.319,96.1,2.1,5,403,14.7,297.09,11.1,23.8
171 | 2.44953,0,19.58,"0",0.605,6.402,95.2,2.2625,5,403,14.7,330.04,11.32,22.3
172 | 1.20742,0,19.58,"0",0.605,5.875,94.6,2.4259,5,403,14.7,292.29,14.43,17.4
173 | 2.3139,0,19.58,"0",0.605,5.88,97.3,2.3887,5,403,14.7,348.13,12.03,19.1
174 | 0.13914,0,4.05,"0",0.51,5.572,88.5,2.5961,5,296,16.6,396.9,14.69,23.1
175 | 0.09178,0,4.05,"0",0.51,6.416,84.1,2.6463,5,296,16.6,395.5,9.04,23.6
176 | 0.08447,0,4.05,"0",0.51,5.859,68.7,2.7019,5,296,16.6,393.23,9.64,22.6
177 | 0.06664,0,4.05,"0",0.51,6.546,33.1,3.1323,5,296,16.6,390.96,5.33,29.4
178 | 0.07022,0,4.05,"0",0.51,6.02,47.2,3.5549,5,296,16.6,393.23,10.11,23.2
179 | 0.05425,0,4.05,"0",0.51,6.315,73.4,3.3175,5,296,16.6,395.6,6.29,24.6
180 | 0.06642,0,4.05,"0",0.51,6.86,74.4,2.9153,5,296,16.6,391.27,6.92,29.9
181 | 0.0578,0,2.46,"0",0.488,6.98,58.4,2.829,3,193,17.8,396.9,5.04,37.2
182 | 0.06588,0,2.46,"0",0.488,7.765,83.3,2.741,3,193,17.8,395.56,7.56,39.8
183 | 0.06888,0,2.46,"0",0.488,6.144,62.2,2.5979,3,193,17.8,396.9,9.45,36.2
184 | 0.09103,0,2.46,"0",0.488,7.155,92.2,2.7006,3,193,17.8,394.12,4.82,37.9
185 | 0.10008,0,2.46,"0",0.488,6.563,95.6,2.847,3,193,17.8,396.9,5.68,32.5
186 | 0.08308,0,2.46,"0",0.488,5.604,89.8,2.9879,3,193,17.8,391,13.98,26.4
187 | 0.06047,0,2.46,"0",0.488,6.153,68.8,3.2797,3,193,17.8,387.11,13.15,29.6
188 | 0.05602,0,2.46,"0",0.488,7.831,53.6,3.1992,3,193,17.8,392.63,4.45,50
189 | 0.07875,45,3.44,"0",0.437,6.782,41.1,3.7886,5,398,15.2,393.87,6.68,32
190 | 0.12579,45,3.44,"0",0.437,6.556,29.1,4.5667,5,398,15.2,382.84,4.56,29.8
191 | 0.0837,45,3.44,"0",0.437,7.185,38.9,4.5667,5,398,15.2,396.9,5.39,34.9
192 | 0.09068,45,3.44,"0",0.437,6.951,21.5,6.4798,5,398,15.2,377.68,5.1,37
193 | 0.06911,45,3.44,"0",0.437,6.739,30.8,6.4798,5,398,15.2,389.71,4.69,30.5
194 | 0.08664,45,3.44,"0",0.437,7.178,26.3,6.4798,5,398,15.2,390.49,2.87,36.4
195 | 0.02187,60,2.93,"0",0.401,6.8,9.9,6.2196,1,265,15.6,393.37,5.03,31.1
196 | 0.01439,60,2.93,"0",0.401,6.604,18.8,6.2196,1,265,15.6,376.7,4.38,29.1
197 | 0.01381,80,0.46,"0",0.422,7.875,32,5.6484,4,255,14.4,394.23,2.97,50
198 | 0.04011,80,1.52,"0",0.404,7.287,34.1,7.309,2,329,12.6,396.9,4.08,33.3
199 | 0.04666,80,1.52,"0",0.404,7.107,36.6,7.309,2,329,12.6,354.31,8.61,30.3
200 | 0.03768,80,1.52,"0",0.404,7.274,38.3,7.309,2,329,12.6,392.2,6.62,34.6
201 | 0.0315,95,1.47,"0",0.403,6.975,15.3,7.6534,3,402,17,396.9,4.56,34.9
202 | 0.01778,95,1.47,"0",0.403,7.135,13.9,7.6534,3,402,17,384.3,4.45,32.9
203 | 0.03445,82.5,2.03,"0",0.415,6.162,38.4,6.27,2,348,14.7,393.77,7.43,24.1
204 | 0.02177,82.5,2.03,"0",0.415,7.61,15.7,6.27,2,348,14.7,395.38,3.11,42.3
205 | 0.0351,95,2.68,"0",0.4161,7.853,33.2,5.118,4,224,14.7,392.78,3.81,48.5
206 | 0.02009,95,2.68,"0",0.4161,8.034,31.9,5.118,4,224,14.7,390.55,2.88,50
207 | 0.13642,0,10.59,"0",0.489,5.891,22.3,3.9454,4,277,18.6,396.9,10.87,22.6
208 | 0.22969,0,10.59,"0",0.489,6.326,52.5,4.3549,4,277,18.6,394.87,10.97,24.4
209 | 0.25199,0,10.59,"0",0.489,5.783,72.7,4.3549,4,277,18.6,389.43,18.06,22.5
210 | 0.13587,0,10.59,"1",0.489,6.064,59.1,4.2392,4,277,18.6,381.32,14.66,24.4
211 | 0.43571,0,10.59,"1",0.489,5.344,100,3.875,4,277,18.6,396.9,23.09,20
212 | 0.17446,0,10.59,"1",0.489,5.96,92.1,3.8771,4,277,18.6,393.25,17.27,21.7
213 | 0.37578,0,10.59,"1",0.489,5.404,88.6,3.665,4,277,18.6,395.24,23.98,19.3
214 | 0.21719,0,10.59,"1",0.489,5.807,53.8,3.6526,4,277,18.6,390.94,16.03,22.4
215 | 0.14052,0,10.59,"0",0.489,6.375,32.3,3.9454,4,277,18.6,385.81,9.38,28.1
216 | 0.28955,0,10.59,"0",0.489,5.412,9.8,3.5875,4,277,18.6,348.93,29.55,23.7
217 | 0.19802,0,10.59,"0",0.489,6.182,42.4,3.9454,4,277,18.6,393.63,9.47,25
218 | 0.0456,0,13.89,"1",0.55,5.888,56,3.1121,5,276,16.4,392.8,13.51,23.3
219 | 0.07013,0,13.89,"0",0.55,6.642,85.1,3.4211,5,276,16.4,392.78,9.69,28.7
220 | 0.11069,0,13.89,"1",0.55,5.951,93.8,2.8893,5,276,16.4,396.9,17.92,21.5
221 | 0.11425,0,13.89,"1",0.55,6.373,92.4,3.3633,5,276,16.4,393.74,10.5,23
222 | 0.35809,0,6.2,"1",0.507,6.951,88.5,2.8617,8,307,17.4,391.7,9.71,26.7
223 | 0.40771,0,6.2,"1",0.507,6.164,91.3,3.048,8,307,17.4,395.24,21.46,21.7
224 | 0.62356,0,6.2,"1",0.507,6.879,77.7,3.2721,8,307,17.4,390.39,9.93,27.5
225 | 0.6147,0,6.2,"0",0.507,6.618,80.8,3.2721,8,307,17.4,396.9,7.6,30.1
226 | 0.31533,0,6.2,"0",0.504,8.266,78.3,2.8944,8,307,17.4,385.05,4.14,44.8
227 | 0.52693,0,6.2,"0",0.504,8.725,83,2.8944,8,307,17.4,382,4.63,50
228 | 0.38214,0,6.2,"0",0.504,8.04,86.5,3.2157,8,307,17.4,387.38,3.13,37.6
229 | 0.41238,0,6.2,"0",0.504,7.163,79.9,3.2157,8,307,17.4,372.08,6.36,31.6
230 | 0.29819,0,6.2,"0",0.504,7.686,17,3.3751,8,307,17.4,377.51,3.92,46.7
231 | 0.44178,0,6.2,"0",0.504,6.552,21.4,3.3751,8,307,17.4,380.34,3.76,31.5
232 | 0.537,0,6.2,"0",0.504,5.981,68.1,3.6715,8,307,17.4,378.35,11.65,24.3
233 | 0.46296,0,6.2,"0",0.504,7.412,76.9,3.6715,8,307,17.4,376.14,5.25,31.7
234 | 0.57529,0,6.2,"0",0.507,8.337,73.3,3.8384,8,307,17.4,385.91,2.47,41.7
235 | 0.33147,0,6.2,"0",0.507,8.247,70.4,3.6519,8,307,17.4,378.95,3.95,48.3
236 | 0.44791,0,6.2,"1",0.507,6.726,66.5,3.6519,8,307,17.4,360.2,8.05,29
237 | 0.33045,0,6.2,"0",0.507,6.086,61.5,3.6519,8,307,17.4,376.75,10.88,24
238 | 0.52058,0,6.2,"1",0.507,6.631,76.5,4.148,8,307,17.4,388.45,9.54,25.1
239 | 0.51183,0,6.2,"0",0.507,7.358,71.6,4.148,8,307,17.4,390.07,4.73,31.5
240 | 0.08244,30,4.93,"0",0.428,6.481,18.5,6.1899,6,300,16.6,379.41,6.36,23.7
241 | 0.09252,30,4.93,"0",0.428,6.606,42.2,6.1899,6,300,16.6,383.78,7.37,23.3
242 | 0.11329,30,4.93,"0",0.428,6.897,54.3,6.3361,6,300,16.6,391.25,11.38,22
243 | 0.10612,30,4.93,"0",0.428,6.095,65.1,6.3361,6,300,16.6,394.62,12.4,20.1
244 | 0.1029,30,4.93,"0",0.428,6.358,52.9,7.0355,6,300,16.6,372.75,11.22,22.2
245 | 0.12757,30,4.93,"0",0.428,6.393,7.8,7.0355,6,300,16.6,374.71,5.19,23.7
246 | 0.20608,22,5.86,"0",0.431,5.593,76.5,7.9549,7,330,19.1,372.49,12.5,17.6
247 | 0.19133,22,5.86,"0",0.431,5.605,70.2,7.9549,7,330,19.1,389.13,18.46,18.5
248 | 0.33983,22,5.86,"0",0.431,6.108,34.9,8.0555,7,330,19.1,390.18,9.16,24.3
249 | 0.19657,22,5.86,"0",0.431,6.226,79.2,8.0555,7,330,19.1,376.14,10.15,20.5
250 | 0.16439,22,5.86,"0",0.431,6.433,49.1,7.8265,7,330,19.1,374.71,9.52,24.5
251 | 0.19073,22,5.86,"0",0.431,6.718,17.5,7.8265,7,330,19.1,393.74,6.56,26.2
252 | 0.1403,22,5.86,"0",0.431,6.487,13,7.3967,7,330,19.1,396.28,5.9,24.4
253 | 0.21409,22,5.86,"0",0.431,6.438,8.9,7.3967,7,330,19.1,377.07,3.59,24.8
254 | 0.08221,22,5.86,"0",0.431,6.957,6.8,8.9067,7,330,19.1,386.09,3.53,29.6
255 | 0.36894,22,5.86,"0",0.431,8.259,8.4,8.9067,7,330,19.1,396.9,3.54,42.8
256 | 0.04819,80,3.64,"0",0.392,6.108,32,9.2203,1,315,16.4,392.89,6.57,21.9
257 | 0.03548,80,3.64,"0",0.392,5.876,19.1,9.2203,1,315,16.4,395.18,9.25,20.9
258 | 0.01538,90,3.75,"0",0.394,7.454,34.2,6.3361,3,244,15.9,386.34,3.11,44
259 | 0.61154,20,3.97,"0",0.647,8.704,86.9,1.801,5,264,13,389.7,5.12,50
260 | 0.66351,20,3.97,"0",0.647,7.333,100,1.8946,5,264,13,383.29,7.79,36
261 | 0.65665,20,3.97,"0",0.647,6.842,100,2.0107,5,264,13,391.93,6.9,30.1
262 | 0.54011,20,3.97,"0",0.647,7.203,81.8,2.1121,5,264,13,392.8,9.59,33.8
263 | 0.53412,20,3.97,"0",0.647,7.52,89.4,2.1398,5,264,13,388.37,7.26,43.1
264 | 0.52014,20,3.97,"0",0.647,8.398,91.5,2.2885,5,264,13,386.86,5.91,48.8
265 | 0.82526,20,3.97,"0",0.647,7.327,94.5,2.0788,5,264,13,393.42,11.25,31
266 | 0.55007,20,3.97,"0",0.647,7.206,91.6,1.9301,5,264,13,387.89,8.1,36.5
267 | 0.76162,20,3.97,"0",0.647,5.56,62.8,1.9865,5,264,13,392.4,10.45,22.8
268 | 0.7857,20,3.97,"0",0.647,7.014,84.6,2.1329,5,264,13,384.07,14.79,30.7
269 | 0.57834,20,3.97,"0",0.575,8.297,67,2.4216,5,264,13,384.54,7.44,50
270 | 0.5405,20,3.97,"0",0.575,7.47,52.6,2.872,5,264,13,390.3,3.16,43.5
271 | 0.09065,20,6.96,"1",0.464,5.92,61.5,3.9175,3,223,18.6,391.34,13.65,20.7
272 | 0.29916,20,6.96,"0",0.464,5.856,42.1,4.429,3,223,18.6,388.65,13,21.1
273 | 0.16211,20,6.96,"0",0.464,6.24,16.3,4.429,3,223,18.6,396.9,6.59,25.2
274 | 0.1146,20,6.96,"0",0.464,6.538,58.7,3.9175,3,223,18.6,394.96,7.73,24.4
275 | 0.22188,20,6.96,"1",0.464,7.691,51.8,4.3665,3,223,18.6,390.77,6.58,35.2
276 | 0.05644,40,6.41,"1",0.447,6.758,32.9,4.0776,4,254,17.6,396.9,3.53,32.4
277 | 0.09604,40,6.41,"0",0.447,6.854,42.8,4.2673,4,254,17.6,396.9,2.98,32
278 | 0.10469,40,6.41,"1",0.447,7.267,49,4.7872,4,254,17.6,389.25,6.05,33.2
279 | 0.06127,40,6.41,"1",0.447,6.826,27.6,4.8628,4,254,17.6,393.45,4.16,33.1
280 | 0.07978,40,6.41,"0",0.447,6.482,32.1,4.1403,4,254,17.6,396.9,7.19,29.1
281 | 0.21038,20,3.33,"0",0.4429,6.812,32.2,4.1007,5,216,14.9,396.9,4.85,35.1
282 | 0.03578,20,3.33,"0",0.4429,7.82,64.5,4.6947,5,216,14.9,387.31,3.76,45.4
283 | 0.03705,20,3.33,"0",0.4429,6.968,37.2,5.2447,5,216,14.9,392.23,4.59,35.4
284 | 0.06129,20,3.33,"1",0.4429,7.645,49.7,5.2119,5,216,14.9,377.07,3.01,46
285 | 0.01501,90,1.21,"1",0.401,7.923,24.8,5.885,1,198,13.6,395.52,3.16,50
286 | 0.00906,90,2.97,"0",0.4,7.088,20.8,7.3073,1,285,15.3,394.72,7.85,32.2
287 | 0.01096,55,2.25,"0",0.389,6.453,31.9,7.3073,1,300,15.3,394.72,8.23,22
288 | 0.01965,80,1.76,"0",0.385,6.23,31.5,9.0892,1,241,18.2,341.6,12.93,20.1
289 | 0.03871,52.5,5.32,"0",0.405,6.209,31.3,7.3172,6,293,16.6,396.9,7.14,23.2
290 | 0.0459,52.5,5.32,"0",0.405,6.315,45.6,7.3172,6,293,16.6,396.9,7.6,22.3
291 | 0.04297,52.5,5.32,"0",0.405,6.565,22.9,7.3172,6,293,16.6,371.72,9.51,24.8
292 | 0.03502,80,4.95,"0",0.411,6.861,27.9,5.1167,4,245,19.2,396.9,3.33,28.5
293 | 0.07886,80,4.95,"0",0.411,7.148,27.7,5.1167,4,245,19.2,396.9,3.56,37.3
294 | 0.03615,80,4.95,"0",0.411,6.63,23.4,5.1167,4,245,19.2,396.9,4.7,27.9
295 | 0.08265,0,13.92,"0",0.437,6.127,18.4,5.5027,4,289,16,396.9,8.58,23.9
296 | 0.08199,0,13.92,"0",0.437,6.009,42.3,5.5027,4,289,16,396.9,10.4,21.7
297 | 0.12932,0,13.92,"0",0.437,6.678,31.1,5.9604,4,289,16,396.9,6.27,28.6
298 | 0.05372,0,13.92,"0",0.437,6.549,51,5.9604,4,289,16,392.85,7.39,27.1
299 | 0.14103,0,13.92,"0",0.437,5.79,58,6.32,4,289,16,396.9,15.84,20.3
300 | 0.06466,70,2.24,"0",0.4,6.345,20.1,7.8278,5,358,14.8,368.24,4.97,22.5
301 | 0.05561,70,2.24,"0",0.4,7.041,10,7.8278,5,358,14.8,371.58,4.74,29
302 | 0.04417,70,2.24,"0",0.4,6.871,47.4,7.8278,5,358,14.8,390.86,6.07,24.8
303 | 0.03537,34,6.09,"0",0.433,6.59,40.4,5.4917,7,329,16.1,395.75,9.5,22
304 | 0.09266,34,6.09,"0",0.433,6.495,18.4,5.4917,7,329,16.1,383.61,8.67,26.4
305 | 0.1,34,6.09,"0",0.433,6.982,17.7,5.4917,7,329,16.1,390.43,4.86,33.1
306 | 0.05515,33,2.18,"0",0.472,7.236,41.1,4.022,7,222,18.4,393.68,6.93,36.1
307 | 0.05479,33,2.18,"0",0.472,6.616,58.1,3.37,7,222,18.4,393.36,8.93,28.4
308 | 0.07503,33,2.18,"0",0.472,7.42,71.9,3.0992,7,222,18.4,396.9,6.47,33.4
309 | 0.04932,33,2.18,"0",0.472,6.849,70.3,3.1827,7,222,18.4,396.9,7.53,28.2
310 | 0.49298,0,9.9,"0",0.544,6.635,82.5,3.3175,4,304,18.4,396.9,4.54,22.8
311 | 0.3494,0,9.9,"0",0.544,5.972,76.7,3.1025,4,304,18.4,396.24,9.97,20.3
312 | 2.63548,0,9.9,"0",0.544,4.973,37.8,2.5194,4,304,18.4,350.45,12.64,16.1
313 | 0.79041,0,9.9,"0",0.544,6.122,52.8,2.6403,4,304,18.4,396.9,5.98,22.1
314 | 0.26169,0,9.9,"0",0.544,6.023,90.4,2.834,4,304,18.4,396.3,11.72,19.4
315 | 0.26938,0,9.9,"0",0.544,6.266,82.8,3.2628,4,304,18.4,393.39,7.9,21.6
316 | 0.3692,0,9.9,"0",0.544,6.567,87.3,3.6023,4,304,18.4,395.69,9.28,23.8
317 | 0.25356,0,9.9,"0",0.544,5.705,77.7,3.945,4,304,18.4,396.42,11.5,16.2
318 | 0.31827,0,9.9,"0",0.544,5.914,83.2,3.9986,4,304,18.4,390.7,18.33,17.8
319 | 0.24522,0,9.9,"0",0.544,5.782,71.7,4.0317,4,304,18.4,396.9,15.94,19.8
320 | 0.40202,0,9.9,"0",0.544,6.382,67.2,3.5325,4,304,18.4,395.21,10.36,23.1
321 | 0.47547,0,9.9,"0",0.544,6.113,58.8,4.0019,4,304,18.4,396.23,12.73,21
322 | 0.1676,0,7.38,"0",0.493,6.426,52.3,4.5404,5,287,19.6,396.9,7.2,23.8
323 | 0.18159,0,7.38,"0",0.493,6.376,54.3,4.5404,5,287,19.6,396.9,6.87,23.1
324 | 0.35114,0,7.38,"0",0.493,6.041,49.9,4.7211,5,287,19.6,396.9,7.7,20.4
325 | 0.28392,0,7.38,"0",0.493,5.708,74.3,4.7211,5,287,19.6,391.13,11.74,18.5
326 | 0.34109,0,7.38,"0",0.493,6.415,40.1,4.7211,5,287,19.6,396.9,6.12,25
327 | 0.19186,0,7.38,"0",0.493,6.431,14.7,5.4159,5,287,19.6,393.68,5.08,24.6
328 | 0.30347,0,7.38,"0",0.493,6.312,28.9,5.4159,5,287,19.6,396.9,6.15,23
329 | 0.24103,0,7.38,"0",0.493,6.083,43.7,5.4159,5,287,19.6,396.9,12.79,22.2
330 | 0.06617,0,3.24,"0",0.46,5.868,25.8,5.2146,4,430,16.9,382.44,9.97,19.3
331 | 0.06724,0,3.24,"0",0.46,6.333,17.2,5.2146,4,430,16.9,375.21,7.34,22.6
332 | 0.04544,0,3.24,"0",0.46,6.144,32.2,5.8736,4,430,16.9,368.57,9.09,19.8
333 | 0.05023,35,6.06,"0",0.4379,5.706,28.4,6.6407,1,304,16.9,394.02,12.43,17.1
334 | 0.03466,35,6.06,"0",0.4379,6.031,23.3,6.6407,1,304,16.9,362.25,7.83,19.4
335 | 0.05083,0,5.19,"0",0.515,6.316,38.1,6.4584,5,224,20.2,389.71,5.68,22.2
336 | 0.03738,0,5.19,"0",0.515,6.31,38.5,6.4584,5,224,20.2,389.4,6.75,20.7
337 | 0.03961,0,5.19,"0",0.515,6.037,34.5,5.9853,5,224,20.2,396.9,8.01,21.1
338 | 0.03427,0,5.19,"0",0.515,5.869,46.3,5.2311,5,224,20.2,396.9,9.8,19.5
339 | 0.03041,0,5.19,"0",0.515,5.895,59.6,5.615,5,224,20.2,394.81,10.56,18.5
340 | 0.03306,0,5.19,"0",0.515,6.059,37.3,4.8122,5,224,20.2,396.14,8.51,20.6
341 | 0.05497,0,5.19,"0",0.515,5.985,45.4,4.8122,5,224,20.2,396.9,9.74,19
342 | 0.06151,0,5.19,"0",0.515,5.968,58.5,4.8122,5,224,20.2,396.9,9.29,18.7
343 | 0.01301,35,1.52,"0",0.442,7.241,49.3,7.0379,1,284,15.5,394.74,5.49,32.7
344 | 0.02498,0,1.89,"0",0.518,6.54,59.7,6.2669,1,422,15.9,389.96,8.65,16.5
345 | 0.02543,55,3.78,"0",0.484,6.696,56.4,5.7321,5,370,17.6,396.9,7.18,23.9
346 | 0.03049,55,3.78,"0",0.484,6.874,28.1,6.4654,5,370,17.6,387.97,4.61,31.2
347 | 0.03113,0,4.39,"0",0.442,6.014,48.5,8.0136,3,352,18.8,385.64,10.53,17.5
348 | 0.06162,0,4.39,"0",0.442,5.898,52.3,8.0136,3,352,18.8,364.61,12.67,17.2
349 | 0.0187,85,4.15,"0",0.429,6.516,27.7,8.5353,4,351,17.9,392.43,6.36,23.1
350 | 0.01501,80,2.01,"0",0.435,6.635,29.7,8.344,4,280,17,390.94,5.99,24.5
351 | 0.02899,40,1.25,"0",0.429,6.939,34.5,8.7921,1,335,19.7,389.85,5.89,26.6
352 | 0.06211,40,1.25,"0",0.429,6.49,44.4,8.7921,1,335,19.7,396.9,5.98,22.9
353 | 0.0795,60,1.69,"0",0.411,6.579,35.9,10.7103,4,411,18.3,370.78,5.49,24.1
354 | 0.07244,60,1.69,"0",0.411,5.884,18.5,10.7103,4,411,18.3,392.33,7.79,18.6
355 | 0.01709,90,2.02,"0",0.41,6.728,36.1,12.1265,5,187,17,384.46,4.5,30.1
356 | 0.04301,80,1.91,"0",0.413,5.663,21.9,10.5857,4,334,22,382.8,8.05,18.2
357 | 0.10659,80,1.91,"0",0.413,5.936,19.5,10.5857,4,334,22,376.04,5.57,20.6
358 | 8.98296,0,18.1,"1",0.77,6.212,97.4,2.1222,24,666,20.2,377.73,17.6,17.8
359 | 3.8497,0,18.1,"1",0.77,6.395,91,2.5052,24,666,20.2,391.34,13.27,21.7
360 | 5.20177,0,18.1,"1",0.77,6.127,83.4,2.7227,24,666,20.2,395.43,11.48,22.7
361 | 4.26131,0,18.1,"0",0.77,6.112,81.3,2.5091,24,666,20.2,390.74,12.67,22.6
362 | 4.54192,0,18.1,"0",0.77,6.398,88,2.5182,24,666,20.2,374.56,7.79,25
363 | 3.83684,0,18.1,"0",0.77,6.251,91.1,2.2955,24,666,20.2,350.65,14.19,19.9
364 | 3.67822,0,18.1,"0",0.77,5.362,96.2,2.1036,24,666,20.2,380.79,10.19,20.8
365 | 4.22239,0,18.1,"1",0.77,5.803,89,1.9047,24,666,20.2,353.04,14.64,16.8
366 | 3.47428,0,18.1,"1",0.718,8.78,82.9,1.9047,24,666,20.2,354.55,5.29,21.9
367 | 4.55587,0,18.1,"0",0.718,3.561,87.9,1.6132,24,666,20.2,354.7,7.12,27.5
368 | 3.69695,0,18.1,"0",0.718,4.963,91.4,1.7523,24,666,20.2,316.03,14,21.9
369 | 13.5222,0,18.1,"0",0.631,3.863,100,1.5106,24,666,20.2,131.42,13.33,23.1
370 | 4.89822,0,18.1,"0",0.631,4.97,100,1.3325,24,666,20.2,375.52,3.26,50
371 | 5.66998,0,18.1,"1",0.631,6.683,96.8,1.3567,24,666,20.2,375.33,3.73,50
372 | 6.53876,0,18.1,"1",0.631,7.016,97.5,1.2024,24,666,20.2,392.05,2.96,50
373 | 9.2323,0,18.1,"0",0.631,6.216,100,1.1691,24,666,20.2,366.15,9.53,50
374 | 8.26725,0,18.1,"1",0.668,5.875,89.6,1.1296,24,666,20.2,347.88,8.88,50
375 | 11.1081,0,18.1,"0",0.668,4.906,100,1.1742,24,666,20.2,396.9,34.77,13.8
376 | 18.4982,0,18.1,"0",0.668,4.138,100,1.137,24,666,20.2,396.9,37.97,13.8
377 | 19.6091,0,18.1,"0",0.671,7.313,97.9,1.3163,24,666,20.2,396.9,13.44,15
378 | 15.288,0,18.1,"0",0.671,6.649,93.3,1.3449,24,666,20.2,363.02,23.24,13.9
379 | 9.82349,0,18.1,"0",0.671,6.794,98.8,1.358,24,666,20.2,396.9,21.24,13.3
380 | 23.6482,0,18.1,"0",0.671,6.38,96.2,1.3861,24,666,20.2,396.9,23.69,13.1
381 | 17.8667,0,18.1,"0",0.671,6.223,100,1.3861,24,666,20.2,393.74,21.78,10.2
382 | 88.9762,0,18.1,"0",0.671,6.968,91.9,1.4165,24,666,20.2,396.9,17.21,10.4
383 | 15.8744,0,18.1,"0",0.671,6.545,99.1,1.5192,24,666,20.2,396.9,21.08,10.9
384 | 9.18702,0,18.1,"0",0.7,5.536,100,1.5804,24,666,20.2,396.9,23.6,11.3
385 | 7.99248,0,18.1,"0",0.7,5.52,100,1.5331,24,666,20.2,396.9,24.56,12.3
386 | 20.0849,0,18.1,"0",0.7,4.368,91.2,1.4395,24,666,20.2,285.83,30.63,8.8
387 | 16.8118,0,18.1,"0",0.7,5.277,98.1,1.4261,24,666,20.2,396.9,30.81,7.2
388 | 24.3938,0,18.1,"0",0.7,4.652,100,1.4672,24,666,20.2,396.9,28.28,10.5
389 | 22.5971,0,18.1,"0",0.7,5,89.5,1.5184,24,666,20.2,396.9,31.99,7.4
390 | 14.3337,0,18.1,"0",0.7,4.88,100,1.5895,24,666,20.2,372.92,30.62,10.2
391 | 8.15174,0,18.1,"0",0.7,5.39,98.9,1.7281,24,666,20.2,396.9,20.85,11.5
392 | 6.96215,0,18.1,"0",0.7,5.713,97,1.9265,24,666,20.2,394.43,17.11,15.1
393 | 5.29305,0,18.1,"0",0.7,6.051,82.5,2.1678,24,666,20.2,378.38,18.76,23.2
394 | 11.5779,0,18.1,"0",0.7,5.036,97,1.77,24,666,20.2,396.9,25.68,9.7
395 | 8.64476,0,18.1,"0",0.693,6.193,92.6,1.7912,24,666,20.2,396.9,15.17,13.8
396 | 13.3598,0,18.1,"0",0.693,5.887,94.7,1.7821,24,666,20.2,396.9,16.35,12.7
397 | 8.71675,0,18.1,"0",0.693,6.471,98.8,1.7257,24,666,20.2,391.98,17.12,13.1
398 | 5.87205,0,18.1,"0",0.693,6.405,96,1.6768,24,666,20.2,396.9,19.37,12.5
399 | 7.67202,0,18.1,"0",0.693,5.747,98.9,1.6334,24,666,20.2,393.1,19.92,8.5
400 | 38.3518,0,18.1,"0",0.693,5.453,100,1.4896,24,666,20.2,396.9,30.59,5
401 | 9.91655,0,18.1,"0",0.693,5.852,77.8,1.5004,24,666,20.2,338.16,29.97,6.3
402 | 25.0461,0,18.1,"0",0.693,5.987,100,1.5888,24,666,20.2,396.9,26.77,5.6
403 | 14.2362,0,18.1,"0",0.693,6.343,100,1.5741,24,666,20.2,396.9,20.32,7.2
404 | 9.59571,0,18.1,"0",0.693,6.404,100,1.639,24,666,20.2,376.11,20.31,12.1
405 | 24.8017,0,18.1,"0",0.693,5.349,96,1.7028,24,666,20.2,396.9,19.77,8.3
406 | 41.5292,0,18.1,"0",0.693,5.531,85.4,1.6074,24,666,20.2,329.46,27.38,8.5
407 | 67.9208,0,18.1,"0",0.693,5.683,100,1.4254,24,666,20.2,384.97,22.98,5
408 | 20.7162,0,18.1,"0",0.659,4.138,100,1.1781,24,666,20.2,370.22,23.34,11.9
409 | 11.9511,0,18.1,"0",0.659,5.608,100,1.2852,24,666,20.2,332.09,12.13,27.9
410 | 7.40389,0,18.1,"0",0.597,5.617,97.9,1.4547,24,666,20.2,314.64,26.4,17.2
411 | 14.4383,0,18.1,"0",0.597,6.852,100,1.4655,24,666,20.2,179.36,19.78,27.5
412 | 51.1358,0,18.1,"0",0.597,5.757,100,1.413,24,666,20.2,2.6,10.11,15
413 | 14.0507,0,18.1,"0",0.597,6.657,100,1.5275,24,666,20.2,35.05,21.22,17.2
414 | 18.811,0,18.1,"0",0.597,4.628,100,1.5539,24,666,20.2,28.79,34.37,17.9
415 | 28.6558,0,18.1,"0",0.597,5.155,100,1.5894,24,666,20.2,210.97,20.08,16.3
416 | 45.7461,0,18.1,"0",0.693,4.519,100,1.6582,24,666,20.2,88.27,36.98,7
417 | 18.0846,0,18.1,"0",0.679,6.434,100,1.8347,24,666,20.2,27.25,29.05,7.2
418 | 10.8342,0,18.1,"0",0.679,6.782,90.8,1.8195,24,666,20.2,21.57,25.79,7.5
419 | 25.9406,0,18.1,"0",0.679,5.304,89.1,1.6475,24,666,20.2,127.36,26.64,10.4
420 | 73.5341,0,18.1,"0",0.679,5.957,100,1.8026,24,666,20.2,16.45,20.62,8.8
421 | 11.8123,0,18.1,"0",0.718,6.824,76.5,1.794,24,666,20.2,48.45,22.74,8.4
422 | 11.0874,0,18.1,"0",0.718,6.411,100,1.8589,24,666,20.2,318.75,15.02,16.7
423 | 7.02259,0,18.1,"0",0.718,6.006,95.3,1.8746,24,666,20.2,319.98,15.7,14.2
424 | 12.0482,0,18.1,"0",0.614,5.648,87.6,1.9512,24,666,20.2,291.55,14.1,20.8
425 | 7.05042,0,18.1,"0",0.614,6.103,85.1,2.0218,24,666,20.2,2.52,23.29,13.4
426 | 8.79212,0,18.1,"0",0.584,5.565,70.6,2.0635,24,666,20.2,3.65,17.16,11.7
427 | 15.8603,0,18.1,"0",0.679,5.896,95.4,1.9096,24,666,20.2,7.68,24.39,8.3
428 | 12.2472,0,18.1,"0",0.584,5.837,59.7,1.9976,24,666,20.2,24.65,15.69,10.2
429 | 37.6619,0,18.1,"0",0.679,6.202,78.7,1.8629,24,666,20.2,18.82,14.52,10.9
430 | 7.36711,0,18.1,"0",0.679,6.193,78.1,1.9356,24,666,20.2,96.73,21.52,11
431 | 9.33889,0,18.1,"0",0.679,6.38,95.6,1.9682,24,666,20.2,60.72,24.08,9.5
432 | 8.49213,0,18.1,"0",0.584,6.348,86.1,2.0527,24,666,20.2,83.45,17.64,14.5
433 | 10.0623,0,18.1,"0",0.584,6.833,94.3,2.0882,24,666,20.2,81.33,19.69,14.1
434 | 6.44405,0,18.1,"0",0.584,6.425,74.8,2.2004,24,666,20.2,97.95,12.03,16.1
435 | 5.58107,0,18.1,"0",0.713,6.436,87.9,2.3158,24,666,20.2,100.19,16.22,14.3
436 | 13.9134,0,18.1,"0",0.713,6.208,95,2.2222,24,666,20.2,100.63,15.17,11.7
437 | 11.1604,0,18.1,"0",0.74,6.629,94.6,2.1247,24,666,20.2,109.85,23.27,13.4
438 | 14.4208,0,18.1,"0",0.74,6.461,93.3,2.0026,24,666,20.2,27.49,18.05,9.6
439 | 15.1772,0,18.1,"0",0.74,6.152,100,1.9142,24,666,20.2,9.32,26.45,8.7
440 | 13.6781,0,18.1,"0",0.74,5.935,87.9,1.8206,24,666,20.2,68.95,34.02,8.4
441 | 9.39063,0,18.1,"0",0.74,5.627,93.9,1.8172,24,666,20.2,396.9,22.88,12.8
442 | 22.0511,0,18.1,"0",0.74,5.818,92.4,1.8662,24,666,20.2,391.45,22.11,10.5
443 | 9.72418,0,18.1,"0",0.74,6.406,97.2,2.0651,24,666,20.2,385.96,19.52,17.1
444 | 5.66637,0,18.1,"0",0.74,6.219,100,2.0048,24,666,20.2,395.69,16.59,18.4
445 | 9.96654,0,18.1,"0",0.74,6.485,100,1.9784,24,666,20.2,386.73,18.85,15.4
446 | 12.8023,0,18.1,"0",0.74,5.854,96.6,1.8956,24,666,20.2,240.52,23.79,10.8
447 | 10.6718,0,18.1,"0",0.74,6.459,94.8,1.9879,24,666,20.2,43.06,23.98,11.8
448 | 6.28807,0,18.1,"0",0.74,6.341,96.4,2.072,24,666,20.2,318.01,17.79,14.9
449 | 9.92485,0,18.1,"0",0.74,6.251,96.6,2.198,24,666,20.2,388.52,16.44,12.6
450 | 9.32909,0,18.1,"0",0.713,6.185,98.7,2.2616,24,666,20.2,396.9,18.13,14.1
451 | 7.52601,0,18.1,"0",0.713,6.417,98.3,2.185,24,666,20.2,304.21,19.31,13
452 | 6.71772,0,18.1,"0",0.713,6.749,92.6,2.3236,24,666,20.2,0.32,17.44,13.4
453 | 5.44114,0,18.1,"0",0.713,6.655,98.2,2.3552,24,666,20.2,355.29,17.73,15.2
454 | 5.09017,0,18.1,"0",0.713,6.297,91.8,2.3682,24,666,20.2,385.09,17.27,16.1
455 | 8.24809,0,18.1,"0",0.713,7.393,99.3,2.4527,24,666,20.2,375.87,16.74,17.8
456 | 9.51363,0,18.1,"0",0.713,6.728,94.1,2.4961,24,666,20.2,6.68,18.71,14.9
457 | 4.75237,0,18.1,"0",0.713,6.525,86.5,2.4358,24,666,20.2,50.92,18.13,14.1
458 | 4.66883,0,18.1,"0",0.713,5.976,87.9,2.5806,24,666,20.2,10.48,19.01,12.7
459 | 8.20058,0,18.1,"0",0.713,5.936,80.3,2.7792,24,666,20.2,3.5,16.94,13.5
460 | 7.75223,0,18.1,"0",0.713,6.301,83.7,2.7831,24,666,20.2,272.21,16.23,14.9
461 | 6.80117,0,18.1,"0",0.713,6.081,84.4,2.7175,24,666,20.2,396.9,14.7,20
462 | 4.81213,0,18.1,"0",0.713,6.701,90,2.5975,24,666,20.2,255.23,16.42,16.4
463 | 3.69311,0,18.1,"0",0.713,6.376,88.4,2.5671,24,666,20.2,391.43,14.65,17.7
464 | 6.65492,0,18.1,"0",0.713,6.317,83,2.7344,24,666,20.2,396.9,13.99,19.5
465 | 5.82115,0,18.1,"0",0.713,6.513,89.9,2.8016,24,666,20.2,393.82,10.29,20.2
466 | 7.83932,0,18.1,"0",0.655,6.209,65.4,2.9634,24,666,20.2,396.9,13.22,21.4
467 | 3.1636,0,18.1,"0",0.655,5.759,48.2,3.0665,24,666,20.2,334.4,14.13,19.9
468 | 3.77498,0,18.1,"0",0.655,5.952,84.7,2.8715,24,666,20.2,22.01,17.15,19
469 | 4.42228,0,18.1,"0",0.584,6.003,94.5,2.5403,24,666,20.2,331.29,21.32,19.1
470 | 15.5757,0,18.1,"0",0.58,5.926,71,2.9084,24,666,20.2,368.74,18.13,19.1
471 | 13.0751,0,18.1,"0",0.58,5.713,56.7,2.8237,24,666,20.2,396.9,14.76,20.1
472 | 4.34879,0,18.1,"0",0.58,6.167,84,3.0334,24,666,20.2,396.9,16.29,19.9
473 | 4.03841,0,18.1,"0",0.532,6.229,90.7,3.0993,24,666,20.2,395.33,12.87,19.6
474 | 3.56868,0,18.1,"0",0.58,6.437,75,2.8965,24,666,20.2,393.37,14.36,23.2
475 | 4.64689,0,18.1,"0",0.614,6.98,67.6,2.5329,24,666,20.2,374.68,11.66,29.8
476 | 8.05579,0,18.1,"0",0.584,5.427,95.4,2.4298,24,666,20.2,352.58,18.14,13.8
477 | 6.39312,0,18.1,"0",0.584,6.162,97.4,2.206,24,666,20.2,302.76,24.1,13.3
478 | 4.87141,0,18.1,"0",0.614,6.484,93.6,2.3053,24,666,20.2,396.21,18.68,16.7
479 | 15.0234,0,18.1,"0",0.614,5.304,97.3,2.1007,24,666,20.2,349.48,24.91,12
480 | 10.233,0,18.1,"0",0.614,6.185,96.7,2.1705,24,666,20.2,379.7,18.03,14.6
481 | 14.3337,0,18.1,"0",0.614,6.229,88,1.9512,24,666,20.2,383.32,13.11,21.4
482 | 5.82401,0,18.1,"0",0.532,6.242,64.7,3.4242,24,666,20.2,396.9,10.74,23
483 | 5.70818,0,18.1,"0",0.532,6.75,74.9,3.3317,24,666,20.2,393.07,7.74,23.7
484 | 5.73116,0,18.1,"0",0.532,7.061,77,3.4106,24,666,20.2,395.28,7.01,25
485 | 2.81838,0,18.1,"0",0.532,5.762,40.3,4.0983,24,666,20.2,392.92,10.42,21.8
486 | 2.37857,0,18.1,"0",0.583,5.871,41.9,3.724,24,666,20.2,370.73,13.34,20.6
487 | 3.67367,0,18.1,"0",0.583,6.312,51.9,3.9917,24,666,20.2,388.62,10.58,21.2
488 | 5.69175,0,18.1,"0",0.583,6.114,79.8,3.5459,24,666,20.2,392.68,14.98,19.1
489 | 4.83567,0,18.1,"0",0.583,5.905,53.2,3.1523,24,666,20.2,388.22,11.45,20.6
490 | 0.15086,0,27.74,"0",0.609,5.454,92.7,1.8209,4,711,20.1,395.09,18.06,15.2
491 | 0.18337,0,27.74,"0",0.609,5.414,98.3,1.7554,4,711,20.1,344.05,23.97,7
492 | 0.20746,0,27.74,"0",0.609,5.093,98,1.8226,4,711,20.1,318.43,29.68,8.1
493 | 0.10574,0,27.74,"0",0.609,5.983,98.8,1.8681,4,711,20.1,390.11,18.07,13.6
494 | 0.11132,0,27.74,"0",0.609,5.983,83.5,2.1099,4,711,20.1,396.9,13.35,20.1
495 | 0.17331,0,9.69,"0",0.585,5.707,54,2.3817,6,391,19.2,396.9,12.01,21.8
496 | 0.27957,0,9.69,"0",0.585,5.926,42.6,2.3817,6,391,19.2,396.9,13.59,24.5
497 | 0.17899,0,9.69,"0",0.585,5.67,28.8,2.7986,6,391,19.2,393.29,17.6,23.1
498 | 0.2896,0,9.69,"0",0.585,5.39,72.9,2.7986,6,391,19.2,396.9,21.14,19.7
499 | 0.26838,0,9.69,"0",0.585,5.794,70.6,2.8927,6,391,19.2,396.9,14.1,18.3
500 | 0.23912,0,9.69,"0",0.585,6.019,65.3,2.4091,6,391,19.2,396.9,12.92,21.2
501 | 0.17783,0,9.69,"0",0.585,5.569,73.5,2.3999,6,391,19.2,395.77,15.1,17.5
502 | 0.22438,0,9.69,"0",0.585,6.027,79.7,2.4982,6,391,19.2,396.9,14.33,16.8
503 | 0.06263,0,11.93,"0",0.573,6.593,69.1,2.4786,1,273,21,391.99,9.67,22.4
504 | 0.04527,0,11.93,"0",0.573,6.12,76.7,2.2875,1,273,21,396.9,9.08,20.6
505 | 0.06076,0,11.93,"0",0.573,6.976,91,2.1675,1,273,21,396.9,5.64,23.9
506 | 0.10959,0,11.93,"0",0.573,6.794,89.3,2.3889,1,273,21,393.45,6.48,22
507 | 0.04741,0,11.93,"0",0.573,6.03,80.8,2.505,1,273,21,396.9,7.88,11.9
508 |
--------------------------------------------------------------------------------
/Part 05 - Constructing a Neural Network Models - Regression model with Python (Tensorflow & Keras)/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 06 - Constructing a Binary Classifier Using Neural Network with Python (Tensorflow & Keras)/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 06 - Constructing a Binary Classifier Using Neural Network with Python (Tensorflow & Keras)/datasets_14370_19291_pima-indians-diabetes.csv:
--------------------------------------------------------------------------------
1 | preg,plas,pres,skin,test,mass,pedi,age,class
2 | 6,148,72,35,0,33.6,0.627,50,1
3 | 1,85,66,29,0,26.6,0.351,31,0
4 | 8,183,64,0,0,23.3,0.672,32,1
5 | 1,89,66,23,94,28.1,0.167,21,0
6 | 0,137,40,35,168,43.1,2.288,33,1
7 | 5,116,74,0,0,25.6,0.201,30,0
8 | 3,78,50,32,88,31.0,0.248,26,1
9 | 10,115,0,0,0,35.3,0.134,29,0
10 | 2,197,70,45,543,30.5,0.158,53,1
11 | 8,125,96,0,0,0.0,0.232,54,1
12 | 4,110,92,0,0,37.6,0.191,30,0
13 | 10,168,74,0,0,38.0,0.537,34,1
14 | 10,139,80,0,0,27.1,1.441,57,0
15 | 1,189,60,23,846,30.1,0.398,59,1
16 | 5,166,72,19,175,25.8,0.587,51,1
17 | 7,100,0,0,0,30.0,0.484,32,1
18 | 0,118,84,47,230,45.8,0.551,31,1
19 | 7,107,74,0,0,29.6,0.254,31,1
20 | 1,103,30,38,83,43.3,0.183,33,0
21 | 1,115,70,30,96,34.6,0.529,32,1
22 | 3,126,88,41,235,39.3,0.704,27,0
23 | 8,99,84,0,0,35.4,0.388,50,0
24 | 7,196,90,0,0,39.8,0.451,41,1
25 | 9,119,80,35,0,29.0,0.263,29,1
26 | 11,143,94,33,146,36.6,0.254,51,1
27 | 10,125,70,26,115,31.1,0.205,41,1
28 | 7,147,76,0,0,39.4,0.257,43,1
29 | 1,97,66,15,140,23.2,0.487,22,0
30 | 13,145,82,19,110,22.2,0.245,57,0
31 | 5,117,92,0,0,34.1,0.337,38,0
32 | 5,109,75,26,0,36.0,0.546,60,0
33 | 3,158,76,36,245,31.6,0.851,28,1
34 | 3,88,58,11,54,24.8,0.267,22,0
35 | 6,92,92,0,0,19.9,0.188,28,0
36 | 10,122,78,31,0,27.6,0.512,45,0
37 | 4,103,60,33,192,24.0,0.966,33,0
38 | 11,138,76,0,0,33.2,0.420,35,0
39 | 9,102,76,37,0,32.9,0.665,46,1
40 | 2,90,68,42,0,38.2,0.503,27,1
41 | 4,111,72,47,207,37.1,1.390,56,1
42 | 3,180,64,25,70,34.0,0.271,26,0
43 | 7,133,84,0,0,40.2,0.696,37,0
44 | 7,106,92,18,0,22.7,0.235,48,0
45 | 9,171,110,24,240,45.4,0.721,54,1
46 | 7,159,64,0,0,27.4,0.294,40,0
47 | 0,180,66,39,0,42.0,1.893,25,1
48 | 1,146,56,0,0,29.7,0.564,29,0
49 | 2,71,70,27,0,28.0,0.586,22,0
50 | 7,103,66,32,0,39.1,0.344,31,1
51 | 7,105,0,0,0,0.0,0.305,24,0
52 | 1,103,80,11,82,19.4,0.491,22,0
53 | 1,101,50,15,36,24.2,0.526,26,0
54 | 5,88,66,21,23,24.4,0.342,30,0
55 | 8,176,90,34,300,33.7,0.467,58,1
56 | 7,150,66,42,342,34.7,0.718,42,0
57 | 1,73,50,10,0,23.0,0.248,21,0
58 | 7,187,68,39,304,37.7,0.254,41,1
59 | 0,100,88,60,110,46.8,0.962,31,0
60 | 0,146,82,0,0,40.5,1.781,44,0
61 | 0,105,64,41,142,41.5,0.173,22,0
62 | 2,84,0,0,0,0.0,0.304,21,0
63 | 8,133,72,0,0,32.9,0.270,39,1
64 | 5,44,62,0,0,25.0,0.587,36,0
65 | 2,141,58,34,128,25.4,0.699,24,0
66 | 7,114,66,0,0,32.8,0.258,42,1
67 | 5,99,74,27,0,29.0,0.203,32,0
68 | 0,109,88,30,0,32.5,0.855,38,1
69 | 2,109,92,0,0,42.7,0.845,54,0
70 | 1,95,66,13,38,19.6,0.334,25,0
71 | 4,146,85,27,100,28.9,0.189,27,0
72 | 2,100,66,20,90,32.9,0.867,28,1
73 | 5,139,64,35,140,28.6,0.411,26,0
74 | 13,126,90,0,0,43.4,0.583,42,1
75 | 4,129,86,20,270,35.1,0.231,23,0
76 | 1,79,75,30,0,32.0,0.396,22,0
77 | 1,0,48,20,0,24.7,0.140,22,0
78 | 7,62,78,0,0,32.6,0.391,41,0
79 | 5,95,72,33,0,37.7,0.370,27,0
80 | 0,131,0,0,0,43.2,0.270,26,1
81 | 2,112,66,22,0,25.0,0.307,24,0
82 | 3,113,44,13,0,22.4,0.140,22,0
83 | 2,74,0,0,0,0.0,0.102,22,0
84 | 7,83,78,26,71,29.3,0.767,36,0
85 | 0,101,65,28,0,24.6,0.237,22,0
86 | 5,137,108,0,0,48.8,0.227,37,1
87 | 2,110,74,29,125,32.4,0.698,27,0
88 | 13,106,72,54,0,36.6,0.178,45,0
89 | 2,100,68,25,71,38.5,0.324,26,0
90 | 15,136,70,32,110,37.1,0.153,43,1
91 | 1,107,68,19,0,26.5,0.165,24,0
92 | 1,80,55,0,0,19.1,0.258,21,0
93 | 4,123,80,15,176,32.0,0.443,34,0
94 | 7,81,78,40,48,46.7,0.261,42,0
95 | 4,134,72,0,0,23.8,0.277,60,1
96 | 2,142,82,18,64,24.7,0.761,21,0
97 | 6,144,72,27,228,33.9,0.255,40,0
98 | 2,92,62,28,0,31.6,0.130,24,0
99 | 1,71,48,18,76,20.4,0.323,22,0
100 | 6,93,50,30,64,28.7,0.356,23,0
101 | 1,122,90,51,220,49.7,0.325,31,1
102 | 1,163,72,0,0,39.0,1.222,33,1
103 | 1,151,60,0,0,26.1,0.179,22,0
104 | 0,125,96,0,0,22.5,0.262,21,0
105 | 1,81,72,18,40,26.6,0.283,24,0
106 | 2,85,65,0,0,39.6,0.930,27,0
107 | 1,126,56,29,152,28.7,0.801,21,0
108 | 1,96,122,0,0,22.4,0.207,27,0
109 | 4,144,58,28,140,29.5,0.287,37,0
110 | 3,83,58,31,18,34.3,0.336,25,0
111 | 0,95,85,25,36,37.4,0.247,24,1
112 | 3,171,72,33,135,33.3,0.199,24,1
113 | 8,155,62,26,495,34.0,0.543,46,1
114 | 1,89,76,34,37,31.2,0.192,23,0
115 | 4,76,62,0,0,34.0,0.391,25,0
116 | 7,160,54,32,175,30.5,0.588,39,1
117 | 4,146,92,0,0,31.2,0.539,61,1
118 | 5,124,74,0,0,34.0,0.220,38,1
119 | 5,78,48,0,0,33.7,0.654,25,0
120 | 4,97,60,23,0,28.2,0.443,22,0
121 | 4,99,76,15,51,23.2,0.223,21,0
122 | 0,162,76,56,100,53.2,0.759,25,1
123 | 6,111,64,39,0,34.2,0.260,24,0
124 | 2,107,74,30,100,33.6,0.404,23,0
125 | 5,132,80,0,0,26.8,0.186,69,0
126 | 0,113,76,0,0,33.3,0.278,23,1
127 | 1,88,30,42,99,55.0,0.496,26,1
128 | 3,120,70,30,135,42.9,0.452,30,0
129 | 1,118,58,36,94,33.3,0.261,23,0
130 | 1,117,88,24,145,34.5,0.403,40,1
131 | 0,105,84,0,0,27.9,0.741,62,1
132 | 4,173,70,14,168,29.7,0.361,33,1
133 | 9,122,56,0,0,33.3,1.114,33,1
134 | 3,170,64,37,225,34.5,0.356,30,1
135 | 8,84,74,31,0,38.3,0.457,39,0
136 | 2,96,68,13,49,21.1,0.647,26,0
137 | 2,125,60,20,140,33.8,0.088,31,0
138 | 0,100,70,26,50,30.8,0.597,21,0
139 | 0,93,60,25,92,28.7,0.532,22,0
140 | 0,129,80,0,0,31.2,0.703,29,0
141 | 5,105,72,29,325,36.9,0.159,28,0
142 | 3,128,78,0,0,21.1,0.268,55,0
143 | 5,106,82,30,0,39.5,0.286,38,0
144 | 2,108,52,26,63,32.5,0.318,22,0
145 | 10,108,66,0,0,32.4,0.272,42,1
146 | 4,154,62,31,284,32.8,0.237,23,0
147 | 0,102,75,23,0,0.0,0.572,21,0
148 | 9,57,80,37,0,32.8,0.096,41,0
149 | 2,106,64,35,119,30.5,1.400,34,0
150 | 5,147,78,0,0,33.7,0.218,65,0
151 | 2,90,70,17,0,27.3,0.085,22,0
152 | 1,136,74,50,204,37.4,0.399,24,0
153 | 4,114,65,0,0,21.9,0.432,37,0
154 | 9,156,86,28,155,34.3,1.189,42,1
155 | 1,153,82,42,485,40.6,0.687,23,0
156 | 8,188,78,0,0,47.9,0.137,43,1
157 | 7,152,88,44,0,50.0,0.337,36,1
158 | 2,99,52,15,94,24.6,0.637,21,0
159 | 1,109,56,21,135,25.2,0.833,23,0
160 | 2,88,74,19,53,29.0,0.229,22,0
161 | 17,163,72,41,114,40.9,0.817,47,1
162 | 4,151,90,38,0,29.7,0.294,36,0
163 | 7,102,74,40,105,37.2,0.204,45,0
164 | 0,114,80,34,285,44.2,0.167,27,0
165 | 2,100,64,23,0,29.7,0.368,21,0
166 | 0,131,88,0,0,31.6,0.743,32,1
167 | 6,104,74,18,156,29.9,0.722,41,1
168 | 3,148,66,25,0,32.5,0.256,22,0
169 | 4,120,68,0,0,29.6,0.709,34,0
170 | 4,110,66,0,0,31.9,0.471,29,0
171 | 3,111,90,12,78,28.4,0.495,29,0
172 | 6,102,82,0,0,30.8,0.180,36,1
173 | 6,134,70,23,130,35.4,0.542,29,1
174 | 2,87,0,23,0,28.9,0.773,25,0
175 | 1,79,60,42,48,43.5,0.678,23,0
176 | 2,75,64,24,55,29.7,0.370,33,0
177 | 8,179,72,42,130,32.7,0.719,36,1
178 | 6,85,78,0,0,31.2,0.382,42,0
179 | 0,129,110,46,130,67.1,0.319,26,1
180 | 5,143,78,0,0,45.0,0.190,47,0
181 | 5,130,82,0,0,39.1,0.956,37,1
182 | 6,87,80,0,0,23.2,0.084,32,0
183 | 0,119,64,18,92,34.9,0.725,23,0
184 | 1,0,74,20,23,27.7,0.299,21,0
185 | 5,73,60,0,0,26.8,0.268,27,0
186 | 4,141,74,0,0,27.6,0.244,40,0
187 | 7,194,68,28,0,35.9,0.745,41,1
188 | 8,181,68,36,495,30.1,0.615,60,1
189 | 1,128,98,41,58,32.0,1.321,33,1
190 | 8,109,76,39,114,27.9,0.640,31,1
191 | 5,139,80,35,160,31.6,0.361,25,1
192 | 3,111,62,0,0,22.6,0.142,21,0
193 | 9,123,70,44,94,33.1,0.374,40,0
194 | 7,159,66,0,0,30.4,0.383,36,1
195 | 11,135,0,0,0,52.3,0.578,40,1
196 | 8,85,55,20,0,24.4,0.136,42,0
197 | 5,158,84,41,210,39.4,0.395,29,1
198 | 1,105,58,0,0,24.3,0.187,21,0
199 | 3,107,62,13,48,22.9,0.678,23,1
200 | 4,109,64,44,99,34.8,0.905,26,1
201 | 4,148,60,27,318,30.9,0.150,29,1
202 | 0,113,80,16,0,31.0,0.874,21,0
203 | 1,138,82,0,0,40.1,0.236,28,0
204 | 0,108,68,20,0,27.3,0.787,32,0
205 | 2,99,70,16,44,20.4,0.235,27,0
206 | 6,103,72,32,190,37.7,0.324,55,0
207 | 5,111,72,28,0,23.9,0.407,27,0
208 | 8,196,76,29,280,37.5,0.605,57,1
209 | 5,162,104,0,0,37.7,0.151,52,1
210 | 1,96,64,27,87,33.2,0.289,21,0
211 | 7,184,84,33,0,35.5,0.355,41,1
212 | 2,81,60,22,0,27.7,0.290,25,0
213 | 0,147,85,54,0,42.8,0.375,24,0
214 | 7,179,95,31,0,34.2,0.164,60,0
215 | 0,140,65,26,130,42.6,0.431,24,1
216 | 9,112,82,32,175,34.2,0.260,36,1
217 | 12,151,70,40,271,41.8,0.742,38,1
218 | 5,109,62,41,129,35.8,0.514,25,1
219 | 6,125,68,30,120,30.0,0.464,32,0
220 | 5,85,74,22,0,29.0,1.224,32,1
221 | 5,112,66,0,0,37.8,0.261,41,1
222 | 0,177,60,29,478,34.6,1.072,21,1
223 | 2,158,90,0,0,31.6,0.805,66,1
224 | 7,119,0,0,0,25.2,0.209,37,0
225 | 7,142,60,33,190,28.8,0.687,61,0
226 | 1,100,66,15,56,23.6,0.666,26,0
227 | 1,87,78,27,32,34.6,0.101,22,0
228 | 0,101,76,0,0,35.7,0.198,26,0
229 | 3,162,52,38,0,37.2,0.652,24,1
230 | 4,197,70,39,744,36.7,2.329,31,0
231 | 0,117,80,31,53,45.2,0.089,24,0
232 | 4,142,86,0,0,44.0,0.645,22,1
233 | 6,134,80,37,370,46.2,0.238,46,1
234 | 1,79,80,25,37,25.4,0.583,22,0
235 | 4,122,68,0,0,35.0,0.394,29,0
236 | 3,74,68,28,45,29.7,0.293,23,0
237 | 4,171,72,0,0,43.6,0.479,26,1
238 | 7,181,84,21,192,35.9,0.586,51,1
239 | 0,179,90,27,0,44.1,0.686,23,1
240 | 9,164,84,21,0,30.8,0.831,32,1
241 | 0,104,76,0,0,18.4,0.582,27,0
242 | 1,91,64,24,0,29.2,0.192,21,0
243 | 4,91,70,32,88,33.1,0.446,22,0
244 | 3,139,54,0,0,25.6,0.402,22,1
245 | 6,119,50,22,176,27.1,1.318,33,1
246 | 2,146,76,35,194,38.2,0.329,29,0
247 | 9,184,85,15,0,30.0,1.213,49,1
248 | 10,122,68,0,0,31.2,0.258,41,0
249 | 0,165,90,33,680,52.3,0.427,23,0
250 | 9,124,70,33,402,35.4,0.282,34,0
251 | 1,111,86,19,0,30.1,0.143,23,0
252 | 9,106,52,0,0,31.2,0.380,42,0
253 | 2,129,84,0,0,28.0,0.284,27,0
254 | 2,90,80,14,55,24.4,0.249,24,0
255 | 0,86,68,32,0,35.8,0.238,25,0
256 | 12,92,62,7,258,27.6,0.926,44,1
257 | 1,113,64,35,0,33.6,0.543,21,1
258 | 3,111,56,39,0,30.1,0.557,30,0
259 | 2,114,68,22,0,28.7,0.092,25,0
260 | 1,193,50,16,375,25.9,0.655,24,0
261 | 11,155,76,28,150,33.3,1.353,51,1
262 | 3,191,68,15,130,30.9,0.299,34,0
263 | 3,141,0,0,0,30.0,0.761,27,1
264 | 4,95,70,32,0,32.1,0.612,24,0
265 | 3,142,80,15,0,32.4,0.200,63,0
266 | 4,123,62,0,0,32.0,0.226,35,1
267 | 5,96,74,18,67,33.6,0.997,43,0
268 | 0,138,0,0,0,36.3,0.933,25,1
269 | 2,128,64,42,0,40.0,1.101,24,0
270 | 0,102,52,0,0,25.1,0.078,21,0
271 | 2,146,0,0,0,27.5,0.240,28,1
272 | 10,101,86,37,0,45.6,1.136,38,1
273 | 2,108,62,32,56,25.2,0.128,21,0
274 | 3,122,78,0,0,23.0,0.254,40,0
275 | 1,71,78,50,45,33.2,0.422,21,0
276 | 13,106,70,0,0,34.2,0.251,52,0
277 | 2,100,70,52,57,40.5,0.677,25,0
278 | 7,106,60,24,0,26.5,0.296,29,1
279 | 0,104,64,23,116,27.8,0.454,23,0
280 | 5,114,74,0,0,24.9,0.744,57,0
281 | 2,108,62,10,278,25.3,0.881,22,0
282 | 0,146,70,0,0,37.9,0.334,28,1
283 | 10,129,76,28,122,35.9,0.280,39,0
284 | 7,133,88,15,155,32.4,0.262,37,0
285 | 7,161,86,0,0,30.4,0.165,47,1
286 | 2,108,80,0,0,27.0,0.259,52,1
287 | 7,136,74,26,135,26.0,0.647,51,0
288 | 5,155,84,44,545,38.7,0.619,34,0
289 | 1,119,86,39,220,45.6,0.808,29,1
290 | 4,96,56,17,49,20.8,0.340,26,0
291 | 5,108,72,43,75,36.1,0.263,33,0
292 | 0,78,88,29,40,36.9,0.434,21,0
293 | 0,107,62,30,74,36.6,0.757,25,1
294 | 2,128,78,37,182,43.3,1.224,31,1
295 | 1,128,48,45,194,40.5,0.613,24,1
296 | 0,161,50,0,0,21.9,0.254,65,0
297 | 6,151,62,31,120,35.5,0.692,28,0
298 | 2,146,70,38,360,28.0,0.337,29,1
299 | 0,126,84,29,215,30.7,0.520,24,0
300 | 14,100,78,25,184,36.6,0.412,46,1
301 | 8,112,72,0,0,23.6,0.840,58,0
302 | 0,167,0,0,0,32.3,0.839,30,1
303 | 2,144,58,33,135,31.6,0.422,25,1
304 | 5,77,82,41,42,35.8,0.156,35,0
305 | 5,115,98,0,0,52.9,0.209,28,1
306 | 3,150,76,0,0,21.0,0.207,37,0
307 | 2,120,76,37,105,39.7,0.215,29,0
308 | 10,161,68,23,132,25.5,0.326,47,1
309 | 0,137,68,14,148,24.8,0.143,21,0
310 | 0,128,68,19,180,30.5,1.391,25,1
311 | 2,124,68,28,205,32.9,0.875,30,1
312 | 6,80,66,30,0,26.2,0.313,41,0
313 | 0,106,70,37,148,39.4,0.605,22,0
314 | 2,155,74,17,96,26.6,0.433,27,1
315 | 3,113,50,10,85,29.5,0.626,25,0
316 | 7,109,80,31,0,35.9,1.127,43,1
317 | 2,112,68,22,94,34.1,0.315,26,0
318 | 3,99,80,11,64,19.3,0.284,30,0
319 | 3,182,74,0,0,30.5,0.345,29,1
320 | 3,115,66,39,140,38.1,0.150,28,0
321 | 6,194,78,0,0,23.5,0.129,59,1
322 | 4,129,60,12,231,27.5,0.527,31,0
323 | 3,112,74,30,0,31.6,0.197,25,1
324 | 0,124,70,20,0,27.4,0.254,36,1
325 | 13,152,90,33,29,26.8,0.731,43,1
326 | 2,112,75,32,0,35.7,0.148,21,0
327 | 1,157,72,21,168,25.6,0.123,24,0
328 | 1,122,64,32,156,35.1,0.692,30,1
329 | 10,179,70,0,0,35.1,0.200,37,0
330 | 2,102,86,36,120,45.5,0.127,23,1
331 | 6,105,70,32,68,30.8,0.122,37,0
332 | 8,118,72,19,0,23.1,1.476,46,0
333 | 2,87,58,16,52,32.7,0.166,25,0
334 | 1,180,0,0,0,43.3,0.282,41,1
335 | 12,106,80,0,0,23.6,0.137,44,0
336 | 1,95,60,18,58,23.9,0.260,22,0
337 | 0,165,76,43,255,47.9,0.259,26,0
338 | 0,117,0,0,0,33.8,0.932,44,0
339 | 5,115,76,0,0,31.2,0.343,44,1
340 | 9,152,78,34,171,34.2,0.893,33,1
341 | 7,178,84,0,0,39.9,0.331,41,1
342 | 1,130,70,13,105,25.9,0.472,22,0
343 | 1,95,74,21,73,25.9,0.673,36,0
344 | 1,0,68,35,0,32.0,0.389,22,0
345 | 5,122,86,0,0,34.7,0.290,33,0
346 | 8,95,72,0,0,36.8,0.485,57,0
347 | 8,126,88,36,108,38.5,0.349,49,0
348 | 1,139,46,19,83,28.7,0.654,22,0
349 | 3,116,0,0,0,23.5,0.187,23,0
350 | 3,99,62,19,74,21.8,0.279,26,0
351 | 5,0,80,32,0,41.0,0.346,37,1
352 | 4,92,80,0,0,42.2,0.237,29,0
353 | 4,137,84,0,0,31.2,0.252,30,0
354 | 3,61,82,28,0,34.4,0.243,46,0
355 | 1,90,62,12,43,27.2,0.580,24,0
356 | 3,90,78,0,0,42.7,0.559,21,0
357 | 9,165,88,0,0,30.4,0.302,49,1
358 | 1,125,50,40,167,33.3,0.962,28,1
359 | 13,129,0,30,0,39.9,0.569,44,1
360 | 12,88,74,40,54,35.3,0.378,48,0
361 | 1,196,76,36,249,36.5,0.875,29,1
362 | 5,189,64,33,325,31.2,0.583,29,1
363 | 5,158,70,0,0,29.8,0.207,63,0
364 | 5,103,108,37,0,39.2,0.305,65,0
365 | 4,146,78,0,0,38.5,0.520,67,1
366 | 4,147,74,25,293,34.9,0.385,30,0
367 | 5,99,54,28,83,34.0,0.499,30,0
368 | 6,124,72,0,0,27.6,0.368,29,1
369 | 0,101,64,17,0,21.0,0.252,21,0
370 | 3,81,86,16,66,27.5,0.306,22,0
371 | 1,133,102,28,140,32.8,0.234,45,1
372 | 3,173,82,48,465,38.4,2.137,25,1
373 | 0,118,64,23,89,0.0,1.731,21,0
374 | 0,84,64,22,66,35.8,0.545,21,0
375 | 2,105,58,40,94,34.9,0.225,25,0
376 | 2,122,52,43,158,36.2,0.816,28,0
377 | 12,140,82,43,325,39.2,0.528,58,1
378 | 0,98,82,15,84,25.2,0.299,22,0
379 | 1,87,60,37,75,37.2,0.509,22,0
380 | 4,156,75,0,0,48.3,0.238,32,1
381 | 0,93,100,39,72,43.4,1.021,35,0
382 | 1,107,72,30,82,30.8,0.821,24,0
383 | 0,105,68,22,0,20.0,0.236,22,0
384 | 1,109,60,8,182,25.4,0.947,21,0
385 | 1,90,62,18,59,25.1,1.268,25,0
386 | 1,125,70,24,110,24.3,0.221,25,0
387 | 1,119,54,13,50,22.3,0.205,24,0
388 | 5,116,74,29,0,32.3,0.660,35,1
389 | 8,105,100,36,0,43.3,0.239,45,1
390 | 5,144,82,26,285,32.0,0.452,58,1
391 | 3,100,68,23,81,31.6,0.949,28,0
392 | 1,100,66,29,196,32.0,0.444,42,0
393 | 5,166,76,0,0,45.7,0.340,27,1
394 | 1,131,64,14,415,23.7,0.389,21,0
395 | 4,116,72,12,87,22.1,0.463,37,0
396 | 4,158,78,0,0,32.9,0.803,31,1
397 | 2,127,58,24,275,27.7,1.600,25,0
398 | 3,96,56,34,115,24.7,0.944,39,0
399 | 0,131,66,40,0,34.3,0.196,22,1
400 | 3,82,70,0,0,21.1,0.389,25,0
401 | 3,193,70,31,0,34.9,0.241,25,1
402 | 4,95,64,0,0,32.0,0.161,31,1
403 | 6,137,61,0,0,24.2,0.151,55,0
404 | 5,136,84,41,88,35.0,0.286,35,1
405 | 9,72,78,25,0,31.6,0.280,38,0
406 | 5,168,64,0,0,32.9,0.135,41,1
407 | 2,123,48,32,165,42.1,0.520,26,0
408 | 4,115,72,0,0,28.9,0.376,46,1
409 | 0,101,62,0,0,21.9,0.336,25,0
410 | 8,197,74,0,0,25.9,1.191,39,1
411 | 1,172,68,49,579,42.4,0.702,28,1
412 | 6,102,90,39,0,35.7,0.674,28,0
413 | 1,112,72,30,176,34.4,0.528,25,0
414 | 1,143,84,23,310,42.4,1.076,22,0
415 | 1,143,74,22,61,26.2,0.256,21,0
416 | 0,138,60,35,167,34.6,0.534,21,1
417 | 3,173,84,33,474,35.7,0.258,22,1
418 | 1,97,68,21,0,27.2,1.095,22,0
419 | 4,144,82,32,0,38.5,0.554,37,1
420 | 1,83,68,0,0,18.2,0.624,27,0
421 | 3,129,64,29,115,26.4,0.219,28,1
422 | 1,119,88,41,170,45.3,0.507,26,0
423 | 2,94,68,18,76,26.0,0.561,21,0
424 | 0,102,64,46,78,40.6,0.496,21,0
425 | 2,115,64,22,0,30.8,0.421,21,0
426 | 8,151,78,32,210,42.9,0.516,36,1
427 | 4,184,78,39,277,37.0,0.264,31,1
428 | 0,94,0,0,0,0.0,0.256,25,0
429 | 1,181,64,30,180,34.1,0.328,38,1
430 | 0,135,94,46,145,40.6,0.284,26,0
431 | 1,95,82,25,180,35.0,0.233,43,1
432 | 2,99,0,0,0,22.2,0.108,23,0
433 | 3,89,74,16,85,30.4,0.551,38,0
434 | 1,80,74,11,60,30.0,0.527,22,0
435 | 2,139,75,0,0,25.6,0.167,29,0
436 | 1,90,68,8,0,24.5,1.138,36,0
437 | 0,141,0,0,0,42.4,0.205,29,1
438 | 12,140,85,33,0,37.4,0.244,41,0
439 | 5,147,75,0,0,29.9,0.434,28,0
440 | 1,97,70,15,0,18.2,0.147,21,0
441 | 6,107,88,0,0,36.8,0.727,31,0
442 | 0,189,104,25,0,34.3,0.435,41,1
443 | 2,83,66,23,50,32.2,0.497,22,0
444 | 4,117,64,27,120,33.2,0.230,24,0
445 | 8,108,70,0,0,30.5,0.955,33,1
446 | 4,117,62,12,0,29.7,0.380,30,1
447 | 0,180,78,63,14,59.4,2.420,25,1
448 | 1,100,72,12,70,25.3,0.658,28,0
449 | 0,95,80,45,92,36.5,0.330,26,0
450 | 0,104,64,37,64,33.6,0.510,22,1
451 | 0,120,74,18,63,30.5,0.285,26,0
452 | 1,82,64,13,95,21.2,0.415,23,0
453 | 2,134,70,0,0,28.9,0.542,23,1
454 | 0,91,68,32,210,39.9,0.381,25,0
455 | 2,119,0,0,0,19.6,0.832,72,0
456 | 2,100,54,28,105,37.8,0.498,24,0
457 | 14,175,62,30,0,33.6,0.212,38,1
458 | 1,135,54,0,0,26.7,0.687,62,0
459 | 5,86,68,28,71,30.2,0.364,24,0
460 | 10,148,84,48,237,37.6,1.001,51,1
461 | 9,134,74,33,60,25.9,0.460,81,0
462 | 9,120,72,22,56,20.8,0.733,48,0
463 | 1,71,62,0,0,21.8,0.416,26,0
464 | 8,74,70,40,49,35.3,0.705,39,0
465 | 5,88,78,30,0,27.6,0.258,37,0
466 | 10,115,98,0,0,24.0,1.022,34,0
467 | 0,124,56,13,105,21.8,0.452,21,0
468 | 0,74,52,10,36,27.8,0.269,22,0
469 | 0,97,64,36,100,36.8,0.600,25,0
470 | 8,120,0,0,0,30.0,0.183,38,1
471 | 6,154,78,41,140,46.1,0.571,27,0
472 | 1,144,82,40,0,41.3,0.607,28,0
473 | 0,137,70,38,0,33.2,0.170,22,0
474 | 0,119,66,27,0,38.8,0.259,22,0
475 | 7,136,90,0,0,29.9,0.210,50,0
476 | 4,114,64,0,0,28.9,0.126,24,0
477 | 0,137,84,27,0,27.3,0.231,59,0
478 | 2,105,80,45,191,33.7,0.711,29,1
479 | 7,114,76,17,110,23.8,0.466,31,0
480 | 8,126,74,38,75,25.9,0.162,39,0
481 | 4,132,86,31,0,28.0,0.419,63,0
482 | 3,158,70,30,328,35.5,0.344,35,1
483 | 0,123,88,37,0,35.2,0.197,29,0
484 | 4,85,58,22,49,27.8,0.306,28,0
485 | 0,84,82,31,125,38.2,0.233,23,0
486 | 0,145,0,0,0,44.2,0.630,31,1
487 | 0,135,68,42,250,42.3,0.365,24,1
488 | 1,139,62,41,480,40.7,0.536,21,0
489 | 0,173,78,32,265,46.5,1.159,58,0
490 | 4,99,72,17,0,25.6,0.294,28,0
491 | 8,194,80,0,0,26.1,0.551,67,0
492 | 2,83,65,28,66,36.8,0.629,24,0
493 | 2,89,90,30,0,33.5,0.292,42,0
494 | 4,99,68,38,0,32.8,0.145,33,0
495 | 4,125,70,18,122,28.9,1.144,45,1
496 | 3,80,0,0,0,0.0,0.174,22,0
497 | 6,166,74,0,0,26.6,0.304,66,0
498 | 5,110,68,0,0,26.0,0.292,30,0
499 | 2,81,72,15,76,30.1,0.547,25,0
500 | 7,195,70,33,145,25.1,0.163,55,1
501 | 6,154,74,32,193,29.3,0.839,39,0
502 | 2,117,90,19,71,25.2,0.313,21,0
503 | 3,84,72,32,0,37.2,0.267,28,0
504 | 6,0,68,41,0,39.0,0.727,41,1
505 | 7,94,64,25,79,33.3,0.738,41,0
506 | 3,96,78,39,0,37.3,0.238,40,0
507 | 10,75,82,0,0,33.3,0.263,38,0
508 | 0,180,90,26,90,36.5,0.314,35,1
509 | 1,130,60,23,170,28.6,0.692,21,0
510 | 2,84,50,23,76,30.4,0.968,21,0
511 | 8,120,78,0,0,25.0,0.409,64,0
512 | 12,84,72,31,0,29.7,0.297,46,1
513 | 0,139,62,17,210,22.1,0.207,21,0
514 | 9,91,68,0,0,24.2,0.200,58,0
515 | 2,91,62,0,0,27.3,0.525,22,0
516 | 3,99,54,19,86,25.6,0.154,24,0
517 | 3,163,70,18,105,31.6,0.268,28,1
518 | 9,145,88,34,165,30.3,0.771,53,1
519 | 7,125,86,0,0,37.6,0.304,51,0
520 | 13,76,60,0,0,32.8,0.180,41,0
521 | 6,129,90,7,326,19.6,0.582,60,0
522 | 2,68,70,32,66,25.0,0.187,25,0
523 | 3,124,80,33,130,33.2,0.305,26,0
524 | 6,114,0,0,0,0.0,0.189,26,0
525 | 9,130,70,0,0,34.2,0.652,45,1
526 | 3,125,58,0,0,31.6,0.151,24,0
527 | 3,87,60,18,0,21.8,0.444,21,0
528 | 1,97,64,19,82,18.2,0.299,21,0
529 | 3,116,74,15,105,26.3,0.107,24,0
530 | 0,117,66,31,188,30.8,0.493,22,0
531 | 0,111,65,0,0,24.6,0.660,31,0
532 | 2,122,60,18,106,29.8,0.717,22,0
533 | 0,107,76,0,0,45.3,0.686,24,0
534 | 1,86,66,52,65,41.3,0.917,29,0
535 | 6,91,0,0,0,29.8,0.501,31,0
536 | 1,77,56,30,56,33.3,1.251,24,0
537 | 4,132,0,0,0,32.9,0.302,23,1
538 | 0,105,90,0,0,29.6,0.197,46,0
539 | 0,57,60,0,0,21.7,0.735,67,0
540 | 0,127,80,37,210,36.3,0.804,23,0
541 | 3,129,92,49,155,36.4,0.968,32,1
542 | 8,100,74,40,215,39.4,0.661,43,1
543 | 3,128,72,25,190,32.4,0.549,27,1
544 | 10,90,85,32,0,34.9,0.825,56,1
545 | 4,84,90,23,56,39.5,0.159,25,0
546 | 1,88,78,29,76,32.0,0.365,29,0
547 | 8,186,90,35,225,34.5,0.423,37,1
548 | 5,187,76,27,207,43.6,1.034,53,1
549 | 4,131,68,21,166,33.1,0.160,28,0
550 | 1,164,82,43,67,32.8,0.341,50,0
551 | 4,189,110,31,0,28.5,0.680,37,0
552 | 1,116,70,28,0,27.4,0.204,21,0
553 | 3,84,68,30,106,31.9,0.591,25,0
554 | 6,114,88,0,0,27.8,0.247,66,0
555 | 1,88,62,24,44,29.9,0.422,23,0
556 | 1,84,64,23,115,36.9,0.471,28,0
557 | 7,124,70,33,215,25.5,0.161,37,0
558 | 1,97,70,40,0,38.1,0.218,30,0
559 | 8,110,76,0,0,27.8,0.237,58,0
560 | 11,103,68,40,0,46.2,0.126,42,0
561 | 11,85,74,0,0,30.1,0.300,35,0
562 | 6,125,76,0,0,33.8,0.121,54,1
563 | 0,198,66,32,274,41.3,0.502,28,1
564 | 1,87,68,34,77,37.6,0.401,24,0
565 | 6,99,60,19,54,26.9,0.497,32,0
566 | 0,91,80,0,0,32.4,0.601,27,0
567 | 2,95,54,14,88,26.1,0.748,22,0
568 | 1,99,72,30,18,38.6,0.412,21,0
569 | 6,92,62,32,126,32.0,0.085,46,0
570 | 4,154,72,29,126,31.3,0.338,37,0
571 | 0,121,66,30,165,34.3,0.203,33,1
572 | 3,78,70,0,0,32.5,0.270,39,0
573 | 2,130,96,0,0,22.6,0.268,21,0
574 | 3,111,58,31,44,29.5,0.430,22,0
575 | 2,98,60,17,120,34.7,0.198,22,0
576 | 1,143,86,30,330,30.1,0.892,23,0
577 | 1,119,44,47,63,35.5,0.280,25,0
578 | 6,108,44,20,130,24.0,0.813,35,0
579 | 2,118,80,0,0,42.9,0.693,21,1
580 | 10,133,68,0,0,27.0,0.245,36,0
581 | 2,197,70,99,0,34.7,0.575,62,1
582 | 0,151,90,46,0,42.1,0.371,21,1
583 | 6,109,60,27,0,25.0,0.206,27,0
584 | 12,121,78,17,0,26.5,0.259,62,0
585 | 8,100,76,0,0,38.7,0.190,42,0
586 | 8,124,76,24,600,28.7,0.687,52,1
587 | 1,93,56,11,0,22.5,0.417,22,0
588 | 8,143,66,0,0,34.9,0.129,41,1
589 | 6,103,66,0,0,24.3,0.249,29,0
590 | 3,176,86,27,156,33.3,1.154,52,1
591 | 0,73,0,0,0,21.1,0.342,25,0
592 | 11,111,84,40,0,46.8,0.925,45,1
593 | 2,112,78,50,140,39.4,0.175,24,0
594 | 3,132,80,0,0,34.4,0.402,44,1
595 | 2,82,52,22,115,28.5,1.699,25,0
596 | 6,123,72,45,230,33.6,0.733,34,0
597 | 0,188,82,14,185,32.0,0.682,22,1
598 | 0,67,76,0,0,45.3,0.194,46,0
599 | 1,89,24,19,25,27.8,0.559,21,0
600 | 1,173,74,0,0,36.8,0.088,38,1
601 | 1,109,38,18,120,23.1,0.407,26,0
602 | 1,108,88,19,0,27.1,0.400,24,0
603 | 6,96,0,0,0,23.7,0.190,28,0
604 | 1,124,74,36,0,27.8,0.100,30,0
605 | 7,150,78,29,126,35.2,0.692,54,1
606 | 4,183,0,0,0,28.4,0.212,36,1
607 | 1,124,60,32,0,35.8,0.514,21,0
608 | 1,181,78,42,293,40.0,1.258,22,1
609 | 1,92,62,25,41,19.5,0.482,25,0
610 | 0,152,82,39,272,41.5,0.270,27,0
611 | 1,111,62,13,182,24.0,0.138,23,0
612 | 3,106,54,21,158,30.9,0.292,24,0
613 | 3,174,58,22,194,32.9,0.593,36,1
614 | 7,168,88,42,321,38.2,0.787,40,1
615 | 6,105,80,28,0,32.5,0.878,26,0
616 | 11,138,74,26,144,36.1,0.557,50,1
617 | 3,106,72,0,0,25.8,0.207,27,0
618 | 6,117,96,0,0,28.7,0.157,30,0
619 | 2,68,62,13,15,20.1,0.257,23,0
620 | 9,112,82,24,0,28.2,1.282,50,1
621 | 0,119,0,0,0,32.4,0.141,24,1
622 | 2,112,86,42,160,38.4,0.246,28,0
623 | 2,92,76,20,0,24.2,1.698,28,0
624 | 6,183,94,0,0,40.8,1.461,45,0
625 | 0,94,70,27,115,43.5,0.347,21,0
626 | 2,108,64,0,0,30.8,0.158,21,0
627 | 4,90,88,47,54,37.7,0.362,29,0
628 | 0,125,68,0,0,24.7,0.206,21,0
629 | 0,132,78,0,0,32.4,0.393,21,0
630 | 5,128,80,0,0,34.6,0.144,45,0
631 | 4,94,65,22,0,24.7,0.148,21,0
632 | 7,114,64,0,0,27.4,0.732,34,1
633 | 0,102,78,40,90,34.5,0.238,24,0
634 | 2,111,60,0,0,26.2,0.343,23,0
635 | 1,128,82,17,183,27.5,0.115,22,0
636 | 10,92,62,0,0,25.9,0.167,31,0
637 | 13,104,72,0,0,31.2,0.465,38,1
638 | 5,104,74,0,0,28.8,0.153,48,0
639 | 2,94,76,18,66,31.6,0.649,23,0
640 | 7,97,76,32,91,40.9,0.871,32,1
641 | 1,100,74,12,46,19.5,0.149,28,0
642 | 0,102,86,17,105,29.3,0.695,27,0
643 | 4,128,70,0,0,34.3,0.303,24,0
644 | 6,147,80,0,0,29.5,0.178,50,1
645 | 4,90,0,0,0,28.0,0.610,31,0
646 | 3,103,72,30,152,27.6,0.730,27,0
647 | 2,157,74,35,440,39.4,0.134,30,0
648 | 1,167,74,17,144,23.4,0.447,33,1
649 | 0,179,50,36,159,37.8,0.455,22,1
650 | 11,136,84,35,130,28.3,0.260,42,1
651 | 0,107,60,25,0,26.4,0.133,23,0
652 | 1,91,54,25,100,25.2,0.234,23,0
653 | 1,117,60,23,106,33.8,0.466,27,0
654 | 5,123,74,40,77,34.1,0.269,28,0
655 | 2,120,54,0,0,26.8,0.455,27,0
656 | 1,106,70,28,135,34.2,0.142,22,0
657 | 2,155,52,27,540,38.7,0.240,25,1
658 | 2,101,58,35,90,21.8,0.155,22,0
659 | 1,120,80,48,200,38.9,1.162,41,0
660 | 11,127,106,0,0,39.0,0.190,51,0
661 | 3,80,82,31,70,34.2,1.292,27,1
662 | 10,162,84,0,0,27.7,0.182,54,0
663 | 1,199,76,43,0,42.9,1.394,22,1
664 | 8,167,106,46,231,37.6,0.165,43,1
665 | 9,145,80,46,130,37.9,0.637,40,1
666 | 6,115,60,39,0,33.7,0.245,40,1
667 | 1,112,80,45,132,34.8,0.217,24,0
668 | 4,145,82,18,0,32.5,0.235,70,1
669 | 10,111,70,27,0,27.5,0.141,40,1
670 | 6,98,58,33,190,34.0,0.430,43,0
671 | 9,154,78,30,100,30.9,0.164,45,0
672 | 6,165,68,26,168,33.6,0.631,49,0
673 | 1,99,58,10,0,25.4,0.551,21,0
674 | 10,68,106,23,49,35.5,0.285,47,0
675 | 3,123,100,35,240,57.3,0.880,22,0
676 | 8,91,82,0,0,35.6,0.587,68,0
677 | 6,195,70,0,0,30.9,0.328,31,1
678 | 9,156,86,0,0,24.8,0.230,53,1
679 | 0,93,60,0,0,35.3,0.263,25,0
680 | 3,121,52,0,0,36.0,0.127,25,1
681 | 2,101,58,17,265,24.2,0.614,23,0
682 | 2,56,56,28,45,24.2,0.332,22,0
683 | 0,162,76,36,0,49.6,0.364,26,1
684 | 0,95,64,39,105,44.6,0.366,22,0
685 | 4,125,80,0,0,32.3,0.536,27,1
686 | 5,136,82,0,0,0.0,0.640,69,0
687 | 2,129,74,26,205,33.2,0.591,25,0
688 | 3,130,64,0,0,23.1,0.314,22,0
689 | 1,107,50,19,0,28.3,0.181,29,0
690 | 1,140,74,26,180,24.1,0.828,23,0
691 | 1,144,82,46,180,46.1,0.335,46,1
692 | 8,107,80,0,0,24.6,0.856,34,0
693 | 13,158,114,0,0,42.3,0.257,44,1
694 | 2,121,70,32,95,39.1,0.886,23,0
695 | 7,129,68,49,125,38.5,0.439,43,1
696 | 2,90,60,0,0,23.5,0.191,25,0
697 | 7,142,90,24,480,30.4,0.128,43,1
698 | 3,169,74,19,125,29.9,0.268,31,1
699 | 0,99,0,0,0,25.0,0.253,22,0
700 | 4,127,88,11,155,34.5,0.598,28,0
701 | 4,118,70,0,0,44.5,0.904,26,0
702 | 2,122,76,27,200,35.9,0.483,26,0
703 | 6,125,78,31,0,27.6,0.565,49,1
704 | 1,168,88,29,0,35.0,0.905,52,1
705 | 2,129,0,0,0,38.5,0.304,41,0
706 | 4,110,76,20,100,28.4,0.118,27,0
707 | 6,80,80,36,0,39.8,0.177,28,0
708 | 10,115,0,0,0,0.0,0.261,30,1
709 | 2,127,46,21,335,34.4,0.176,22,0
710 | 9,164,78,0,0,32.8,0.148,45,1
711 | 2,93,64,32,160,38.0,0.674,23,1
712 | 3,158,64,13,387,31.2,0.295,24,0
713 | 5,126,78,27,22,29.6,0.439,40,0
714 | 10,129,62,36,0,41.2,0.441,38,1
715 | 0,134,58,20,291,26.4,0.352,21,0
716 | 3,102,74,0,0,29.5,0.121,32,0
717 | 7,187,50,33,392,33.9,0.826,34,1
718 | 3,173,78,39,185,33.8,0.970,31,1
719 | 10,94,72,18,0,23.1,0.595,56,0
720 | 1,108,60,46,178,35.5,0.415,24,0
721 | 5,97,76,27,0,35.6,0.378,52,1
722 | 4,83,86,19,0,29.3,0.317,34,0
723 | 1,114,66,36,200,38.1,0.289,21,0
724 | 1,149,68,29,127,29.3,0.349,42,1
725 | 5,117,86,30,105,39.1,0.251,42,0
726 | 1,111,94,0,0,32.8,0.265,45,0
727 | 4,112,78,40,0,39.4,0.236,38,0
728 | 1,116,78,29,180,36.1,0.496,25,0
729 | 0,141,84,26,0,32.4,0.433,22,0
730 | 2,175,88,0,0,22.9,0.326,22,0
731 | 2,92,52,0,0,30.1,0.141,22,0
732 | 3,130,78,23,79,28.4,0.323,34,1
733 | 8,120,86,0,0,28.4,0.259,22,1
734 | 2,174,88,37,120,44.5,0.646,24,1
735 | 2,106,56,27,165,29.0,0.426,22,0
736 | 2,105,75,0,0,23.3,0.560,53,0
737 | 4,95,60,32,0,35.4,0.284,28,0
738 | 0,126,86,27,120,27.4,0.515,21,0
739 | 8,65,72,23,0,32.0,0.600,42,0
740 | 2,99,60,17,160,36.6,0.453,21,0
741 | 1,102,74,0,0,39.5,0.293,42,1
742 | 11,120,80,37,150,42.3,0.785,48,1
743 | 3,102,44,20,94,30.8,0.400,26,0
744 | 1,109,58,18,116,28.5,0.219,22,0
745 | 9,140,94,0,0,32.7,0.734,45,1
746 | 13,153,88,37,140,40.6,1.174,39,0
747 | 12,100,84,33,105,30.0,0.488,46,0
748 | 1,147,94,41,0,49.3,0.358,27,1
749 | 1,81,74,41,57,46.3,1.096,32,0
750 | 3,187,70,22,200,36.4,0.408,36,1
751 | 6,162,62,0,0,24.3,0.178,50,1
752 | 4,136,70,0,0,31.2,1.182,22,1
753 | 1,121,78,39,74,39.0,0.261,28,0
754 | 3,108,62,24,0,26.0,0.223,25,0
755 | 0,181,88,44,510,43.3,0.222,26,1
756 | 8,154,78,32,0,32.4,0.443,45,1
757 | 1,128,88,39,110,36.5,1.057,37,1
758 | 7,137,90,41,0,32.0,0.391,39,0
759 | 0,123,72,0,0,36.3,0.258,52,1
760 | 1,106,76,0,0,37.5,0.197,26,0
761 | 6,190,92,0,0,35.5,0.278,66,1
762 | 2,88,58,26,16,28.4,0.766,22,0
763 | 9,170,74,31,0,44.0,0.403,43,1
764 | 9,89,62,0,0,22.5,0.142,33,0
765 | 10,101,76,48,180,32.9,0.171,63,0
766 | 2,122,70,27,0,36.8,0.340,27,0
767 | 5,121,72,23,112,26.2,0.245,30,0
768 | 1,126,60,0,0,30.1,0.349,47,1
769 | 1,93,70,31,0,30.4,0.315,23,0
--------------------------------------------------------------------------------
/Part 07 - Constructing a Multi-Class Classifier Using Neural Network with Python (Tensorflow & Keras)/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 08 - Constructing a Binary Classifier Using SVM with Python/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 09 - Constructing Multi-Class Classifier Using SVM with Python/Ex03-SVM_multiple_class.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Support Vector Machine Tutorial.\n",
8 | "## Multi-class classifier\n",
9 | "\n"
10 | ]
11 | },
12 | {
13 | "cell_type": "code",
14 | "execution_count": null,
15 | "metadata": {},
16 | "outputs": [],
17 | "source": []
18 | },
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {},
22 | "source": [
23 | "# Iris Dataset\n",
24 | "## https://archive.ics.uci.edu/ml/datasets/iris\n",
25 | "# Fields description follow:\n",
26 | "## 1. sepal length in cm\n",
27 | "## 2. sepal width in cm\n",
28 | "## 3. petal length in cm\n",
29 | "## 4. petal width in cm\n",
30 | "## 5. class:\n",
31 | "## -- Iris Setosa\n",
32 | "## -- Iris Versicolour\n",
33 | "## -- Iris Virginica\n",
34 | "\n"
35 | ]
36 | },
37 | {
38 | "cell_type": "code",
39 | "execution_count": 1,
40 | "metadata": {},
41 | "outputs": [],
42 | "source": [
43 | "from sklearn import svm\n",
44 | "from sklearn.model_selection import train_test_split\n",
45 | "\n",
46 | "import matplotlib.pyplot as plt # for plotting data and creating different charts.\n",
47 | "import numpy as np # for math and arrays\n",
48 | "import pandas as pd # data from for the data.\n",
49 | "import seaborn as sns # for plotting."
50 | ]
51 | },
52 | {
53 | "cell_type": "code",
54 | "execution_count": 2,
55 | "metadata": {},
56 | "outputs": [
57 | {
58 | "data": {
59 | "text/html": [
60 | "
\n",
61 | "\n",
74 | "
\n",
75 | " \n",
76 | " \n",
77 | " | \n",
78 | " sepal length (cm) | \n",
79 | " sepal width (cm) | \n",
80 | " petal length (cm) | \n",
81 | " petal width (cm) | \n",
82 | " target | \n",
83 | "
\n",
84 | " \n",
85 | " \n",
86 | " \n",
87 | " 0 | \n",
88 | " 5.1 | \n",
89 | " 3.5 | \n",
90 | " 1.4 | \n",
91 | " 0.2 | \n",
92 | " 0.0 | \n",
93 | "
\n",
94 | " \n",
95 | " 1 | \n",
96 | " 4.9 | \n",
97 | " 3.0 | \n",
98 | " 1.4 | \n",
99 | " 0.2 | \n",
100 | " 0.0 | \n",
101 | "
\n",
102 | " \n",
103 | " 2 | \n",
104 | " 4.7 | \n",
105 | " 3.2 | \n",
106 | " 1.3 | \n",
107 | " 0.2 | \n",
108 | " 0.0 | \n",
109 | "
\n",
110 | " \n",
111 | " 3 | \n",
112 | " 4.6 | \n",
113 | " 3.1 | \n",
114 | " 1.5 | \n",
115 | " 0.2 | \n",
116 | " 0.0 | \n",
117 | "
\n",
118 | " \n",
119 | " 4 | \n",
120 | " 5.0 | \n",
121 | " 3.6 | \n",
122 | " 1.4 | \n",
123 | " 0.2 | \n",
124 | " 0.0 | \n",
125 | "
\n",
126 | " \n",
127 | " ... | \n",
128 | " ... | \n",
129 | " ... | \n",
130 | " ... | \n",
131 | " ... | \n",
132 | " ... | \n",
133 | "
\n",
134 | " \n",
135 | " 145 | \n",
136 | " 6.7 | \n",
137 | " 3.0 | \n",
138 | " 5.2 | \n",
139 | " 2.3 | \n",
140 | " 2.0 | \n",
141 | "
\n",
142 | " \n",
143 | " 146 | \n",
144 | " 6.3 | \n",
145 | " 2.5 | \n",
146 | " 5.0 | \n",
147 | " 1.9 | \n",
148 | " 2.0 | \n",
149 | "
\n",
150 | " \n",
151 | " 147 | \n",
152 | " 6.5 | \n",
153 | " 3.0 | \n",
154 | " 5.2 | \n",
155 | " 2.0 | \n",
156 | " 2.0 | \n",
157 | "
\n",
158 | " \n",
159 | " 148 | \n",
160 | " 6.2 | \n",
161 | " 3.4 | \n",
162 | " 5.4 | \n",
163 | " 2.3 | \n",
164 | " 2.0 | \n",
165 | "
\n",
166 | " \n",
167 | " 149 | \n",
168 | " 5.9 | \n",
169 | " 3.0 | \n",
170 | " 5.1 | \n",
171 | " 1.8 | \n",
172 | " 2.0 | \n",
173 | "
\n",
174 | " \n",
175 | "
\n",
176 | "
150 rows × 5 columns
\n",
177 | "
"
178 | ],
179 | "text/plain": [
180 | " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n",
181 | "0 5.1 3.5 1.4 0.2 \n",
182 | "1 4.9 3.0 1.4 0.2 \n",
183 | "2 4.7 3.2 1.3 0.2 \n",
184 | "3 4.6 3.1 1.5 0.2 \n",
185 | "4 5.0 3.6 1.4 0.2 \n",
186 | ".. ... ... ... ... \n",
187 | "145 6.7 3.0 5.2 2.3 \n",
188 | "146 6.3 2.5 5.0 1.9 \n",
189 | "147 6.5 3.0 5.2 2.0 \n",
190 | "148 6.2 3.4 5.4 2.3 \n",
191 | "149 5.9 3.0 5.1 1.8 \n",
192 | "\n",
193 | " target \n",
194 | "0 0.0 \n",
195 | "1 0.0 \n",
196 | "2 0.0 \n",
197 | "3 0.0 \n",
198 | "4 0.0 \n",
199 | ".. ... \n",
200 | "145 2.0 \n",
201 | "146 2.0 \n",
202 | "147 2.0 \n",
203 | "148 2.0 \n",
204 | "149 2.0 \n",
205 | "\n",
206 | "[150 rows x 5 columns]"
207 | ]
208 | },
209 | "execution_count": 2,
210 | "metadata": {},
211 | "output_type": "execute_result"
212 | }
213 | ],
214 | "source": [
215 | "all_ds = pd.read_csv('iris_dataset.csv')\n",
216 | "all_ds"
217 | ]
218 | },
219 | {
220 | "cell_type": "code",
221 | "execution_count": 3,
222 | "metadata": {},
223 | "outputs": [
224 | {
225 | "name": "stdout",
226 | "output_type": "stream",
227 | "text": [
228 | "Number of rows/examples and columns in the dataset: (150, 5)\n"
229 | ]
230 | }
231 | ],
232 | "source": [
233 | "print(f'Number of rows/examples and columns in the dataset: {all_ds.shape}')"
234 | ]
235 | },
236 | {
237 | "cell_type": "code",
238 | "execution_count": 4,
239 | "metadata": {},
240 | "outputs": [
241 | {
242 | "name": "stdout",
243 | "output_type": "stream",
244 | "text": [
245 | "\n",
246 | "RangeIndex: 150 entries, 0 to 149\n",
247 | "Data columns (total 5 columns):\n",
248 | " # Column Non-Null Count Dtype \n",
249 | "--- ------ -------------- ----- \n",
250 | " 0 sepal length (cm) 150 non-null float64\n",
251 | " 1 sepal width (cm) 150 non-null float64\n",
252 | " 2 petal length (cm) 150 non-null float64\n",
253 | " 3 petal width (cm) 150 non-null float64\n",
254 | " 4 target 150 non-null float64\n",
255 | "dtypes: float64(5)\n",
256 | "memory usage: 6.0 KB\n"
257 | ]
258 | }
259 | ],
260 | "source": [
261 | "# Summary of information on the dataset.\n",
262 | "all_ds.info()"
263 | ]
264 | },
265 | {
266 | "cell_type": "markdown",
267 | "metadata": {},
268 | "source": [
269 | "# Cleaning the data."
270 | ]
271 | },
272 | {
273 | "cell_type": "code",
274 | "execution_count": 5,
275 | "metadata": {},
276 | "outputs": [
277 | {
278 | "name": "stdout",
279 | "output_type": "stream",
280 | "text": [
281 | "Display NA values in each columns: \n"
282 | ]
283 | },
284 | {
285 | "data": {
286 | "text/plain": [
287 | "sepal length (cm) 0\n",
288 | "sepal width (cm) 0\n",
289 | "petal length (cm) 0\n",
290 | "petal width (cm) 0\n",
291 | "target 0\n",
292 | "dtype: int64"
293 | ]
294 | },
295 | "execution_count": 5,
296 | "metadata": {},
297 | "output_type": "execute_result"
298 | }
299 | ],
300 | "source": [
301 | "print(\"Display NA values in each columns: \")\n",
302 | "all_ds.isna().sum(axis=0)"
303 | ]
304 | },
305 | {
306 | "cell_type": "code",
307 | "execution_count": 6,
308 | "metadata": {},
309 | "outputs": [
310 | {
311 | "name": "stdout",
312 | "output_type": "stream",
313 | "text": [
314 | "Display NULL values in each columns: \n"
315 | ]
316 | },
317 | {
318 | "data": {
319 | "text/plain": [
320 | "sepal length (cm) 0\n",
321 | "sepal width (cm) 0\n",
322 | "petal length (cm) 0\n",
323 | "petal width (cm) 0\n",
324 | "target 0\n",
325 | "dtype: int64"
326 | ]
327 | },
328 | "execution_count": 6,
329 | "metadata": {},
330 | "output_type": "execute_result"
331 | }
332 | ],
333 | "source": [
334 | "print(\"Display NULL values in each columns: \")\n",
335 | "all_ds.isnull().sum()"
336 | ]
337 | },
338 | {
339 | "cell_type": "code",
340 | "execution_count": 7,
341 | "metadata": {},
342 | "outputs": [],
343 | "source": [
344 | "all_ds = all_ds.dropna()"
345 | ]
346 | },
347 | {
348 | "cell_type": "code",
349 | "execution_count": 8,
350 | "metadata": {},
351 | "outputs": [],
352 | "source": [
353 | "\n",
354 | "all_ds = all_ds.sample(frac=1) # This will randomly shuffle the rows to make sure the data is not sorted. (if the data is sorted then we may end up with test dataset from one or two classes only)\n"
355 | ]
356 | },
357 | {
358 | "cell_type": "markdown",
359 | "metadata": {},
360 | "source": [
361 | "# Split the data into train/test splits."
362 | ]
363 | },
364 | {
365 | "cell_type": "code",
366 | "execution_count": 9,
367 | "metadata": {},
368 | "outputs": [
369 | {
370 | "name": "stdout",
371 | "output_type": "stream",
372 | "text": [
373 | "(90, 5)\n",
374 | "(60, 5)\n"
375 | ]
376 | }
377 | ],
378 | "source": [
379 | "# Split the data into 60% train and 40% test (later will divide the test to test and validate.)\n",
380 | "train_dataset, temp_test_dataset = train_test_split(all_ds, test_size=0.4)\n",
381 | "\n",
382 | "print( train_dataset.shape )\n",
383 | "print( temp_test_dataset.shape )"
384 | ]
385 | },
386 | {
387 | "cell_type": "code",
388 | "execution_count": 10,
389 | "metadata": {},
390 | "outputs": [
391 | {
392 | "name": "stdout",
393 | "output_type": "stream",
394 | "text": [
395 | "(30, 5)\n",
396 | "(30, 5)\n"
397 | ]
398 | }
399 | ],
400 | "source": [
401 | "# Split the test_dataset dataframe to 50% test and 50% validation. [this will divide the dataset into 60% train, 20% validate, and 20% test]\n",
402 | "test_dataset, valid_dataset = train_test_split(temp_test_dataset, test_size=0.5)\n",
403 | "print( test_dataset.shape )\n",
404 | "print( valid_dataset.shape )"
405 | ]
406 | },
407 | {
408 | "cell_type": "code",
409 | "execution_count": 11,
410 | "metadata": {},
411 | "outputs": [
412 | {
413 | "name": "stdout",
414 | "output_type": "stream",
415 | "text": [
416 | "Display the datatype of the test_dataset: \n",
417 | " Trai dataset : (90, 5)\n",
418 | " Test dataset : (30, 5)\n",
419 | " Validation dataset : (30, 5)\n"
420 | ]
421 | }
422 | ],
423 | "source": [
424 | "print(f\"Display the datatype of the test_dataset: {type(test_dataset)}\")\n",
425 | "print(f\" Trai dataset : {train_dataset.shape}\")\n",
426 | "print(f\" Test dataset : {test_dataset.shape}\")\n",
427 | "print(f\" Validation dataset : {valid_dataset.shape}\")"
428 | ]
429 | },
430 | {
431 | "cell_type": "code",
432 | "execution_count": 12,
433 | "metadata": {},
434 | "outputs": [
435 | {
436 | "data": {
437 | "text/plain": [
438 | ""
439 | ]
440 | },
441 | "execution_count": 12,
442 | "metadata": {},
443 | "output_type": "execute_result"
444 | },
445 | {
446 | "data": {
447 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAALaCAYAAADz+9/5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXxcd3X//9cZjaQZ7YtlrV5jx8FZShInLKGBJEBT9q1sLaSUJvTLDm3ZWkq3X4EWSkOXQEIKSVvWNBBoSSA4CySBNLZJ4n2TvMiLNJJlLaNd8/n9MTPGMbY0kubOvTPzfj4e9yHNcu89tj8aH398PudjzjlERERERGT+Qn4HICIiIiKSr5RMi4iIiIgskJJpEREREZEFUjItIiIiIrJASqZFRERERBZIybSIiIiIyALlRTJ9/fXXO0CHDi8OT2jM6vD48ITGrQ4PD09ozOrw+MhIXiTTfX19focgMi8as5KPNG4l32jMShDkRTItIiIiIhJESqZFRERERBYo7HcAIiK5lkg4+uOTTE7PUBYuobGyjFDI/A5LZFYat5JvimXMKpkWkaKSSDh29wxz452b6B4Yo6M+ym1v38C65uqC/JCXwqBxK/mmmMasyjw8NjIxzYn4pN9hiEhKf3zy1Ic7QPfAGDfeuYl+/ZxKgGncSr4ppjGrmWmPJBKO933jl/zv1mMY8OnXXcybr1zud1giRW9yeubUh3ta98AYk9MzPkUkMjeNW8k3xTRmNTPtkZs37uV/tx7jpeubuai9lo/fvZX7th3zOyyRolcWLqGjPvqM5zrqo5SFS3yKSGRuGreSb4ppzCqZ9sC+3hG+uHEvV69dwu8/fyV/8tJ1rGis4NP37mImkXEPcBHxQGNlGbe9fcOpD/l0HV9jZZnPkYmcm8at5JtiGrMq8/DAf/z8ACUh43efswIzoyxsvObSdv7pJ3u5b9txXn5Jq98hihStUMhY11zNd999VcGvMJfCoXEr+aaYxqyS6SwbHp/iO5u7ed7qRmqipaeev2JFA621Eb708H4l0yI+C4WMpupyv8MQmReNW8k3xTJmVeaRZfc8eZTRyRleemHLM54PhYyXrG9m65FB9sdGfIpORERERLJJyXSW/Wj7cdpqI6xZWvVrr12xsgGA+3f05DosEREREfGAkuksik9M84vOfp69vP6sry+pKmfVkkru365kWkRERKQQKJnOokf39TE147h0Wd0537NhRT1bDg3QOzyew8hERERExAtKprPowd29REtLuKCl+pzvuXxFPQ54aHcsd4GJiIiIiCeUTGfRw7tjXNxeS7jk3L+tyxsqqImE+b+uEzmMTERERES8oGQ6S46eHOPo4DjPaq2Z9X1mxvnN1UqmRURERAqAkuks2XRwAIB1s5R4pD2rtYZDJ0bpGVLdtIiIiEg+8zSZNrMPmdl2M9tmZt8ws4iZrTKzx81sn5l9y8wKYl/JzQdOECkNsbyhYs73phNuzU6LiIiI5DfPkmkzawfeD2xwzl0ElABvBj4LfME5twYYAN7pVQy5tOngAGuWVlGSwTaZKxsriZaGlEyLiIiI5DmvyzzCQNTMwkAFcAy4Frgr9fodwGs8jsFzIxPT7Dw2xPnNc5d4AJSEjDVLq9mcKg0RERERkfzkWTLtnDsCfA44RDKJHgQ2Ayedc9Opt3UD7V7FkCtPHz5JwsH5SzNLpgFWN1Wyp2eY8akZDyMTERERES95WeZRD7waWAW0AZXA9fM4/yYz22Rmm2KxYPdk3npkEEgmyJlataSS6YRj9/Fhr8KSHMunMSuSpnEr+UZjVoLGyzKPFwNdzrmYc24KuBu4CqhLlX0AdABHznayc+5W59wG59yGpqYmD8NcvO1Hh2iqLqc6UprxOauXJBPvdCIu+S+fxqxImsat5BuNWQkaL5PpQ8BzzazCzAy4DtgBPAi8IfWeG4B7PIwhJ7YdGWRFBl08Trekqpzq8jBbu5VMi4iIiOQrL2umHye50HALsDV1r1uBjwIfNrN9QCNwu1cx5EJ8YpquvjirlmRe4gHJzVtWLqnUzLSIiIhIHgvP/ZaFc859CvjUGU93Ald6ed9c2nlsCAesnGcyDcm66R9uPcb41AyR0pLsByciIiIintIOiIu0LTWzvLJxYcn0dMKxt2ck22GJiIiISA4omV6k7UeHqI2WUl+R+eLDtGWpOutdx4eyHZaIiIiI5ICS6UXadXyY5Q0VJNdYzk9LTYTSElN7PBEREZE8pWR6ERIJx97eYZbVRxd0fknI6KivYHePkmkRERGRfKRkehEOD4wyPpWgY55t8U7XUR9l1zEl0yIiIiL5SMn0IuxKlWcsq194Mr28oYLYyAQn4pPZCktEREREckTJ9CLsSSXTHQss84BfJeJahCgiIiKSf5RML8LunmGWVpcvqkd0uqOHFiGKiIiI5B8l04uw+/gwHYso8QCoryilujzMHvWaFhEREck7SqYXaHI6QVdffFElHpDcVrytLsq+Xs1Mi4iIiOQbJdMLdOhEnOmEW3QyDaSSac1Mi4iIiOSbWZNpM3uemf2rmT1tZjEzO2RmPzSz95hZba6CDKJ08ttWt/hkur0uysDolDp6iIiIiOSZcybTZnYv8IfAj4DrgVZgPfDnQAS4x8xelYsgg2h/LA4kE+HFaq+PAGh2WkRERCTPhGd57W3Oub4znhsBtqSOz5vZEs8iC7j9vSM0VpYtqpNHWjoh39c7wpWrGhZ9PRERERHJjXMm02cm0mZWc/r7nXMnzpJsF429vSNZKfEAaKwqpzwc0sy0iIiISJ6ZcwGimb3LzI4DTwObU8cmrwMLMucc+2PZS6ZD6Y4eMSXTIiIiIvlktjKPtD8BLirmWegzHR8aZ3Ryhva6SNau2VYXZV+P2uOJiIiI5JNMWuPtB0a9DiSf7O9NLj7M1sw0QFtthKOD44xNzmTtmiIiIiLirUxmpj8OPGZmjwMT6Sedc+/3LKqA2x/LXlu8tNba5LW6+uKsb6vJ2nVFRERExDuZJNNfBh4AtgIJb8PJD52xESrKSqiLlmbtmm2pkpHOvhEl0yIiIiJ5IpNkutQ592HPI8kjnX1xWmojmFnWrtlck0ymu1L9q0VEREQk+DKpmb7XzG4ys1Yza0gfnkcWYPtjI7TWZG/xIUCktIQlVWV09imZFhEREckXmcxMvyX19eOnPeeA1dkPJ/jGp2Y4dnKc55+X/f1qWmqjp+qxRURERCT45kymnXOrchFIvjjQH8cBrbXZnZkmdc1fdPbjnMtqCYmIiIiIeCOTTVveY2Z1pz2uN7N3extWcKVrmtPdN7KprTbC8Pg0fSOTWb+2iIiIiGRfJjXTNzrnTqYfOOcGgBszubiZ1ZnZXWa2y8x2mtnzUjXX95vZ3tTX+oUG74d0TbM3M9PJBL1TpR4iIiIieSGTZLrETqs5MLMSoCzD698M3OecuwD4DWAn8DFgo3NuLbAx9ThvdMbiNFSWESktyfq10wl6lxYhioiIiOSFTJLp+4Bvmdl1ZnYd8I3Uc7Mys1rgauB2AOfcZGqG+9XAHam33QG8ZiGB+6Wrb8STWWmAJVXlhENGV7+SaREREZF8kEky/VGSm7b8v9SxEfhIBuetAmLAV83sl2b2FTOrBJqdc8dS7zkONJ/t5FQ7vk1mtikWi2Vwu9zo7IvTkuW2eGmhkNFSG1Gv6TwV1DErMhuNW8k3GrMSNHMm0865hHPuS865N6SOLzvnZjK4dhi4DLjFOXcpEOeMkg7nnCPZZu9s973VObfBObehqakpg9t57+ToJCdHp2jxaGYakpu3qMwjPwVxzIrMReNW8o3GrATNOZNpM/uBmb3SzH5tz2wzW21mf21mfzDLtbuBbufc46nHd5FMrnvMrDV1nVagd+Hh51Y6yfUymW6tjXCwf5RE4qz/xhARERGRAJltZvpG4DeBXWb2hJn90MweMLMu4MvAZufcv5/rZOfcceCwma1LPXUdsAP4PnBD6rkbgHsW+4vIlQOpWubWmuy3xUtrqYkwOZPg6OCYZ/cQERERkew456YtqWT4I8BHzGwl0AqMAXucc6MZXv99wH+ZWRnQCbyDZAL/bTN7J3AQeOOCo8+xrr5RQgZLa8o9u8fpHT066is8u4+IiIiILF4m24njnDsAHJjvxZ1zTwIbzvLSdfO9VhB09cVZUlVOaUkm6zYXpiXVa/pAX5zfXKtaMBEREZEg8y4rLEBdfSOedfJIq68oJVIaOrU5jIiIiIgEl5LpDDnnONA36uniQwAzU0cPERERkTyhZDpDfSOTjExMe7Zhy+lalEyLiIiI5IU5k2kzu8rM7jezPWbWaWZdZtaZi+CCJN3Jw+uZaUguQuw+McbUTMLze4mIiIjIwmWyAPF24EPAZiCTzVoK0qke0x62xUtrqY0w4xzdA2OsWlLp+f1EREREZGEySaYHnXP3eh5JwB3oi1MSMpqqvWuLl9aa6ujR1TeiZFpEREQkwM6ZTJvZZalvHzSzfwDuBibSrzvntngcW6Ac6I+ztLqckpB5fq90x5CuvkzbeYuIiIiIH2abmf78GY9P7xftgGuzH05wdfXFPW+Ll1YdCVNZVsIBLUIUERERCbTZdkC8BsDMVjvnnrHg0MxWex1YkKTb4r1oXW42UTEzWmojpxY9ioiIiEgwZdIa766zPPedbAcSZD1DE4xNzeSkk0daS02EzthIzu4nIiIiIvM3W830BcCFQK2Zve60l2qA3GWVAfCrTh45TKZrIzy2v5/xqRkipSU5u6+IiIiIZG62mul1wCuAOuCVpz0/DNzoZVBBky63yMWGLWmttVEccPjEKGubq3N2XxERERHJ3Gw10/cA95jZ85xzP89hTIFzoC9OOGQ0VnrfFi8tXVLS2RdXMi0iIiISUJn0mX6rmb3ljOcGgU2phLvgdfXFaamNEMpBW7y0dEmJOnqIiIiIBFcmCxDLgWcDe1PHJUAH8E4z+ycPYwuMzhy2xUurLA9TGy09Va8tIiIiIsGTycz0JcBVzrkZADO7BfgZ8AJgq4exBcJMwnGof5QLLmzO+b1baiJKpkVEREQCLJOZ6Xqg6rTHlUBDKrmeOPsphePoyTEmZxI5bYuX1lIboVPJtIiIiEhgZTIz/ffAk2b2EGDA1cDfmVkl8BMPYwuE9Mxwa2005/durY3w8J4YIxPTVJVn8kclIiIiIrk0Z4bmnLvdzH4IXJl66hPOuaOp7//Us8gCwo+2eGnp2fADfXEuaq/N+f1FREREZHaZlHmk3xcDBoA1Zna1dyEFS2csTrQ0RF20NOf3Ts+Gq25aREREJJjmnJk2s88CbwK2A4nU0w74qYdxBUayLV4Us9y1xUtLdxBRMi0iIiISTJkU4r4GWOecK/jFhmfT1RenvS739dIAZeEQS6rKlEyLiIiIBFQmZR6dQO5rHAJgcjpB98CoL5080lpro+yPjfh2fxERERE5t0xmpkdJdvPYyGmt8Jxz7/csqoA4dCJOwvmz+DCttTbCY/v7cc75UmoiIiIiIueWSTL9/dSxIGZWAmwCjjjnXmFmq4BvAo3AZuBtzrnJhV7fS/tjyfKKNp/KPCA5Mz0yMU1sZIKl1f4l9SIiIiLy6zJpjXeHmUWB5c653Qu4xweAnUBN6vFngS84575pZl8C3gncsoDreq4z5l9bvLS2usipWJRMi4iIiATLnDXTZvZK4EngvtTjZ5tZRjPVZtYBvBz4SuqxAdcCd6XecgfJBY6B1BkboS5aSkWZfxumpNvjpRN7EREREQmOTBYg/iXJDVtOAjjnngRWZ3j9fwI+wq9a6jUCJ51z06nH3UB7psHmWmcsTmudv7PBjVVllIVDdGoRooiIiEjgZJJMTznnBs94LnHWd57GzF4B9DrnNi8kMDO7ycw2mdmmWCy2kEss2v6+EV+2ET9dyIzW2gidao8XeEEYsyLzpXEr+UZjVoImk2R6u5m9FSgxs7Vm9s/AYxmcdxXwKjM7QHLB4bXAzUCdmaXrJjqAI2c72Tl3q3Nug3NuQ1NTUwa3y66B+CQnR6d8rZdOa6mJqD1eHvB7zIoshMat5BuNWQmaTJLp9wEXkmyL9w1gCPjgXCc55z7unOtwzq0E3gw84Jz7XeBB4A2pt90A3LOAuD3X2ZdMXtt8npkGaK+LcvjEKBPTM36HIiIiIiKnmTOZds6NOuf+zDl3Repfgn/mnBtfxD0/CnzYzPaRrKG+fRHX8ky6LZ7fNdOQbM2XcHCgb9TvUERERETkNOdsU2FmPwDcuV53zr0q05s45x4CHkp930lyQWOg7e8dIRyyQLSjS/e53tc7wrqWap+jEREREZG02Xq+fS5nUQTQvt4RWmsjlIT833WwrS6CpWISERERkeA4ZzLtnHs4l4EEzd7eEV93PjxdebiEpupy9mkRooiIiEigZLIAseiMT83QPTBKe0CSaUiWeuzrHfY7DBERERE5jZLps+jqi5NwBGZmGpKxdMXiJBLnLGMXERERkRxTMn0W6Z7O7fXBSabb66KMTyc4cnLM71BEREREJCUn3Tzyzb7eEYxg9JhOS5ec7O0dZllDhc/RiIiIiAiom8dZ7esdoam6nLJwcCbu07Pke3pGuPaCZp+jERERERFQN4+z2tsTnE4eaVXlYRoqy9hzXIsQRURERIJizqlXM1trZneZ2Q4z60wfuQjOD1MzCTr7RlgWoHrptI76KLt7lEyLiIiIBEUmdQxfBW4BpoFrgDuB//QyKD8d7I8zNeMCWZfcUV/Bvt4RZtTRQ0RERCQQMkmmo865jYA55w465/4SeLm3Yfln9/FkJ4+O+uAl08vqo0xMJzh0YtTvUERERESEzJLpCTMLAXvN7L1m9lqgyuO4fLOnZ5iQEagNW9LSs+W7VTctIiIiEgiZJNMfACqA9wOXA28DbvAyKD/t6RmmuSYSqE4eaafa46luWkRERCQQZmuNB4Bz7gmA1Oz0+51zBZ3J7T4+TEcAFx8CREpLaK4pZ5eSaREREZFAyKSbxwYz2wo8DWw1s6fM7HLvQ8u98akZDvaPsiyA9dJpy+or2Hl0yO8wRERERITMyjz+HXi3c26lc24l8B6SHT4Kzv7YCDPOBXZmGmBFYwVdfXFGJ6f9DkVERESk6GWSTM84536WfuCce4Rkm7yCs/NYsnxieWOlz5Gc24rGShxahCgiIiISBJkk0w+b2ZfN7EVm9kIz+zfgITO7zMwu8zrAXNpxdIiycIjWmojfoZzTilRHj3TiLyIiIiL+mXMBIvAbqa+fOuP5SwEHXJvViHy089gQy+ujhELmdyjn1FRdTkVZCTuODfodioiIiEjRy6SbxzW5CMRvzjm2HxvkihUNfocyKzNjeUMFO49qZlpERETEb5l082g2s9vN7N7U4/Vm9k7vQ8utY4PjDI1Ns7wxuJ080lY0VrLj+BAJbSsuIiIi4qtMaqa/BvwIaEs93gN80KuA/LIj1W5uZYAXH6atbKxgbHKGzr6436GIiIiIFLVMkuklzrlvAwkA59w0MONpVD7YcWwIg0D3mE5b3ZTczX3rkZM+RyIiIiJS3DJJpuNm1khysSFm9lyg4Fa/bTsySEtthGhZid+hzKm9Lkp5OMRThwvuj0FEREQkr2SSTH8Y+D5wnpk9CtwJvG+uk8xsmZk9aGY7zGy7mX0g9XyDmd1vZntTX+sX9SvIkqe7B1m9JPglHgAlIWNlYyVPd2tmWkRERMRPcybTzrktwAuB5wPvAi50zj2dwbWngT92zq0Hngu8x8zWAx8DNjrn1gIbU4991Ts8zvGh8VPlE/lgdVMl248OMT2T8DsUERERkaKVSTeP3wGizrntwGuAb2WyWYtz7lgqEcc5NwzsBNqBVwN3pN52R+qavtranSyXWN2UHzPTAOc1VTExnWBPz4jfoYiIiIgUrUzKPD7pnBs2sxcA1wG3A7fM5yZmtpLkJi+PA83OuWOpl44DzfO5lhee7h4kZPnRySMtXZLylEo9RERERHyTSTKd7tzxcuA259z/AmWZ3sDMqoD/Bj7onBs6/TXnnCO1sPEs591kZpvMbFMsFsv0dguy9cgg7XVRIqXBX3yY1lwbobo8zJaDA36HIim5HLMi2aJxK/lGY1aCJpNk+oiZfRl4E/BDMyvP8DzMrJRkIv1fzrm7U0/3mFlr6vVWoPds5zrnbnXObXDObWhqasrkdgvinOOpwydZlSeLD9NCZqxtrmaTkunAyNWYFckmjVvJNxqzEjSZJMVvJLlpy285504CDcCfznWSmRnJkpCdzrl/PO2l7wM3pL6/AbhnXhFn2eETY/THJ1mztNrPMBZkXXMVXX1x+kcm/A5FREREpChl0s1j1Dl3t3Nub+rxMefcjzO49lXA24BrzezJ1PEy4DPAS8xsL/Di1GPfbD50AoDzm/Onk0fa+S3JfwBs1uy0iIiIiC/CXl3YOfcIYOd4+Tqv7jtfmw4MUFFWkhc7H55p9ZIqwiFj88EBXnphi9/hiIiIiBSdjGqfC9nmgwOsWVpFKHSuvD+4ysIhVjdV8sSBE36HIiIiIlKUijqZHhqfYvfxYc5vzr966bT1rTU83T3IyMS036GIiIiIFJ2iTqafPHQSB3mdTF/UXst0wvF4Z7/foYiIiIgUnaJOpn/R2U9JyFi7NP8WH6atXVpNeTjEI/v6/A5FREREpOgUdTL96L4+1jRV5dVmLWcqC4dY11LNI3uVTIuIiIjkWtEm00PjU2w9MsiFbTV+h7JoF7XVsrd3hN6hcb9DERERESkqRZtM/1/nCRKOgkimL+moBeDB3WfdTFJEREREPFK0yfSj+/soKwnl5c6HZ1reUEFTdTk/3t7jdygiIiIiRaVok+mf7olxfksVZeH8/y0wMy5fXs8j+/oYnVSLPBEREZFcyf9McgEO9Y+yPxbn0mX1foeSNZevqGdiOsFP92ghooiIiEiuFGUy/cCuZDnEZcsLJ5m+oLWaqvIw92475ncoIiIiIkUj7HcAfti4q5e2uggttRG/Q8macCjEc1Y18KPtxxken6I6Uur5PWcSji2HBth8cIDDJ0ZJOFhaXc7F7bW8YO2SvG45KCIiIpKJokum4xPT/KKzn5eub/E7lKy7+vwmNu7q5d6tx3njFcs8u8/IxDR3PHaArz12gNjwBADVkTAhM4bGpnBAtKyEN21YxrteuJrW2qhnsYiIiIj4qeiS6Z/s7GFqxrFhZeGUeKStXVpFW22EuzZ3e5JMO+f4/lNH+dv/2UlsZIJLOmp5yxXLubi9lqpIcihNTM+wp2eEn+2N8R+/OMi3njjMB1+8lj/8zdWUhCzrMUl2JRKO/vgkk9MzlIVLaKwsI6Q/N8kDGruSTzReC0vRJdPff+oojZVlnN+c/y3xzmRmXH1+E9984jC7jw+zriV7v8bBsSk+cfdW/nfrMdY0VfL+69ay5izbsJeHS7i4vZaL22v5ncs7uOPnB/n0vbt4YFcvN7/50oIqrSk0iYRjd88wN965ie6BMTrqo9z29g2sa67Wh7wEmsau5BON18JTVAsQB0eneHh3jOeubiRkhTlgr71gKeXhELf9rDNr19x1fIhX/vMj3Lf9OG++Yhl/9aqLzppIn6mpOsKfvHQd/++F5/FU90le+S+P8HT3yazFJdnVH5889eEO0D0wxo13bqI/PulzZCKz64tPaOxK3tB4LTxFlUzft/0Y0wnH889r9DsUz1RHSnnh+U1875dHOD64+O3F79/Rw2v/7TGGx6f4i1es59XPbp/3v5yvPr+Jv3rVRRjwxi/9nAd3aafGIJqcnjn14Z7WPTDG5PSMTxGJzG1qaob4xLTGruSFRMIxOqHP2kJTVMn0t544THtdlFVLKv0OxVMvv7iVhHPcvHHvgq/hnOO2n3Zy052baKuN8LevuXhRpTHLGyr461dfRFtdlD+8YxP3PHlkwdcSb5gZHfXPXCzaUR/FCvR/cST/TU3NcHRonAN9o2cdu2VhdRSSYOkbmaCrL67xWmCKJpnecXSILYdOcu0FSws+OVhaE+GlF7bwzf87xLYjg/M+f2omwZ99bxv/3w93csWqBj75ivU0VJYtOq7aaCl//vL1rGup5oPffJJvP3F40deU7EgkHOD47OsvOfUh31Ef5bOvvwTD+RucyFlMTyc4OjRObHiCL27c+2tj98u/dzmNWfjcEsmWRMIxNjVz1vH6JY3XvFY0CxC//n8HKSsJcfXaJr9DyYk3XNbBY/v6+LPvbuU7f/T8jLdNH4hP8t6vb+HR/f286jfaeNMVy7JaXx4tK+Gj11/AP96/m4/899NMJxxvfc7yrF1fFqYvPsHEdII7Huvik69YT120lJNjU9zxWBd/8coL/Q5P5BkSCcfRwTFiwxP0xyeJjUzwuR/tPjV2RydnaK2LaDGXBEpffIKEc2cdr0uq1M0jnxXFzPRAfJL/3nKE565uONXCrdBVlof5g6tW8VT3IH/3w50ZnfPk4eQiwce7TvBHL1zNW65c7slCzbJwiA+/ZB2XLqvjE9/dyn/+4mDW7yHzMz41w/HBcd5x1Sr+5n928KZbf8Hf/M8O3nHVKspKiuJjQvJIf3yS3lQi/d+bD/PZ119CbGSCd/3HZv74O0+xtLqcuqhm+SRY0p+z//CGZ47XSGmoYJsiFIuiyCy/+mgXY5MzvOKSNr9DyannrG7kZT3DfO2xA1RHwnz4JeeftcRlfGqGWx7az78+uI+6ilI+9coLM+rWsRhl4RAfesn5fOEne/jz723DAW977gpP7ynnVmLGVx/t4t3XrOFvXn0RFWUljE7O0FRdTkOFkhIJlsnpmVOJ9A3PX3Xqf1QaK8toqi6nrUaz0hI8+pwtXAU/5TQ0PsXXHjvAlSsbWNZQ4Xc4OffW56zgRec38c8P7OMdX32Crd2DOJesge0dHudrj3Zx3ecf5uaNe7lyVQOfft0lnifSaaUlIT704vO5bHkdn/zeNr76aFdO7iu/LlpWwjuuWsW/PbiPyZkEJSFjRWMFjVWlhDMsERLJlbJwyTMS6ddfvuwZiXRpqRZySfDoc7ZwFfzM9C0P7WdofJrXXNrudyi+KAkZN129mmUNFdy9pZtX/ssjVEfClJaEOJHqaXl+cxWfeFQfFh4AACAASURBVNmzuLi9NufxpRPqLz6wl7/6wQ7GpmZ494vW5DyOYlcXLaO5JsJbrlxBRVkJw+PTNFSWURsp9zs0kV/TWFnGh16yji/cv/tUIr20upy22qiSEgksfc4WroJOprv64nzlZ51cvXZJwbfDm42Z8bKLW/nNtUvYdHCAzlgcgKaqMi7uqPP99yZcEuL9163llof28/f37WZwbIqPXX9BwXddCZq6ilLKw1XMOIiUhlhSWa7/KpdACoWMdc3V/O1rL2Z8KkGJJWf9NF4lyEIhY2VjJVWR8DPGreQ/X5JpM7seuBkoAb7inPtMtu+RSDg++b1thEMh3nylukVAckOXa9Yt5Zp1fkfy68KhEO950RoqysJ8+eFOegbH+ewbLqFcfTc9d66tbZdUarZEgq1/ZFJbMkve0bgtPDn//zAzKwH+FfhtYD3wFjNbn+37/PujXTyyr4+3XLmcehX254VQyPiDq1byxg3L+N6TR3nrbY/TO7z4XRxldtpGXPKRxq3kI43bwuRHcdmVwD7nXKdzbhL4JvDqbN7g8c5+PnvfLjasqOfFz1qazUuLx8yM117azvuvXcvWI4O8/IuP8IvOfr/DKmjaRlzykcat5CON28LkRzLdDpy+9V136rlnMLObzGyTmW2KxWIZX3zX8SFuvHMTS6sjvOvq81R3m6eed14jf/2qCwmHjLfc+gs+fe9OxqeC/WGz0DHrt7Jwiba2LWIat5Jv8nXMgsZtoQrssmfn3K3OuQ3OuQ1NTZntWvjEgRO88Us/J1wS4qPXryuaDVoK1YrGSv7utRfzonVL+fLDnfzWP/2U+3f0nGrtFzQLGbNB0FhZxm1v3/CMrW1ve/sGbW1bJDRuJd/k65gFjdtC5Ue2eQRYdtrjjtRzCzY9k+C2n3Xx+R/vZml1OR/77Qtoqo4sKkgJhkhpCTddvZrnn9fIVx/r4sY7N3H5inred+0arl7bpAUbWZDujPDdd1/F5PQMZeESGiu1ta0Em8at5CON28LkRzL9BLDWzFaRTKLfDLx1IReanklw/44ePn//Hvb1jvCcVQ384QtWa0a6AF3UXstnX38JD+7q5ftPHeX3v/oEq5ZU8jsbOnjlJW1FuSFPNoVCRlO1undIftG4lXykcVt4cp51Ouemzey9wI9Itsb7d+fc9vle5/jgOK+75VGOnhynpSbCh158PlesrFeNdAELh0K8ZH0L16xbyi+6TvCTHT38/X27+fv7drNmaRVXndfIZSvqubCtlpWNFYRLAlvFJCIiIgXClylc59wPgR8u5hrNNeVcubKB1U1VXL68Xv9FUkTCJSFesGYJL1izhN6hcTYdHODJwyf55hOHuePnB5PvCRnt9VE66qM0V0f4499aR3tddI4ri4iIiMxP3tZDmBmfft0l6kNc5NrqIjx7eR2QLPs50D/Kvt4RDp0Y5ejJMWLDExzoG/U5ShERESlUFtTOCKczsxhwMIO3LgH6PA4nE0GJA4ITS1Dj6HPOXZ/tm8xjzKYF9fenWGOAYMcRhHEb5N8fPyiOZwrqZy0E4/dIMfxKEOI4VwwZjdu8SKYzZWabnHMbFMevBCUWxTG7oMQVhDiCEIPimFtQ4lIcimO+ghCbYghWHIuNQSu0REREREQWSMm0iIiIiMgCFVoyfavfAaQEJQ4ITiyKY3ZBiSsIcQQhBlAccwlKXIrjmRTH3IIQm2L4lSDEsagYCqpmWkREREQklwptZlpEREREJGeUTIuIiIiILJCSaRERERGRBVIyLSIiIiKyQHmRTF9//fUO0KHDi8MTGrM6PD48oXGrw8PDExqzOjw+MpIXyXRfn9+7TIrMj8as5CONW8k3GrMSBHmRTIuIiIiIBJGSaRERERGRBQr7HYDkv0TC0R+fZHJ6hrJwCY2VZYRC5ndYIiIFRZ+1km+KZcwqmZZFSSQcu3uGufHOTXQPjNFRH+W2t29gXXN1Qf7AiIj4QZ+1km+KacyqzEMWpT8+eeoHBaB7YIwb79xEf3zS58hkIQZHp/jJjh5GJqb9DkVETqPPWsk3xTRmNTMtizI5PXPqByWte2CMyekZnyKShfr2E4f55D3bmJhOsKKxgn/73cu4sK3W77BEBH3WSv4ppjGrmWlZlLJwCR310Wc811EfpSxc4lNEshAH+uL8xfe3sbqpkvdes4bh8WnededmJgrwQ08kH+mzVvJNMY1ZJdOyKI2VZdz29g2nfmDSNVGNlWU+Rybz8fG7txIy473XrOWqNUu46TdX031yjK8/fsjv0EQEfdZK/immMasyD1mUUMhY11zNd999VcGv1i1U244M8vPOfn7vOStoSH3IXdJRy4VtNXxx417edMUyKsr0USHiJ33WSr4ppjGrmWlZtFDIaKoup72+gqbq8oL8QSlkd23uJhwyXnh+06nnzIzXXtrOwOgUG3f2+hidiKTps1byTbGMWSXTIkVsfGqG7/7yCFesbKAq8szZ52e11NBQWcYPnjrqU3QiIiLBp2RapIg9tDvG4NjUM2al00Ih4zmrGnhwdy9D41M+RCciIhJ8SqZFithDu3upLCvhovazt8B7/nmNTM04fry9J8eRiYiI5Acl0yJFyjnHw3tiXNhWS8k56tjOa6qiobKMh/fEchydiIhIflAyLVKk9sdGODY4zsUd596YxcxY31rDY/v6cM7lMDoREZH8oGRapEg9vKcPgN+YJZkGuLCthv74JHt7R3IRloiISF5RMi1SpB7ZG6OtNkJTdWTW96W3FH9sX18uwhIREckrSqZFilAi4dh8cIB1LTVzvrepupyl1eU8tr8/B5GJiIjkF0+TaTP7kJltN7NtZvYNM4uY2Soze9zM9pnZt8ys8PaVFAm4zr44Q+PTrG2uyuj961treLzrhOqmRUREzuBZMm1m7cD7gQ3OuYuAEuDNwGeBLzjn1gADwDu9ikFEzm7LoQEA1i7NLJle01zF4NgUB/tHvQxLREQk73hd5hEGomYWBiqAY8C1wF2p1+8AXuNxDCJyhl8eGqCyvIS2umhG71/TlEy6n+o+6WVYIiIiecezZNo5dwT4HHCIZBI9CGwGTjrnplNv6wbavYpBRM5u88EBzmuqImRn7y99po76CsrCIZ48rGRaRETkdF6WedQDrwZWAW1AJXD9PM6/ycw2mdmmWEwbRkjw5cuYHR6fYm/PCGuXVmd8TknIWL2kkqeUTBecfBm3ImkasxI0XpZ5vBjocs7FnHNTwN3AVUBdquwDoAM4craTnXO3Ouc2OOc2NDU1eRimSHbky5jdcXQIB5zXVDmv81Y3VbHtyBBTMwlvAhNf5Mu4FUnTmJWg8TKZPgQ818wqzMyA64AdwIPAG1LvuQG4x8MYROQM248OAbByyfyS6TVNlUzOJNh1bNiLsERERPKSlzXTj5NcaLgF2Jq6163AR4EPm9k+oBG43asYROTX7Tg2RG20lLpo6bzOW7WkKnX+oBdhiYiI5KXw3G9ZOOfcp4BPnfF0J3Cll/cVkXPbfmSQFY0VWIaLD9OW1pQTLQ2xUzPTIiIip2gHRJEiMjmdYG/vCCsb51fiARAyY1lDBTuODXkQmYiISH5SMi1SRPb0DDOdcKxsrFjQ+cvqK9h1bEg7IYqIiKQomRYpIulZ5YXMTAOsaKxgaHyao4Pj2QxLREQkbymZFikiO48NUR4O0VwbWdD5K1JJ+M6jKvUQEREBJdMiRWXP8WHa66MZ73x4pmX1yfKQXceVTIuIiICSaZGisqdn5FRCvBDRshKaa8rV0UNERCRFybRIkRiITxIbmaCjPrqo63TUV7CnR8m0iIgIKJkWKRrpBHixyXR7XZSuvri2FRcREUHJtEjR2NM7ArCoMg9IJuPTCcfB/ng2whIREclrSqZFisTenmEqykpoqCxb1HU6Usn43p6RbIQlIiKS15RMixSJPT3DtNdF572N+Jna6iIYycWMIiIixU7JtEiR2NMzsuh6aYDycAlLa8rZ26tFiCIiIkqmRYrAQHySE/FJ2uoWn0xDchGiOnqIiIhAeK43mNkG4DeBNmAM2Abc75wb8Dg2EcmS/bFkSUZ7lpLpjvoKfrj1GFMzCUpL9G9yEREpXuf8W9DM3mFmW4CPA1FgN9ALvAD4iZndYWbLcxOmiCxGOpnO1sx0W12yo8fhE6NZuZ6IiEi+mm1mugK4yjk3drYXzezZwFrgkBeBiUj27I/FKS0xmqrKs3K9ttoIAJ2xOKubqrJyTRERkXx0zplp59y/niuRTr3+pHNuozdhiUg27e8dobU2Sii0uE4eaa2pGe70jLeIiEixyqRmehXwPmDl6e93zr3Ku7BEJJv29o7QmppNzoaq8jC10VI6Y9q4RUREitucyTTwPeB24AeA9g8WyTPjUzN0D4yyYWV9Vq/bVhfRzLSIiBS9TJLpcefcFz2PREQ8cbB/lISDttrsLD5Ma62N8stDauojIiLFLZOeVjeb2afM7Hlmdln68DwyEcmKbHfySGurjTIwOsWJ+GRWrysiIpJPMpmZvhh4G3AtvyrzcKnHIhJwXX3JuuZs1kwDtNalO3qM0FDZkNVri4iI5ItMkunfAVY75zT9JJKH9sdGaKgsI1JaktXrtp/W0WPDSiXTIiJSnDIp89gG1HkdiIh4oysWz/qsNEBTVTnhkNHZp44eIiJSvDKZma4DdpnZE8BE+slMWuOZWR3wFeAikqUhf0ByJ8VvkWy1dwB4o7YmF/FOZ1+cDSuy28kDIBQyWmojdKk9noiIFLFMkulPLeL6NwP3OefeYGZlJHdV/ASw0Tn3GTP7GPAx4KOLuIeInMNAfJLBsamsLz5Ma6mJaGZaRESKWibJ9CHgmHNuHMDMokDzXCeZWS1wNfD7AKma60kzezXwotTb7gAeQsm0iCc6+5KdPFo8KPNIX/ep7pPMJBwlWdpdUUREJJ9kUjP9HZ65WctM6rm5rAJiwFfN7Jdm9hUzqwSanXPHUu85TgaJuYgsTHqHQi9qppPXjTI14zh6csyT64uIiARdJsl0+PROHqnvyzI5D7gMuMU5dykQJ1nScYpzzpGspf41ZnaTmW0ys02xWCyD24n4K4hjtqsvTknIWFrtVTKdao+nUo+8FcRxKzIbjVkJmkyS6ZiZnVpsmCrT6MvgvG6g2zn3eOrxXSST6x4za01dqxXoPdvJzrlbnXMbnHMbmpqaMridiL+COGY7Y3Gaq8s9K8FIJ9Nd2lY8bwVx3IrMRmNWgiaTZPqPgE+Y2SEzO0SyvvmmuU5yzh0HDpvZutRT1wE7gO8DN6SeuwG4Z95Ri0hGuvritGR5G/HT1UZLiZaWnNoYRkREpNjMuQDRObcfeK6ZVaUez2cK6n3Af6U6eXQC7yCZwH/bzN4JHATeOO+oRWROiYTjQH+c657l3bIEM6O1Vh09RESkeJ0zmTaz3wO+7pxLwK8n0WZ2HtDqnHvkXNdwzj0JbDjLS9ctLFwRydTxoXEmphO01HhTL53WUhs5tdBRRESk2Mw2M90I/NLMNgObSXbmiABrgBeSrJv+2LlPFxE/pUsvvOrkkdZaG+Hn+/uZmJ6hPJzdLctFRESC7pw10865m0kuGPwG0ERyNvky4AjwNufc651ze3MSpYjMW66S6ZbaKA441D/q6X1ERESCaNaaaefcDHB/6hCRPHKgL05ZOER9ZSadLBfuVEePvjhrm6s9vZeIiEjQZNLNQ0TyUFdfnJaaCCHzdmfCdE22OnqIiEgxUjItUqA6++KebSN+usryMLXRUg70K5kWEZHio2RapABNzyQ4fGLU804eaS016ughIiLFac4+02ZWDrweWHn6+51zf+1dWCKyGEdOjjGdcDmZmYZke7ydx4Zyci8REZEgyWRm+h7g1cA0ED/tEJGA6sxRJ4+0ltoIvcMTxCemc3I/ERGRoJhzZhrocM5d73kkIpI1B1LJdK7KPE7v6HFRe21O7ikiIhIEmcxMP2ZmF3seiYhkzYG+OBVlJdRGS3Nyv3TSrkWIIiJSbGbbTnwr4FLveYeZdQITgAHOOXdJbkIUkfnqTLXFM4/b4qWla7MPqD2eiIgUmdnKPF6RsyhEJKu6+uIsa6jI2f3KwyUsqSo7VastIiJSLGbbTvygc+4g8Lfp709/Lnchish8TEzPcPTkWM4WH6Y110ToUns8EREpMpnUTF94+gMzKwEu9yYcEVmswydGSbjcLT5Ma62N0KWaaRERKTLnTKbN7ONmNgxcYmZDqWMY6CXZLk9EAqirbxSA1tpoTu/bWhvl5OgUA/HJnN5XRETET7OVeXzaOVcN/INzriZ1VDvnGp1zH89hjCIyD119IwA527AlLT0TrtlpEREpJrN187gs9e13Tvv+FOfcFs+iEpEF6+obpSYSpqo8kzby2dN6WkePy5bX5/TeIiIifpntb9vPp75GgA3AUyTb4l0CbAKe521oIrIQnbGRnM9KAzTVlBOyZCcRERGRYjFbmcc1zrlrgGPAZc65Dc65y4FLgSO5ClBE5qezL57zemmAcCjE0poIneroISIiRSSTbh7rnHNb0w+cc9uAZ3kXkogs1MjENLHhCV9mpgFaayJ0xkZ8ubeIiIgfMkmmnzazr5jZi1LHbcDTXgcmIvOX3oEw1z2m09Lt8RIJ58v9RUREci2TZPodwHbgA6ljR+o5EQmYzlPJdO7LPABa66KMTyU4PjTuy/1FRERybc7l/s65ceALqUNEAqwrFsfI/YYtaW2pGfHOWJy2On8SehERkVyabdOWb6e+bjWzp888cheiiGSqq2+EJdXllIUz+U+n7GtJzYh39qluWkREisNsM9MfSH19RS4CEZHF6+yL+zYrDVBfUUq0NKSOHiIiUjRma413LPXti4Ey59zB049Mb2BmJWb2SzP7n9TjVWb2uJntM7NvmVnZ4n4JIgLgnKMzFvetkweAmdFaGz1Vuy0iIlLoMvm/4OXAl82s08y+Y2bvM7Nnz+MeHwB2nvb4s8AXnHNrgAHgnfO4loicQ2x4gpGJadp9rlVuqY2wv1dlHiIiUhzmTKadc59yzl0LXAj8DPhTYHMmFzezDuDlwFdSjw24Frgr9ZY7gNfMP2wROdP+mL9t8dJaa6McPTnG+NSMr3GIiIjkwpzJtJn9uZndC/wYWAP8CdCR4fX/CfgIkEg9bgROOuemU4+7gfZz3PcmM9tkZptisViGtxPxj99jdn9qsxS/Z6bb6yI4tK14vvB73IrMl8asBE0mZR6vI5kE/wS4G7jntHrqczKzVwC9zrmMZrHP5Jy7NbWF+YampqaFXEIkp/wes52xOOXhEPWV/i5DSLfE26+dEPOC3+NWZL40ZiVoMukzfZmZ1QBXAS8BbjWzXufcC+Y49SrgVWb2MiAC1AA3A3VmFk7NTncARxb1KxARIJm8ttVFCZn5GkdrbRQD9qluWkREikAmZR4XAb8L3AC8iWTy+8Bc5znnPu6c63DOrQTeDDzgnPtd4EHgDam33QDcs7DQReR0+2MjvnbySCsLh2iqLj9Vwy0iIlLIMinz+AxQDXwReJZz7hrn3F8s4p4fBT5sZvtIlo/cvohriQgwPjXDkYEx2nzaRvxMbXVR9vUO+x2GiIiI5zIp81j0pi3OuYeAh1LfdwJXLvaaIvIrB/rjOJKL/4KgrS7KAzt7SCQcoZC/ZSciIiJe8mfPYRHJqnR9cqvPnTzS2uoijE8nOHJyzO9QREREPKVkWqQA7O0ZwSAwZR7tqTj2qaOHiIgUOCXTIgVgX2yE5ppyysLB+JFuq0+1x1NHDxERKXDnrJk2sx8A7lyvO+de5UlEIjJve3uGaaur8DuMU2oipdRGS9nTo0WIIiJS2GZbgPi5nEUhIgs2PZOgMxbnty9q8TuUZ2ivi7KnRzPTIiJS2M6ZTDvnHs5lICKyMIdOjDKdcLTXB2dmGqCjPsqj+/twzmE+byQjIiLilUw2bVlrZneZ2Q4z60wfuQhOROa2N1WX3B6QTh5pHfVR4hMzHB0c9zsUERERz2SyWumrwC3ANHANcCfwn14GJSKZ2xfYZDo5U666aRERKWSZJNNR59xGwJxzB51zfwm83NuwRCRTe3uGaawsI1pW4ncoz9CR6uixV8m0iIgUsDl3QAQmzCwE7DWz9wJHgCpvwxKRTO3uGT6VuAZJdaSUumipFiGKiEhBy2Rm+gNABfB+4HLgbcANXgYlIpmZnkmwr3eEZQ3BWnyY1tEQVZmHiIgUtDlnpp1zTwCkZqff75zT34wiAXGgP87UjGNZwDp5pC2rr+Ch3TFmEo6SkDp6iIhI4cmkm8cGM9sKPA1sNbOnzOxy70MTkbnsOp78t21QZ6aXN1QwNjXDwf6436GIiIh4IpMyj38H3u2cW+mcWwm8h2SHDxHx2Z7jw4QseJ080lY0VgK/SvpFREQKTSbJ9Ixz7mfpB865R0i2yRMRn+06PkxLbYSycCY/yrnXXhclZLDr2JDfoYiIiHgik24eD5vZl4FvAA54E/CQmV0G4Jzb4mF8IjKL3T3Dga2XBigLh2iri7LjmGamRUSkMGWSTP9G6uunznj+UpLJ9bVZjUhEMjI6Oc2h/lE2rGjwO5RZLWuoYKdmpkVEpEBl0s3jmlwEIiLzs+v4MA5Y2RjcmWlILkL8+f5+hsanqImU+h2OiIhIVmXSzaPZzG43s3tTj9eb2Tu9D01EZrP9aHK2N73IL6hWpDqN7Dyq2WkRESk8maxa+hrwI6At9XgP8EGvAhKRzOw4OkRVeZglVWV+hzKrVUuSyf42JdMiIlKAMkmmlzjnvg0kAJxz08CMp1GJyJy2Hx1kRWMFZsHeDKWuooyGyjK2HRn0OxQREZGsyySZjptZI8nFhpjZcwH9rSjio+mZBLuPDwe+xCNtZWMlT3Wf9DsMERGRrMskmf4w8H3gPDN7FLgTeJ+nUYnIrDr74kxMJwK/+DBt1ZJKumJxRibUol5ERApLJt08tpjZC4F1gAG7nXNTnkcmIue0/WjyP4dW5snM9OollTiSdd5Xrgp2Kz8REZH5yKSbx+8AUefcduA1wLfSG7bMcd4yM3vQzHaY2XYz+0Dq+QYzu9/M9qa+1i/6VyFSZJ7uHjy1IUo+WNWUTPq3qm5aREQKTCZlHp90zg2b2QuA64DbgVsyOG8a+GPn3HrgucB7zGw98DFgo3NuLbAx9VhE5uHpw4OsaqykJBTsxYdp9alFiE+rblpERApMJsl0unPHy4HbnHP/C8zZi8s5dyy91bhzbhjYCbQDrwbuSL3tDpKz3SKSoamZBNuODnJeU36UeKStaapi88EBv8MQERHJqkyS6SNm9mXgTcAPzaw8w/NOMbOVJLcffxxods4dS710HGg+xzk3mdkmM9sUi8XmczsRX+RqzO7pGWZiOsHqpirP7uGFtc1VdA+MERue8DsUOY0+ayXfaMxK0GSSFL+R5KYtv+WcOwk0AH+a6Q3MrAr4b+CDzrln7NrgnHOkWu6dyTl3q3Nug3NuQ1NTU6a3E/FNrsbsU4eTdcdrluZZMr20GoAthzQ7HST6rJV8ozErQTNnMu2cG3XO3e2c25t6fMw59+NMLm5mpSQT6f9yzt2derrHzFpTr7cCvQsLXaQ4Pd19kuryMEury/0OZV5WLakkHDIl0yIiUlDmVa4xH5bclu12YKdz7h9Pe+n7wA2p728A7vEqBpFC9MtDJ1nVVBn4nQ/PVBYOsbKxgi2qmxYRkQLiWTINXAW8DbjWzJ5MHS8DPgO8xMz2Ai9OPRaRDAyOTbGnZ5jzm6v9DmVB1jZX83T3IBPTM3O/WUREJA/MuWnLQjnnHiG5ycvZXOfVfUUK2ZZDAzhgXZ4m089qqeHebcd5unuQK1Zq8xYREcl/Xs5Mi0iWbTpwgpDl3+LDtGe11mDAz/f3+x2KiIhIViiZFskjmw4MsGpJJZHSEr9DWZCqSJgVjRVKpkVEpGAomRbJE5PTCZ48fDJvSzzS1rfWsPngAONTqpsWEZH8p2RaJE9sPXKSiekE57fkeTLdVsvkTIJfHtLW4iIikv+UTIvkiUf39WMkZ3bz2bNaqykJGT/dq53LREQk/ymZFskTj+zrY9WSSqojpX6HsigVZWHWNVfzwE7t1yQiIvlPybRIHohPTLPl4AAXtdf6HUpWXLq8jt09wxw5OeZ3KCIiIouiZFokD/zfgRNMJ1wBJdP1ADywS7PTIiKS35RMi+SBR/f2UVpied/JI62tNkJzTTkbd/T4HYqIiMiiKJkWCTjnHPfv7GF9aw1l4cL4kTUzrljZwCP7+jg5Oul3OCIiIgtWGH8zixSw/bE4B/tHuWxFvd+hZNXzz1vCdMJx77bjfociIiKyYGG/AxCR2f1kZ7IU4vLlhZVMr2ysoK02wg+eOspbrlyek3sOjU/x4K5eHu86weETo0xMJ6iNlrK+tYZrL1jKJR21mFlOYhERkcKgZFok4O7f0cOqJZU0VpX7HUpWmRnPO6+Ru7cc4fjgOC21Ec/u1Ts8zr88sI/vbO5mbHKGyvISWmsilIZDHD05xk929HDzxr2c31zFB647n5dd3KKkWkREMqJkWiTAeobG2XJwgNdd1u53KJ64em0Td285wtcfP8iHX7ou69efSTi+9tgBPvfj3UxOJ3jBmiVce8FS1jRVEQr9KlkemZjm8a5+7t12nPd8fQvPWdXAZ15/CauWVGY9JhERKSxKpkUC7AdPHcWRrC8uREtrIly2/P9n797j46rr/I+/PpPJZZLm1jTNtVfohdJWLhHBqiigVkBBQVdXAVFR17vuz/WyP9d1dX+K6+qK6w1BFtT1hrreAFGEFQsiKfe29Jb0kt4ySdNcJpdJMt/fHzNTWmiTSTJn5szk/Xw85pHOmTnnfNp+c/LJdz7n863mBw/t4b0XnEpxsCBtxz7YO8wHfvgof911mDMXVHH1eYtPOvs9pzjIhSvreNny+dy7rZMfPrSHS264n8+/LvandgAAIABJREFUbg2XnZGfv8iIiEh66AZEER/7xaP7WDqvjMaqULZD8cwrTq+jOxLlzifTdyPiX9q6ufiG+3li3xHeff5SPvrKFSmVkQQCxoUr67j+irUsnFvKB3/0GJ+/YwvjMZe22EREJL8omRbxqR2dA2za38e6U/NzVjppdVMlzdUhvvbH7YyNx2Z8vO//ZTdvuekhQoUFfO6yNZy/fP6U659r5hTzfy9ZxStW1fHtP7Xx3h9sZHh0fMaxiYhI/lEyLeJTP23dS8DgvFNqsh2KpwJmvP7sBewMR/j5o/umfZzxmONffr2Z//s/T7GmqZJ/uex0mqqnP6NfEDCuXbeEq85dxF2bDnHtLQ8zMDI27eOJiEh+UjKdAbGYI9w/wr6eQcL9I8T0kbFMYnh0nB89vJeWxXOpLi3Kdjiee/7iak6pLePLd2+jb3h0yvsPjIxx3W2tfHdDO+tX1/N/XrGC0qL03BJy8ZoG3vPSU3iovZurbnqI3qGpxyfe03VWconGa35RMu2xsbEYWw728dpvbGDd9ffy2m9sYOuhfn3jyIR+/fh+eodGecWqumyHkhFmxltfuJjO/mE+++vNU9p3d3eE1359A/dt7eRt6xZzzXmLj+vUkQ4vXlbLhy5czpP7ennzTX/Rqo0+o+us5BKN1/yjZNpD0egY+3qHeNf3NtLRMwRAR88Q193WSndEP4zlxJxz3LJhF03VIVY1VGQ7nIw5dX45r3leEz/d2MFPW/emtM9dTx3k0q/9mQO9w3ziVafx8lX1nsX3/CVz+cjLl7P1YD9v+s5fOKzv4ayLxRw9g8O6zkrOGBuLabzmISXTHolGxzjQP0K4f+ToN0xSR88Q0THdzCQn9octnWw+0Mer1zbOuoVDrjiriTVNlXzsZ0/wPxPUT3cPjPCRHz/Gu7+/kfnlxfzr5atZ3VTpeXxnLqzm/7xiBTs7I7zxxgcJ9494fk45sbGxGG1dA/RExnSdlZwQizkO9A1rvOYhJdMeiMUcnZEo4f4RuiNRmp91E1RzdYiiNPbTlfzhnOM//rCN+opiXpTnXTxOJFgQ4CMvX87yunI+9OPH+NCPHmXT/l6cc4zHHFsO9PH5O7bw4i/eyy8f38/rzmzi068+nfkV3q2e+Gxrm6v46CtXsLt7kDfe+CAHe4czdm6Ji8Uc+3uH2Ht4iMORqK6zkhO6IiOMjMU0XvOQkmkPdEeiRBPfMD/buJfrr1h79BunuTrEt686m5qy/L+pTKbuV4/vZ9P+Pi4/s5mCNNf95oqSwgL+8ZLTeO2ZTfzmiQNccsOfWfaPd7LyU3fyqq/ez3fub2NNUyXXX7GW17csoLAg85ex1U2VfHz9SvYfGeLKbz7Arq5IxmOYzbojUTr7RygtKtB1VnLG8Og4BcaJx+tbNF5zWVZWQDSz9cBXgQLgJufcF7IRhxdiMcfQ6BjjMcfPNu7lmhcu4dYH2vnUpauoKSuitryYpspQ2m+QktzXNzzK536zhVNqy3jxLJyVPlYwEOANLQt41ep6Ht7Vw6G++OxvY1UJZyyopjJUmOUIYWVDBf94ySquv+tprvjmA/zXteewptn7UhOB6Ng43ZEoRQUBXWclZxSYcWhghGvXLeGWDc+M17llRVSGghqvOSzjUzpmVgB8HXgVsAp4k5mtynQcXojFHFsP9bOzM8LtrXt43wXLuPWBdq44e8HRC3xDeTHBoD4QkOf6wp1P05W40OqiGldeUsgFK+fzpnMW8qZzFnL+8vm+SKSTTqmdw6dffToFAeMNNz7I3ZvSt4qjnFxRsICfbdxLdVkh165b8pzrbGNFia6z4juhogKKgkZpUQFvOmcRVaFC+ofHiDlHRbF/rmsyddm42pwD7HDOtTnnosCPgMuyEEfadUeiXHdbKzfcs52XrKjjt4/v46OvXMmy+XOoryyhobyYojT1vpX8cseTB/jvh/ZwydoGTqmdk+1wZAqaqkL882tOp7GyhHd9byM33LNdLa48VlNWxAcvWs437t0BwCcuPo2V9eUEA8ackgIKC1V7Kv5TFSqirDhIdMyxuKaUeXOKWTKvjJ8+vIcjw1oQKpdlI5luAo7te9WR2JbzomPjdPQM8ejeI3zpd1s5a3ENhyNRioMBGitDSqTlhJ7a18tHb3+cU2vL+JuWBdkOR6ahurSIf7r0dNadOo8v/34b19zyVzr7dGOiVwIBY15ZEVecvYCAGdsODfChHz3G5d94gOHozJekF/FCIGCUFwc5PBiv+d8RHuDDP36Mb9+/S508cpxvszszeyfwToCFCxdmOZrUFAULaK4OHU2o3/W9jTRXh/jFe9bpY/tZYDpjdkfnAG+95a+ECgv40EXLCWbhZjpJj6JggPe89BRW1JfzvQd38/Kv/Il/unQVrzurydctDnPxWgsQCAT47G82H9diTB0RZodcHbOgcZuvsvGTex9w7PRbc2LbcZxzNzrnWpxzLbW1tRkLbiZqyor4ztUtx92h+52rW3SH7iwx1TH7l7ZurvjmA4yOOz6+/jRq5hRnIErxkplx0Wl1/L/XrWF+eTF//9PHecO3H+SxvUeyHdpJ5eK1FnS9nc1ydcyCxm2+MucyW9tnZkFgG3Ah8ST6YeBvnXObTrZPS0uLa21tzVCEMxOLuURrvHGKggXUlBVpVtrfPPnPmWjMDkbH+M8/7uBb/7uT+soS/uGVK6nLYJ9kyYyYc9z7dCc/3dhB79Ao5y+v5R0vXsK6U+al45qQ8XHrR7re5hSN2QSN25yS0n9Mxss8nHNjZvY+4HfEW+N9d6JEOtcEAkZtuWYY5cR+9fh+PvvrzYQHRnjp8lquOm8Rpaqlz0sBMy48rY4XnjKP320+yJ1PHeCqm8MsnFvKZWc0ctFpdaxpqtQP0RnQ9VZykcZt/snKT3Hn3B3AHdk4t0g2Rcdi1JYX874LTmV5XXm2w5EMCBUVcPkZTVy8uoGH2ru5f3sXX793B1/74w4qQ4U8f3E1a5qqWFFfztLaMpqrQ/oFS0Qkh+iKLZJBrzuziRV1cxgY0Z3bs01RMMCLl9Xy4mW19A2N8njHETbv72PLgX7u2dLJsQV3FSVB1q+u54tXPi9r8YqISGoyXjM9HWYWBnan8NZ5QJfH4aTCL3GAf2Lxaxxdzrn16T7JFMZskl//fWZrDODvOPwwbv3875MNiuN4fr3Wgj/+jRTDM/wQx8liSGnc5kQynSoza3XOtSiOZ/glFsUxMb/E5Yc4/BCD4picX+JSHIpjqvwQm2LwVxwzjUFNbUVEREREpknJtIiIiIjINOVbMn1jtgNI8Esc4J9YFMfE/BKXH+LwQwygOCbjl7gUx/EUx+T8EJtieIYf4phRDHlVMy0iIiIikkn5NjMtIiIiIpIxSqZFRERERKZJybSIiIiIyDQpmRYRERERmaacSKbXr1/vAD308OLhCY1ZPTx+eELjVg8PH57QmNXD40dKciKZ7urK9iqTIlOjMSu5SONWco3GrPhBTiTTIiIiIiJ+pGRaRERERGSalEyLiIiIiExTMNsBSO6LxRzdkSjRsXGKggXUlBURCFi2wxI5KY1ZERHvzZZrrZJpmZFYzLH1UD/X3dZKR88QzdUhvnN1CyvqyvPyG0Zyn8asiIj3ZtO1VmUeMiPdkejRbxSAjp4hrrutle5INMuRiZyYxmx+6R8e5eY/t/Ot/93J8Oh4tsMRkYTZdK3VzLTMSHRs/Og3SlJHzxDRMf1QE3/SmM0f4f4RLv7q/YQHRgD4aetefnjducyvKMlyZCIym661mpmWGSkKFtBcHTpuW3N1iKJgQZYiEpmYxmz++MyvN9EzGOXTl67iE69aye7uQb74u63ZDktEmF3XWiXTMiM1ZUV85+qWo98wyZqomrKiLEcmcmIas/nh/u1hfvPEAV57ZhMrGypY21zF+tX1/GxjB0/t6812eCKz3my61qrMQ2YkEDBW1JXzi/esy/u7dSU/aMzmh1sf2EVVaSGveV7j0W2Xn9HE/24L87U/bufbV7VkMToRmU3XWiXTMmOBgFFbXpztMERSpjGb28L9I9z7dJiL19QTLHjmA9ay4iAvOnUef9hyiN7BUSpLC7MYpYjMlmutyjxERCSn/PKxfYw7x/nL5z/ntXWnzmN03HHXpgNZiExEZiMl0yIiklN+8eg+Tq0to+lZNzcBLJ1XRn1FCb98bH8WIhOR2UjJtIiI5IzO/mE27e+jZfHcE75uZrzwlBoe3NnN4TzsZysi/qNkWkREcsaft3cBsLa56qTved6CKhzw4M7uDEUlIrOZkmkREckZ92/voiIUZFFN6Unfs7S2jFBhARt2dmUwMhGZrZRMi4hITojFHPdvD7OmsZKAnby9VjAQ4LSGcjbsUDItIt5TMi0iIjlh66F+ugairGmunPS9pzdWsrt7kH1HhiZ9r4jITCiZFhGRnLBxdw8AK+srJn3v6qZ4wv2AZqdFxGOeJtNm9mEz22RmT5nZD82sxMyWmNlDZrbDzH5sZvm3rqSIiKTdI3t6qAwVMj+FRSCaq0OUFRXwyJ4jGYhMRGYzz5JpM2sCPgC0OOdWAwXAG4Hrga84504FeoC3exWDiIjkj0f3HOHU+XOwCeqlkwJmLK2dw2N7ezIQmYjMZl6XeQSBkJkFgVLgAHABcHvi9VuByz2OQUREclxPJEp7V4Rl8+ekvM+p8+ew7eAAg9ExDyMTkdnOs2TaObcP+BKwh3gS3QtsBI4455JXtg6g6UT7m9k7zazVzFrD4bBXYYqkjcas5KJcGbePJmaYp5RM185h3Dme2tfnVViSBbkyZmX28LLMoxq4DFgCNAJlwPpU93fO3eica3HOtdTW1noUpUj6aMxKLsqVcfvoniMEDJbWpp5Mn5JIvFXqkV9yZczK7OFlmcdFQLtzLuycGwV+DqwDqhJlHwDNwD4PYxARkTzw5L5emqtLKSksSHmf5M2Kj+/t9TAyEZntvEym9wDnmlmpxe8WuRDYDNwLXJl4zzXALz2MQURE8sCmfX0Trnp4Mktry3hsrzp6iIh3vKyZfoj4jYaPAE8mznUj8DHgI2a2A6gBbvYqBhERyX2d/cOEB0ZYXFM25X0X1ZSx78gQfcOjHkQmIhLvtuEZ59yngU8/a3MbcI6X5xURkfyxeX/8BsLF05iZXjQ3vs/TB/o5Z8nctMYlIgJaAVFERHxu84F4Mr1wmjPTAFsOqKOHiHhDybSIiPja5v19zC8vZk7x1D9MrS4tpKIkeHR2W0Qk3ZRMi4iIr23a38fCuVMv8QAwMxbWlB6d3RYRSTcl0yIi4ltD0XF2dUWOlmtMx8K5ZWw71M/YeCyNkYmIxCmZFhER39rROYADFswNTfsYi2tKGRmL0d4VSV9gIiIJSqZFRMS3th7qB6C5enplHsfuu+3QQFpiEhE5lpJpERHxre2H+gkGjPqKkmkfo6kqRMBgWyIxFxFJJyXTIiLiW9sO9dNUHaIgYNM+RlEwwPyKErZ3KpkWkfRTMi0iIr617VA/TVXTr5dOaq4KsfWgkmkRST8l0yIi4ksDI2PsOzLMghnUSyc1V4fY3T1IdEwdPUQkvZRMi4iIL20/evPhzGemm6pLGYs5dnWro4eIpNeky0mZWQvwYqARGAKeAn7vnOvxODYREZnFtie6b8ykk0dSMiHfdqif5XXlMz6eiEjSSWemzexaM3sE+AQQArYCncCLgD+Y2a1mtjAzYYqIyGyzMzxAMGDMLy+e8bEaK5MdPdQeT0TSa6KZ6VJgnXNu6EQvmtkZwDJgjxeBiYjI7Lajc4CGqhICM+jkkZTs6LGzU8m0iKTXSZNp59zXJ9rROfdY+sMRERGJ2xEeoLFy5vXSSY2VJexQMi0iaZZKzfQS4P3A4mPf75x7jXdhiYjIbDYyNs7ew4OcvbA6bcdsrApx96ZDjMfcjPpWi4gca9JkGvgf4Gbg14B6ComIiOd2dQ0Sc/EEOF0aK0NEx2Ps6xliYc3Mb2oUEYHUkulh59wNnkciIiKSsDMcL8dIazKdONbOrgEl0yKSNqn0mf6qmX3azM4zs7OSD88jExGRWSt5o2BDZUnajtlYVXLcsUVE0iGVmek1wFXABTxT5uESz0VERNJuZ3iAeXOKKCksSNsxy0sKqSgJsjOshVtEJH1SSaZfDyx1zkW9DkZERATS38kjqbEqdLSEREQkHVIp83gKqPI6EBEREQDnHG3hCA1prJdOaqgMqT2eiKRVKjPTVcDTZvYwMJLcqNZ4IiLihXD/CIPR8bTWSyc1VpVw79YovUOjVIYK0358EZl9UkmmP+15FCIiIgltXfGaZi+S6frEMdu7IpyxQB+6isjMpZJM7wEOOOeGAcwsBNSlcnAzqwJuAlYTv2nxbcBW4MfEF4HZBbzBOdcz1cBFRCQ/tYWTybQ3ZR4A7V0DSqZFJC1SqZn+Kccv1jKe2JaKrwJ3OedWAs8DtgAfB+5xzi0D7kk8FxERAeKJblFBgJo5RWk/dl15MQF7JmEXEZmpVJLp4LGdPBJ/nvQKZ2aVwEuIr56Icy7qnDsCXAbcmnjbrcDlUw1aRETyV1s4Qn1lCQFL/5LfwYIA8ytKjpaSiIjMVCrJdNjMjt5saGaXAV0p7LcECAO3mNmjZnaTmZUBdc65A4n3HCTFkhEREZkd2roiR2ubvVBfUUK7ZqZFJE1SSabfDXzSzPaY2R7gY8A7U9gvCJwFfNM5dyYQ4VklHc45R7yW+jnM7J1m1mpmreFwOIXTiWSXxqzkIr+N29HxGHsPD9LoYTLdUFlCe1eE+I8gyTV+G7MikybTzrmdzrlzgVXAKufcC51zO1M4dgfQ4Zx7KPH8duLJ9SEzawBIfO08yXlvdM61OOdaamtrU/m7iGSVxqzkIr+N272HBxmLOU9nphsqSxgaHedg37Bn5xDv+G3Mipw0mTazt5jZ0dedcwPOuYFjXj/FzF50sv2dcweBvWa2IrHpQmAz8CvgmsS2a4BfziB+ERHJI7u6vevkkXS0o4dKPUQkDSZqjVcDPGpmG4GNxOufS4BTgfOJ101P1onj/cAPzKwIaAOuJZ7A/8TM3g7sBt4wo7+BiIjkjWSXDa9npgF2dkV44anzPDuPiMwOJ02mnXNfNbP/BC4A1gFrgSHi7e2ucs7tmezgzrnHgJYTvHTh9MIVEZF8tqs7wpziIOXFqSyDMD3VZUUUBQPsUkcPEUmDCa9Wzrlx4PeJh4iIiKfauyLUVxRjHrTFSwqY0VBZomRaRNIilW4eIiIiGRHvMe1dvXRSvXpNi0iaKJkWERFfGB4d50DvsKf10kn1lSXxziHjscnfLCIyASXTIiLiC8908vA+mW6oLGEs5ujoGfL8XCKS3ya9w8PMioErgMXHvt859y/ehSUiIrNNsobZy7Z4SUfb43VFWDyvzPPziUj+SmVm+pfAZcAY8VUMkw8REZG0SdYw11dkpswD4sm0iMhMpNJ7qNk5t97zSEREZFbb1RWhKlRIqKjA83OVFwcpKy5QMi0iM5bKzPQDZrbG80hERGRWa+uKZOTmQwAzo6GiRMm0iMzYSWemzexJwCXec62ZtQEjgAHOObc2MyGKiMhssKsrwpqmyoydr74yRFvXQMbOJyL5aaIyj0szFoWIiMxq/cOjdA1EM1IvndRQWcKGHV0Mj45TUuh9aYmI5KeTlnk453Y753YDn0v++dhtmQtRRETy3a6uQSAznTyS6itLcMDu7sGMnVNE8k8qNdOnH/vEzAqAs70JR0REZqNkuUWmaqbh2PZ4KvUQkek7aTJtZp8ws35grZn1JR79QCfxdnkiIiJpsatrEAPqMljmkSwpae/SzLSITN9EZR6fd86VA//mnKtIPMqdczXOuU9kMEYREclz7V0D1MwpoiiYuYV5Q0UFVJcWamZaRGYklT7TPzWzs561rRfY7Zwb8yAmERGZZdq7ItRnsF46qb6y5OhiMSIi05FKMv0N4CzgCeJt8dYATwGVZvZ3zrm7PYxPRETynHOO9q4I5yypyfi56ytCPNFxJOPnFZH8kcrnafuBM51zLc65s4EzgDbg5cAXvQxORETy3+FIlL7hMRqrMlcvndRQWUJ3JErf8GjGzy0i+SGVZHq5c25T8olzbjOw0jnX5l1YIiIyWyRXIWzIYCePpOQ528Mq9RCR6Uklmd5kZt80s/MTj28Am82sGNCv8iIiMiNt4WQynfma6eQ5tRKiiExXKsn0W4EdwIcSj7bEtlHgZV4FJiIis0NbV4RgwJg3pzjj566rKCZgmpkWkemb9AZE59wQ8O+Jx7PpV3kREZmR9q4B6ipKKAhYxs8dLAgwv6KEneroISLTNGkybWbrgH8GFh37fufcUu/CEhGR2aItHMlKvXRSfUUJbZ2aGxKR6UmlNd7NwIeBjcC4t+GIiMhsMh5z7O4e5BWn12UthsbKEu7dGiYWcwSyMDsuIrktlWS61zl3p+eRiIjIrLP/yBDR8VhWbj5MaqgKMTQ6zsG+YRqrsheHiOSmVJLpe83s34CfAyPJjc65RzyLSkREZoW2LLbFS0qeuy0cUTItIlOWSjL9gsTXlmO2OeCCVE5gZgVAK7DPOXepmS0BfgTUEC8duco5F009ZBERyRdt4XitcnaT6XgC3d41wIuWzctaHCKSm1Lp5jHT9ncfBLYAFYnn1wNfcc79yMy+Bbwd+OYMzyEiIjloZ3iAsuICKkOFWYuhurSQUGGAnWqPJyLTMGmfaTOrM7ObzezOxPNVZvb2VA5uZs3AJcBNiedGfEb79sRbbgUun07gIiKS++KdPELEfzxkh5nRWBViZ1gdPURk6lJZtOW/gN8BjYnn24gv3pKK/wD+AYglntcAR5xzY4nnHUDTiXY0s3eaWauZtYbD4RRPJ5I9GrOSi7I9bnd0DtCYxRKPpIbKEDvUHi8nZHvMijxbKsn0POfcT0gkxIlEeNIWeWZ2KdDpnNs4ncCcczc651qccy21tbXTOYRIRmnMSi7K5rjtHx6ls3/EFzf9NVWFONA7TGRkbPI3S1bpWit+k0oyHTGzGuI3HWJm5wK9Key3DniNme0ifsPhBcBXgSozS9ZqNwP7phq0iIjkvvZEJw8/JNPJGNpUNy0iU5RKMv0R4FfAKWa2AbgNeP9kOznnPuGca3bOLQbeCPzROfdm4F7gysTbrgF+OZ3ARUQktyVrlBuz2GM6qbEqXmqiumkRmapUunk8YmbnAysAA7Y650ZncM6PAT8ys88BjxJfYVFERGaZnZ0RAgZ1FcXZDoX6ihICpmRaRKbupMm0mb3uJC8tNzOccz9P9STOufuA+xJ/bgPOmUKMIiKSh9q6BqivKCFYkMqHpN4KFgSoryjRTYgiMmUTzUy/eoLXHPEVEUVERKZl26EBGnxQL53UUKWOHiIydSdNpp1z12YyEBERmT1Gx2Ps6opw8ZqGbIdyVFNViMf3HmFsPOaL2XIRyQ26WoiISMbt7h5kLOZorvbPzHRTVYixmGNX92C2QxGRHKJkWkREMm5HZz8QT2D9IpnYbz/Un+VIRCSXKJkWEZGM234o0RbPR8l0U3UII17LLSKSqul08wCYUjcPERGRY23vHKC2vJiSwoJsh3JUcbCA+RXFbOvUzLSIpE7dPEREJON2dA74qsQjqamqlG0HlUyLSOrUzUNERDJqPObYGR7gotPqsh3KczRXh7jjySOMjscoVEcPEUnBpCsgApjZJcDpQElym3PuX7wKSkRE8tfew4OMjMV8OTPdXB3v6LG7O8Kp88uzHY6I5IBJf+02s28BfwO8n/hy4q8HFnkcl4iI5KmnE2UUC+aWZjmS52qujse09aBuQhSR1KTyGdYLnXNXAz3Ouc8A5wHLvQ1LRETy1bZE6zk/9ZhOaqoKETDYerAv26GISI5IJZkeSnwdNLNGYBTwz5JVIiKSU7Ye7Keuwl+dPJKKggEaq0Js0U2IIpKiVGqmf2NmVcC/AY8Q7+Rxk6dRiYhI3tpysI8F1f4r8UhaUF3KlgOamRaR1KQyM/1F59wR59zPiNdKrwQ+521YIiKSj4ZHx9ndNejLeumkhXNL6egZon94NNuhiEgOSCWZfjD5B+fciHOu99htIiIiqdoZHmDcORb4sF46aWEi0d+mZcVFJAUTrYBYDzQBITM7k3gnD4AKwL9TCiIi4ltbfdzJI2lhTTy2zQf6OXvR3CxHIyJ+N1HN9CuBtwLNwJeP2d4HfNLDmEREJE9tPdhPMGDUV5ZM/uYsqSkroqy4gKdVNy0iKZhoBcRbgVvN7IpEvbSIiMiMPLW/lwVzSwkG/Lu6oJmxcG4pm/crmRaRyaVyNdtgZjeb2Z0AZrbKzN7ucVwiIpJnnHNs2t/H4hr/lngkLa4pY8vBPsbGY9kORUR8LpVk+hbgd0Bj4vk24EOeRSQiInnpQO8wRwZHWVxTlu1QJrVkXhnDozF2hiPZDkVEfC6VZHqec+4nQAzAOTcGjHsalYiI5J1k2cSiHEiml86bA8CT+3qzHImI+F0qyXTEzGqIL9aCmZ0L6OoiIiJTsml/HwYsyoEyj4bKEkoKAzylZFpEJpHKCogfAX4FnGJmG4Ba4EpPoxIRkbyzaX9vIkn13zLizxYIGIvmlmlmWkQmNWky7Zx7xMzOB1YQ7zW91TmnZaFERGRKNu3vPdrDORcsmVfG/24LMx5zFARs8h1EZFaatMzDzEqADwCfBT4DvDexbbL9FpjZvWa22cw2mdkHE9vnmtnvzWx74mv1TP8SIiLib90DI+w7MswptXOyHUrKlswrY2h0nB2dA9kORUR8LJWa6duA04GvAf+Z+PP3UthvDPh759wq4FziSfgq4OPAPc65ZcA9ieciIpLHnuiIl0sszaFketn8eKyP7unJciQi4mep1EyvTiTESfea2ebJdnLOHQAOJP7cb2ZbiC9Pfhnw0sTbbgXuAz42hZhFRCTHPLb3CAGDpfP838kjqb7O1EP7AAAgAElEQVSyhPLiII/s6eGN5yzMdjgi4lOpzEw/kujgAYCZvQBoncpJzGwxcCbwEFCXSLQBDgJ1UzmWiIjknsc7jtBUHcqJmw+TzIxT5s/hkT1Hsh2KiPhYKsn02cADZrbLzHYBDwLPN7MnzeyJyXY2sznAz4APOeeOW5vVOedItNw7wX7vNLNWM2sNh8MphCmSXRqzkosyMW6dczy+9winzMudEo+kZfPnsKNzgN4h3XfvF7rWit+kkkyvB5YA5yceSxLbLgVePdGOZlZIPJH+gXPu54nNh8ysIfF6A9B5on2dczc651qccy21tbWp/F1EskpjVnJRJsZtR88QPYOjOVUvnbSsrhyAx/dqdtovdK0Vv5k0mXbO7Z7ocbL9zMyAm4EtzrkvH/PSr4BrEn++BvjlTP4CIiLib48kbuA7dX7uJdOn1JZhwMbduglRRE4slRsQp2sdcBXwpJk9ltj2SeALwE/M7O3AbuANHsYgIiJZ1rqrh1BhgIVzc6fHdFJpUZDF88p4qL0726GIiE95lkw75/5MfJGXE7nQq/OKiIi/PLzrMKfOL8/ZhU9Oa6jgD5sPMTw6nlM3UIpIZqRSMy0iIjItvUOjbD3Yz4r68myHMm2rGiqIjsd4THXTInICSqZFRMQzj+zpwQEr6nI3mV5ZX07A4C9tKvUQkedSMi0iIp5p3XWYgOXmzYdJZcVBFteU8eBOJdMi8lxKpkVExDN/aTvMknllOV9rvKqxgkf29BAZGct2KCLiM0qmRUTEE/3Dozy25wirmyqzHcqMnbGgitFxx4YdXdkORUR8Rsm0iIh44q/thxl3jjV5kEyvqC8nVFjAvVu14p6IHE/JtIiIeOLPO7ooDgZYNj93bz5MCgYCrGmu5N6nO3HOZTscEfERJdMiIuKJP2/vYkV9OUXB/PhRc8aCKg72DbPlQH+2QxERH8mPK5yIiPjKwd5htncOsLox90s8ks5cUEXA4K6nDmQ7FBHxESXTIiKSdn/YcgiAsxZWZzmS9KkqLeK0hgp+9fh+lXqIyFFKpkVEJO1+v/kQ9RUlNFaVZDuUtDrvlBp2dQ+yaX9fxs89HnN0D4zQPzyqZF7ER4LZDkBERPLLwMgYD+zs4uWr6jGzbIeTVucsnsstG3bx68f3Z6Tl397Dg/ykdS/3bu3k6QP9jMXiSXRlqJCWRdW8+nmNrF9dn/N9vEVymZJpERFJq/u3hRkdd5y9KH9KPJLKSwo5Y0EVt2/s4O9fscKzmyv3HxniS3dv5ReP7MMMlteVc/GaBqpLixiLxdh/ZJjHO45wz9Od1N1ZzIcvWs4bWhYQCOTXLy8iuUDJtIiIpNVvnjhARSjIirrcb4l3IhedVsf1dz3NnU8d4LIzmtJ6bOcc339oD5+/Ywuj4zEuXtPAq1bXUzOn+DnvjTnHU/t6+dkjHXz8509y+8YOvvI3Z7BgbmlaYxKRiSmZzoBYzNEdiRIdG6coWEBNWZFmD8SXNFZlpvqHR/nDlkOcv7yWgjwdO2ubK6mrKOZ7D+5OazJ9ZDDK//np4/xhSydrmip5x4uWML/i5DXnATPWNlexpqmSP20P870Hd3PxDffzlTecwUWr6tIWl6SfrrX5Rcm0x2Ixx9ZD/Vx3WysdPUM0V4f4ztUtrKgr1zeO+IrGqqTDXU8dZGQsxotOnZftUDwTMOOi0+r4wUN72Li7Jy3lLFsP9vOO2x7mwJFhrjlvEa88PfV6czPj/OXzWVlfwQ33bOe621r5xMUrue7FS/OuZj0f6Fqbf9TNw2PdkejRbxiAjp4hrrutle5INMuRiRxPY1XS4X8e20d9RTGnzp+T7VA8ddFpdVSEgnz57q0zPtY9Ww7x2m9sYGB4jH+6dBXrVzdMKwmuqyjhn169inOWzOX/3fE0n/vtFmIxdf3wG11r84+SaY9Fx8aPfsMkdfQMER0bz1JEIiemsSoztasrwoYd3bxoWW3ez4iWFBZw2fOa2LCzmwd2dE3rGM45brq/jXfc2kp9RQmfu3wNy2ZYZ14cLOADFy5j/ep6bv5zOx+9/QnGxmMzOqakl661+UfJtIdiMcd4zNFcHTpue3N1iKKg2hiJvxQGAyccq4V5shS0eO/7f9lNQcC4YOX8bIeSERedVsf88mI++YsnGYpOLRGKjsX45C+e4nO/3cLzF8/lU5euYm5ZUVriCphx9bmLuPLsZn72SAcf/PFjjCqh9gXlBflJPyU91DUwwud+u5nrr1h79BunuTrEt686m5o0XTRF0iUYMP7tyuPH6r9duZagavgkBUPRcX66sYPnL66munR2XN+KggGue/FSdnUPcv1dT6e836G+Yf72O3/hh3/dw2VnNPLBi5alvU+0mXHFWc28+QUL+e0TB3j/fz9CdEwJdbZ1R6LKC/KQbkD0yNhYjEh0jLs3dxLuj/KpS1dRFSrkyNAo83TXrvjQYHScL9619bix+sW7tvKff3smlGU7OvG7Hz+8h96hUV65qj7boWTU6qZK1q+u578e2MXimlLeum7JhO+/Z8shPnr7E0RGxnj/BafywlO8vVHz0rWNBAPGrQ/u5j0/2MjX33wWxZoBzZqRsXHlBXlIybRHOgdG2NU1SHN1iEf3HuFd39sIxH8D/cV71mU5OpHnMiA8MHJ0rALP+ShS5ESGR8f5+n07WdVQzsqGimyHk3FvecEiugdG+MyvN9MdifLBC5cRLDj+g9/2rghfunsrv33iAAvnlvLJV51GU4a+v9avbiBgxi0P7OLd39vIN99ytlZMzBKDE+YFP37nudkNTGZEZR5pFos5wv0jjI7HuOGe7c/5KOdbb9FHOeI/sZjDjOeM1+uvWIsmS2QyP/zrHsL9I7zurOZsh5IVBQHjfS9bxkuW1/K1P+7gZV+6j3+/eys/eXgv37xvJ2+56SEu/Pf7+P3mQ1xxVjP/evnqjCXSSa84vZ53vGgJ920N8/ZbH2YwOpbR80ucrrP5STPTaXRs78hPXbqK8MAIX/rdMx+bD0bHmV9erI9yxFeS47Z3aJRbH2g/7qPHWx9o559fszrbIYqPHY5E+Y8/bOf0xgpWzcJZ6aSiYIB3n38KLYurufPJg3ztjzuOvlZfUcxrntfEK0+voyqL9eQXnlZHsCDAjX+KJ/i3vPUcKksLsxbPbGRmJ7zOfkbX2ZymZDqNju0due1AH99889n83Q828q7vbaS5OsQ333I21SFduMRfuiNRvvL7rbz/gmVcu24JH739iaMLCXzrLWcz/wTLGIskffGup+kfHuWa807L+3Z4qWhZNJeWRXOJjsU4MhilvKSQUJF/SirOX15LaWEBN/xxO6/75gZufds5NFdr+fFMiMUckZGx51xnv/KG51FUqO+dXJaVZNrM1gNfBQqAm5xzX8hGHOmW7B155oIqLnleI1+4c8txv31+7Z5t/Otr11KrWjXxkejYOFeft5i/+8Ej1M4pPu6TlIbKYoJqjScncd/WTn708F4uWdPAgrlKyI5VFAxMuBR4Nj1/yVw+8aqVfPn327j86xu48eoWzlo481UcZWJdkRHeesvDz7nOBguM4WhMN3rnsIwn02ZWAHwdeDnQATxsZr9yzm3OdCzpVhQsoLk6xLtfegqHI1Hu3tzJ3Zs7j3vPp1+tpuziL0XBAuorQ3T0DNHRM3TcDYh/+oeXUZPF2MS/DvUN85GfPM6CuSHe0LIg2+HIFK1qrOSfX3M6X7p7K3/z7Qf5zGtW86ZzFujTBQ8Nj46f8Dp7z0fOV4/pHJeNKadzgB3OuTbnXBT4EXBZFuJIu5qyIr5zdQs1ZUV0R6Jqyi45oaasiJKTLNhSoJ+rcgJ9w6Nce8vDREbG+MAFyyjSpxc5qbm6lM9etprTGir45C+e5H0/fJQjg1rS2isFZie8zhYHA2pMkOOycQVsAvYe87wjse04ZvZOM2s1s9ZwOJyx4GYiEDBW1JXTWBXiZxv3qin7LJOLYxbi4zZUHDjhgi1+qvUUb0x13PYOjvK2Wx5m66F+PnTRctXb5rjykkI+9sqV/E3LAu566iAv//Kf+PXj+3HOZTu0k8rVa22oqODE19nigBoT5DjL9DeMmV0JrHfOvSPx/CrgBc65951sn5aWFtfa2pqpEGcs2R3hK7/fyhVnL6CmrIj55cU0VoZUf+o/nlzBcnHM7uqOsLt7kNKiAgaj4yyqKWVxTZku8v6UlXG7/VA/7/7+RnZ3D/Lel53KuUtVBJRP2rsi3HR/G21dEZ6/uJqPrV9Jy+K56Tr8rL/W6jqbk1L6j8nGDYj7gGML7JoT2/JGcob6X1+7lujYOEXBAmq0upH4WCBgLK4po7ykUGNWnmMoOs7Nf27jhnt2UFIY4BOvWsmqxspshyVptmReGZ+9bDV/3NrJzzZ2cOW3HuT5i6t56wuX8PJVdSrnmSFdZ/NXNpLph4FlZraEeBL9RuBvsxCHpwIBo7ZcLcUkd2jMyon0RKKs/+qfONQ3wvMXV/O2dUuy2itZvBUIGBedVseLTp3HvVs7ufOpg7z3vx+hoiTIK06v54KV8zl3aQ1zVbI4LbrO5qeMJ9POuTEzex/wO+Kt8b7rnNuU6ThERGRy1WVFvPp5jTRVhmblUuGzVUlhAa9a3cArV9XzxL5eNuzo4s6nDnD7xg4AFteUcnpTJcvmz2FRTSmNlSHqKkporAppBltmnaz0mXbO3QHckY1zi4jI1HzgwmVs2teX7TAkCwIB44wFVZyxoIrxmGNneIAtB/rYGR6gdddh7njiAMfeefWTd53HOUvSVmctkhMyfgPidJhZGNidwlvnAV0eh5MKv8QB/onFr3F0OefWp/skUxizSX7995mtMYC/4/DDuPXzv082KI7j+fVaC/74N1IMz/BDHCeLIaVxmxPJdKrMrNU516I4nuGXWBTHxPwSlx/i8EMMimNyfolLcSiOqfJDbIrBX3HMNAYVNomIiIiITJOSaRERERGRacq3ZPrGbAeQ4Jc4wD+xKI6J+SUuP8ThhxhAcUzGL3EpjuMpjsn5ITbF8Aw/xDGjGPKqZlpEREREJJPybWZaRERERCRjlEyLiIiIiEyTkmkRERERkWlSMi0iIiIiMk05kUyvX7/eAXro4cXDExqzenj88ITGrR4ePjyhMauHx4+U5EQy3dWV7VUmRaZGY1Zykcat5BqNWfGDnEimRURERET8SMm0iIiIiMg0BbMdgOS+WMzRHYkSHRunKFhATVkRgYBlOyyRk9KYlVykcSviT0qmZUZiMcfWQ/1cd1srHT1DNFeH+M7VLayoK9dFXnxJY1ZykcatiH+pzENmpDsSPXpxB+joGeK621rpjkSzHJnIiWnMSi7SuBXxL81My4xEx8aPXtyTOnqGiI6NZykikYlpzEou0rjNH9/9czu3bGinZk4x/3jJaTx/8dxshyQzpJlpmZGiYAHN1aHjtjVXhygKFmQpIpGJacxKLtK4zQ+3PbiLf/nNZkJFBezrGeIdt7ayp3sw22HJDCmZlhmpKSviO1e3HL3IJ+v4asqKshyZyIlpzEou0rjNfYf6hvnsbzZz5sIqPnXpKj558WmMxxwf/vFj2Q5NZkhlHjIjgYCxoq6cX7xnne4wl5ygMSu5SOM29333z+2MxxzXnLeYYCBAfWUJrz+7mVse2MUje3o4a2F1tkOUaVIyLTMWCBi15cXZDkMkZRqzkos0bnNX79Ao339oNy9YWkNdRcnR7S9ZXstPWvdyy4ZdSqZzmMo8RERERDz0myf2ExkZ55I1DcdtLyks4PwV87njiQN09g1nKTqZKSXTIiIiIh66e9Mh6iqKWTqv7DmvvXR5LePO8fsth7IQmaSDkmkRERERj/QNj7JhRxcti+Zi9twa9+bqEPPLi/nDZiXTuUrJtIiIiIhH7n26k7GYO2k/aTPjrIXVbNjRzWB0LMPRSToomRYRERHxyB+2dFIZKmTZ/Dknfc/Zi6qJjsf48/auDEYm6aJkWkRERMQDzjn+srOb1Y0VE7YxXFlfTqiwgPu2hTMYnaSLkmkRERERD7R3RQgPjLCyoWLC9wULAiyvm8PD7YczFJmkk5JpEREREQ/8NZEcnzZJMg2wor6C7Z0D9ESiXoclaeZpMm1mHzazTWb2lJn90MxKzGyJmT1kZjvM7MdmprVQRUREJO/8tf0wlaFCGitLJn3vyvpyADbu7vE6LEkzz5JpM2sCPgC0OOdWAwXAG4Hrga84504FeoC3exWDiIiISLb8pa2blfXlJ2yJ92yn1M4hGDAe3qVSj1zjdZlHEAiZWRAoBQ4AFwC3J16/Fbjc4xhEREREMupA7xD7e4ePzjhPpigYYGlt2dHSEMkdniXTzrl9wJeAPcST6F5gI3DEOZdspNgBNHkVg4iIiEg2PNHRC8RnnFO1vK6cJ/f1MjI27lVY4gEvyzyqgcuAJUAjUAasn8L+7zSzVjNrDYfVKkb8T2NWcpHGreSaXBmzT3b0EjBYVPPcJcRPZum8OYzFHNsODngYmaSbl2UeFwHtzrmwc24U+DmwDqhKlH0ANAP7TrSzc+5G51yLc66ltrbWwzBF0kNjVnKRxq3kmlwZs0/s62XB3FKKgqmnWktr44n3k/t6vQpLPOBlMr0HONfMSi1eeX8hsBm4F7gy8Z5rgF96GIOIiIhIRjnneKLjCEvnpT4rDTC/vJiyogIl0znGy5rph4jfaPgI8GTiXDcCHwM+YmY7gBrgZq9iEBEREcm0jp4hjgyOsmRe6vXSAGbG4nllPLnviEeRiReCk79l+pxznwY+/azNbcA5Xp5XREREJFueSswsJ8s2pmLJvDJ+t+kg0bHYlEpEJHv0vyQiIiKSRk/t76UgYCycWzrlfZfMK2N03LHtUL8HkYkXlEyLiIiIpNHTB/pprCyhsGDqadaSRPePzfv70h2WeETJtIiIiEgaPX2wjwXTmJUGqKsooSgY4OmDmpnOFUqmRURERNKkb3iUfUeGp1XiARAIGM3VIbYe1Mx0rlAyLSIiIpImWxMzytOdmQZYUF2qmekcomRaREREJE2SSfCiGSTTC+eW0h2J0jUwkq6wxENKpkVERETS5OkDfZQVFTC3rGjax0jOam/V7HROUDItIiIikiZPH+hnwdxS4os/T8+C6lD8WEqmc4KSaREREZE0cM6xrbOf5kQyPF1VpUVUhgp1E2KOUDItIiIikgbh/hH6h8dorp5+vXRSvKOHZqZzgZJpERERkTTY3jkAQFPVzGamk8fYER7AOTfjY4m3lEyLiIiIpMH2xBLgTTMs84B4Mh0ZGedQnzp6+J2SaREREZE02BEeoKy4gKpQ4YyPlUzIdyRmu8W/UkqmzazazE43s6VmpgRcRERE5Fm2HxqgqSo0o04eSclSke2dqpv2u+DJXjCzSuC9wJuAIiAMlAB1ZvYX4BvOuXszEqWIiIiIz+3oHGBtc2VajlUZKqSsuEAz0zngpMk0cDtwG/Bi59yRY18ws7OBq8xsqXPuZi8DFBEREfG7w5Eo3ZEoTVUz7+QBYGbxmxCVTPveSZNp59zLJ3htI7DRk4hEREREcszOcKKTR3VJ2o7ZVBXiiY7etB1PvDHRzPRRZrYWWHzs+51zP/coJhEREZGcsjMxg9xYOfNOHkmNVSHu3RqmJxKlegbLk4u3Jk2mzey7wFpgExBLbHaAkmkRERERoK0rQmGBMW9OcdqO2Zi4CbGta4Czy+am7biSXqnMTJ/rnFvleSQiIiIiOWpn5wANlSECgZl38khKznLvDEc4e5GSab9Kpc3dg2amZFpERETkJHaGB2ioTF+9NEBteTHBgNEWjqT1uJJeqcxM30Y8oT4IjAAGOOfcWk8jExEREckB0bEYew8PccaC6rQetyBg1FeW0BZWRw8/SyWZvhm4CniSZ2qmRURERATYczjCuHM0VqV3ZhqgvqLkaKcQ8adUkumwc+5XnkciIiIikoN2JsowkjcMplNjVYjH9h5hbDxGsECLUPtRKsn0o2b238CviZd5AGqNJyIiIgIcrWlOd8108phjMUdHzxCL55Wl/fgyc6kk0yHiSfQrjtmWUms8M6sCbgJWJ/Z5G7AV+DHxvtW7gDc453qmErSIiIiIX7SFB6guLaS0KKXlO6bk2PZ4Sqb9adL/defctTM4/leBu5xzV5pZEVAKfBK4xzn3BTP7OPBx4GMzOIeIiIhI1rR3Raj3YFYanpntbgtHuGClJ6eQGZq0+MbMbk3MMCefVycWcplsv0rgJcRvYMQ5F3XOHQEuA25NvO1W4PLpBC4iIiLiB21dERrSuPLhscpLCikvCdLWpfZ4fpVKJfvaRBIMQKIk48wU9lsChIFbzOxRM7vJzMqAOufcgcR7DgJ1J9rZzN5pZq1m1hoOh1M4nUh2acxKLtK4lVzjtzHbOzjK4UiU+gpvZqYhPjvdrl7TvpVKMh0ws6ONE81sLqnVWgeBs4BvOufOBCLESzqOcs454rXUz+Gcu9E51+Kca6mtrU3hdCLZpTEruUjjVnKN38Zse7d3Nx8m1VWU0Nal9nh+lUoy/e/EF235rJl9FngA+GIK+3UAHc65hxLPbyeeXB8yswaAxNfOqYctIiIikn3tiSTXqzKP5LEP9Y0QGRnz7BwyfZMm086524DXAYcSj9c5576Xwn4Hgb1mtiKx6UJgM/Ar4JrEtmuAX04jbhEREZGsaw9HCBjMryj27BzJWe9d3Sr18KOTlmuY2Rzn3ACAc24z8UT4pO85ifcDP0h08mgDriWewP/EzN4O7AbeMIP4RURERLKmvXuQ2vJiCj1cUCWZTLd3RTi9sdKz88j0TFT7/Esze4z4zPFG51wEwMyWAi8jngR/h3j5xgk55x4DWk7w0oXTjlhERETEJ9rCA57efAjxmmmAXero4Usn/TXKOXchcA/wLmCTmfWZWTfwfaAeuMY5d9JEWkRERCSfOedo97AtXlJJYQE1ZUVqj+dTE3blcM7dAdyRoVhEREREcka4f4TB6LhnC7Ycq17t8XzLuwIfERERkTyWnCn2si1eUkNlCTvVHs+XlEyLiIiITEOyhtnrmun4OUL0DY3RE4l6fi6ZGiXTIiIiItPQ3hUhGDDmzfGuLV7S0Y4eao/nOykl02ZWYGaNZrYw+fA6MBERERE/a++KUF9ZQiBgnp/raDKtumnfmXRZcDN7P/Bp4gu2xBKbHbDWw7hEREREfK2tK5KREg+A2opiAhZP4MVfJk2mgQ8CK5xz3V4HIyIiIpILYjHHnu5BVp5el5HzBQMB5leUqMzDh1Ip89gL9HodiIiIiEiu2N87RHQ8lpG2eEn1FWqP50cTLSf+kcQf24D7zOy3wEjydefclz2OTURERMSXkuUWDRkq84B43fR928I45zDzvk5bUjNRmUd54uuexKMo8YB4zbSIiIjIrHS0LZ7Hqx8eq76yhKHoOJ39I0eXGJfsO2ky7Zz7DICZvd4599NjXzOz13sdmIiIiIhftXVFKCkMUF1amLFzJpctbwtHlEz7SCo1059IcZuIiIjIrNCe6OSRyXKLo+3x1NHDVyaqmX4VcDHQZGY3HPNSBTDmdWAiIiIiftUWjtBYldnZ4bllRRQVBGjXsuK+MlHN9H5gI/CaxNekfuDDXgYlIiIi4lfRsRgdPYOcvag6o+cNmFFfWaKZaZ+ZqGb6ceBxM/uBc240gzGJiIiI+NbenkFi7pmyi0yqryxhp9rj+cpEZR5PkujacaJ6IOecVkAUERGRWSfZ6zkbyXRjZQmP7O5hbDxGsCCVW9/EaxOVeVya+PrexNfvJb6+BbXGExERkVkqWWZRX5G5tnhJ9ZUhxmKOjp4hFs8ry/j55bkmKvPYDWBmL3fOnXnMSx8zs0eAj3sdnIiIiIjftHVFKC8JMqdkojlJbxzb0UPJtD+k8vmAmdm6Y568MMX9RERERPJOe9dAVko84Jlkuk03IfpGKr9SvR34rplVAgb0AG/zNCoRERERn9oZjnBaffnkb/RAeUkh5cVB2sJqj+cXkybTzrmNwPMSyTTOuV7PoxIRERHxoYGRMcL9I1ywcn7WYqivLKFNHT18Y6JuHm9xzn3fzD7yrO0AOOe+7HFsIiIiIr6S7OTRWJn5mw+TGipLePpgf9bOL8ebqPY5WdVefpKHiIiIyKzSllh9MFs10wCNVSE6+0cYGNGC1H4wUTePbyf+eL1zbni6JzCzAqAV2Oecu9TMlgA/AmqIr6x4lXMuOt3ji4iIiGTKznAEA+oqsphMJ2bF28IDrG2uylocEpdKV46nzGyDmX3BzC5J1k5PwQeBLcc8vx74inPuVOI3M759iscTERERyYq28AC15cUUBbPX2KyhKtHRQ3XTvjDpSEgkvW8CngQuIb7E+GOpHNzMmhP73JR4bsAFwO2Jt9wKXD71sEVEREQyry0cyWqJB8RnxQOGOnr4xKTJdCIhXge8GDgT2AT8OMXj/wfwD0As8bwGOOKcSxb5dABNJznvO82s1cxaw+FwiqcTyR6NWclFGreSa7I5ZmMxR3tXhIaq7N18CFBYEGB+RQk7NTPtC6l8RrEH+BBwp3PuPOfcJc65z0+2k5ldCnQmWutNmXPuRudci3Oupba2djqHEMkojVnJRRq3kmuyOWYP9g0zNDpOY5ZnpgEaK0vYqZlpX0glmT4TuA34WzN70MxuM7NU6pzXAa8xs13Ebzi8APgqUGVmyRsfm4F9Uw9bREREJLOSNcoNWWyLl9RQGaK9K0Is5rIdyqyXSs3048Rrm28B/gicD/xTCvt9wjnX7JxbDLwR+KNz7s3AvcCVibddA/xyeqGLiIiIZM6Oznhv56bq7CfTjVUhRsZi7DsylO1QZr1UaqZbgQeB1xLvyvES59yiGZzzY8BHzGzH/2/vzuOkKO99j39+s2/AzMAAwzLsoICKgiRq3DVBoqJHE8+JcUlysxijNzcxxiQnUaNJNDnxXL0xGk08rieeuEXc9ymoQPIAACAASURBVAUFlUXZHXYEhJlhnxmG2fq5f1Q1NjDM9CzdVT3zfb9e86K6uque3/T8uvj1U089hTeG+m+d2JeIiIhIUqyqqiE/K53C3MygQ2GwP257VaWGegStzduJA2c55zo1wt859ybwpr+8Bpjamf2JiIiIJNvqyloGFebuuxt0kGKL6VMDvLW5xDfMQ5d3i4iISI+3qrKGQQHP5BFVkJNBn9xMVlbqtuJBC27GcREREZEUsauukaqa+tAU0+D1TmuYR/BUTIuIiIi0IToN3eAQFdODCnNZWVmDc5rRI0iHHDNtZv/S2obOuSe7PhwRERGR8In2AA8qDH6O6ajBhblU722iqrqe/r3DE1dP09oFiOe08pwDVEyLiIhIj7C6soaMNKN/r/AUrUP8KfpWVtaomA7QIYtp59w3khmIiIiISFit9C8+TE8LfiaPqEExM3qcMLpfwNH0XPFMjYeZfRmYAOz72uOc+3WighIREREJk/Ituynrmx90GPspysskPzudFRWa0SNI8dy05W7gIuAqwICvAJ25aYuIiIhIyqitb2LTzr0MCdHFhwBmxpCiPD7eomI6SPHM5nG8c+5SYIdz7kbgOGBsYsMSERERCYeV/sWHQ4vzAo7kYEOL8lhRUa0ZPQIUTzEdven7HjMbBDQCpYkLSURERCQ8osMoohf8hcnQYm9Gjy279wYdSo8VTzH9rJkVAn8AFgDrgL8nMigRERGRsFhZUU1WehoDQjSTR9TQIq+3XEM9ghNPMf1759xO59wTeGOlDwNuTmxYIiIiIuGwoqKGQYU5pIVoJo+oaDG9QsV0YOIppudEF5xz9c65XbHrRERERLqzFRXVDC4K33hpgIKcDIrzsyjXjB6Bae0OiAOBwUCumR2NN5MHQG8gnBklIiIi0oV21TWyeddeTh5bEnQohzSkMJdy9UwHprV5pr8EXA4MAW6LWb8b+HkCYxIREREJhY837wZgWN/w9iOW9c3j5aUVNDZHyEyPZ9CBdKXW7oD4APCAmV3gj5cWERER6VGiF/aVFYfrhi2xhvXNp6E5wpqqWsYN7BV0OD1OPF9f3jWzv5nZCwBmNt7MvpXguEREREQCt3zzbnrlZFCUlxl0KIc0zJ//etnmXQFH0jPFU0z/F/ASMMh/vAL4YcIiEhEREQmJZZt3U1ach1n4ZvKIGlSYS2a6sezT3UGH0iPFU0z3c879A4gAOOeagOaERiUiIiISsOaIY0VF9b6e37BKTzOGFuepmA5IPMV0rZn1BRyAmX0e0HkEERER6dbWbatlb2OEshBffBg1rDifpZt367biAYinmP4RMBMYZWbvAg8CVyU0KhEREZGALfdn8gjzxYdRw/vmsXNPo24rHoDWpsYDwDm3wMxOBsbhzTVd7pxrTHhkIiIiIgFasmk3GWnGkKLcoENp0/B+XsG/eOMuSvuEP97upM2eaTPLAa4GbgJuBK7014mIiIh0W4s37WRocV5KzN08rG8eaQaLN2kkbrLFkx0PAhOA/wf8yV9+KJFBiYiIiATJOceSTbsZ0S/8QzwAsjPSGVqUx0cbdgYdSo/T5jAPYKJzbnzM4zfMbFlbG5nZULxCfADexYv3OOduN7Ni4H+A4cA64KvOuR3tDVxEREQkUTbuqGNXXWPKFNMAI0vyWfDJTpxzoZ7Kr7uJp2d6gT+DBwBm9jlgXhzbNQE/9gvxz+MNDxkPXAe85pwbA7zmPxYREREJjehwidQqpgvYVdfIJ9v3BB1KjxJPMT0ZmG1m68xsHTAHONbMFpvZokNt5Jzb7Jxb4C9XA8uBwcAM4AH/ZQ8A53UifhEREZEut3jTLjLSjLKQzzEda1RJAQALN2rcdDLFM8xjWmcbMbPhwNHA+8AA59xm/6kteMNAWtrmO8B3AMrKyjobgkjCKWclFSlvJdUkK2cXb9yVMhcfRg0tziUrPY1FG3Zy7lGD2t5AukSbGeKcW9/aT1vbm1kB8ATwQ+fcfrfmcd7M4i3OLu6cu8c5N8U5N6WkpCTOX0ckOMpZSUXKW0k1ycjZSMTx0YadjCpJnSEeABlpaQzvl8eCT3QpWjIl9OuWmWXiFdKPOOee9FdXmFmp/3wpUJnIGERERETaY1VVDTX1TYzp3yvoUNpt3IBeLNq4i72NzUGH0mMkrJg27zLSvwHLnXO3xTw1E7jMX74MeDpRMYiIiIi014d+z+6Y/gUBR9J+4wb2piniWKRx00mTyJ7pE4BLgNPM7CP/ZzpwC3Cmma0EzvAfi4iIiITCgvU76ZWTwcA+qXePurEDvC8Ac9dtDziSniOeCxA7xDn3Dt7tx1tyeqLaFREREemM+Z/sYHRJQUrO1dwrJ5MhRbnMUzGdNKlziaqIiIhIgu2qa2RVZQ2jU3CIR9TYAb2Yv34HkUiLczxIF1MxLSIiIuJbsN4bLz1uYOpdfBh1eGlvdu9tYtnm3W2/WDpNxbSIiIiI770128hIs5ScySNq4qDeAMxauTXgSHoGFdMiIiIivjlrtjG6fwFZGalbIhXmZVFWnMc7q6qCDqVHSN1MEREREelC1XsbWbJpF+NLewcdSqdNHNSbuWt3aL7pJFAxLSIiIgLMW7eDiPPGHKe6iYP70NAcYd463Q0x0VRMi4iIiOAN8chIM8YMSN2ZPKIOL+1NRprxRrluNJ1oKqZFREREgDfLKxk3sBfZGelBh9JpOZnpHDG4Dy8v3YJzmiIvkVRMi4iISI/36c46VlTUMGloYdChdJnJw4rYsKOO8orqoEPp1lRMi4iISI/39gpv5oujhnSvYtqAV5ZWBB1Kt6ZiWkRERHq8N8ur6JufxZCi3KBD6TKFeVmM7l/AC0u2BB1Kt6ZiWkRERHq0+qZmZq2q4qihhZhZ0OF0qeNG9WXZ5t2Ub0nuUA/nHBu27+GDtduZs3obKyuqae6mtzfPCDoAERERkSC9s3IrtfXNHDu8OOhQutwJo/rxyPuf8MSCjfx8+uEJb+/jLbv57/c/4YXFW6iqqd/vufzsdE4Z15+vTS3j+FF9u80XFxXTIiIi0qM9v3gL+dnp+27D3Z30zs1k0tBCnlqwiWu/NI6M9MQMSti0s47fPr+c5xZtJjPdOKasiHOOGsSA3tmkpxnbaxso31LN2+VVPLdoM8cOL+L6cyYwcXCfhMSTTCqmRUREpMdqaIrwyrItTC4rSlihGbSTx5Rw2/oVvLq8kmkTB3bpvp1zPPz+J/z2+eVEIo7zJg3my0eUUpBzcIl54pgSLjt+OG+WV/Lkgk3M+NO7XHnqKK4+fUxKv/cqpkVERKTHemdVFbv3NjF1RN+gQ0mYY4YVUdIrm3tnrenSYnr33kZ+8thCXlpawRGD+/DtE0dQ0iun1W0y09M4c/xAjhvVjwfnrOOO11fxwdrt3HnxMfQtyO6y2JIpdb8GiIiIiHTS4/M30jsng6OGpP5wg0NJTzPOmjiQ+et3sOCTrrm9+KrKGmb86V1eXV7JxZ8r47qzDmuzkI5VkJ3B908ZzfdOHsWCT3Yy4853WVWZmvNhq5gWERGRHml7bQMvL63gC6P7pfQwg3icMrY/+dnp3P7qyk7va9bKKs7/87tsq63nF9MP5+wjB5HWwYsJTx5bwi/PHk/N3iYuuGtOlxX7ydS9M0dERETkEP754SaaIo5TxvUPOpSEy81K5/xJQ3hrRRVvlFd2eD8Pv7eey++bS1FeFjfPOILDSzt/0ebo/gXccO4EcjPTuPje93ln5dZO7zOZVEyLiIhIjxOJOB5+bz2jSvIZWpwXdDhJ8aUJAyjtk8NNzyxjb2Nzu7ZtbI5w/dNL+Pd/LuHIoX244ZwJlPTqujHOA3rncP05E+jXK4tv3P8Bry1Pnbs2qphOgkjEUVVdz6Yde6iqrifSTSctl9SnXJVUpdyV9nr940rWbK3lrImlQYeSNBnpaVx+/HDWbK3lhplL496usnovl/z1fR6Ys57pR5RyzZnjyM1K7/L4CvOy+NWXJzC0KI/vPjSfF1Pkzo2azSPBIhFHeUU1335wHht31DGkKJd7L53CuAG9SEvrHpOVS/egXJVUpdyVjvjL26vpV5DF50d231k8WnLkkELOmzSIR+duYHT/Av7XiSNbff3rH1dw7eOLqN7bxBUnj+KksSUJja8gJ4OfTz+cW1/8mCsfWcDt/zaJs48clNA2O0s90wkUiTgqdu/dd4AH2Lijjm8/OI9ttQ0BRyeyv221DcpVSTk6zkpHzFm9jbnrdnDWxFLSe+AXrgsnD2XqiGJufm45v3luGXUNBw/5WFNVw/cfmc83759HXlYGv54xMeGFdFR+dgY/O+twxgwo4Oq/f8gT8zcmpd2OUs90F4tEHNtqG4hEIlTXN2Fm+w7wURt31NHQ1L6xSiKJFIk49jY2KVclpTQ1RVi3vVbHWWmXSMTx2+eX0zc/izMOHxB0OIFITzOuPm0M989ey72z1jJz4adMP6KUsuI8dtU18v6a7cxZs43sjDQunDyEc48aRGaSZzvJzUrnp9MO44+vlPPjxxayp6GJS44bntQY4hVIMW1m04DbgXTgr865W4KIo6vFnmq85V+OoLHZG7M3pCh3vwP9kKJcsjK6fqyRSEdE87ZXdkaLuSoSRk1NESqq97Jhu5evOs5KvJ5Z9CmLN+3ieyePJCuj556gT08zvvWFkRw3qh8zF27i4ffW09jsMLzPz1cmD+G0w/pTmJcVWIw5men85IuHccdrK/nl00vZXtvI1aePxjo4DV+iJL2YNrN04E7gTGAjMNfMZjrnliU7lq4WPU1eUpDN4KJcKnfXc8sLH3PrBUfy0ycW7RvL95evT6ZvfnDJKRJrW20D/1ywgctOGHFQrt56wZGE7JglQiTi9vVI52Wl6zgrcdte28CNzyxjZL98ThydnCELYTe+tDfjS3vT2ByhrrGZrPQ0cjLD80U0KyONH545hnveXsN/vrqCzbvquOm8iUnvKW9NED3TU4FVzrk1AGb2KDADSPliuqGpmY076vjl2eNpjsCehmaqaur5j5fK+eXZ4ynMzWRPQzOlhTm6KEZCo6GpmQunlLGnIcIDs9fuy9WddY08MHst158zIegQRfazrbZhX480oOOsxMU5x6+eXsLuukZ+Ou0w5ccBMtPTQlWgxspIS+OKk0fRNz+bR+duYP22Pdx58TEUh+QLcxDv2mBgQ8zjjf66lJeVkc6QolwKczOpa2iiKD+TP1x4JFU19Xz3ofn8+LGF9O+dTWFuOP74IuDlbXqacc9bq/nBaWO46dllXHTPe9z07DKuOn0s+dnh6aEQAe8LYF5WOne8tlLHWYnbfe+u49lFm7ngmCGU9ZB5pbsTM+OiY4dyxcmjmLd+O2ffMYv568Nxt8TQXoBoZt8BvgNQVlYWcDTx6Zufxb2XTmHLrr3saWjm7x+s5xsnjOChb06l2Tm21jQwsE+2vg13U6mYs+DlbX1TM7PXbAPgvy4/lvQ0I+KgT24GvXNUlHRnqZi3WRnp+8783ThzGddOG8dD35xKxEFOZhoDeqlXujvrSM6+tHQLv3luGccOL+LcSeGeZk1ad9LYEgYX5XLHayv56t1zuPK00Vx12uhAe9XNueRObG9mxwE3OOe+5D/+GYBz7neH2mbKlClu3rx5SYqwcyIRx866BrbXNlBVXc9PHv9sDN+9l0xh3EDNexoyCfljpFLOAjQ2NvNxZQ1XPDx/X77e9fXJHNa/gMwQjZ2TfXp03kYijnXbaqnYvXe/Y+w9l0xmbP9eZPTgi8pCLLCcfWbhp/yf//mIEf3y+dlZhyfkZiOSfLX1Tdw/ex3vrNrKmP4F/HrGRI4b1eVzhseVt0EU0xnACuB0YBMwF/iac+6Qt+JJlQN8rGhRXdfQTLPfW9IvX73SIdSji5JYTU0RKmvqaWqOkJGeRv+CbBUl4dXj81bH2JST9Jytb2rmtldW8Je31jBuQC+unTaOvKzQnpCXDpq/fgcPzFlHVXU9p40r4arTx3B0WVFX7T6uvE16VjnnmszsB8BLeFPj3ddaIZ2q0tKM4vxsyA86EpH4ZGSkMahQU+FJatAxVlrzwdrtXPfEItZsreX0w/pz2fHDQ3txnXTO5GFFTBzcm5eWbOGZRZs5/8+zmTysiK9NLeOLEwbQKycz4TEE8hXNOfc88HwQbYuIiEj3tnHHHvY0NPPTaYcxaWhh0OFIgmVnpHPupMGcOX4gb5RX8uryCn782EKynkzj+FF9OXFsCccOL+Kwgb0TMre4zneIiIhIt3L+0YMZ1T+fPfWRoEORJMrNSmf6EaVMmziQlRU1vLd2Gws37OTNFVUAZKQZI0vyGdmvgKHFuQzoncOo/gWcOq5/p9pVMS0iIiLdipnRJyeLNJqCDkUCMnlYEZOHeWOnt9XUs2zzblZX1bJh+x6WfLqL18sraWiKcNzIvp0uppN+AWJHmFkVsD6Ol/YDtiY4nHiEJQ4ITyxhjWOrc25aVzfSjpyNCuv701NjgHDHEYa8DfP7EwTFsb+wHmshHO+RYvhMGOI4VAxx5W1KFNPxMrN5zrkpiuMzYYlFcbQuLHGFIY4wxKA42haWuBSH4mivMMSmGMIVR2dj0KWtIiIiIiIdpGJaRERERKSDulsxfU/QAfjCEgeEJxbF0bqwxBWGOMIQAyiOtoQlLsWxP8XRtjDEphg+E4Y4OhVDtxozLSIiIiKSTN2tZ1pEREREJGm6RTFtZjeY2SYz+8j/mR7z3M/MbJWZlZvZl5IQyzS/rVVmdl2i2zug7XVmtth/D+b564rN7BUzW+n/22U3rD+g7fvMrNLMlsSsa7Ft89zhv0eLzOyYBMcRmvw4INbQxNUT8zYMOZtK+Rq22JSz+9bpOBtfzKGJL6jc7cl5m/Ccdc6l/A9wA3BNC+vHAwuBbGAEsBpIT2Ac6X4bI4Esv+3xSXwf1gH9Dlj3e+A6f/k64NYEtX0ScAywpK22genAC4ABnwfeT3AcociPFtoPRVw9NW/DkLOplK9hik05q+NsB2IORXxB5m5PzttE52y36JluxQzgUedcvXNuLbAKmJrA9qYCq5xza5xzDcCjfgxBmgE84C8/AJyXiEacc28D2+NsewbwoPO8BxSaWWkC4ziUZOdHvJS3ScjbMORsN8lXUM5CD8nZVuI4lDDnLSh3e0TeJjpnu1Mx/QP/lMB9MacpBgMbYl6z0V+XKMlu70AOeNnM5pvZd/x1A5xzm/3lLcCAJMZzqLaDeJ/CkB9hjSvo9yFMeRuWnA1DXhxKGGIL+r1QzrYsDLnRmjDEF+T7obw9WJfkRMoU02b2qpktaeFnBnAXMAqYBGwG/hhosMH5gnPuGOAs4EozOyn2Seedvwhk+pYg2ybA/FDexiWUeRtgzgaaF8rZuChnDxZ4bih326S83V+X5URGV0WUaM65M+J5nZndCzzrP9wEDI15eoi/LlGS3d5+nHOb/H8rzewpvNMSFWZW6pzb7J8qqUxWPK20ndT3yTlXEV1Odn4ob9sWsrwNPGeDzFe/feVsG5SzBws6b/0YlLutUN7urytzNmV6pltzwHia84Ho1ZozgX81s2wzGwGMAT5IYChzgTFmNsLMsoB/9WNIODPLN7Ne0WXgi3jvw0zgMv9llwFPJyMe36Hanglc6l+1+3lgV8zpni4XovwIa1zK288EnrMhyoswx6ac/UzgOQuhyo2wxxdI7ipvD9alOdHa1Ymp8gM8BCwGFvlvQmnMc7/AuxKzHDgrCbFMB1b4bf4iie/BSLyrTxcCS6NtA32B14CVwKtAcYLa/zveaZJGvPFF3zpU23hX6d7pv0eLgSkJjiM0+aG8DU/ehiFnUylflbPK2VTNW+Wu8jbROas7IIqIiIiIdFC3GOYhIiIiIhIEFdMiIiIiIh2kYlpEREREpINUTIuIiIiIdJCKaRERERGRDlIxHQJmdoqZPRvv+i5o7zwzGx/z+E0zmxLHdqVdEY+ZlZjZi53djwSvozlqZoPM7PFDPLcvH83s5zHrh5vZkpa2aWEfPzSzS9sbVwv7+YGZfbOz+5HEMbPLzWxQHK+738wujHd9F8Sl3JU2dTZ/49juey3lU2xOmtkkM5se89wNZnZNHPs2M3vdzHq3N64W9vWqfXY775SjYrpnOg8Y3+arDvYj4N7ONu6cqwI2m9kJnd2XpCbn3KfOuXj+Y/h52y/Zn5llAN8E/rvdgR3sPuCqLtiPJM7lQJvFSACUuxKPy0lg/jrn7nbOPdjGyybhzX3dXtOBhc653R3Y9kAPAd/vgv0EQsV0HPw7Bz1nZgvNbImZXeSvn2xmb5nZfDN7KXo3Hb9n7XYz+8h//VR//VQzm2NmH5rZbDMb184Y7jOzD/ztZ/jrLzezJ83sRTNbaWa/j9nmW2a2wt/mXjP7k5kdD5wL/MGPb5T/8q/4r1thZiceIowLgBf9faeb2X/4v98iM7vKX7/OzH7n73uemR3jvzerzex7Mfv6J3BxvL+/dExQueu3eaS//KGZ/cpf/rWZffuAXpFcM3vUzJabd4vbXH/9LUCuH8sj/q7T/VxeamYvm1luC82fBixwzjX5+xnt93osNLMFZjbKvB71t8zsaTNbY2a3mNnF/mdgcfRz4ZzbA6yLvg+SWH5efGxmj/j58LiZ5fnPHZSz5vXUTQEe8fMk18x+ZWZz/fy9x8ysHe239rm49cBjpJnlmdk/zGyZmT1lZu+b2RTlbs+U7Pw1s/5mNt9fPsrMnJmV+Y9X+/m5r5fZj2GhmS0ErvTXZQG/Bi7yY7jI3/14P+/XmNnVhwjhYmLumGhml5pXDyw0s4f8dfeb2V1m9p6/r1PMq2WWm9n9MfuaCfxbO9/y8EjGnXdS/QeviLw35nEfIBOYDZT46y4C7vOX34y+HjgJWOIv9wYy/OUzgCf85VOAZ1tod9964LfA1/3lQry7J+Xjfatd48eUA6zHu6f8IGAdUOzHOgv4k7/9/cCFMe28CfzRX54OvNpCLCOA+TGPrwAej/l9oncvWgdc4S//J96dhXoBJUBFzPaDgcVB/227+0+AuXsd3sG6D97tc1/y178BjAOGx+z7RzHtHwk04d/1CqiJ2edw/7lJ/uN/RD8TB7R9I3BVzOP3gfP95Rwgz497J1AKZAObgBv91/xv4P/GbP8L4MdB/y17wo//N3bACf7j+4Br4sjZKTH7KI5Zfgg4x1++n5jjXsxr7gcujKONg46Rfmx/8ZcnKnd79k9A+bsU7/j8A7xj7cXAMGCO//wNwDX+8iLgJH/5D3x2DL4cvz6I2Wa2n1/9gG1AZgttrwd6+csT8OqSfrG/hx/3o3h3NpwB7AaOwOvMnR/9TPivXQn0Dfrv2JGfDCQei4E/mtmteIXDLDObiHfwfMX/4piOd6vKqL8DOOfeNrPeZlaIV1Q+YGZj8D5wme2I4YvAufbZOKYcoMxffs05twvAzJbhfZD6AW8557b76x8Dxray/yf9f+fjHRAOVApUxTw+A7jb+T0o0XZ8M/1/FwMFzrlqoNrM6s2s0Dm3E6gknKdmu5ugcncWcDWwFngOONPvoRnhnCs3s+Exrz0JuMNvc5GZLWplv2udcx/5y63l6nIAM+sFDHbOPeXvf6+/HmCuc26z/3g18LK//WLg1Jj9VQKHtfH7StfZ4Jx7119+GC+PXqT1nI11qpldi1d4FuMVG8/E0e64Ntpo6Rj5BeB2AOfcEuWukPz8nQ2cgHcc/S0wDa9wnRX7Iv84Xuice9tf9RBwViv7fc45Vw/Um1klMADvNtyxiv3/38E7q/KYc24rHFQTPOOcc2a2GK9TbbEf01K8z0H0cxGtC7a1ElcoqZiOg3NuhZkdg9cjcbOZvQY8BSx1zh13qM1aeHwT8IZz7ny/mHizHWEYcIFzrny/lWafA+pjVjXTsb9rdB+H2r4Or4Bvz74iB8QWidl3jr9PSaAAc3cu3unLNcAreF/uvo1XRHTGgbne0qnyeHP1wNyMzdvYz4ByNblayj+j9ZwFwMxygD/j9fRtMLMbiP+41VYbbR0j26Lc7RmSnb9vAyfidaI9DfzUb/O59oe+n3jqiiYzS3POReLcV2s1AaRwvmrMdBzMu9J2j3PuYbxTI8cA5UCJmR3nvybTzCbEbBYdm/oFYJffc9wH75QceKdV2uMl4Kro+CkzO7qN188FTjazIvMuarkg5rlqvJ7G9ljB/j0prwDf9feNmRW3c39jgbiubpeOCyp3nXMNwAbgK8AcvF6Sa/AO/Ad6G/ia3+ZEvKEeUY1m1p4zOOD17I3246gGNprZef7+s6NjGNtBuZpcZdHcxMuLd2g9Z2OPZ9HCY6uZFeAN34hXW5+LlrwLfNV//Xi809dRyt2eKdn5Owv4OrDSL2q343WevBP7Iv+M8E7/uA77X7PUkZoAvN9rpL/8Ot61V32h/TWBX9sMxBsqmnJUTMfnCOADM/sIuB642S8WLgRu9QfzfwQcH7PNXjP7ELgb+Ja/7vfA7/z17e3ZuAnv1Poi/9TITa292Dm3Ce+Uzwd4B/x1wC7/6UeBn5h3Ydiolvdw0P5qgdVmNtpf9VfgEz+ehfjFUDucSue/OUvbgszdWUClc67OXx7CAacefXcBBWa2HO9CmNje63vwcuyRFrY7lBfwTnlGXQJc7Z+Cn413wG6PE/C+PEpylANX+vlQBNzVRs7eD9zt53g93oxDS/A6IObG22gcn4uW/BmvSFoG3Ix3Sj56nFXu9kxJzV/n3Dq8nu9oR8U7wE7n3I4WXv4N4E6/rdgLG9/Au+Aw9gLEeDyHN4Yf59xS4DfAW/7veFs79gMwGXgvOnQ01Zg/6Fu6kJm9iTfgf17AcRQ452r83uOn8C54eKoT+zsfmOyc+/cuiO1tYMYhPvASkLDkbmeZNyvItc65lZ3cz9HAj5xzl3RNZNIafwjRs865iQGHEhczS8e7MGuv3zHxKjDOL546uk/lbopKtfztLPNmZIFwQgAAAKpJREFUu3nQOXdmF+zrdmCmc+61zkeWfBoz3b3dYGZn4J06ehlvOroOc849FT2F0xlmVgLcpkJaEug6vIu5OlWQ4I31/mXnw5FuKg94wx/OYcD3O1NI+5S7khKcc5vNm+6xt+v8XNNLUrWQBvVMi4iIiIh0mMZMi4iIiIh0kIppEREREZEOUjEtIiIiItJBKqZFRERERDpIxbSIiIiISAepmBYRERER6aD/DxXrxLF8mHWEAAAAAElFTkSuQmCC\n",
448 | "text/plain": [
449 | ""
450 | ]
451 | },
452 | "metadata": {
453 | "needs_background": "light"
454 | },
455 | "output_type": "display_data"
456 | }
457 | ],
458 | "source": [
459 | "# Plot the relationship between each two variables to spot anything incorrect.\n",
460 | "train_stats = train_dataset.describe()\n",
461 | "train_stats.pop(\"target\")\n",
462 | "sns.pairplot(train_stats[train_stats.columns], diag_kind=\"kde\") # or diag_kind='reg'\n"
463 | ]
464 | },
465 | {
466 | "cell_type": "code",
467 | "execution_count": 13,
468 | "metadata": {},
469 | "outputs": [
470 | {
471 | "data": {
472 | "text/html": [
473 | "\n",
474 | "\n",
487 | "
\n",
488 | " \n",
489 | " \n",
490 | " | \n",
491 | " count | \n",
492 | " mean | \n",
493 | " std | \n",
494 | " min | \n",
495 | " 25% | \n",
496 | " 50% | \n",
497 | " 75% | \n",
498 | " max | \n",
499 | "
\n",
500 | " \n",
501 | " \n",
502 | " \n",
503 | " sepal length (cm) | \n",
504 | " 90.0 | \n",
505 | " 5.750000 | \n",
506 | " 0.825744 | \n",
507 | " 4.3 | \n",
508 | " 5.1 | \n",
509 | " 5.60 | \n",
510 | " 6.300 | \n",
511 | " 7.7 | \n",
512 | "
\n",
513 | " \n",
514 | " sepal width (cm) | \n",
515 | " 90.0 | \n",
516 | " 3.060000 | \n",
517 | " 0.447163 | \n",
518 | " 2.0 | \n",
519 | " 2.8 | \n",
520 | " 3.00 | \n",
521 | " 3.375 | \n",
522 | " 4.2 | \n",
523 | "
\n",
524 | " \n",
525 | " petal length (cm) | \n",
526 | " 90.0 | \n",
527 | " 3.622222 | \n",
528 | " 1.808642 | \n",
529 | " 1.1 | \n",
530 | " 1.5 | \n",
531 | " 4.05 | \n",
532 | " 5.100 | \n",
533 | " 6.9 | \n",
534 | "
\n",
535 | " \n",
536 | " petal width (cm) | \n",
537 | " 90.0 | \n",
538 | " 1.160000 | \n",
539 | " 0.780636 | \n",
540 | " 0.1 | \n",
541 | " 0.3 | \n",
542 | " 1.30 | \n",
543 | " 1.800 | \n",
544 | " 2.5 | \n",
545 | "
\n",
546 | " \n",
547 | "
\n",
548 | "
"
549 | ],
550 | "text/plain": [
551 | " count mean std min 25% 50% 75% max\n",
552 | "sepal length (cm) 90.0 5.750000 0.825744 4.3 5.1 5.60 6.300 7.7\n",
553 | "sepal width (cm) 90.0 3.060000 0.447163 2.0 2.8 3.00 3.375 4.2\n",
554 | "petal length (cm) 90.0 3.622222 1.808642 1.1 1.5 4.05 5.100 6.9\n",
555 | "petal width (cm) 90.0 1.160000 0.780636 0.1 0.3 1.30 1.800 2.5"
556 | ]
557 | },
558 | "execution_count": 13,
559 | "metadata": {},
560 | "output_type": "execute_result"
561 | }
562 | ],
563 | "source": [
564 | "# Statistics on the train dataset to make sure it is in a good shape. (you may display the same stat for test and validate)\n",
565 | "train_stats = train_dataset.describe()\n",
566 | "train_stats.pop(\"target\")\n",
567 | "train_stats = train_stats.transpose()\n",
568 | "train_stats"
569 | ]
570 | },
571 | {
572 | "cell_type": "code",
573 | "execution_count": 14,
574 | "metadata": {},
575 | "outputs": [],
576 | "source": [
577 | "\n",
578 | "train_labels = train_dataset.pop('target')\n",
579 | "test_labels = test_dataset.pop('target')\n",
580 | "valid_labels = valid_dataset.pop('target')"
581 | ]
582 | },
583 | {
584 | "cell_type": "markdown",
585 | "metadata": {},
586 | "source": [
587 | "# Data Normalization/Scaling\n",
588 | "## Subtract the mean of the training data and divide by the standard deviation of the training data."
589 | ]
590 | },
591 | {
592 | "cell_type": "code",
593 | "execution_count": 15,
594 | "metadata": {},
595 | "outputs": [],
596 | "source": [
597 | "# define a function to normalize the data set.\n",
598 | "def norm(x):\n",
599 | " return (x - train_stats['mean']) / train_stats['std']\n",
600 | "normed_train_data = norm(train_dataset)\n",
601 | "normed_test_data = norm(test_dataset)\n",
602 | "normed_valid_dataset = norm(valid_dataset)\n"
603 | ]
604 | },
605 | {
606 | "cell_type": "code",
607 | "execution_count": 16,
608 | "metadata": {},
609 | "outputs": [
610 | {
611 | "data": {
612 | "text/html": [
613 | "\n",
614 | "\n",
627 | "
\n",
628 | " \n",
629 | " \n",
630 | " | \n",
631 | " sepal length (cm) | \n",
632 | " sepal width (cm) | \n",
633 | " petal length (cm) | \n",
634 | " petal width (cm) | \n",
635 | "
\n",
636 | " \n",
637 | " \n",
638 | " \n",
639 | " 125 | \n",
640 | " 1.755991 | \n",
641 | " 0.313085 | \n",
642 | " 1.314676 | \n",
643 | " 0.819844 | \n",
644 | "
\n",
645 | " \n",
646 | " 136 | \n",
647 | " 0.666066 | \n",
648 | " 0.760349 | \n",
649 | " 1.093515 | \n",
650 | " 1.588447 | \n",
651 | "
\n",
652 | " \n",
653 | " 56 | \n",
654 | " 0.666066 | \n",
655 | " 0.536717 | \n",
656 | " 0.595904 | \n",
657 | " 0.563643 | \n",
658 | "
\n",
659 | " \n",
660 | " 24 | \n",
661 | " -1.150477 | \n",
662 | " 0.760349 | \n",
663 | " -0.952218 | \n",
664 | " -1.229766 | \n",
665 | "
\n",
666 | " \n",
667 | " 117 | \n",
668 | " 2.361505 | \n",
669 | " 1.654876 | \n",
670 | " 1.701706 | \n",
671 | " 1.332246 | \n",
672 | "
\n",
673 | " \n",
674 | " 0 | \n",
675 | " -0.787168 | \n",
676 | " 0.983980 | \n",
677 | " -1.228669 | \n",
678 | " -1.229766 | \n",
679 | "
\n",
680 | " \n",
681 | " 21 | \n",
682 | " -0.787168 | \n",
683 | " 1.431244 | \n",
684 | " -1.173379 | \n",
685 | " -0.973565 | \n",
686 | "
\n",
687 | " \n",
688 | " 17 | \n",
689 | " -0.787168 | \n",
690 | " 0.983980 | \n",
691 | " -1.228669 | \n",
692 | " -1.101665 | \n",
693 | "
\n",
694 | " \n",
695 | " 115 | \n",
696 | " 0.787168 | \n",
697 | " 0.313085 | \n",
698 | " 0.927645 | \n",
699 | " 1.460347 | \n",
700 | "
\n",
701 | " \n",
702 | " 140 | \n",
703 | " 1.150477 | \n",
704 | " 0.089453 | \n",
705 | " 1.093515 | \n",
706 | " 1.588447 | \n",
707 | "
\n",
708 | " \n",
709 | "
\n",
710 | "
"
711 | ],
712 | "text/plain": [
713 | " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
714 | "125 1.755991 0.313085 1.314676 0.819844\n",
715 | "136 0.666066 0.760349 1.093515 1.588447\n",
716 | "56 0.666066 0.536717 0.595904 0.563643\n",
717 | "24 -1.150477 0.760349 -0.952218 -1.229766\n",
718 | "117 2.361505 1.654876 1.701706 1.332246\n",
719 | "0 -0.787168 0.983980 -1.228669 -1.229766\n",
720 | "21 -0.787168 1.431244 -1.173379 -0.973565\n",
721 | "17 -0.787168 0.983980 -1.228669 -1.101665\n",
722 | "115 0.787168 0.313085 0.927645 1.460347\n",
723 | "140 1.150477 0.089453 1.093515 1.588447"
724 | ]
725 | },
726 | "execution_count": 16,
727 | "metadata": {},
728 | "output_type": "execute_result"
729 | }
730 | ],
731 | "source": [
732 | "# show a sample of the data after normalized\n",
733 | "normed_train_data.head(10)"
734 | ]
735 | },
736 | {
737 | "cell_type": "markdown",
738 | "metadata": {},
739 | "source": [
740 | "# Training the model \n",
741 | "## more details here:\n",
742 | "## https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html"
743 | ]
744 | },
745 | {
746 | "cell_type": "code",
747 | "execution_count": 17,
748 | "metadata": {},
749 | "outputs": [],
750 | "source": [
751 | "#Create a svm Classifier\n",
752 | "model = svm.SVC(C = 1, # reg paramater\n",
753 | " kernel='linear', #kernel{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, default=’rbf’\n",
754 | " ) # Linear Kernel\n",
755 | "\n",
756 | "#Train the model using the training sets\n",
757 | "model.fit(normed_train_data, train_labels)\n",
758 | "\n",
759 | "#Predict the response for test dataset\n",
760 | "y_pred = model.predict(normed_test_data)"
761 | ]
762 | },
763 | {
764 | "cell_type": "code",
765 | "execution_count": 18,
766 | "metadata": {},
767 | "outputs": [
768 | {
769 | "name": "stdout",
770 | "output_type": "stream",
771 | "text": [
772 | "predicted values: \n"
773 | ]
774 | },
775 | {
776 | "data": {
777 | "text/plain": [
778 | "array([0., 1., 2., 2., 1., 0., 1., 1., 2., 1.])"
779 | ]
780 | },
781 | "execution_count": 18,
782 | "metadata": {},
783 | "output_type": "execute_result"
784 | }
785 | ],
786 | "source": [
787 | "example_batch = normed_test_data[:10]\n",
788 | "example_result = model.predict(example_batch)\n",
789 | "print('predicted values: ')\n",
790 | "example_result"
791 | ]
792 | },
793 | {
794 | "cell_type": "markdown",
795 | "metadata": {},
796 | "source": [
797 | "# See how the training went"
798 | ]
799 | },
800 | {
801 | "cell_type": "code",
802 | "execution_count": 19,
803 | "metadata": {},
804 | "outputs": [
805 | {
806 | "name": "stdout",
807 | "output_type": "stream",
808 | "text": [
809 | "Accuracy: 0.9777777777777777\n"
810 | ]
811 | }
812 | ],
813 | "source": [
814 | "from sklearn import metrics\n",
815 | "y_pred = model.predict(normed_train_data)\n",
816 | "print(\"Accuracy:\",metrics.accuracy_score(train_labels, y_pred))"
817 | ]
818 | },
819 | {
820 | "cell_type": "code",
821 | "execution_count": 20,
822 | "metadata": {},
823 | "outputs": [
824 | {
825 | "name": "stdout",
826 | "output_type": "stream",
827 | "text": [
828 | "Accuracy: 1.0\n"
829 | ]
830 | }
831 | ],
832 | "source": [
833 | "y_pred = model.predict(normed_valid_dataset)\n",
834 | "print(\"Accuracy:\",metrics.accuracy_score(valid_labels, y_pred))"
835 | ]
836 | },
837 | {
838 | "cell_type": "code",
839 | "execution_count": 21,
840 | "metadata": {},
841 | "outputs": [
842 | {
843 | "name": "stdout",
844 | "output_type": "stream",
845 | "text": [
846 | "Accuracy: 0.9333333333333333\n"
847 | ]
848 | }
849 | ],
850 | "source": [
851 | "y_pred = model.predict(normed_test_data)\n",
852 | "print(\"Accuracy:\",metrics.accuracy_score(test_labels, y_pred))"
853 | ]
854 | },
855 | {
856 | "cell_type": "code",
857 | "execution_count": 22,
858 | "metadata": {},
859 | "outputs": [
860 | {
861 | "data": {
862 | "image/png": "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\n",
863 | "text/plain": [
864 | ""
865 | ]
866 | },
867 | "metadata": {
868 | "needs_background": "light"
869 | },
870 | "output_type": "display_data"
871 | }
872 | ],
873 | "source": [
874 | "from sklearn.metrics import confusion_matrix\n",
875 | "\n",
876 | "\n",
877 | "ax= plt.subplot()\n",
878 | "predict_results = model.predict(normed_test_data)\n",
879 | "\n",
880 | "cm = confusion_matrix(predict_results, predict_results)\n",
881 | "\n",
882 | "sns.heatmap(cm, annot=True, ax = ax); #annot=True to annotate cells\n",
883 | "\n",
884 | "# labels, title and ticks\n",
885 | "ax.set_xlabel('Predicted labels');ax.set_ylabel('True labels'); \n",
886 | "ax.set_title('Confusion Matrix'); \n",
887 | "# ax.xaxis.set_ticklabels(['Positive', 'Negative']); ax.yaxis.set_ticklabels(['Positive', 'Negative']);\n"
888 | ]
889 | },
890 | {
891 | "cell_type": "code",
892 | "execution_count": null,
893 | "metadata": {},
894 | "outputs": [],
895 | "source": []
896 | },
897 | {
898 | "cell_type": "code",
899 | "execution_count": null,
900 | "metadata": {},
901 | "outputs": [],
902 | "source": []
903 | },
904 | {
905 | "cell_type": "code",
906 | "execution_count": null,
907 | "metadata": {},
908 | "outputs": [],
909 | "source": []
910 | }
911 | ],
912 | "metadata": {
913 | "kernelspec": {
914 | "display_name": "Python 3",
915 | "language": "python",
916 | "name": "python3"
917 | },
918 | "language_info": {
919 | "codemirror_mode": {
920 | "name": "ipython",
921 | "version": 3
922 | },
923 | "file_extension": ".py",
924 | "mimetype": "text/x-python",
925 | "name": "python",
926 | "nbconvert_exporter": "python",
927 | "pygments_lexer": "ipython3",
928 | "version": "3.7.7"
929 | }
930 | },
931 | "nbformat": 4,
932 | "nbformat_minor": 4
933 | }
934 |
--------------------------------------------------------------------------------
/Part 09 - Constructing Multi-Class Classifier Using SVM with Python/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 10 - Dimensionality Reduction - Principal Component Analysis using Python/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Part 11 - Unsupervised Learning - K-Means Clustering with Python/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Introduction to Machine Learning course with Python
2 | This is an "Introduction to Machine Learning Course with Python". This course is prepared and recorded by Zeyad Hailat, Ph.D.
3 | The files for the examples are available above.
4 |
5 | [For the Theory part of the course, feel free to refer to the recordings of the video lectures here.](https://github.com/zhailat/Introduction-to-machine-learning-Python/blob/master/Lectures_Videos.MD)
6 |
7 | # Python for Machine Learning and Data Science
8 |
9 | ### Part 01 - Anaconda and Python for Machine Learning.
10 | [YouTube Video](https://www.youtube.com/watch?v=1mtmbjDc0mw&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=1)
11 |
12 |
13 | ### Part 02 - Python Quick Tutorial - Pandas and Data preprocessing
14 | [YouTube Video](https://www.youtube.com/watch?v=b0oTpOq27o4&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=2)
15 |
16 |
17 | ### Part 03 - Linear Regression with Python
18 | [YouTube Video](https://www.youtube.com/watch?v=nEMNHFyVAaI&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=3)
19 |
20 | ### Part 04 - Logistic Regression with Python
21 | [YouTube Video](https://www.youtube.com/watch?v=fm-WSWCcQfE&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=4)
22 |
23 | ### Part 05 - Constructing a Neural Network Models - Regression model with Python (Tensorflow & Keras)
24 | [YouTube Video](https://www.youtube.com/watch?v=2p-dM0czPEw&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=5)
25 |
26 | ### Part 06 - Constructing a Binary Classifier Using Neural Network with Python (Tensorflow & Keras)
27 | [YouTube Video](https://www.youtube.com/watch?v=4ZhnXxfW8WQ&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=6)
28 |
29 | ### Part 07 - Constructing a Multi-Class Classifier Using Neural Network with Python (Tensorflow & Keras)
30 | [YouTube Video](https://www.youtube.com/watch?v=2WdPdE2hq78&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=9)
31 |
32 | ### Part 08 - Constructing a Binary Classifier Using SVM with Python
33 | [YouTube Video](https://www.youtube.com/watch?v=YiErsgx-7Tk&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=8)
34 |
35 | ### Part 09 - Constructing Multi-Class Classifier Using SVM with Python
36 | [YouTube Video](https://www.youtube.com/watch?v=Zj1CoJk2feE&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=7)
37 |
38 | ### Part 10 - Dimensionality Reduction - Principal Component Analysis using Python
39 | [YouTube Video](https://www.youtube.com/watch?v=TZv46JQulWw&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=10)
40 |
41 | ### Part 11 - Unsupervised Learning - K-Means Clustering with Python
42 | [YouTube Video](https://www.youtube.com/watch?v=b519wHt28_E&list=PLcfzmIJxFAppcrFXvjuG-jKM-oBHj6tu4&index=11)
43 |
44 |
45 |
46 | Please feel free to contact the author for any comments/suggestions/feedback.
47 | https://www.linkedin.com/in/zmhailat/
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------