├── README.md └── nb ├── 1 Pandas Basic Steps.ipynb ├── 2 Statsmodels example.ipynb ├── 3 General Machine Learning.ipynb ├── 4 Bayesian Inference with pyflux.ipynb └── 5 LSTMs with Keras.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # ml4tsa 2 | Supplementary Material for Machine Learning for Time Series Analysis 3 | 4 | (c) 2017 by Mikio L. Braun 5 | -------------------------------------------------------------------------------- /nb/1 Pandas Basic Steps.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Pandas Basic Steps\n", 8 | "\n", 9 | "I recommend using venv to set up virtual environments. These are isolated Python installations and then you won't run into conflicts there.\n", 10 | "\n", 11 | "To setup, type \"python3 -m venv \". To activate type \". /bin/activate\" (the \".\" reads the contents into the shell which sets up the proper environment variables.) If you want to leave type \"deactivate\".\n", 12 | "\n", 13 | "First, let us cover some basics of the pandas library. It's main data structure is a DataFrame, essentially a collection of columns of data, and a dedicated index which defines how rows are identified.\n", 14 | "\n", 15 | "Prior to running this, install pandas, numpy, and matplotlib. To see this notebook, install jupyter. Then, go to this directory and type \"jupyter notebook\" and you can open the notebook.\n", 16 | "\n", 17 | "Execute lines by shift+Return." 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "import pandas as pd\n", 27 | "import numpy as np\n", 28 | "from datetime import datetime" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "## Basic Data Frame operations\n", 36 | "\n", 37 | "Setting up a data frame by specifying colums and the index as separate arrays.\n", 38 | "\n", 39 | "There are other ways, consult the excellent documentation at http://pandas.pydata.org/pandas-docs/stable/ !" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 2, 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [ 48 | "x = pd.DataFrame({'Min': [3.2, 2.1, 7.4, 5.2, 3.9, 0.7], \n", 49 | " 'Max': [5.3, 3.7, 11.2, 8.1, 9.2, 3.2], \n", 50 | " 'Avg': [4.7, 3.0, 8.1, 7.2, 5.1, 1.8]},\n", 51 | " index=[datetime(2017,8,1), datetime(2017,8,2), datetime(2017,8,3), \n", 52 | " datetime(2017,8,4), datetime(2017,8,5), datetime(2017,8,6)])" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "Printing the data frame gives a nice tabular view." 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 3, 65 | "metadata": {}, 66 | "outputs": [ 67 | { 68 | "data": { 69 | "text/html": [ 70 | "
\n", 71 | "\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 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-023.03.72.1
2017-08-038.111.27.4
2017-08-047.28.15.2
2017-08-055.19.23.9
2017-08-061.83.20.7
\n", 132 | "
" 133 | ], 134 | "text/plain": [ 135 | " Avg Max Min\n", 136 | "2017-08-01 4.7 5.3 3.2\n", 137 | "2017-08-02 3.0 3.7 2.1\n", 138 | "2017-08-03 8.1 11.2 7.4\n", 139 | "2017-08-04 7.2 8.1 5.2\n", 140 | "2017-08-05 5.1 9.2 3.9\n", 141 | "2017-08-06 1.8 3.2 0.7" 142 | ] 143 | }, 144 | "execution_count": 3, 145 | "metadata": {}, 146 | "output_type": "execute_result" 147 | } 148 | ], 149 | "source": [ 150 | "x" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "Often, you want to check whether the dataframe has the right types (especially if loading from a file, etc.), you can do this with the dtypes attribute (not a method call)." 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 4, 163 | "metadata": {}, 164 | "outputs": [ 165 | { 166 | "data": { 167 | "text/plain": [ 168 | "Avg float64\n", 169 | "Max float64\n", 170 | "Min float64\n", 171 | "dtype: object" 172 | ] 173 | }, 174 | "execution_count": 4, 175 | "metadata": {}, 176 | "output_type": "execute_result" 177 | } 178 | ], 179 | "source": [ 180 | "# type information\n", 181 | "x.dtypes" 182 | ] 183 | }, 184 | { 185 | "cell_type": "markdown", 186 | "metadata": {}, 187 | "source": [ 188 | "Another option is to call the info() method on the DataFrame object." 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 5, 194 | "metadata": {}, 195 | "outputs": [ 196 | { 197 | "name": "stdout", 198 | "output_type": "stream", 199 | "text": [ 200 | "\n", 201 | "DatetimeIndex: 6 entries, 2017-08-01 to 2017-08-06\n", 202 | "Data columns (total 3 columns):\n", 203 | "Avg 6 non-null float64\n", 204 | "Max 6 non-null float64\n", 205 | "Min 6 non-null float64\n", 206 | "dtypes: float64(3)\n", 207 | "memory usage: 192.0 bytes\n" 208 | ] 209 | } 210 | ], 211 | "source": [ 212 | "# information\n", 213 | "x.info()" 214 | ] 215 | }, 216 | { 217 | "cell_type": "markdown", 218 | "metadata": {}, 219 | "source": [ 220 | "## Accessing colums and rows\n", 221 | "\n", 222 | "We cover the basic access patterns to get individual rows or columns next.\n", 223 | "\n", 224 | "For columns, you can either call the column as an attribute or through indexing." 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 6, 230 | "metadata": {}, 231 | "outputs": [ 232 | { 233 | "data": { 234 | "text/plain": [ 235 | "2017-08-01 5.3\n", 236 | "2017-08-02 3.7\n", 237 | "2017-08-03 11.2\n", 238 | "2017-08-04 8.1\n", 239 | "2017-08-05 9.2\n", 240 | "2017-08-06 3.2\n", 241 | "Name: Max, dtype: float64" 242 | ] 243 | }, 244 | "execution_count": 6, 245 | "metadata": {}, 246 | "output_type": "execute_result" 247 | } 248 | ], 249 | "source": [ 250 | "# accessing columns\n", 251 | "x.Max" 252 | ] 253 | }, 254 | { 255 | "cell_type": "code", 256 | "execution_count": 7, 257 | "metadata": {}, 258 | "outputs": [ 259 | { 260 | "data": { 261 | "text/plain": [ 262 | "2017-08-01 4.7\n", 263 | "2017-08-02 3.0\n", 264 | "2017-08-03 8.1\n", 265 | "2017-08-04 7.2\n", 266 | "2017-08-05 5.1\n", 267 | "2017-08-06 1.8\n", 268 | "Name: Avg, dtype: float64" 269 | ] 270 | }, 271 | "execution_count": 7, 272 | "metadata": {}, 273 | "output_type": "execute_result" 274 | } 275 | ], 276 | "source": [ 277 | "x['Avg']" 278 | ] 279 | }, 280 | { 281 | "cell_type": "markdown", 282 | "metadata": {}, 283 | "source": [ 284 | "For accessing rows, use the loc attribute and index there. If you want an integer index, use the iloc attribute." 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 8, 290 | "metadata": {}, 291 | "outputs": [ 292 | { 293 | "data": { 294 | "text/plain": [ 295 | "Avg 4.7\n", 296 | "Max 5.3\n", 297 | "Min 3.2\n", 298 | "Name: 2017-08-01 00:00:00, dtype: float64" 299 | ] 300 | }, 301 | "execution_count": 8, 302 | "metadata": {}, 303 | "output_type": "execute_result" 304 | } 305 | ], 306 | "source": [ 307 | "# accessing rows\n", 308 | "x.loc['2017-08-01']" 309 | ] 310 | }, 311 | { 312 | "cell_type": "code", 313 | "execution_count": 9, 314 | "metadata": {}, 315 | "outputs": [ 316 | { 317 | "data": { 318 | "text/plain": [ 319 | "Avg 4.7\n", 320 | "Max 5.3\n", 321 | "Min 3.2\n", 322 | "Name: 2017-08-01 00:00:00, dtype: float64" 323 | ] 324 | }, 325 | "execution_count": 9, 326 | "metadata": {}, 327 | "output_type": "execute_result" 328 | } 329 | ], 330 | "source": [ 331 | "x.iloc[0]" 332 | ] 333 | }, 334 | { 335 | "cell_type": "markdown", 336 | "metadata": {}, 337 | "source": [ 338 | "Interestingly, for ranges, you can directly index on the object. Pandas has been built for time series data, so it is quite flexible understanding data specifications. You don't always have to construct a datetime object." 339 | ] 340 | }, 341 | { 342 | "cell_type": "code", 343 | "execution_count": 10, 344 | "metadata": {}, 345 | "outputs": [ 346 | { 347 | "data": { 348 | "text/html": [ 349 | "
\n", 350 | "\n", 363 | "\n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | "
AvgMaxMin
2017-08-023.03.72.1
2017-08-038.111.27.4
\n", 387 | "
" 388 | ], 389 | "text/plain": [ 390 | " Avg Max Min\n", 391 | "2017-08-02 3.0 3.7 2.1\n", 392 | "2017-08-03 8.1 11.2 7.4" 393 | ] 394 | }, 395 | "execution_count": 10, 396 | "metadata": {}, 397 | "output_type": "execute_result" 398 | } 399 | ], 400 | "source": [ 401 | "x['2017-08-02':'2017-08-03']" 402 | ] 403 | }, 404 | { 405 | "cell_type": "markdown", 406 | "metadata": {}, 407 | "source": [ 408 | "To extract subsets of columns, index with an array of column names." 409 | ] 410 | }, 411 | { 412 | "cell_type": "code", 413 | "execution_count": 11, 414 | "metadata": {}, 415 | "outputs": [ 416 | { 417 | "data": { 418 | "text/html": [ 419 | "
\n", 420 | "\n", 433 | "\n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | "
AvgMin
2017-08-014.73.2
2017-08-023.02.1
2017-08-038.17.4
2017-08-047.25.2
2017-08-055.13.9
2017-08-061.80.7
\n", 474 | "
" 475 | ], 476 | "text/plain": [ 477 | " Avg Min\n", 478 | "2017-08-01 4.7 3.2\n", 479 | "2017-08-02 3.0 2.1\n", 480 | "2017-08-03 8.1 7.4\n", 481 | "2017-08-04 7.2 5.2\n", 482 | "2017-08-05 5.1 3.9\n", 483 | "2017-08-06 1.8 0.7" 484 | ] 485 | }, 486 | "execution_count": 11, 487 | "metadata": {}, 488 | "output_type": "execute_result" 489 | } 490 | ], 491 | "source": [ 492 | "x[['Avg', 'Min']]" 493 | ] 494 | }, 495 | { 496 | "cell_type": "markdown", 497 | "metadata": {}, 498 | "source": [ 499 | "Coming back to ranges, you can use integer indices to access parts of the table. A lot more options exist, refer to the documentation for more information." 500 | ] 501 | }, 502 | { 503 | "cell_type": "code", 504 | "execution_count": 13, 505 | "metadata": {}, 506 | "outputs": [ 507 | { 508 | "data": { 509 | "text/html": [ 510 | "
\n", 511 | "\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 | "
AvgMaxMin
2017-08-023.03.72.1
2017-08-038.111.27.4
\n", 548 | "
" 549 | ], 550 | "text/plain": [ 551 | " Avg Max Min\n", 552 | "2017-08-02 3.0 3.7 2.1\n", 553 | "2017-08-03 8.1 11.2 7.4" 554 | ] 555 | }, 556 | "execution_count": 13, 557 | "metadata": {}, 558 | "output_type": "execute_result" 559 | } 560 | ], 561 | "source": [ 562 | "x[1:3]" 563 | ] 564 | }, 565 | { 566 | "cell_type": "markdown", 567 | "metadata": {}, 568 | "source": [ 569 | "## Plotting\n", 570 | "\n", 571 | "A very nifty feature of DataFrames is that they can plot themselves. Just call the plot() method on the data frame and it usually produces some form of reasonable representation, especially for time series.\n", 572 | "\n", 573 | "Type the special command \"%matplot inline\" in jupyter to get plots inline." 574 | ] 575 | }, 576 | { 577 | "cell_type": "code", 578 | "execution_count": 14, 579 | "metadata": {}, 580 | "outputs": [], 581 | "source": [ 582 | "%matplotlib inline" 583 | ] 584 | }, 585 | { 586 | "cell_type": "code", 587 | "execution_count": 15, 588 | "metadata": {}, 589 | "outputs": [ 590 | { 591 | "data": { 592 | "text/plain": [ 593 | "" 594 | ] 595 | }, 596 | "execution_count": 15, 597 | "metadata": {}, 598 | "output_type": "execute_result" 599 | }, 600 | { 601 | "data": { 602 | "image/png": "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\ncRSvogoAAAAASUVORK5CYII=\n", 603 | "text/plain": [ 604 | "" 605 | ] 606 | }, 607 | "metadata": {}, 608 | "output_type": "display_data" 609 | } 610 | ], 611 | "source": [ 612 | "x.plot()" 613 | ] 614 | }, 615 | { 616 | "cell_type": "markdown", 617 | "metadata": {}, 618 | "source": [ 619 | "## Missing values\n", 620 | "\n", 621 | "It is quite common that missing values exist, because the data isn't there, or for some other reason.\n", 622 | "\n", 623 | "These missing data points are introduced by putting None into the array, which are then converted to float NaN values for float columns." 624 | ] 625 | }, 626 | { 627 | "cell_type": "code", 628 | "execution_count": 16, 629 | "metadata": {}, 630 | "outputs": [], 631 | "source": [ 632 | "# Introducing missing data points into the data\n", 633 | "x = pd.DataFrame({'Min': [3.2, 2.1, None, 5.2, 3.9, 0.7], \n", 634 | " 'Max': [5.3, None, 11.2, 8.1, 9.2, 3.2], \n", 635 | " 'Avg': [4.7, 3.0, 8.1, 7.2, 5.1, 1.8]},\n", 636 | " index=[datetime(2017,8,1), datetime(2017,8,2), datetime(2017,8,3), \n", 637 | " datetime(2017,8,4), datetime(2017,8,5), datetime(2017,8,6)])" 638 | ] 639 | }, 640 | { 641 | "cell_type": "code", 642 | "execution_count": 17, 643 | "metadata": {}, 644 | "outputs": [ 645 | { 646 | "data": { 647 | "text/html": [ 648 | "
\n", 649 | "\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 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-023.0NaN2.1
2017-08-038.111.2NaN
2017-08-047.28.15.2
2017-08-055.19.23.9
2017-08-061.83.20.7
\n", 710 | "
" 711 | ], 712 | "text/plain": [ 713 | " Avg Max Min\n", 714 | "2017-08-01 4.7 5.3 3.2\n", 715 | "2017-08-02 3.0 NaN 2.1\n", 716 | "2017-08-03 8.1 11.2 NaN\n", 717 | "2017-08-04 7.2 8.1 5.2\n", 718 | "2017-08-05 5.1 9.2 3.9\n", 719 | "2017-08-06 1.8 3.2 0.7" 720 | ] 721 | }, 722 | "execution_count": 17, 723 | "metadata": {}, 724 | "output_type": "execute_result" 725 | } 726 | ], 727 | "source": [ 728 | "x" 729 | ] 730 | }, 731 | { 732 | "cell_type": "markdown", 733 | "metadata": {}, 734 | "source": [ 735 | "Most arithmetic operations cannot deal with missing values, so one missing value can taint the whole computation and you get nothing but nan out.\n", 736 | "\n", 737 | "Pandas comes with a number of options to deal with this.\n", 738 | "\n", 739 | "The first option is to just drop columns or rows which contain any missing value." 740 | ] 741 | }, 742 | { 743 | "cell_type": "code", 744 | "execution_count": 20, 745 | "metadata": {}, 746 | "outputs": [ 747 | { 748 | "data": { 749 | "text/html": [ 750 | "
\n", 751 | "\n", 764 | "\n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-047.28.15.2
2017-08-055.19.23.9
2017-08-061.83.20.7
\n", 800 | "
" 801 | ], 802 | "text/plain": [ 803 | " Avg Max Min\n", 804 | "2017-08-01 4.7 5.3 3.2\n", 805 | "2017-08-04 7.2 8.1 5.2\n", 806 | "2017-08-05 5.1 9.2 3.9\n", 807 | "2017-08-06 1.8 3.2 0.7" 808 | ] 809 | }, 810 | "execution_count": 20, 811 | "metadata": {}, 812 | "output_type": "execute_result" 813 | } 814 | ], 815 | "source": [ 816 | "# removing rows with missing values\n", 817 | "x.dropna() # alternatively, use axis=0" 818 | ] 819 | }, 820 | { 821 | "cell_type": "code", 822 | "execution_count": 21, 823 | "metadata": {}, 824 | "outputs": [ 825 | { 826 | "data": { 827 | "text/html": [ 828 | "
\n", 829 | "\n", 842 | "\n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | "
Avg
2017-08-014.7
2017-08-023.0
2017-08-038.1
2017-08-047.2
2017-08-055.1
2017-08-061.8
\n", 876 | "
" 877 | ], 878 | "text/plain": [ 879 | " Avg\n", 880 | "2017-08-01 4.7\n", 881 | "2017-08-02 3.0\n", 882 | "2017-08-03 8.1\n", 883 | "2017-08-04 7.2\n", 884 | "2017-08-05 5.1\n", 885 | "2017-08-06 1.8" 886 | ] 887 | }, 888 | "execution_count": 21, 889 | "metadata": {}, 890 | "output_type": "execute_result" 891 | } 892 | ], 893 | "source": [ 894 | "# remove columns which have missing data\n", 895 | "x.dropna(axis=1)" 896 | ] 897 | }, 898 | { 899 | "cell_type": "markdown", 900 | "metadata": {}, 901 | "source": [ 902 | "Another option is to fill the missing values, either by a specific value, or by providing a method, for example by filling the last non-missing value forward or backwards." 903 | ] 904 | }, 905 | { 906 | "cell_type": "code", 907 | "execution_count": 22, 908 | "metadata": {}, 909 | "outputs": [ 910 | { 911 | "data": { 912 | "text/html": [ 913 | "
\n", 914 | "\n", 927 | "\n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-023.00.02.1
2017-08-038.111.20.0
2017-08-047.28.15.2
2017-08-055.19.23.9
2017-08-061.83.20.7
\n", 975 | "
" 976 | ], 977 | "text/plain": [ 978 | " Avg Max Min\n", 979 | "2017-08-01 4.7 5.3 3.2\n", 980 | "2017-08-02 3.0 0.0 2.1\n", 981 | "2017-08-03 8.1 11.2 0.0\n", 982 | "2017-08-04 7.2 8.1 5.2\n", 983 | "2017-08-05 5.1 9.2 3.9\n", 984 | "2017-08-06 1.8 3.2 0.7" 985 | ] 986 | }, 987 | "execution_count": 22, 988 | "metadata": {}, 989 | "output_type": "execute_result" 990 | } 991 | ], 992 | "source": [ 993 | "x.fillna(0.0)" 994 | ] 995 | }, 996 | { 997 | "cell_type": "code", 998 | "execution_count": 23, 999 | "metadata": {}, 1000 | "outputs": [ 1001 | { 1002 | "data": { 1003 | "text/html": [ 1004 | "
\n", 1005 | "\n", 1018 | "\n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-023.05.32.1
2017-08-038.111.22.1
2017-08-047.28.15.2
2017-08-055.19.23.9
2017-08-061.83.20.7
\n", 1066 | "
" 1067 | ], 1068 | "text/plain": [ 1069 | " Avg Max Min\n", 1070 | "2017-08-01 4.7 5.3 3.2\n", 1071 | "2017-08-02 3.0 5.3 2.1\n", 1072 | "2017-08-03 8.1 11.2 2.1\n", 1073 | "2017-08-04 7.2 8.1 5.2\n", 1074 | "2017-08-05 5.1 9.2 3.9\n", 1075 | "2017-08-06 1.8 3.2 0.7" 1076 | ] 1077 | }, 1078 | "execution_count": 23, 1079 | "metadata": {}, 1080 | "output_type": "execute_result" 1081 | } 1082 | ], 1083 | "source": [ 1084 | "x.fillna(method='pad')" 1085 | ] 1086 | }, 1087 | { 1088 | "cell_type": "code", 1089 | "execution_count": 24, 1090 | "metadata": {}, 1091 | "outputs": [ 1092 | { 1093 | "data": { 1094 | "text/html": [ 1095 | "
\n", 1096 | "\n", 1109 | "\n", 1110 | " \n", 1111 | " \n", 1112 | " \n", 1113 | " \n", 1114 | " \n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | " \n", 1124 | " \n", 1125 | " \n", 1126 | " \n", 1127 | " \n", 1128 | " \n", 1129 | " \n", 1130 | " \n", 1131 | " \n", 1132 | " \n", 1133 | " \n", 1134 | " \n", 1135 | " \n", 1136 | " \n", 1137 | " \n", 1138 | " \n", 1139 | " \n", 1140 | " \n", 1141 | " \n", 1142 | " \n", 1143 | " \n", 1144 | " \n", 1145 | " \n", 1146 | " \n", 1147 | " \n", 1148 | " \n", 1149 | " \n", 1150 | " \n", 1151 | " \n", 1152 | " \n", 1153 | " \n", 1154 | " \n", 1155 | " \n", 1156 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-023.011.22.1
2017-08-038.111.25.2
2017-08-047.28.15.2
2017-08-055.19.23.9
2017-08-061.83.20.7
\n", 1157 | "
" 1158 | ], 1159 | "text/plain": [ 1160 | " Avg Max Min\n", 1161 | "2017-08-01 4.7 5.3 3.2\n", 1162 | "2017-08-02 3.0 11.2 2.1\n", 1163 | "2017-08-03 8.1 11.2 5.2\n", 1164 | "2017-08-04 7.2 8.1 5.2\n", 1165 | "2017-08-05 5.1 9.2 3.9\n", 1166 | "2017-08-06 1.8 3.2 0.7" 1167 | ] 1168 | }, 1169 | "execution_count": 24, 1170 | "metadata": {}, 1171 | "output_type": "execute_result" 1172 | } 1173 | ], 1174 | "source": [ 1175 | "x.fillna(method='bfill')" 1176 | ] 1177 | }, 1178 | { 1179 | "cell_type": "markdown", 1180 | "metadata": {}, 1181 | "source": [ 1182 | "## Resampling\n", 1183 | "\n", 1184 | "You'll often find that you want to change the frequency of time series, both up and down. Pandas comes with two functions for that: asfreq() which changes the frequency, but introduces NaNs or discards values, and a more flexible resample() function which allows you to specify how the resampling should be done by providing how resamples should be aggregated." 1185 | ] 1186 | }, 1187 | { 1188 | "cell_type": "code", 1189 | "execution_count": 25, 1190 | "metadata": {}, 1191 | "outputs": [ 1192 | { 1193 | "data": { 1194 | "text/html": [ 1195 | "
\n", 1196 | "\n", 1209 | "\n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | " \n", 1255 | " \n", 1256 | " \n", 1257 | " \n", 1258 | " \n", 1259 | " \n", 1260 | " \n", 1261 | " \n", 1262 | " \n", 1263 | " \n", 1264 | " \n", 1265 | " \n", 1266 | " \n", 1267 | " \n", 1268 | " \n", 1269 | " \n", 1270 | " \n", 1271 | " \n", 1272 | " \n", 1273 | " \n", 1274 | " \n", 1275 | " \n", 1276 | " \n", 1277 | " \n", 1278 | " \n", 1279 | " \n", 1280 | " \n", 1281 | " \n", 1282 | " \n", 1283 | " \n", 1284 | " \n", 1285 | " \n", 1286 | "
AvgMaxMin
2017-08-01 00:00:004.75.33.2
2017-08-01 12:00:00NaNNaNNaN
2017-08-02 00:00:003.0NaN2.1
2017-08-02 12:00:00NaNNaNNaN
2017-08-03 00:00:008.111.2NaN
2017-08-03 12:00:00NaNNaNNaN
2017-08-04 00:00:007.28.15.2
2017-08-04 12:00:00NaNNaNNaN
2017-08-05 00:00:005.19.23.9
2017-08-05 12:00:00NaNNaNNaN
2017-08-06 00:00:001.83.20.7
\n", 1287 | "
" 1288 | ], 1289 | "text/plain": [ 1290 | " Avg Max Min\n", 1291 | "2017-08-01 00:00:00 4.7 5.3 3.2\n", 1292 | "2017-08-01 12:00:00 NaN NaN NaN\n", 1293 | "2017-08-02 00:00:00 3.0 NaN 2.1\n", 1294 | "2017-08-02 12:00:00 NaN NaN NaN\n", 1295 | "2017-08-03 00:00:00 8.1 11.2 NaN\n", 1296 | "2017-08-03 12:00:00 NaN NaN NaN\n", 1297 | "2017-08-04 00:00:00 7.2 8.1 5.2\n", 1298 | "2017-08-04 12:00:00 NaN NaN NaN\n", 1299 | "2017-08-05 00:00:00 5.1 9.2 3.9\n", 1300 | "2017-08-05 12:00:00 NaN NaN NaN\n", 1301 | "2017-08-06 00:00:00 1.8 3.2 0.7" 1302 | ] 1303 | }, 1304 | "execution_count": 25, 1305 | "metadata": {}, 1306 | "output_type": "execute_result" 1307 | } 1308 | ], 1309 | "source": [ 1310 | "# resample to a specific time\n", 1311 | "# we don't have a lot of data, but let's use two days\n", 1312 | "x.asfreq('12H')" 1313 | ] 1314 | }, 1315 | { 1316 | "cell_type": "code", 1317 | "execution_count": 26, 1318 | "metadata": {}, 1319 | "outputs": [ 1320 | { 1321 | "data": { 1322 | "text/html": [ 1323 | "
\n", 1324 | "\n", 1337 | "\n", 1338 | " \n", 1339 | " \n", 1340 | " \n", 1341 | " \n", 1342 | " \n", 1343 | " \n", 1344 | " \n", 1345 | " \n", 1346 | " \n", 1347 | " \n", 1348 | " \n", 1349 | " \n", 1350 | " \n", 1351 | " \n", 1352 | " \n", 1353 | " \n", 1354 | " \n", 1355 | " \n", 1356 | " \n", 1357 | " \n", 1358 | " \n", 1359 | " \n", 1360 | " \n", 1361 | " \n", 1362 | " \n", 1363 | " \n", 1364 | " \n", 1365 | " \n", 1366 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-038.111.2NaN
2017-08-055.19.23.9
\n", 1367 | "
" 1368 | ], 1369 | "text/plain": [ 1370 | " Avg Max Min\n", 1371 | "2017-08-01 4.7 5.3 3.2\n", 1372 | "2017-08-03 8.1 11.2 NaN\n", 1373 | "2017-08-05 5.1 9.2 3.9" 1374 | ] 1375 | }, 1376 | "execution_count": 26, 1377 | "metadata": {}, 1378 | "output_type": "execute_result" 1379 | } 1380 | ], 1381 | "source": [ 1382 | "x.asfreq('2D')" 1383 | ] 1384 | }, 1385 | { 1386 | "cell_type": "code", 1387 | "execution_count": 27, 1388 | "metadata": {}, 1389 | "outputs": [ 1390 | { 1391 | "data": { 1392 | "text/plain": [ 1393 | "DatetimeIndexResampler [freq=<2 * Days>, axis=0, closed=left, label=left, convention=start, base=0]" 1394 | ] 1395 | }, 1396 | "execution_count": 27, 1397 | "metadata": {}, 1398 | "output_type": "execute_result" 1399 | } 1400 | ], 1401 | "source": [ 1402 | "# resample returns a resampling object that has an aggregate method\n", 1403 | "x.resample('2D')" 1404 | ] 1405 | }, 1406 | { 1407 | "cell_type": "code", 1408 | "execution_count": 28, 1409 | "metadata": {}, 1410 | "outputs": [ 1411 | { 1412 | "data": { 1413 | "text/html": [ 1414 | "
\n", 1415 | "\n", 1428 | "\n", 1429 | " \n", 1430 | " \n", 1431 | " \n", 1432 | " \n", 1433 | " \n", 1434 | " \n", 1435 | " \n", 1436 | " \n", 1437 | " \n", 1438 | " \n", 1439 | " \n", 1440 | " \n", 1441 | " \n", 1442 | " \n", 1443 | " \n", 1444 | " \n", 1445 | " \n", 1446 | " \n", 1447 | " \n", 1448 | " \n", 1449 | " \n", 1450 | " \n", 1451 | " \n", 1452 | " \n", 1453 | " \n", 1454 | " \n", 1455 | " \n", 1456 | " \n", 1457 | "
AvgMaxMin
2017-08-013.05.32.1
2017-08-037.28.15.2
2017-08-051.83.20.7
\n", 1458 | "
" 1459 | ], 1460 | "text/plain": [ 1461 | " Avg Max Min\n", 1462 | "2017-08-01 3.0 5.3 2.1\n", 1463 | "2017-08-03 7.2 8.1 5.2\n", 1464 | "2017-08-05 1.8 3.2 0.7" 1465 | ] 1466 | }, 1467 | "execution_count": 28, 1468 | "metadata": {}, 1469 | "output_type": "execute_result" 1470 | } 1471 | ], 1472 | "source": [ 1473 | "x.resample('2D').agg(np.min)" 1474 | ] 1475 | }, 1476 | { 1477 | "cell_type": "code", 1478 | "execution_count": 29, 1479 | "metadata": {}, 1480 | "outputs": [ 1481 | { 1482 | "data": { 1483 | "text/html": [ 1484 | "
\n", 1485 | "\n", 1498 | "\n", 1499 | " \n", 1500 | " \n", 1501 | " \n", 1502 | " \n", 1503 | " \n", 1504 | " \n", 1505 | " \n", 1506 | " \n", 1507 | " \n", 1508 | " \n", 1509 | " \n", 1510 | " \n", 1511 | " \n", 1512 | " \n", 1513 | " \n", 1514 | " \n", 1515 | " \n", 1516 | " \n", 1517 | " \n", 1518 | " \n", 1519 | " \n", 1520 | " \n", 1521 | " \n", 1522 | " \n", 1523 | " \n", 1524 | " \n", 1525 | " \n", 1526 | " \n", 1527 | "
AvgMaxMin
2017-08-014.75.33.2
2017-08-038.111.2NaN
2017-08-055.19.23.9
\n", 1528 | "
" 1529 | ], 1530 | "text/plain": [ 1531 | " Avg Max Min\n", 1532 | "2017-08-01 4.7 5.3 3.2\n", 1533 | "2017-08-03 8.1 11.2 NaN\n", 1534 | "2017-08-05 5.1 9.2 3.9" 1535 | ] 1536 | }, 1537 | "execution_count": 29, 1538 | "metadata": {}, 1539 | "output_type": "execute_result" 1540 | } 1541 | ], 1542 | "source": [ 1543 | "x.resample('2D').asfreq()" 1544 | ] 1545 | }, 1546 | { 1547 | "cell_type": "code", 1548 | "execution_count": 30, 1549 | "metadata": {}, 1550 | "outputs": [ 1551 | { 1552 | "data": { 1553 | "text/html": [ 1554 | "
\n", 1555 | "\n", 1568 | "\n", 1569 | " \n", 1570 | " \n", 1571 | " \n", 1572 | " \n", 1573 | " \n", 1574 | " \n", 1575 | " \n", 1576 | " \n", 1577 | " \n", 1578 | " \n", 1579 | " \n", 1580 | " \n", 1581 | " \n", 1582 | " \n", 1583 | " \n", 1584 | " \n", 1585 | " \n", 1586 | " \n", 1587 | " \n", 1588 | " \n", 1589 | " \n", 1590 | " \n", 1591 | " \n", 1592 | " \n", 1593 | " \n", 1594 | " \n", 1595 | " \n", 1596 | " \n", 1597 | " \n", 1598 | " \n", 1599 | " \n", 1600 | " \n", 1601 | " \n", 1602 | " \n", 1603 | " \n", 1604 | " \n", 1605 | " \n", 1606 | " \n", 1607 | " \n", 1608 | " \n", 1609 | " \n", 1610 | " \n", 1611 | " \n", 1612 | " \n", 1613 | " \n", 1614 | " \n", 1615 | " \n", 1616 | " \n", 1617 | " \n", 1618 | " \n", 1619 | " \n", 1620 | " \n", 1621 | " \n", 1622 | " \n", 1623 | " \n", 1624 | " \n", 1625 | " \n", 1626 | " \n", 1627 | " \n", 1628 | " \n", 1629 | " \n", 1630 | " \n", 1631 | " \n", 1632 | " \n", 1633 | " \n", 1634 | " \n", 1635 | " \n", 1636 | " \n", 1637 | " \n", 1638 | " \n", 1639 | " \n", 1640 | " \n", 1641 | " \n", 1642 | " \n", 1643 | " \n", 1644 | " \n", 1645 | "
AvgMaxMin
2017-08-01 00:00:004.75.33.2
2017-08-01 12:00:004.75.33.2
2017-08-02 00:00:003.0NaN2.1
2017-08-02 12:00:003.0NaN2.1
2017-08-03 00:00:008.111.2NaN
2017-08-03 12:00:008.111.2NaN
2017-08-04 00:00:007.28.15.2
2017-08-04 12:00:007.28.15.2
2017-08-05 00:00:005.19.23.9
2017-08-05 12:00:005.19.23.9
2017-08-06 00:00:001.83.20.7
\n", 1646 | "
" 1647 | ], 1648 | "text/plain": [ 1649 | " Avg Max Min\n", 1650 | "2017-08-01 00:00:00 4.7 5.3 3.2\n", 1651 | "2017-08-01 12:00:00 4.7 5.3 3.2\n", 1652 | "2017-08-02 00:00:00 3.0 NaN 2.1\n", 1653 | "2017-08-02 12:00:00 3.0 NaN 2.1\n", 1654 | "2017-08-03 00:00:00 8.1 11.2 NaN\n", 1655 | "2017-08-03 12:00:00 8.1 11.2 NaN\n", 1656 | "2017-08-04 00:00:00 7.2 8.1 5.2\n", 1657 | "2017-08-04 12:00:00 7.2 8.1 5.2\n", 1658 | "2017-08-05 00:00:00 5.1 9.2 3.9\n", 1659 | "2017-08-05 12:00:00 5.1 9.2 3.9\n", 1660 | "2017-08-06 00:00:00 1.8 3.2 0.7" 1661 | ] 1662 | }, 1663 | "execution_count": 30, 1664 | "metadata": {}, 1665 | "output_type": "execute_result" 1666 | } 1667 | ], 1668 | "source": [ 1669 | "x.resample('12H').ffill()" 1670 | ] 1671 | }, 1672 | { 1673 | "cell_type": "code", 1674 | "execution_count": null, 1675 | "metadata": { 1676 | "collapsed": true 1677 | }, 1678 | "outputs": [], 1679 | "source": [] 1680 | } 1681 | ], 1682 | "metadata": { 1683 | "kernelspec": { 1684 | "display_name": "Python 3", 1685 | "language": "python", 1686 | "name": "python3" 1687 | }, 1688 | "language_info": { 1689 | "codemirror_mode": { 1690 | "name": "ipython", 1691 | "version": 3 1692 | }, 1693 | "file_extension": ".py", 1694 | "mimetype": "text/x-python", 1695 | "name": "python", 1696 | "nbconvert_exporter": "python", 1697 | "pygments_lexer": "ipython3", 1698 | "version": "3.6.2" 1699 | } 1700 | }, 1701 | "nbformat": 4, 1702 | "nbformat_minor": 2 1703 | } 1704 | -------------------------------------------------------------------------------- /nb/3 General Machine Learning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Machine Learning for Time Series Analysis\n", 8 | "\n", 9 | "I recommend using venv to set up virtual environments. These are isolated Python installations and then you won't run into conflicts there.\n", 10 | "\n", 11 | "To setup, type \"python3 -m venv \". To activate type \". /bin/activate\" (the \".\" reads the contents into the shell which sets up the proper environment variables.) If you want to leave type \"deactivate\".\n", 12 | "\n", 13 | "Now we want to use general machine learning algorithms on the data. We will use scikit-learn, which is the de fact standard for general machine learning.\n", 14 | "\n", 15 | "Prior to running this, install slearn, numpy, and matplotlib. To see this notebook, install jupyter. Then, go to this directory and type \"jupyter notebook\" and you can open the notebook.\n", 16 | "\n", 17 | "Execute lines by shift+Return." 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "%matplotlib inline\n", 27 | "import numpy as np\n", 28 | "import matplotlib.pyplot as plt" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "## Generate some toy data\n", 36 | "\n", 37 | "Let us first generate some toy data. We again use the arma process sample.\n", 38 | "\n", 39 | "The reader is encouraged to try these methods on more \"interesting\" data!" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 26, 45 | "metadata": {}, 46 | "outputs": [ 47 | { 48 | "data": { 49 | "text/plain": [ 50 | "[]" 51 | ] 52 | }, 53 | "execution_count": 26, 54 | "metadata": {}, 55 | "output_type": "execute_result" 56 | }, 57 | { 58 | "data": { 59 | "image/png": "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\njAj/D5vh0JExjdxSAAAAAElFTkSuQmCC\n", 60 | "text/plain": [ 61 | "" 62 | ] 63 | }, 64 | "metadata": {}, 65 | "output_type": "display_data" 66 | } 67 | ], 68 | "source": [ 69 | "from statsmodels.tsa.arima_process import arma_generate_sample\n", 70 | "xs = arma_generate_sample([1.0, -0.6, 1.0, -0.6], [1.0], 200, 1.0, burnin=100)\n", 71 | "plt.plot(xs)" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "## Helper function to embed data (only works for 1d data)\n", 79 | "\n", 80 | "The first step is to transform the time series prediction problem into a supervised learning problem. For this, the previous values used for prediction are extracted for each time step. These become then the input-output pairs.\n", 81 | "\n", 82 | "The following helper function accomplishes that. Note that it assumes that x is one-dimensional. For multivariate time series, which can also be treated in this way, the function needs to be modified." 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 3, 88 | "metadata": {}, 89 | "outputs": [], 90 | "source": [ 91 | "def embed_data(x, steps):\n", 92 | " n = len(x)\n", 93 | " xout = np.zeros((n - steps, steps))\n", 94 | " yout = x[steps:]\n", 95 | " for i in np.arange(steps, n):\n", 96 | " xout[i - steps] = x[i-steps:i]\n", 97 | " return xout, yout\n", 98 | "\n", 99 | "x, y = embed_data(np.array([1,2,3,4,5]), 2)" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "Let's try it on a bit of data to see whether it works (it does)." 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 4, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "data": { 116 | "text/plain": [ 117 | "(array([[ 1., 2.],\n", 118 | " [ 2., 3.],\n", 119 | " [ 3., 4.]]), array([3, 4, 5]))" 120 | ] 121 | }, 122 | "execution_count": 4, 123 | "metadata": {}, 124 | "output_type": "execute_result" 125 | } 126 | ], 127 | "source": [ 128 | "x, y" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "## Train a support vector regression on this\n", 136 | "\n", 137 | "Let us train a Support Vector Regression learner on this. This is a general purpose algorithm which is implemented in a very efficient manner. Depending on the kernel, the resulting model is linear or non-linear.\n", 138 | "\n", 139 | "This is a pretty reduced set-up in a real setting, you would want to set up cross-validation to estimate the right choices for the learned model.\n", 140 | "\n", 141 | "We will do a proper training and test split a bit further below, however." 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 5, 147 | "metadata": {}, 148 | "outputs": [], 149 | "source": [ 150 | "import sklearn\n", 151 | "from sklearn import svm" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": {}, 157 | "source": [ 158 | "scikit-learn's interface works like this:\n", 159 | " 1. construct the model my creating an instance of the corresponding class, setting parameters\n", 160 | " 2. fitting the model with the fit() function, passing in input and output as two separate arrays.\n", 161 | " 3. using the model's predict() function, you can compute on new data points.\n", 162 | " \n", 163 | "In summary, unlike in statsmodel, the model object is the same, there is no separate result object." 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 6, 169 | "metadata": {}, 170 | "outputs": [], 171 | "source": [ 172 | "model = svm.SVR(kernel='linear', C=1)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "Let us train this on the very simple data set from above." 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 7, 185 | "metadata": {}, 186 | "outputs": [ 187 | { 188 | "data": { 189 | "text/plain": [ 190 | "SVR(C=1, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',\n", 191 | " kernel='linear', max_iter=-1, shrinking=True, tol=0.001, verbose=False)" 192 | ] 193 | }, 194 | "execution_count": 7, 195 | "metadata": {}, 196 | "output_type": "execute_result" 197 | } 198 | ], 199 | "source": [ 200 | "model.fit(x, y)" 201 | ] 202 | }, 203 | { 204 | "cell_type": "markdown", 205 | "metadata": {}, 206 | "source": [ 207 | "Predicting on the training points should return very good results, and in fact, does." 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 8, 213 | "metadata": {}, 214 | "outputs": [ 215 | { 216 | "data": { 217 | "text/plain": [ 218 | "array([ 3.1, 4. , 4.9])" 219 | ] 220 | }, 221 | "execution_count": 8, 222 | "metadata": {}, 223 | "output_type": "execute_result" 224 | } 225 | ], 226 | "source": [ 227 | "model.predict(x)" 228 | ] 229 | }, 230 | { 231 | "cell_type": "markdown", 232 | "metadata": {}, 233 | "source": [ 234 | "So far, so good. Now let us apply this to the toy data above which was sampled from the ARMA process. We use the embedding function, and embed with order 5." 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "execution_count": 9, 240 | "metadata": {}, 241 | "outputs": [], 242 | "source": [ 243 | "x, y = embed_data(xs, 5)" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 10, 249 | "metadata": {}, 250 | "outputs": [ 251 | { 252 | "data": { 253 | "text/plain": [ 254 | "SVR(C=1, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',\n", 255 | " kernel='linear', max_iter=-1, shrinking=True, tol=0.001, verbose=False)" 256 | ] 257 | }, 258 | "execution_count": 10, 259 | "metadata": {}, 260 | "output_type": "execute_result" 261 | } 262 | ], 263 | "source": [ 264 | "model.fit(x, y)" 265 | ] 266 | }, 267 | { 268 | "cell_type": "markdown", 269 | "metadata": {}, 270 | "source": [ 271 | "Let us now plot the predicted values vs. the true values. If the prediction were perfect, we would see a perfect diagonal line, but due to noise, we will often see something else. This kind of plot is also great for identifying whether the errors are uniform over all ranges, or whether there are some areas which have higher variance than others. This plot also work irrespective of the input dimensionality." 272 | ] 273 | }, 274 | { 275 | "cell_type": "code", 276 | "execution_count": 11, 277 | "metadata": {}, 278 | "outputs": [ 279 | { 280 | "data": { 281 | "text/plain": [ 282 | "[]" 283 | ] 284 | }, 285 | "execution_count": 11, 286 | "metadata": {}, 287 | "output_type": "execute_result" 288 | }, 289 | { 290 | "data": { 291 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD8CAYAAAB0IB+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X1wHPWZJ/DvMyPJizgvzMoG28iSEQZXIu2uT1IZsQkJ\nrmUJTrnKiwlZDHWXrUtsUmXuKpX949jsneLy1V6ltpYLqS0uYHwU+SPIYGRi1sGJY47FSQ5ha7Qk\nSHAGoVj22MIv8phwseMZTT/3x0yPelo9793z1t9Plcuanpfutqynf3p+Tz8/UVUQEVHjC1T7AIiI\nqDIY8ImIfIIBn4jIJxjwiYh8ggGfiMgnGPCJiHyCAZ+IyCcY8ImIfIIBn4jIJ5qqfQBWS5Ys0VWr\nVlX7MIiI6ko4HL6gqkvzvc6VgC8izwLYCOCcqvaktu0AsBXA+dTLvqWqr+b6nFWrVmF0dNSNQyIi\n8g0RmS7kdW6ldJ4DcK/D9u+q6trUn5zBnoiIvOVKwFfVIwAuuvFZRETkDa8nbR8VkV+LyLMiEvJ4\nX0RElIOXAf/7AG4BsBbADIDHnV4kIttEZFRERs+fP+/0EiIicoFnAV9Vz6pqQlUNAM8AWJfldbtU\ntV9V+5cuzTvJTEREJfIs4IvIcsvD+wCMe7UvIiLKz62yzCEAdwFYIiIRAN8GcJeIrAWgAE4AeMSN\nfRER1brwdBQjU7MY6GpDX2ftTF+6EvBVdYvD5v/lxmcTEdWT8HQUD+8eQWzOQEtTAD/82kDeoF+p\nC0RN3WlLRFTvRqZmEZszYCgQnzMwMjWbM4g//9ZJDO4fh6Fa8AWiVAz4RERFyjUiD7W2ICACQNHc\nFMBAV1vW94daWzC4fxxzhgIAYgVcIMrBgE9EVIRcKZvwdBQ7D0xgzlAIgHu7ly0I3tb3B0SQSAV7\nAAiIOF4g3MJumURERXBK2Vifuxo3ACSrVX709hk8/9bJrO83DEUwIAgAaAoIdm7qYQ6fiKhWDHS1\noaUpgPicsSBlM9DVBhFA5wftODg+g4du78j6/sGN3YhejlWkoocBn4ioCH2dIfzwawOOOfy+zhC2\n3dmFp45Mpbdt6Fle8Pu9xoBPRFSkvs6QY6AOT0fxydU5rFsVwsXfxdC19N9gzbLFBb/fawz4REQO\niq2ND09HseWZ5GSsaerC73Dkg/OelloWgwGfiMgmPB3Fll1vIp5QNAcFQ9vuyAjYTheDkalZxC3B\nHkDBtfiVwiodIiKb4bEIYgmFAoglFE+98WH6ObOs8vFDx/Hw7hGEp6MAkpOxzU2ZITUgyFmL/+Tr\nk+n3VwJH+ERENmJ7/L//7zmEp6Po6wxlvZO2rzOEoa0D2DcWgQLoWXFd1uqbUtovuIEBn4jIZnNv\nO/YcO5W+KUoNTQf2XGWZhU7GFtt+wS0M+EREWJiX/2+bepI9bgxFS/N8YHejrDLXRcNLotY7BKqs\nv79fR0dHq30YRNRg8lXcZEuxeNnF0s3PFpGwqvbnex1H+ETU0ArJl+fKy+cKxuUE7WrU4jPgE1FD\nKyRfXkqKpRq/FZSLAZ+IGo416BYSzEvJy2drolaN6ptCMeATUUNxGnkPbuzGwfEZbOhZnjUAF5ti\ncbqQVKv6plAM+ETUUOxBd99YJHkj1ZyBYycuYs2yxa4E4Wy/FVSj+qZQDPhE1FDsI28FPBl1O+Xq\nq9kJsxAM+ETUUOxBFwD2jUXSF4BQawuefH2yrICcq/KnWp0wC8GAT0QNxx50zQtAqLUFOw9MlD2p\nWuu5+mzYPI2IGo69MVlfZwjb169G9HIs6/KExTDTRsEczdFqEUf4RNRQcqVb3GppUOu5+mwY8Imo\noeRKt7gZqGs5V5+NKwFfRJ4FsBHAOVXtSW37IwAvAFgF4ASAL6tq5Ro/E5Ev5RvF12OgdotbOfzn\nANxr2/YYgNdU9VYAr6UeExF5wszbA8lJ2m/es6bm7nStNldG+Kp6RERW2TZvAnBX6usfAPgXAP/Z\njf0RkT9l61PjlLffvn51FY+0NnmZw79RVWdSX38E4EYP90VEDS7XZGy9lklWWkXKMjXZdN+x8b6I\nbBORUREZPX/+fCUOh4jqULZmZUD9lklWmpcj/LMislxVZ0RkOYBzTi9S1V0AdgHJBVA8PB4iqmNm\nUI/FDYgIQq0t6edyVd/UcrviSvNyhP8KgK+kvv4KgP0e7ouIGlxfZwiDG7sRCAgMVew8MJG+scp8\n3szbmzddmWmgxw8dx8O7RzJe70dulWUOITlBu0REIgC+DeA7AF4Uka8CmAbwZTf2RUT1q9zRdvRy\nDIZq1ly9Pc9/f287c/sWblXpbMny1J+78flEVP8KWWown1w19uHpKJ44/D6uxg0okgFeUdvtiiuN\nd9oSUUW4UUmTLVdvvZgokrnq5tQI//7edubwUxjwiagiSu1jY08DOd0pa72YBAT4zOol+Mbdt2W0\nVCAGfCKqkFL62BSaBrJfTKzBnuYx4BNRxRTbx6bQNFC9dq+sNAZ8IqpZxaSB/NwUrVAM+ERUszhy\ndxcDPhHVNI7c3cMlDomIfIIBn4gqxr7WLFUWUzpEVBGl3GnLxmfuYsAnooqwllhejRvYNxbJGcTd\naMVAmZjSIaKKGOhqQ1MwGXIUwN7RUzlTO7n631NpGPCJqCL6OkP4Ul87JPU4YWjOIM5FTdzHlA4R\necaagwcAAdAcFCQMLehGKtbgu4sBn4g8Yc3BNwUDgCrmDEVTMIC/WrcS9/e25w3irMF3FwM+EbnC\nXlFjz8EDydx9ImHgpuuvYSCvAgZ8Ih9yu9zRqaLG2gcnmBrhF5LKIe8w4BP5jBfljvbR/FNvfIjf\nxxP46ztWYfE1zekAz3x8dTHgE/lMrpbDpY78raN5EeBn754FAPz8gwv47/f9MRciqREsyyTymWzl\njubI//FDx/Hw7pEFNfK52iKYFTXfvGcNuldcl/HcwfEZ706GisIRPpHPZCt3HB6LZCwAbh/5P7x7\nBFfjyRH8tju78NgXP7Xgc/s6Qwi1tuBXkXfS2zf0LK/YuVFuDPhEPmJN2Wxfvzpj+0vhCDT1OBiQ\njInVkanZ9MVAFXjqyBQ62q7FQ7d3LNiHue3g+Aw29Cx3fA1VBwM+kU/kmqwdmZrFXMJIv/auNTdk\n5NsHutogkgz2pl1HPsSaZYsd8/IP3d7BQF+DmMMn8olcvWmsfW4A4F+On8vI1fd1hrDtzq6Mz5ue\nveyY66faxYBP5BO5etMU0ufmsS9+Cl//XFf6NQogxqZmdcXzgC8iJ0TkHRF5W0RGvd4fETnr6wxh\ncGM3/mz1Evz1HaswMjWbMTq/v7cdi5qTF4RgQHDm0pUFo/fF1zRnPA5IZq6fC5zUtkrl8Ner6oUK\n7YuIHISno9jxzxOIzRn4+QcXIAAWNc/n8s3qneGxCF4KRzB09CSGxyIZuf6BrjYsag4gFjcQCAh2\nbupZUMnD/vW1iykdIp/YNxZBbG5+YtZafmnq6wzhpuuvwVzCOddvXhT+5gtr8MIjd2RMzLJ/fe2r\nxAhfARwSEQXwtKruqsA+ichGHbY59bWx3jXr9Hy2Dpb53kfVJ6pO/w1c3IHITap6WkRuAPAzAP9R\nVY9Ynt8GYBsAdHR09E1PT3t6PER+Yu9Hv2XXm4gnFMGg4Mv92VsU299XaLsFrkFbHSISVtX+vK/z\nOuBn7ExkB4D/p6r/6PR8f3+/jo5yXpeoULkCrL0f/Zf62tGz4jpEL8fSr88XoJmXrw+FBnxPUzoi\nci2AgKp+kvr6HgA7vdwnkV/kC8bWnHpszsDQWyczJmkLCea5Gq1R/fF60vZGAL8QkV8BOArgx6r6\nE4/3SeQL1mB8NW5geCyS8byZU7fWzZtBOzwdxROH38fVeO5JVmvtfjAYwGmHUk2qH54GfFWdUtU/\nTf3pVtW/93J/RPWqlPr1ga42NAWS4VwBvBSOLHj/5t52/MWnb0RTILmebDAgCLW24OHdI/jl5AUo\nkkEg2ySrWZXz4LoOQBV7jp7k3bV1jL10iKqs0Dy5Pd/e1xnCA/0r8fxbJ9Oj931jkQXpmqaAQEQA\nKCCC8TMfp38zCAjwmdVL8I27b8vaE99crnDOUKZ26hwDPlGVFZInz3ZR2NzbjhdHTyGeUCiAvaOn\nsLm3PTN/n5gvzEgkDAiApmCyfLIpGFgQ7K37GdzYjejlGEKtLSy5bAAM+ERVVkj9erabmvaNRZCw\nBPS5hKZH500ByQj2gVQPne4V12Hv6KnkRluVnn2id3D/OAzVjODPksv6xYBPVGX2BUkA4MnXJzMC\nq/2iYObhzR71JhHgzKUrAJCR7gGAGxYvwl+uvQkHx2fSvxGYTdKc9iMiSBiaThdFL8cyeuhT/WHA\nJ6oBZq48W+rGflEwR+JmMBckR/CBgKR74Axu7EZzcH6U/9Fvr+KpI1NIZfMdJ2ut+wm1tmDHK+PJ\nG7VsC6JQfWIvHaIaUmg/Gmu5ZEtTAFtu78CD6zqQsEysRi/H8ED/ygXvVaQma29d4jhB3NcZwvb1\nq7Fm2eLkrwzA/N9U1zjCJ6oh2fL5TpOp9/e2Q4F0e4TwdBTDY5EF790bzmyaFkhdJKyTtU7MVbAU\nycleVubUPwZ8ohqSbYHxXJOp9/e253zv0NYB7BtLrldrb62QC5uhNR4GfKIa49SN8pMrcQBmrj5z\nMtU68nZ6b7buloUch9MFhOoXAz5RjTJTNJNnP8HRE/N3tm78k+X4ycRHiM8ZGe0OnGr3yw3WpV4s\nqDYx4BNVQLHBNzwdxZZdb2bU0ZtmfxfDD7+WTNPsHT2FPUdPYp9tZSp2uSQnrNIh8pgZfB8/dLzg\nPjQjU7OIOwR7ANjQsxx9nSGsuP6aBe0OTPvGInkbo5H/cIRP5DF7qeXwWCTvaH+gqy2jhj4gQNeS\na/EfPtuVXlYwV0XP3tFT6Rr9YJATrpTEgE/kMWtgDgYEL4UjmEsYOdsV9HWGMLTtDjz9xod47b2z\nMBSIXLqSrI23vCZbRc+ckQz3AuBLfc6rWpH/MOATecwamM9cuoKhoyeT5ZXxzPJKe569rzOEP115\nPQ6/d9axIsd8jT2Y20f+ZtkmEQM+UQVYWyeYN0eJCAzN3XK4lFp4llNSNhVd0zYfrmlLfmBW7IRa\nW7DzwEQ6mBfaB5/IribWtCWihaxpmDXLFucN5k5pG14EqBQM+ERVVMqNTayxp1KxDp+ozhTaUZPI\njgGfqM5YWyOzqRkVgykdoiorNh9fyApZRE4Y8ImqwF6pU2w+Pt8KWUROGPCJKswapHO1Oi6EUz6f\nAZ+yYQ6fqMKsQdrQ5Hqxpebjmc+nYng+wheRewF8D0AQwG5V/Y7X+ySqZfa7Z7P10ykE76qlYnh6\np62IBAG8D+AvAEQAHAOwRVXfdXo977Qlv+CNU+SmWrnTdh2ASVWdSh3UHgCbADgGfCK/4EpSVA1e\n5/BvAnDK8jiS2kZERBVW9UlbEdkmIqMiMnr+/PlqHw4RUcPyOuCfBrDS8rg9tS1NVXepar+q9i9d\nutTjwyEi8i+vA/4xALeKyM0i0gLgQQCveLxPIiJy4OmkrarOicijAH6KZFnms6o64eU+iYjImed1\n+Kr6KoBXvd4PERHlVvVJWyIiqgz20iFfCU9HsW8sgnOfXMUNixdhc2876+HJNxjwqe4VetdqeDqK\nLc8km5aZ9oYjGNrKDpPkDwz4VNeKaQ88MjWLuCXYA+wwSf7CHD7VNWvnyVjcwBOH30d4Our42oGu\nNjQ3Zf6XZ4dJ8hOO8KmumZ0nY3EDBoBfTl7AsRMXHUf6fZ0hDG0dYA6ffIsBn+qa2R74icPv45eT\nF3IuBGLm+hnkya8Y8Knu9XWG8I27b8OxExfTPebtaRouBUjEgE8NwroQSKi1BSNTs+ntQP6lANmf\nnvyAAZ8ayplLV/C9w+9jztCMkbx9lSnrbwAc/ZNfMOBT3TNvpto7egrxRHJBcCBzJJ9rKUAuBE5+\nwYBPdc0cnV+NG7Au1ilYWHKZbZWpXKN/okbCgE91zRyd21dmDggwuLG7oJE6FwInv2DAp7phTqyG\nWlsQvRzDQFdbxugcIkgY86E/ejmW9TPsgZ1rzJIfMOBTXXDqg/MHzckJVnN0/smVOHb/4jcwDGVp\nJpEDtlagurBvLJIR7IFkKwVzgnWgqw3PvXkChioCAXFM5zhNzhL5CUf4VBfsOXoACAQEodYWPPn6\nJH516tL8xK0qDo7PYM2yxRlBn5Oz5Hei6vSjVB39/f06Ojpa7cMgD5V6g1N4Ooq/evr/wBzkBwOC\nrZ+9Gc+9eWJBhQ6QnLR1StvwBitqRCISVtX+fK/jCJ8qppwcel9nCC888mcYHotAAGzubcfI1Kxj\nsAeQtaaek7PkZwz4VDH2HPq+sUjW0bbTSNzaJgEAQq0tC2vvg5Ks1kkwbUNkx4BPFWPNoQeDAewd\nPbWgBQKQ/TcB+/bNve0ISHI0LwD+pP069Nx0HbpXXJcu2+RonmgeAz55zjpaN0soT1+6gj1HTzqm\nXrK1Otg3FkmncOJzBgSYv4AEBO999AneOf0xSy6JsmDAJ09ZR+UBEezc1IPt61en+984VczYq2lC\nrS341svv4IVjJ9MpnGAwOcI3c/lnLl3BUOoCEptLrnz1jbtvY9AnsmDAJ09ZR+uGKgb3j6fLJbO1\nM7C3Ot55YAK/j2fW4H/+tqUZuf3wdBTDqVp9Q4FffJB95Ssiv+KNV1S28HQUT74+6biW7EBXGwIi\n6ceGoRm96ge62jAyNZvxXmsKKHo5tuCGKwC4YfGijMfmReIzq5dAgHTahzdXEc3zbIQvIjsAbAVw\nPrXpW6r6qlf7o+rIV2rZ1xnCzk09GNw/DsNQNAUFZy5dSQd4+3vt2wY3dmesWSsAmoICTe3bvq98\nK18R+ZnXKZ3vquo/erwPqqJCesk/dHsH1ixbjOGxCF4KRzB09CSGxyLY3Nvu2OrAui16OZaR3pk4\n8zH2jp7CnqMn8eKxU9i5qQcP3d6R3hc7XxJlxxw+lSXfSlLWwDsyNYu5hJGeWLVW2ZjvPf7RJxAR\nQBXBYCD9XjNwP/n6JOYMdZwTMPHmKiJnXgf8R0Xk3wMYBfA3qrowyUt1LduI2inVE2ptgdm92FCg\ne8V16Sob80Kx458n0i2ODWNh7t6cEzDUfI1yhSqiApU1aSsih0Vk3OHPJgDfB3ALgLUAZgA8nuUz\ntonIqIiMnj9/3uklVOP6OkPYvn513mUDo5djMKdvAwAmzny84DeAuGWCNmEATxx+P2NC15wTaAoI\nAgBampmnJypUWSN8Vb27kNeJyDMADmT5jF0AdgHJ5mnlHA/VjmypnkXN83favjB6ColEsnf90NYB\nDHS1obkpkK7KUQC/nFxYXmnOCTBPT1QcL6t0lqvqTOrhfQDGvdoXVY9Tzxtz2+DG7gUtDsz0z69O\nXcKhd88CSObz941F8Pf3/TGGtg5g31gE46c/xjunP2YTNCIXeZnD/wcRWYvkQO0EgEc83BdVkHWp\nwZ0HJnKWVVr74JgXhoGuNhya+CjjM81f7cxAbs4BsLySyD2eBXxV/XdefTZVj71VQsLQBTc5OZVa\nmu9pCgYAVcxZ1p5tCQru723P2I99MhhIVugwhUNUOpZlUlGsk7GAIhgQqGauIWvP3dsncJPvTN5E\n9dlbl2TteWMf7XMtWqLyMOBTUeyTsWaePtTasqAjpnU0br4nEBDEE8nRvQLY0LM8b/Au5OYuIsqP\nAZ+K0tcZwuDGbhwcn8GGnuV46PYOPP/WSQzuH0fCUCxqTo7At69fnfEe8yLw9qlL+FlqsjYAIHo5\nlnefXIuWyB0M+FSU8HQ0PVF77MRFAMDg/vF0Tj4Wdx6Bm4+/99oH6W1NQSkoeLNdApE7GPCpKPb0\nysHxmfRdrwAQCGQP4mZrBSCZv3+gf2VRa9oy0BOVhwGfimJfpvAPmoNoCgYwl5hf4MQamO3lmNbU\nzGZbZQ4ReUtUa+fm1v7+fh0dHa32YVAe5mpV5pq0TQHBA/0rsbm3fUGwd2p/zNQMkbtEJKyq/fle\nxxE+FS3d+TLVtTJhKFZcf82CAO5UXWPvuUNElcMVrygvpxWtzPRMUJC1cqaQ1xBR5TClQznluunJ\nqY+O0/uZwiHyFlM65IpcNz0VUjnD6hqi2sGUDuVdhJxpGaLGwBG+z5kpm6txA8GAcI1YogbGgN+g\n8uXOzedPX7qCq3EDCmDO4BqxRI2MAb8B5esuaX2+KRhAQIBEeq1ZrhFL1KiYw29AThOt2Z5PJAz8\n+aduTK4RK8mulszTEzUmjvDrRDHljfm6S9qff+Tzt+CRz9/CPD1Rg2Mdfh0oZQGQQnP4DPBE9Y91\n+A2klAVA8k205nqeFwOixsSAXwcquQAIlxMkalwM+HWgkrXwXE6QqHEx4NeJStXCczlBosbFgE8Z\nzN8mhscikGofDBG5inX45GjfWARDR0/i4d0jjj12iKj+MODXuWyNz3I1RMsn341bRFSfykrpiMgD\nAHYA+BSAdao6annubwF8FUACwH9S1Z+Wsy+/cyqVzFZRU26lDfP4RI2p3Bz+OIDNAJ62bhSRTwN4\nEEA3gBUADovIbaqaKHN/vhSejmLLrjcRTyiag4KhbXeklxl0qqgpt9KGHTKJGlNZAV9V3wMAkQXT\ne5sA7FHVqwB+IyKTANYBeLOc/fnV8FgEsVR3s1hCMTwWQV9nKOtI3I0ROjtkEjUer6p0bgIwYnkc\nSW2jEtgvp+bjbCNx+3YAePL1SY7WiXwub8AXkcMAljk89Xequr/cAxCRbQC2AUBHR0eeV9cfN9oU\nbO5tx95wJD1i39zbnn4u20jc3M47Z4nIlDfgq+rdJXzuaQArLY/bU9ucPn8XgF1AsnlaCfuqWW4F\n277OEIa2lpZT552zRGTyKqXzCoDnReR/IDlpeyuAox7tq2a5GWxLzamz4oaITOWWZd4H4J8ALAXw\nYxF5W1W/oKoTIvIigHcBzAHY7scKnVKCrdudKllxQ0Qm9sP32PNvncTB8Rls6FmesTi4k3wLiud6\nHwM6kX+xH34NCE9HsfPABGJzBo6duLhgcXC74bEIfh83AGRfUNxpH5yUJaJCsLWCh4ppURCejuKl\ncCRjm7mguFv7ICJ/Y8B3kb1/jZnDDwry5vBHpmYxlzDSjwWFLShezD6IyN+Y0nFJttRKoROm1gne\nYDCAL/W14/7e9oKWMuSkLBEVggHfJdlKMAstpywncLMNAhEVggHfJexfQ0S1jgG/SNlKIJlaIaJa\nx4BfhHwlkByhE1EtY8Avgj1P//QbH+JKPFHQTVWF4k1UROQVBvwiWPP0EhAcevcsAODnH1wAgHTQ\nLzVo8yYqIvIS6/CLYObpv3nPGnQv/8OM5w6OzwCYD9qPHzpe9ALgvImKiLzEgF+kvs4Qtq9fjZuX\nXJuxve3aFgDlBW3eREVEXmJKp0D2NM3s72IZz5uPyynPZKUPEXmJAb8A9tz64MZu/D6e2e15Q8/y\n9EVhcGM3opdjJQVtVvoQkVcY8FPMYB1qbVkQrK1pmticgf/6o3eQWlMcIsAjd3ZhzbLFnHAloprm\ny4BvT89Y+9ArgIAgI2hnVOeIYM6wrCGgwOJrmrmUIBHVPN8FfKfSRzNYm2HcqR+O+bpQawt2vDKO\nWGqIb83TcylBIqplvgv4TiNxcwQfixswkBzh24O2Nbe+ZtliDI9FIAA2WzpacsKViGqZ7wK+UxWN\nfQSfb8I128QqJ1yJqJb5ck3bUu6EZcsDIqpVXNM2h2JH4mx5QESNgHfaFoAtD4ioETRMwLevJ+sm\ntjwgokbQECmdUlMuhebl2fKAiBpBQwT8Um56st5sFQwIdm7qydnTnhU4RFTvykrpiMgDIjIhIoaI\n9Fu2rxKRKyLydurPU+UfanalpFxGpmbTd9bOGYrB/eOepIOIiGpFuSP8cQCbATzt8NyHqrq2zM8v\nSCkpl4GuNgQD820SDNX0ZCxTN0TUiMoK+Kr6HgCIiDtHU4ZiUy59nSHs3NSDwf3jMFTR0hRAqLWF\n5ZdE1LC8zOHfLCL/CuC3AP6Lqv7cw32V5KHbO7Bm2eL0iJ4N0IiokeUN+CJyGMAyh6f+TlX3Z3nb\nDIAOVZ0VkT4APxKRblX9rcPnbwOwDQA6OtxZCLwY9t8M2ACNiBpV3oCvqncX+6GqehXA1dTXYRH5\nEMBtABb0TVDVXQB2AcnWCsXuy00svySiRuZJSkdElgK4qKoJEekCcCuAKS/25TaWXxJRoyq3LPM+\nEYkAuAPAj0Xkp6mnPgfg1yLyNoCXAHxdVS+Wd6hERFSOcqt0XgbwssP2YQDD5Xw2ERG5q2F66RAR\nUW4M+EREPsGAT0TkEwz4REQ+UVNLHIrIeQDTHnz0EgAXPPjcSmuU8wAa51wa5TyAxjmXRjkPoPBz\n6VTVpfleVFMB3ysiMlrIeo+1rlHOA2icc2mU8wAa51wa5TwA98+FKR0iIp9gwCci8gm/BPxd1T4A\nlzTKeQCNcy6Nch5A45xLo5wH4PK5+CKHT0RE/hnhExH5XsMG/FpZb9cN2c4l9dzfisikiBwXkS9U\n6xiLJSI7ROS05fvwxWofU7FE5N7Uv/ukiDxW7eMplYicEJF3Ut+HBS3Ma5mIPCsi50Rk3LLtj0Tk\nZyLyQervmm9/m+U8XP8ZadiAj/n1do84PPehqq5N/fl6hY+rFI7nIiKfBvAggG4A9wL4nyISrPzh\nley7lu/Dq9U+mGKk/p2fBLABwKcBbEl9P+rV+tT3od7KGZ9D8v++1WMAXlPVWwG8lnpc657DwvMA\nXP4ZadiAr6rvqerxah+HG3KcyyYAe1T1qqr+BsAkgHWVPTrfWgdgUlWnVDUGYA+S3w+qIFU9AsDe\nen0TgB+kvv4BgL+s6EGVIMt5uK5hA34eN4vIv4rIGyJyZ7UPpgw3AThleRxJbasXj4rIr1O/ztb8\nr9029f5vb6UADolIOLXkaL27UVVnUl9/BODGah5MmVz9GanrgC8ih0Vk3OFPrpGWud7uvwXwTQDP\ni8gfVuaIsyvxXGpannP6PoBbAKxF8nvyeFUP1t8+q6q9SKantovI56p9QG7RZBlivZYiuv4z4skS\nh5Xi9Xp4LWBlAAABaklEQVS7lVTKuQA4DWCl5XF7altNKPScROQZAAc8Phy31fS/fTFU9XTq73Mi\n8jKS6Sqnua96cVZElqvqjIgsB3Cu2gdUClU9a37t1s9IXY/wSyEiS82JzXpbb9fBKwAeFJFFInIz\nkudytMrHVJDUD6LpPiQnpuvJMQC3isjNItKC5OT5K1U+pqKJyLUistj8GsA9qL/vhd0rAL6S+vor\nAPZX8VhK5sXPSF2P8HMRkfsA/BOApUiut/u2qn4ByfV2d4pIHICBOlhvN9u5qOqEiLwI4F0AcwC2\nq2qimsdahH8QkbVI/rp9AsAj1T2c4qjqnIg8CuCnAIIAnlXViSofViluBPCyiADJePC8qv6kuodU\nOBEZAnAXgCWp9bW/DeA7AF4Uka8i2X33y9U7wsJkOY+73P4Z4Z22REQ+4buUDhGRXzHgExH5BAM+\nEZFPMOATEfkEAz4RkU8w4BMR+QQDPhGRTzDgExH5xP8H3eIQgsnYjPgAAAAASUVORK5CYII=\n", 292 | "text/plain": [ 293 | "" 294 | ] 295 | }, 296 | "metadata": {}, 297 | "output_type": "display_data" 298 | } 299 | ], 300 | "source": [ 301 | "plt.plot(model.predict(x), y, '.')" 302 | ] 303 | }, 304 | { 305 | "cell_type": "markdown", 306 | "metadata": {}, 307 | "source": [ 308 | "To properly evaluate, let us use one of the metrics functions from scikit-learn, namely the mean squared error." 309 | ] 310 | }, 311 | { 312 | "cell_type": "code", 313 | "execution_count": 12, 314 | "metadata": {}, 315 | "outputs": [], 316 | "source": [ 317 | "from sklearn import metrics" 318 | ] 319 | }, 320 | { 321 | "cell_type": "code", 322 | "execution_count": 13, 323 | "metadata": {}, 324 | "outputs": [ 325 | { 326 | "data": { 327 | "text/plain": [ 328 | "0.83496325733424082" 329 | ] 330 | }, 331 | "execution_count": 13, 332 | "metadata": {}, 333 | "output_type": "execute_result" 334 | } 335 | ], 336 | "source": [ 337 | "metrics.mean_squared_error(model.predict(x), y)" 338 | ] 339 | }, 340 | { 341 | "cell_type": "markdown", 342 | "metadata": {}, 343 | "source": [ 344 | "I personally like to divide this error by the squared norm of y to get the ratio of the total variance reduced." 345 | ] 346 | }, 347 | { 348 | "cell_type": "code", 349 | "execution_count": 14, 350 | "metadata": {}, 351 | "outputs": [ 352 | { 353 | "data": { 354 | "text/plain": [ 355 | "0.0131435273017534" 356 | ] 357 | }, 358 | "execution_count": 14, 359 | "metadata": {}, 360 | "output_type": "execute_result" 361 | } 362 | ], 363 | "source": [ 364 | "np.linalg.norm(model.predict(x) - y)**2 / np.linalg.norm(y)**2" 365 | ] 366 | }, 367 | { 368 | "cell_type": "markdown", 369 | "metadata": {}, 370 | "source": [ 371 | "## Using proper training and test splits\n", 372 | "\n", 373 | "Now again, let us see how we perform on a true test set. scikit-learn has functions for properly splitting time series data in package sklearn.model_selection.TimeSeriesSplit, but here, we will do the split by hand." 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": 27, 379 | "metadata": {}, 380 | "outputs": [], 381 | "source": [ 382 | "train = xs[:150]\n", 383 | "test = xs[150:]\n", 384 | "xtrain, ytrain = embed_data(train, 3)\n", 385 | "xtest, ytest = embed_data(test, 3)" 386 | ] 387 | }, 388 | { 389 | "cell_type": "markdown", 390 | "metadata": {}, 391 | "source": [ 392 | "Now, train again the SVR only on the training data. I have chosen an rbf kernel now, just to see how that performs." 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": 28, 398 | "metadata": {}, 399 | "outputs": [ 400 | { 401 | "data": { 402 | "text/plain": [ 403 | "SVR(C=1, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma=0.1,\n", 404 | " kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)" 405 | ] 406 | }, 407 | "execution_count": 28, 408 | "metadata": {}, 409 | "output_type": "execute_result" 410 | } 411 | ], 412 | "source": [ 413 | "m = svm.SVR(kernel='rbf', C=1, gamma=0.1)\n", 414 | "m.fit(xtrain, ytrain)" 415 | ] 416 | }, 417 | { 418 | "cell_type": "markdown", 419 | "metadata": {}, 420 | "source": [ 421 | "Let us plot the fit on the training data, which should be quite good." 422 | ] 423 | }, 424 | { 425 | "cell_type": "code", 426 | "execution_count": 30, 427 | "metadata": {}, 428 | "outputs": [ 429 | { 430 | "data": { 431 | "text/plain": [ 432 | "[,\n", 433 | " ]" 434 | ] 435 | }, 436 | "execution_count": 30, 437 | "metadata": {}, 438 | "output_type": "execute_result" 439 | }, 440 | { 441 | "data": { 442 | "image/png": "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\nDZhVIn+r8QAAAABJRU5ErkJggg==\n", 443 | "text/plain": [ 444 | "" 445 | ] 446 | }, 447 | "metadata": {}, 448 | "output_type": "display_data" 449 | } 450 | ], 451 | "source": [ 452 | "plt.plot(m.predict(xtrain), 'b-', ytrain, 'r-')" 453 | ] 454 | }, 455 | { 456 | "cell_type": "markdown", 457 | "metadata": {}, 458 | "source": [ 459 | "And now the predictions on the test data." 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "execution_count": 29, 465 | "metadata": {}, 466 | "outputs": [ 467 | { 468 | "data": { 469 | "text/plain": [ 470 | "[,\n", 471 | " ]" 472 | ] 473 | }, 474 | "execution_count": 29, 475 | "metadata": {}, 476 | "output_type": "execute_result" 477 | }, 478 | { 479 | "data": { 480 | "image/png": "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\n", 481 | "text/plain": [ 482 | "" 483 | ] 484 | }, 485 | "metadata": {}, 486 | "output_type": "display_data" 487 | } 488 | ], 489 | "source": [ 490 | "plt.plot(m.predict(xtest), 'b-', ytest, 'r-')" 491 | ] 492 | }, 493 | { 494 | "cell_type": "markdown", 495 | "metadata": {}, 496 | "source": [ 497 | "The outcome depends a bit on the random data that was initially drawn, but often you will see that the data tapers off to zero. The reason for this is that the rbf kernel is actually sensitive to the scale of the data, and if the test data is for some reason of higher variance than the training data, the SVR will predict too small values there and the preditions will go to zero.\n", 498 | "\n", 499 | "This code is the basic steps to go through, to explore further,\n", 500 | " * use a more interesting data source\n", 501 | " * experiment with using different kernels or learners (like decision trees for regression, random forests, etc.)" 502 | ] 503 | }, 504 | { 505 | "cell_type": "code", 506 | "execution_count": null, 507 | "metadata": { 508 | "collapsed": true 509 | }, 510 | "outputs": [], 511 | "source": [] 512 | } 513 | ], 514 | "metadata": { 515 | "kernelspec": { 516 | "display_name": "Python 3", 517 | "language": "python", 518 | "name": "python3" 519 | }, 520 | "language_info": { 521 | "codemirror_mode": { 522 | "name": "ipython", 523 | "version": 3 524 | }, 525 | "file_extension": ".py", 526 | "mimetype": "text/x-python", 527 | "name": "python", 528 | "nbconvert_exporter": "python", 529 | "pygments_lexer": "ipython3", 530 | "version": "3.6.2" 531 | } 532 | }, 533 | "nbformat": 4, 534 | "nbformat_minor": 2 535 | } 536 | --------------------------------------------------------------------------------