1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
|
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Logistic Regression\n",
"\n",
"Logistic regression is a *binary classification algorithm*."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Data')"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"from sklearn.datasets import make_blobs\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"\n",
"# create linearly separable data\n",
"sep = False\n",
"while not sep:\n",
" X, Y = make_blobs(n_samples=200, n_features\n",
" =1, centers=2, cluster_std=0.5, center_box=(0, 10))\n",
" sep = True\n",
" for x_1 in X[Y == 1]:\n",
" for x_0 in X[Y == 0]:\n",
" if Y[X.argmin()] == 0 and x_0 > x_1:\n",
" sep = False\n",
" elif x_0 < x_1:\n",
" sep = False\n",
" \n",
"X = np.hstack([X, np.ones((X.shape[0], 1))])\n",
"\n",
" \n",
"X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)\n",
"\n",
"plt.scatter(X[:, 0], Y, s=10, c='b')\n",
"plt.xlabel('feature')\n",
"plt.ylabel('groups')\n",
"plt.yticks([0, 1])\n",
"plt.title('Data')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Binary target\n",
"\n",
"### Sigmoid function\n",
"\n",
"We have to fit a **model** trough our data. \n",
"The *sigmoid* (also called *logistic*) function is used:\n",
"$$\\boxed{\n",
"\\sigma(x) = \\frac{1}{1 + e^{-x}}\n",
"}$$\n",
"\n",
"It produce an 'S' shape like function that stays between 0 and 1"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def sigmoid(x):\n",
" return 1 / (1 + np.exp(-x))\n",
"\n",
"xs_sig = np.linspace(-7, 7, 100)\n",
"ys_sig = sigmoid(xs_sig)\n",
"plt.plot(xs_sig, ys_sig, label=r'$\\sigma(x) = {\\frac{1}{1 + e^{-x}}}$')\n",
"plt.yticks([0, 0.5, 1])\n",
"plt.xlim([-7, 7])\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.title('Sigmoid function')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# helper function for approximation\n",
"def sigmoid_mu_s(x, mu, s):\n",
" return 1 / (1 + np.exp(-(x + mu) / s))\n",
"\n",
"plt.scatter(X[:, 0], Y, s=10, c='b', alpha=0.5)\n",
"sig_x = np.linspace(X[:, 0].min(), X[:, 0].max(), 100)\n",
"y_flip = 1 if Y[X[:, 0].argmin()] == 0 else -1\n",
"sig_y = sigmoid_mu_s(sig_x, -X[:, 0].mean(), y_flip * 0.5)\n",
"plt.plot(sig_x, sig_y, c='r')\n",
"plt.yticks([0, 0.5, 1])\n",
"plt.grid(axis='y')\n",
"plt.title('Approximation')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Hypothesis and Prediction\n",
"\n",
"We can tweak the sigmoid function by passing the dot product of $x$ (vector of feature) and $\\theta$ (the vector of weights).\n",
"\n",
"$$h(x) = \\sigma(x \\cdot \\theta) = \\sigma(\\theta_0 x_0 + \\theta_1 x_1 + \\cdots + \\theta_n x_n)$$\n",
"$x_0$ being equal to 1. \n",
"$\\theta$ is not a parameter of $h$ because it's considered as a constant.\n",
"\n",
"$h$ is our hypothesis function. It return a probability of an $x$ to belong to one of the group. \n",
"To predict som
|