├── 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 | " Years \n",
85 | " Salary \n",
86 | " \n",
87 | " \n",
88 | " \n",
89 | " \n",
90 | " 0 \n",
91 | " 5 \n",
92 | " 82 \n",
93 | " \n",
94 | " \n",
95 | " 1 \n",
96 | " 7 \n",
97 | " 80 \n",
98 | " \n",
99 | " \n",
100 | " 2 \n",
101 | " 12 \n",
102 | " 103 \n",
103 | " \n",
104 | " \n",
105 | " 3 \n",
106 | " 23 \n",
107 | " 118 \n",
108 | " \n",
109 | " \n",
110 | " 4 \n",
111 | " 25 \n",
112 | " 172 \n",
113 | " \n",
114 | " \n",
115 | "
\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 | " Years \n",
230 | " Salary \n",
231 | " f0 \n",
232 | " y-f0 \n",
233 | " h1 \n",
234 | " f1 \n",
235 | " y-f1 \n",
236 | " h2 \n",
237 | " \n",
238 | " \n",
239 | " \n",
240 | " \n",
241 | " 0 \n",
242 | " 5 \n",
243 | " 82 \n",
244 | " 134.0 \n",
245 | " -52.0 \n",
246 | " 0.0 \n",
247 | " 134.0 \n",
248 | " -52.0 \n",
249 | " -45.666667 \n",
250 | " \n",
251 | " \n",
252 | " 1 \n",
253 | " 7 \n",
254 | " 80 \n",
255 | " 134.0 \n",
256 | " -54.0 \n",
257 | " 0.0 \n",
258 | " 134.0 \n",
259 | " -54.0 \n",
260 | " -45.666667 \n",
261 | " \n",
262 | " \n",
263 | " 2 \n",
264 | " 12 \n",
265 | " 103 \n",
266 | " 134.0 \n",
267 | " -31.0 \n",
268 | " 0.0 \n",
269 | " 134.0 \n",
270 | " -31.0 \n",
271 | " -45.666667 \n",
272 | " \n",
273 | " \n",
274 | " 3 \n",
275 | " 23 \n",
276 | " 118 \n",
277 | " 134.0 \n",
278 | " -16.0 \n",
279 | " 0.0 \n",
280 | " 134.0 \n",
281 | " -16.0 \n",
282 | " 19.571429 \n",
283 | " \n",
284 | " \n",
285 | " 4 \n",
286 | " 25 \n",
287 | " 172 \n",
288 | " 134.0 \n",
289 | " 38.0 \n",
290 | " 0.0 \n",
291 | " 134.0 \n",
292 | " 38.0 \n",
293 | " 19.571429 \n",
294 | " \n",
295 | " \n",
296 | "
\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 | " Years \n",
375 | " Salary \n",
376 | " f0 \n",
377 | " y-f0 \n",
378 | " h1 \n",
379 | " f1 \n",
380 | " y-f1 \n",
381 | " h2 \n",
382 | " f2 \n",
383 | " y-f2 \n",
384 | " ... \n",
385 | " h97 \n",
386 | " f97 \n",
387 | " y-f97 \n",
388 | " h98 \n",
389 | " f98 \n",
390 | " y-f98 \n",
391 | " h99 \n",
392 | " f99 \n",
393 | " y-f99 \n",
394 | " h100 \n",
395 | " \n",
396 | " \n",
397 | " \n",
398 | " \n",
399 | " 0 \n",
400 | " 5 \n",
401 | " 82 \n",
402 | " 134.0 \n",
403 | " -52.0 \n",
404 | " -45.666667 \n",
405 | " 88.333333 \n",
406 | " -6.333333 \n",
407 | " -9.473903e-15 \n",
408 | " 88.333333 \n",
409 | " -6.333333 \n",
410 | " ... \n",
411 | " 1.776357e-15 \n",
412 | " 85.594638 \n",
413 | " -3.594638 \n",
414 | " -3.083745 \n",
415 | " 82.510894 \n",
416 | " -0.510894 \n",
417 | " 0.387978 \n",
418 | " 82.898871 \n",
419 | " -0.898871 \n",
420 | " -0.898871 \n",
421 | " \n",
422 | " \n",
423 | " 1 \n",
424 | " 7 \n",
425 | " 80 \n",
426 | " 134.0 \n",
427 | " -54.0 \n",
428 | " -45.666667 \n",
429 | " 88.333333 \n",
430 | " -8.333333 \n",
431 | " -9.473903e-15 \n",
432 | " 88.333333 \n",
433 | " -8.333333 \n",
434 | " ... \n",
435 | " 1.776357e-15 \n",
436 | " 84.605788 \n",
437 | " -4.605788 \n",
438 | " -3.083745 \n",
439 | " 81.522043 \n",
440 | " -1.522043 \n",
441 | " 0.387978 \n",
442 | " 81.910021 \n",
443 | " -1.910021 \n",
444 | " 0.099875 \n",
445 | " \n",
446 | " \n",
447 | " 2 \n",
448 | " 12 \n",
449 | " 103 \n",
450 | " 134.0 \n",
451 | " -31.0 \n",
452 | " -45.666667 \n",
453 | " 88.333333 \n",
454 | " 14.666667 \n",
455 | " -9.473903e-15 \n",
456 | " 88.333333 \n",
457 | " 14.666667 \n",
458 | " ... \n",
459 | " 1.776357e-15 \n",
460 | " 97.285360 \n",
461 | " 5.714640 \n",
462 | " -3.083745 \n",
463 | " 94.201615 \n",
464 | " 8.798385 \n",
465 | " 0.387978 \n",
466 | " 94.589593 \n",
467 | " 8.410407 \n",
468 | " 0.099875 \n",
469 | " \n",
470 | " \n",
471 | " 3 \n",
472 | " 23 \n",
473 | " 118 \n",
474 | " 134.0 \n",
475 | " -16.0 \n",
476 | " 19.571429 \n",
477 | " 153.571429 \n",
478 | " -35.571429 \n",
479 | " -1.218073e-14 \n",
480 | " 153.571429 \n",
481 | " -35.571429 \n",
482 | " ... \n",
483 | " 1.776357e-15 \n",
484 | " 127.849193 \n",
485 | " -9.849193 \n",
486 | " -3.083745 \n",
487 | " 124.765448 \n",
488 | " -6.765448 \n",
489 | " 0.387978 \n",
490 | " 125.153425 \n",
491 | " -7.153425 \n",
492 | " 0.099875 \n",
493 | " \n",
494 | " \n",
495 | " 4 \n",
496 | " 25 \n",
497 | " 172 \n",
498 | " 134.0 \n",
499 | " 38.0 \n",
500 | " 19.571429 \n",
501 | " 153.571429 \n",
502 | " 18.428571 \n",
503 | " -1.218073e-14 \n",
504 | " 153.571429 \n",
505 | " 18.428571 \n",
506 | " ... \n",
507 | " 1.776357e-15 \n",
508 | " 157.370016 \n",
509 | " 14.629984 \n",
510 | " 2.055830 \n",
511 | " 159.425846 \n",
512 | " 12.574154 \n",
513 | " 0.387978 \n",
514 | " 159.813823 \n",
515 | " 12.186177 \n",
516 | " 0.099875 \n",
517 | " \n",
518 | " \n",
519 | "
\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 |
--------------------------------------------------------------------------------