├── 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 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.13.51.40.20.0
14.93.01.40.20.0
24.73.21.30.20.0
34.63.11.50.20.0
45.03.61.40.20.0
..................
1456.73.05.22.32.0
1466.32.55.01.92.0
1476.53.05.22.02.0
1486.23.45.42.32.0
1495.93.05.11.82.0
\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 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | "
countmeanstdmin25%50%75%max
sepal length (cm)90.05.7500000.8257444.35.15.606.3007.7
sepal width (cm)90.03.0600000.4471632.02.83.003.3754.2
petal length (cm)90.03.6222221.8086421.11.54.055.1006.9
petal width (cm)90.01.1600000.7806360.10.31.301.8002.5
\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 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
1251.7559910.3130851.3146760.819844
1360.6660660.7603491.0935151.588447
560.6660660.5367170.5959040.563643
24-1.1504770.760349-0.952218-1.229766
1172.3615051.6548761.7017061.332246
0-0.7871680.983980-1.228669-1.229766
21-0.7871681.431244-1.173379-0.973565
17-0.7871680.983980-1.228669-1.101665
1150.7871680.3130850.9276451.460347
1401.1504770.0894531.0935151.588447
\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 | --------------------------------------------------------------------------------