├── README.md └── XGBoostScratch.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # XGBoost-Using-Numpy 2 | The following code is a simple XGBoost model developed using numpy. Tha main purpose of this code is to unveil the maths behind XGBoost. 3 | -------------------------------------------------------------------------------- /XGBoostScratch.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## XGBoost using Numpy (from scratch)" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "#### The following code is a simple XGBoost model developed using numpy.\n", 15 | "Tha main purpose of this code is to unveil the maths behind XGBoost." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 85, 21 | "metadata": {}, 22 | "outputs": [], 23 | "source": [ 24 | "import numpy as np\n", 25 | "import pandas as pd\n", 26 | "import matplotlib.pyplot as plt\n", 27 | "%matplotlib inline" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "##### Consider the following data where the years of experience is predictor variable and salary is the target." 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 86, 40 | "metadata": {}, 41 | "outputs": [], 42 | "source": [ 43 | "year = [5,7,12,23,25,28,29,34,35,40]\n", 44 | "salary = [82,80,103,118,172,127,204,189,99,166]" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "##### Using regression trees as base learners, we can create a model to predict the salary. \n", 52 | "For the sake of simplicity, we can choose square loss as our loss function and our objective would be to minimize the square error.\n", 53 | "##### As the first step, the model should be initialized with a function F0(x). F0(x) should be a function which minimizes the loss function or MSE (mean squared error)\n", 54 | "##### For MSE the Function F minimizes at mean\n", 55 | "##### If we had taken MAE , the function would have minimized at median\n" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 87, 61 | "metadata": {}, 62 | "outputs": [ 63 | { 64 | "data": { 65 | "text/html": [ 66 | "
\n", 67 | "\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 | "
YearsSalary
0582
1780
212103
323118
425172
\n", 116 | "
" 117 | ], 118 | "text/plain": [ 119 | " Years Salary\n", 120 | "0 5 82\n", 121 | "1 7 80\n", 122 | "2 12 103\n", 123 | "3 23 118\n", 124 | "4 25 172" 125 | ] 126 | }, 127 | "execution_count": 87, 128 | "metadata": {}, 129 | "output_type": "execute_result" 130 | } 131 | ], 132 | "source": [ 133 | "df = pd.DataFrame(columns=['Years','Salary'])\n", 134 | "df.Years = year\n", 135 | "df.Salary = salary\n", 136 | "df.head()" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 88, 142 | "metadata": {}, 143 | "outputs": [ 144 | { 145 | "data": { 146 | "text/plain": [ 147 | "" 148 | ] 149 | }, 150 | "execution_count": 88, 151 | "metadata": {}, 152 | "output_type": "execute_result" 153 | }, 154 | { 155 | "data": { 156 | "image/png": "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\n", 157 | "text/plain": [ 158 | "
" 159 | ] 160 | }, 161 | "metadata": { 162 | "needs_background": "light" 163 | }, 164 | "output_type": "display_data" 165 | } 166 | ], 167 | "source": [ 168 | "plt.scatter(x=df.Years,y=df.Salary)" 169 | ] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "metadata": {}, 174 | "source": [ 175 | "#### The residual is the difference between y and f0 i.e. (y-f0)\n", 176 | "##### We can use the residuals from F0(x) to create h1(x). h1(x) will be a regression tree which will try and reduce the residuals from the previous step. The output of h1(x) won’t be a prediction of y; instead, it will help in predicting the successive function F1(x) which will bring down the residuals." 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": 89, 182 | "metadata": {}, 183 | "outputs": [], 184 | "source": [ 185 | "df1 = df" 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": {}, 191 | "source": [ 192 | "The additive model h1(x) computes the mean of the residuals (y – F0) at each leaf of the tree. " 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "A split is done and the mean of upper part and lower part is calculated \n", 200 | "Here , I have selected a random split point" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": 91, 206 | "metadata": {}, 207 | "outputs": [ 208 | { 209 | "data": { 210 | "text/html": [ 211 | "
\n", 212 | "\n", 225 | "\n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | "
YearsSalaryf0y-f0h1f1y-f1h2
0582134.0-52.00.0134.0-52.0-45.666667
1780134.0-54.00.0134.0-54.0-45.666667
212103134.0-31.00.0134.0-31.0-45.666667
323118134.0-16.00.0134.0-16.019.571429
425172134.038.00.0134.038.019.571429
\n", 297 | "
" 298 | ], 299 | "text/plain": [ 300 | " Years Salary f0 y-f0 h1 f1 y-f1 h2\n", 301 | "0 5 82 134.0 -52.0 0.0 134.0 -52.0 -45.666667\n", 302 | "1 7 80 134.0 -54.0 0.0 134.0 -54.0 -45.666667\n", 303 | "2 12 103 134.0 -31.0 0.0 134.0 -31.0 -45.666667\n", 304 | "3 23 118 134.0 -16.0 0.0 134.0 -16.0 19.571429\n", 305 | "4 25 172 134.0 38.0 0.0 134.0 38.0 19.571429" 306 | ] 307 | }, 308 | "execution_count": 91, 309 | "metadata": {}, 310 | "output_type": "execute_result" 311 | } 312 | ], 313 | "source": [ 314 | "for i in range(2):\n", 315 | " f = df.Salary.mean()\n", 316 | " if(i>0):\n", 317 | " df['f'+str(i)] = df['f'+str(i-1)] + df['h'+str(i)]\n", 318 | " else:\n", 319 | " df['f'+str(i)] = f\n", 320 | " df['y-f'+str(i)] = df.Salary - df['f'+str(i)]\n", 321 | " splitIndex = np.random.randint(0,df.shape[0]-1)\n", 322 | " a= []\n", 323 | " h_upper = df['y-f'+str(i)][0:splitIndex].mean()\n", 324 | " h_bottom = df['y-f'+str(i)][splitIndex:].mean()\n", 325 | " for j in range(splitIndex):\n", 326 | " a.append(h_upper)\n", 327 | " for j in range(df.shape[0]-splitIndex):\n", 328 | " a.append(h_bottom)\n", 329 | " df['h'+str(i+1)] = a\n", 330 | " \n", 331 | "df.head()\n" 332 | ] 333 | }, 334 | { 335 | "cell_type": "markdown", 336 | "metadata": {}, 337 | "source": [ 338 | "#### This is how the dataset looks after 2 iterations" 339 | ] 340 | }, 341 | { 342 | "cell_type": "markdown", 343 | "metadata": {}, 344 | "source": [ 345 | "If we continue to iterate for 100 times , we can see the Loss of MSE(Fi) decreasing by a huge margin" 346 | ] 347 | }, 348 | { 349 | "cell_type": "code", 350 | "execution_count": 92, 351 | "metadata": {}, 352 | "outputs": [ 353 | { 354 | "data": { 355 | "text/html": [ 356 | "
\n", 357 | "\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 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \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 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \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 | "
YearsSalaryf0y-f0h1f1y-f1h2f2y-f2...h97f97y-f97h98f98y-f98h99f99y-f99h100
0582134.0-52.0-45.66666788.333333-6.333333-9.473903e-1588.333333-6.333333...1.776357e-1585.594638-3.594638-3.08374582.510894-0.5108940.38797882.898871-0.898871-0.898871
1780134.0-54.0-45.66666788.333333-8.333333-9.473903e-1588.333333-8.333333...1.776357e-1584.605788-4.605788-3.08374581.522043-1.5220430.38797881.910021-1.9100210.099875
212103134.0-31.0-45.66666788.33333314.666667-9.473903e-1588.33333314.666667...1.776357e-1597.2853605.714640-3.08374594.2016158.7983850.38797894.5895938.4104070.099875
323118134.0-16.019.571429153.571429-35.571429-1.218073e-14153.571429-35.571429...1.776357e-15127.849193-9.849193-3.083745124.765448-6.7654480.387978125.153425-7.1534250.099875
425172134.038.019.571429153.57142918.428571-1.218073e-14153.57142918.428571...1.776357e-15157.37001614.6299842.055830159.42584612.5741540.387978159.81382312.1861770.099875
\n", 520 | "

5 rows × 302 columns

\n", 521 | "
" 522 | ], 523 | "text/plain": [ 524 | " Years Salary f0 y-f0 h1 f1 y-f1 h2 \\\n", 525 | "0 5 82 134.0 -52.0 -45.666667 88.333333 -6.333333 -9.473903e-15 \n", 526 | "1 7 80 134.0 -54.0 -45.666667 88.333333 -8.333333 -9.473903e-15 \n", 527 | "2 12 103 134.0 -31.0 -45.666667 88.333333 14.666667 -9.473903e-15 \n", 528 | "3 23 118 134.0 -16.0 19.571429 153.571429 -35.571429 -1.218073e-14 \n", 529 | "4 25 172 134.0 38.0 19.571429 153.571429 18.428571 -1.218073e-14 \n", 530 | "\n", 531 | " f2 y-f2 ... h97 f97 y-f97 h98 \\\n", 532 | "0 88.333333 -6.333333 ... 1.776357e-15 85.594638 -3.594638 -3.083745 \n", 533 | "1 88.333333 -8.333333 ... 1.776357e-15 84.605788 -4.605788 -3.083745 \n", 534 | "2 88.333333 14.666667 ... 1.776357e-15 97.285360 5.714640 -3.083745 \n", 535 | "3 153.571429 -35.571429 ... 1.776357e-15 127.849193 -9.849193 -3.083745 \n", 536 | "4 153.571429 18.428571 ... 1.776357e-15 157.370016 14.629984 2.055830 \n", 537 | "\n", 538 | " f98 y-f98 h99 f99 y-f99 h100 \n", 539 | "0 82.510894 -0.510894 0.387978 82.898871 -0.898871 -0.898871 \n", 540 | "1 81.522043 -1.522043 0.387978 81.910021 -1.910021 0.099875 \n", 541 | "2 94.201615 8.798385 0.387978 94.589593 8.410407 0.099875 \n", 542 | "3 124.765448 -6.765448 0.387978 125.153425 -7.153425 0.099875 \n", 543 | "4 159.425846 12.574154 0.387978 159.813823 12.186177 0.099875 \n", 544 | "\n", 545 | "[5 rows x 302 columns]" 546 | ] 547 | }, 548 | "execution_count": 92, 549 | "metadata": {}, 550 | "output_type": "execute_result" 551 | } 552 | ], 553 | "source": [ 554 | "for i in range(100):\n", 555 | " f = df.Salary.mean()\n", 556 | " if(i>0):\n", 557 | " df['f'+str(i)] = df['f'+str(i-1)] + df['h'+str(i)]\n", 558 | " else:\n", 559 | " df['f'+str(i)] = f\n", 560 | " df['y-f'+str(i)] = df.Salary - df['f'+str(i)]\n", 561 | " splitIndex = np.random.randint(0,df.shape[0]-1)\n", 562 | " a= []\n", 563 | " h_upper = df['y-f'+str(i)][0:splitIndex].mean()\n", 564 | " h_bottom = df['y-f'+str(i)][splitIndex:].mean()\n", 565 | " for j in range(splitIndex):\n", 566 | " a.append(h_upper)\n", 567 | " for j in range(df.shape[0]-splitIndex):\n", 568 | " a.append(h_bottom)\n", 569 | " df['h'+str(i+1)] = a\n", 570 | " \n", 571 | "df.head()\n" 572 | ] 573 | }, 574 | { 575 | "cell_type": "markdown", 576 | "metadata": {}, 577 | "source": [ 578 | "#### Following is the graph for Iteration 1 , 10 and 99\n", 579 | "#### We can see the loss decreasing and the model adapting to the dataset as the iteration increases" 580 | ] 581 | }, 582 | { 583 | "cell_type": "code", 584 | "execution_count": 94, 585 | "metadata": {}, 586 | "outputs": [ 587 | { 588 | "data": { 589 | "text/plain": [ 590 | "" 591 | ] 592 | }, 593 | "execution_count": 94, 594 | "metadata": {}, 595 | "output_type": "execute_result" 596 | }, 597 | { 598 | "data": { 599 | "image/png": "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\n", 600 | "text/plain": [ 601 | "
" 602 | ] 603 | }, 604 | "metadata": { 605 | "needs_background": "light" 606 | }, 607 | "output_type": "display_data" 608 | } 609 | ], 610 | "source": [ 611 | "plt.figure(figsize=(15,10))\n", 612 | "plt.scatter(df.Years,df.Salary)\n", 613 | "plt.plot(df.Years,df.f1,label = 'f1')\n", 614 | "plt.plot(df.Years,df.f10,label = 'f10')\n", 615 | "plt.plot(df.Years,df.f99,label = 'f99')\n", 616 | "plt.legend()" 617 | ] 618 | }, 619 | { 620 | "cell_type": "markdown", 621 | "metadata": {}, 622 | "source": [ 623 | "# END" 624 | ] 625 | }, 626 | { 627 | "cell_type": "code", 628 | "execution_count": null, 629 | "metadata": {}, 630 | "outputs": [], 631 | "source": [] 632 | } 633 | ], 634 | "metadata": { 635 | "kernelspec": { 636 | "display_name": "Python 3", 637 | "language": "python", 638 | "name": "python3" 639 | }, 640 | "language_info": { 641 | "codemirror_mode": { 642 | "name": "ipython", 643 | "version": 3 644 | }, 645 | "file_extension": ".py", 646 | "mimetype": "text/x-python", 647 | "name": "python", 648 | "nbconvert_exporter": "python", 649 | "pygments_lexer": "ipython3", 650 | "version": "3.6.7" 651 | } 652 | }, 653 | "nbformat": 4, 654 | "nbformat_minor": 2 655 | } 656 | --------------------------------------------------------------------------------