File size: 92,828 Bytes
b39726e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "l8Y_Fz5_VKUf"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "%matplotlib inline\n",
        "from random import randint\n",
        "from joblib import dump, load\n",
        "import warnings\n",
        "warnings.filterwarnings(\"ignore\")\n",
        "\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.tree import DecisionTreeClassifier\n",
        "from sklearn.metrics import accuracy_score"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "OIhtQD8eWLMb"
      },
      "outputs": [],
      "source": [
        "# from google.colab import drive\n",
        "# drive.mount('/content/drive')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "mIqh1kxmVQ9o"
      },
      "outputs": [],
      "source": [
        "classifiers = ['DecisionTree']\n",
        "\n",
        "models = [DecisionTreeClassifier(random_state=0)]\n",
        "\n",
        "def split(df,label):\n",
        "    X_train, X_test, Y_train, Y_test = train_test_split(df, label, test_size=0.25, random_state=42, stratify=label)\n",
        "    return X_train, X_test, Y_train, Y_test\n",
        "\n",
        "def acc_score(df,label):\n",
        "    score = pd.DataFrame({\"Classifier\":classifiers})\n",
        "    j = 0 # bisa jadi ngga dipake\n",
        "    acc = []\n",
        "    X_train,X_test,Y_train,Y_test = split(df,label)\n",
        "    for i in models:\n",
        "        model = i\n",
        "        model.fit(X_train,Y_train)\n",
        "        predictions = model.predict(X_test)\n",
        "        acc.append(accuracy_score(Y_test,predictions))\n",
        "        j = j+1 # bisa jadi ngga dipake\n",
        "    score[\"Accuracy\"] = acc\n",
        "    score.sort_values(by=\"Accuracy\", ascending=False,inplace = True)\n",
        "    score.reset_index(drop=True, inplace=True)\n",
        "    return score\n",
        "\n",
        "def plot(score,x,y,c = \"b\"):\n",
        "    gen = [1,2,3,4,5]\n",
        "    plt.figure(figsize=(6,4))\n",
        "    ax = sns.pointplot(x=gen, y=score,color = c )\n",
        "    ax.set(xlabel=\"Generation\", ylabel=\"Accuracy\")\n",
        "    # ax.set(ylim=(x,y))\n",
        "    plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "SYWqktBJVQ7I"
      },
      "outputs": [],
      "source": [
        "def initilization_of_population(size,n_feat):\n",
        "    population = []\n",
        "    for i in range(size):\n",
        "        chromosome = np.ones(n_feat, bool)\n",
        "        chromosome[:int(0.3*n_feat)]=False\n",
        "        np.random.shuffle(chromosome)\n",
        "        population.append(chromosome)\n",
        "    return population\n",
        "\n",
        "def fitness_score(population):\n",
        "    scores = []\n",
        "    models = []\n",
        "    for chromosome in population:\n",
        "        logmodel = DecisionTreeClassifier(random_state=0)\n",
        "        logmodel.fit(X_train.iloc[:,chromosome],Y_train)\n",
        "        predictions = logmodel.predict(X_test.iloc[:,chromosome])\n",
        "        scores.append(accuracy_score(Y_test,predictions))\n",
        "        models.append(logmodel)\n",
        "    scores, population, models = np.array(scores), np.array(population), np.array(models)\n",
        "    inds = np.argsort(scores)\n",
        "    return list(scores[inds][::-1]), list(population[inds,:][::-1]), list(models[inds][::-1])\n",
        "\n",
        "def selection(pop_after_fit,n_parents):\n",
        "    population_nextgen = []\n",
        "    for i in range(n_parents):\n",
        "        population_nextgen.append(pop_after_fit[i])\n",
        "    return population_nextgen\n",
        "\n",
        "def crossover(pop_after_sel):\n",
        "    pop_nextgen = pop_after_sel\n",
        "    for i in range(0,len(pop_after_sel),2):\n",
        "        new_par = []\n",
        "        child_1 , child_2 = pop_nextgen[i] , pop_nextgen[i+1]\n",
        "        new_par = np.concatenate((child_1[:len(child_1)//2],child_2[len(child_1)//2:]))\n",
        "        pop_nextgen.append(new_par)\n",
        "    return pop_nextgen\n",
        "\n",
        "def mutation(pop_after_cross, mutation_rate, n_feat):\n",
        "    mutation_range = int(mutation_rate * n_feat)\n",
        "    pop_next_gen = []\n",
        "    for n in range(0, len(pop_after_cross)):\n",
        "        chromo = pop_after_cross[n]\n",
        "        rand_posi = []\n",
        "        for i in range(0, mutation_range):\n",
        "            pos = randint(0, n_feat-1)\n",
        "            rand_posi.append(pos)\n",
        "        for j in rand_posi:\n",
        "            chromo[j] = not chromo[j]\n",
        "        pop_next_gen.append(chromo)\n",
        "    return pop_next_gen\n",
        "\n",
        "def generations(df,label,size,n_feat,n_parents,mutation_rate,n_gen,X_train,\n",
        "                                   X_test, Y_train, Y_test):\n",
        "    best_chromo = []\n",
        "    best_score = []\n",
        "    best_models = []\n",
        "    population_nextgen=initilization_of_population(size,n_feat)\n",
        "    for i in range(n_gen):\n",
        "        scores, pop_after_fit, models = fitness_score(population_nextgen)\n",
        "        print('Best score in generation',i+1,':',scores[:1])  #2\n",
        "\n",
        "        pop_after_sel = selection(pop_after_fit, n_parents)\n",
        "        pop_after_cross = crossover(pop_after_sel)\n",
        "        population_nextgen = mutation(pop_after_cross, mutation_rate, n_feat)\n",
        "\n",
        "        best_score.append(scores[0])\n",
        "        best_chromo.append(pop_after_fit[0])\n",
        "        best_models.append(models[0])\n",
        "\n",
        "    return best_chromo, best_score, best_models"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 273
        },
        "id": "X3Ww2R2wVQ44",
        "outputId": "ccd8b6d6-f6ce-4bf5-c476-8e28c11cc0ee"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(920, 23)\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>age</th>\n",
              "      <th>trestbps</th>\n",
              "      <th>chol</th>\n",
              "      <th>thalach</th>\n",
              "      <th>oldpeak</th>\n",
              "      <th>ca</th>\n",
              "      <th>sex</th>\n",
              "      <th>fbs</th>\n",
              "      <th>exang</th>\n",
              "      <th>cp_1.0</th>\n",
              "      <th>...</th>\n",
              "      <th>restecg_0</th>\n",
              "      <th>restecg_1</th>\n",
              "      <th>restecg_2</th>\n",
              "      <th>slope_1</th>\n",
              "      <th>slope_2</th>\n",
              "      <th>slope_3</th>\n",
              "      <th>thal_3.0</th>\n",
              "      <th>thal_6.0</th>\n",
              "      <th>thal_7.0</th>\n",
              "      <th>num</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>63.0</td>\n",
              "      <td>145.0</td>\n",
              "      <td>233.0</td>\n",
              "      <td>150.0</td>\n",
              "      <td>2.3</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>67.0</td>\n",
              "      <td>160.0</td>\n",
              "      <td>286.0</td>\n",
              "      <td>108.0</td>\n",
              "      <td>1.5</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>67.0</td>\n",
              "      <td>120.0</td>\n",
              "      <td>229.0</td>\n",
              "      <td>129.0</td>\n",
              "      <td>2.6</td>\n",
              "      <td>2.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>37.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>250.0</td>\n",
              "      <td>187.0</td>\n",
              "      <td>3.5</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>41.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>204.0</td>\n",
              "      <td>172.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>5 rows × 23 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "    age  trestbps   chol  thalach  oldpeak   ca  sex  fbs  exang  cp_1.0  ...  \\\n",
              "0  63.0     145.0  233.0    150.0      2.3  0.0  1.0    1      0     1.0  ...   \n",
              "1  67.0     160.0  286.0    108.0      1.5  3.0  1.0    0      1     0.0  ...   \n",
              "2  67.0     120.0  229.0    129.0      2.6  2.0  1.0    0      1     0.0  ...   \n",
              "3  37.0     130.0  250.0    187.0      3.5  0.0  1.0    0      0     0.0  ...   \n",
              "4  41.0     130.0  204.0    172.0      1.4  0.0  0.0    0      0     0.0  ...   \n",
              "\n",
              "   restecg_0  restecg_1  restecg_2  slope_1  slope_2  slope_3  thal_3.0  \\\n",
              "0        0.0        0.0        1.0      0.0      0.0      1.0       0.0   \n",
              "1        0.0        0.0        1.0      0.0      1.0      0.0       1.0   \n",
              "2        0.0        0.0        1.0      0.0      1.0      0.0       0.0   \n",
              "3        1.0        0.0        0.0      0.0      0.0      1.0       1.0   \n",
              "4        0.0        0.0        1.0      1.0      0.0      0.0       1.0   \n",
              "\n",
              "   thal_6.0  thal_7.0  num  \n",
              "0       1.0       0.0    0  \n",
              "1       0.0       0.0    1  \n",
              "2       0.0       1.0    1  \n",
              "3       0.0       0.0    0  \n",
              "4       0.0       0.0    0  \n",
              "\n",
              "[5 rows x 23 columns]"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data_hd = pd.read_csv('./encoded_heart_disease.csv')\n",
        "\n",
        "print(data_hd.shape)\n",
        "data_hd.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 273
        },
        "id": "Zu6Gr1HGiS6Q",
        "outputId": "deec92ca-74f3-4e15-c89e-c0bb9858e586"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(920, 23)\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>age</th>\n",
              "      <th>trestbps</th>\n",
              "      <th>chol</th>\n",
              "      <th>thalach</th>\n",
              "      <th>oldpeak</th>\n",
              "      <th>ca</th>\n",
              "      <th>sex</th>\n",
              "      <th>fbs</th>\n",
              "      <th>exang</th>\n",
              "      <th>cp_1.0</th>\n",
              "      <th>...</th>\n",
              "      <th>restecg_0</th>\n",
              "      <th>restecg_1</th>\n",
              "      <th>restecg_2</th>\n",
              "      <th>slope_1</th>\n",
              "      <th>slope_2</th>\n",
              "      <th>slope_3</th>\n",
              "      <th>thal_3.0</th>\n",
              "      <th>thal_6.0</th>\n",
              "      <th>thal_7.0</th>\n",
              "      <th>num</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>63.0</td>\n",
              "      <td>145.0</td>\n",
              "      <td>233.0</td>\n",
              "      <td>150.0</td>\n",
              "      <td>2.3</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>67.0</td>\n",
              "      <td>160.0</td>\n",
              "      <td>286.0</td>\n",
              "      <td>108.0</td>\n",
              "      <td>1.5</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>67.0</td>\n",
              "      <td>120.0</td>\n",
              "      <td>229.0</td>\n",
              "      <td>129.0</td>\n",
              "      <td>2.6</td>\n",
              "      <td>2.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>37.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>250.0</td>\n",
              "      <td>187.0</td>\n",
              "      <td>3.5</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>41.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>204.0</td>\n",
              "      <td>172.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>5 rows × 23 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "    age  trestbps   chol  thalach  oldpeak   ca  sex  fbs  exang  cp_1.0  ...  \\\n",
              "0  63.0     145.0  233.0    150.0      2.3  0.0  1.0    1      0     1.0  ...   \n",
              "1  67.0     160.0  286.0    108.0      1.5  3.0  1.0    0      1     0.0  ...   \n",
              "2  67.0     120.0  229.0    129.0      2.6  2.0  1.0    0      1     0.0  ...   \n",
              "3  37.0     130.0  250.0    187.0      3.5  0.0  1.0    0      0     0.0  ...   \n",
              "4  41.0     130.0  204.0    172.0      1.4  0.0  0.0    0      0     0.0  ...   \n",
              "\n",
              "   restecg_0  restecg_1  restecg_2  slope_1  slope_2  slope_3  thal_3.0  \\\n",
              "0        0.0        0.0        1.0      0.0      0.0      1.0       0.0   \n",
              "1        0.0        0.0        1.0      0.0      1.0      0.0       1.0   \n",
              "2        0.0        0.0        1.0      0.0      1.0      0.0       0.0   \n",
              "3        1.0        0.0        0.0      0.0      0.0      1.0       1.0   \n",
              "4        0.0        0.0        1.0      1.0      0.0      0.0       1.0   \n",
              "\n",
              "   thal_6.0  thal_7.0  num  \n",
              "0       1.0       0.0    0  \n",
              "1       0.0       0.0    1  \n",
              "2       0.0       1.0    1  \n",
              "3       0.0       0.0    0  \n",
              "4       0.0       0.0    0  \n",
              "\n",
              "[5 rows x 23 columns]"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "print(data_hd.shape)\n",
        "data_hd.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "LJWVXyIwVQ2Q",
        "outputId": "72b73b8f-5709-495a-9f81-d4f9926700a5"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Index(['age', 'trestbps', 'chol', 'thalach', 'oldpeak', 'ca', 'sex', 'fbs',\n",
              "       'exang', 'cp_1.0', 'cp_2.0', 'cp_3.0', 'cp_4.0', 'restecg_0',\n",
              "       'restecg_1', 'restecg_2', 'slope_1', 'slope_2', 'slope_3', 'thal_3.0',\n",
              "       'thal_6.0', 'thal_7.0', 'num'],\n",
              "      dtype='object')"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data_hd.columns"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 443
        },
        "id": "cbByJdLxkSls",
        "outputId": "48b3ba1d-8b66-4393-9400-1068e51e780f"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>age</th>\n",
              "      <th>trestbps</th>\n",
              "      <th>chol</th>\n",
              "      <th>thalach</th>\n",
              "      <th>oldpeak</th>\n",
              "      <th>ca</th>\n",
              "      <th>sex</th>\n",
              "      <th>fbs</th>\n",
              "      <th>exang</th>\n",
              "      <th>cp_1.0</th>\n",
              "      <th>...</th>\n",
              "      <th>cp_4.0</th>\n",
              "      <th>restecg_0</th>\n",
              "      <th>restecg_1</th>\n",
              "      <th>restecg_2</th>\n",
              "      <th>slope_1</th>\n",
              "      <th>slope_2</th>\n",
              "      <th>slope_3</th>\n",
              "      <th>thal_3.0</th>\n",
              "      <th>thal_6.0</th>\n",
              "      <th>thal_7.0</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>63.0</td>\n",
              "      <td>145.0</td>\n",
              "      <td>233.0</td>\n",
              "      <td>150.0</td>\n",
              "      <td>2.3</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>67.0</td>\n",
              "      <td>160.0</td>\n",
              "      <td>286.0</td>\n",
              "      <td>108.0</td>\n",
              "      <td>1.5</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>67.0</td>\n",
              "      <td>120.0</td>\n",
              "      <td>229.0</td>\n",
              "      <td>129.0</td>\n",
              "      <td>2.6</td>\n",
              "      <td>2.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>37.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>250.0</td>\n",
              "      <td>187.0</td>\n",
              "      <td>3.5</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>41.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>204.0</td>\n",
              "      <td>172.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>915</th>\n",
              "      <td>54.0</td>\n",
              "      <td>127.0</td>\n",
              "      <td>333.0</td>\n",
              "      <td>154.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>916</th>\n",
              "      <td>62.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>139.0</td>\n",
              "      <td>140.0</td>\n",
              "      <td>0.5</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>917</th>\n",
              "      <td>55.0</td>\n",
              "      <td>122.0</td>\n",
              "      <td>223.0</td>\n",
              "      <td>100.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>918</th>\n",
              "      <td>58.0</td>\n",
              "      <td>130.0</td>\n",
              "      <td>385.0</td>\n",
              "      <td>140.0</td>\n",
              "      <td>0.5</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>919</th>\n",
              "      <td>62.0</td>\n",
              "      <td>120.0</td>\n",
              "      <td>254.0</td>\n",
              "      <td>93.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>920 rows × 22 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "      age  trestbps   chol  thalach  oldpeak   ca  sex  fbs  exang  cp_1.0  \\\n",
              "0    63.0     145.0  233.0    150.0      2.3  0.0  1.0    1      0     1.0   \n",
              "1    67.0     160.0  286.0    108.0      1.5  3.0  1.0    0      1     0.0   \n",
              "2    67.0     120.0  229.0    129.0      2.6  2.0  1.0    0      1     0.0   \n",
              "3    37.0     130.0  250.0    187.0      3.5  0.0  1.0    0      0     0.0   \n",
              "4    41.0     130.0  204.0    172.0      1.4  0.0  0.0    0      0     0.0   \n",
              "..    ...       ...    ...      ...      ...  ...  ...  ...    ...     ...   \n",
              "915  54.0     127.0  333.0    154.0      0.0  0.0  0.0    1      0     0.0   \n",
              "916  62.0     130.0  139.0    140.0      0.5  0.0  1.0    0      0     1.0   \n",
              "917  55.0     122.0  223.0    100.0      0.0  0.0  1.0    1      0     0.0   \n",
              "918  58.0     130.0  385.0    140.0      0.5  0.0  1.0    1      0     0.0   \n",
              "919  62.0     120.0  254.0     93.0      0.0  0.0  1.0    0      1     0.0   \n",
              "\n",
              "     ...  cp_4.0  restecg_0  restecg_1  restecg_2  slope_1  slope_2  slope_3  \\\n",
              "0    ...     0.0        0.0        0.0        1.0      0.0      0.0      1.0   \n",
              "1    ...     1.0        0.0        0.0        1.0      0.0      1.0      0.0   \n",
              "2    ...     1.0        0.0        0.0        1.0      0.0      1.0      0.0   \n",
              "3    ...     0.0        1.0        0.0        0.0      0.0      0.0      1.0   \n",
              "4    ...     0.0        0.0        0.0        1.0      1.0      0.0      0.0   \n",
              "..   ...     ...        ...        ...        ...      ...      ...      ...   \n",
              "915  ...     1.0        0.0        1.0        0.0      0.0      1.0      0.0   \n",
              "916  ...     0.0        0.0        1.0        0.0      0.0      1.0      0.0   \n",
              "917  ...     1.0        0.0        1.0        0.0      0.0      1.0      0.0   \n",
              "918  ...     1.0        0.0        0.0        1.0      0.0      1.0      0.0   \n",
              "919  ...     0.0        0.0        0.0        1.0      0.0      1.0      0.0   \n",
              "\n",
              "     thal_3.0  thal_6.0  thal_7.0  \n",
              "0         0.0       1.0       0.0  \n",
              "1         1.0       0.0       0.0  \n",
              "2         0.0       0.0       1.0  \n",
              "3         1.0       0.0       0.0  \n",
              "4         1.0       0.0       0.0  \n",
              "..        ...       ...       ...  \n",
              "915       1.0       0.0       0.0  \n",
              "916       1.0       0.0       0.0  \n",
              "917       0.0       1.0       0.0  \n",
              "918       1.0       0.0       0.0  \n",
              "919       1.0       0.0       0.0  \n",
              "\n",
              "[920 rows x 22 columns]"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data_hd.iloc[:, :-1]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 80
        },
        "id": "c7JNfRKoVQz4",
        "outputId": "3d8e474f-eb2a-44ac-e958-5a9afc5f041f"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Classifier</th>\n",
              "      <th>Accuracy</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>DecisionTree</td>\n",
              "      <td>0.717391</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "     Classifier  Accuracy\n",
              "0  DecisionTree  0.717391"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# harusnya jangan sampai 100%\n",
        "score1 = acc_score(data_hd.iloc[:, :-1], data_hd['num'])\n",
        "score1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "DdSzy-GbX0ER",
        "outputId": "a98e5841-1d78-4f19-8052-928ba716f992"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(690, 22) (230, 22) (690,) (230,)\n",
            "Best score in generation 1 : [0.7913043478260869]\n",
            "Best score in generation 2 : [0.8173913043478261]\n",
            "Best score in generation 3 : [0.7913043478260869]\n",
            "Best score in generation 4 : [0.8217391304347826]\n",
            "Best score in generation 5 : [0.8173913043478261]\n"
          ]
        }
      ],
      "source": [
        "X_train, X_test, Y_train, Y_test = split(data_hd.iloc[:, :-1], data_hd['num'])\n",
        "print(X_train.shape, X_test.shape, Y_train.shape, Y_test.shape)\n",
        "chromo_df, score, best_models = generations(data_hd.iloc[:, :-1],\n",
        "                                            data_hd['num'],\n",
        "                                            size=80,\n",
        "                                            n_feat = data_hd.iloc[:, :-1].shape[1],\n",
        "                                            n_parents=64,\n",
        "                                            mutation_rate=0.20,\n",
        "                                            n_gen=5,\n",
        "                                            X_train = X_train,\n",
        "                                            X_test = X_test,\n",
        "                                            Y_train = Y_train,\n",
        "                                            Y_test = Y_test)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 388
        },
        "id": "I5rtmJGvX14N",
        "outputId": "d97250f0-9eed-4cce-dfb0-3a929c47ac34"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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v2oj99xzD/n5+fTq1Yt9+/Yxc+ZM4uLiGDt2rNmphZyKlBjy2Wef8fOf/7whLigoAGDChAm8/PLLJmUVvWbPng3AiBEjfLbPnTuXG2+8sf0TigEHDhxg/PjxFBcXY7fbOeWUU/jHP/7BBRdcYHZqIiHz7bffMnbsWL7//nu6dOnC2Wefzdq1a+nSpYvZqYWcxTAMw+wkRERERPxpnhQREREJSypSREREJCypSBEREZGwpCJFREREwpKKFBEREQlLKlJEREQkLKlIERERkbCkIkVE5AhefvllOnToYHYaIjFJRYqIhERJSQl33nkn/fv3JykpiaysLIYPH87s2bOprKw0O70W6d27N7NmzfLZds011/Df//7XnIREYpymxReRY7Zz506GDx9Ohw4deOyxxxg4cCA2m40vv/yS//u//+O4447j0ksvNSU3wzCor68nPr51H3fJyclaa0nEJDqTIiLH7LbbbiM+Pp7PPvuMq6++mhNOOIG+ffty2WWXsXTpUvLz8wEoLS1l8uTJdOnShYyMDM477zy++OKLhv089NBDnHrqqbz22mv07t0bu93OtddeS1lZWcMYt9tNYWEhffr0ITk5mUGDBvG3v/2t4fkVK1ZgsVh47733GDx4MDabjdWrV7Njxw4uu+wysrKySEtLY8iQIXzwwQcNrxsxYgTffPMNU6dOxWKxYLFYgMDtntmzZ9OvXz8SExMZMGAAr732ms/zFouFF198kcsvv5yUlBR+8pOf8NZbb4Xs5y0SK1SkiMgx+f777/nnP//JlClTSE1NDTjm8B/8q666igMHDvDee+9RVFTE6aefzvnnn88PP/zQMHbHjh0sWbKEd955h3feeYeVK1fy+OOPNzxfWFjIq6++yvPPP89XX33F1KlTuf7661m5cqXPMe+77z4ef/xxNm/ezCmnnEJ5eTmjRo1i+fLlfP7551x00UXk5+eze/duABYtWkSPHj145JFHKC4upri4OOB7Wbx4MXfeeSd33303mzZt4pe//CUTJ07ko48+8hn38MMPc/XVV7Nx40ZGjRrFdddd5/M+RaQFDBGRY7B27VoDMBYtWuSzvXPnzkZqaqqRmppq/M///I/xr3/9y8jIyDCqq6t9xvXr18/485//bBiGYcycOdNISUkxnE5nw/O/+c1vjNzcXMMwDKO6utpISUkx/v3vf/vsY9KkScbYsWMNwzCMjz76yACMJUuWHDX3k046yXj66acb4l69ehlPPfWUz5i5c+cadru9IT7rrLOMm2++2WfMVVddZYwaNaohBowHHnigIS4vLzcA47333jtqTiLipWtSRKRNrFu3DrfbzXXXXYfL5eKLL76gvLyczp07+4yrqqpix44dDXHv3r1JT09viLt3786BAwcA2L59O5WVlVxwwQU++6ipqeG0007z2XbGGWf4xOXl5Tz00EMsXbqU4uJi6urqqKqqajiT0lKbN2/mlltu8dk2fPhw/vjHP/psO+WUUxr+OzU1lYyMjIb3ISItoyJFRI5J//79sVgsbN261Wd73759ARouOi0vL6d79+6sWLGiyT4aX/ORkJDg85zFYsHtdjfsA2Dp0qUcd9xxPuNsNptP7N96uueee1i2bBl/+MMf6N+/P8nJyVx55ZXU1NS08J0G50jvQ0RaRkWKiByTzp07c8EFF/DMM89wxx13NHtdyumnn05JSQnx8fH07t27Vcc68cQTsdls7N69m3PPPTeo13788cfceOONXH755YCn4Pn66699xiQmJlJfX3/E/Zxwwgl8/PHHTJgwwWffJ554YlD5iMjRqUgRkWP23HPPMXz4cM444wweeughTjnlFKxWK59++ilbtmxh8ODB5OXlMWzYMEaPHs0TTzzBT3/6U/bt28fSpUu5/PLLm7RnAklPT+eee+5h6tSpuN1uzj77bBwOBx9//DEZGRk+hYO/n/zkJyxatIj8/HwsFgszZsxocmajd+/erFq1imuvvRabzUZmZmaT/fzmN7/h6quv5rTTTiMvL4+3336bRYsW+dwpJCKhoSJFRI5Zv379+Pzzz3nssceYNm0a3377LTabjRNPPJF77rmH2267DYvFwrvvvsv999/PxIkT+e677+jWrRvnnHMOWVlZLT7Wo48+SpcuXSgsLGTnzp106NCB008/nenTpx/xdU8++SQ33XQTZ511FpmZmdx77704nU6fMY888gi//OUv6devHy6XC8Mwmuxn9OjR/PGPf+QPf/gDd955J3369GHu3LmMGDGixe9BRFrGYgT6VygiIiJiMs2TIiIiImFJRYqIiIiEJRUpIiIiEpZUpIiIiEhYUpEiIiIiYUlFioiIiIQlFSkiIiISllSkiIiISFhSkSIiIiJhSUWKiIiIhCUVKSIiIhKWVKSIiIhIWPr/erCzELunbnkAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 600x400 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "plot(score, 0.9, 1.0,c = \"gold\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "HQrzrFeuz0yG"
      },
      "outputs": [],
      "source": [
        "for index, clf in enumerate(best_models):\n",
        "  dump(clf, 'model-{}.joblib'.format(index))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "fGbUe1WJYbxp"
      },
      "outputs": [],
      "source": [
        "clf = load('model-3.joblib')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 423
        },
        "id": "bA8Qf-orbDnu",
        "outputId": "409bf4c6-5668-4f58-ff16-5f597771fb28"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sex</th>\n",
              "      <th>exang</th>\n",
              "      <th>cp_1.0</th>\n",
              "      <th>cp_2.0</th>\n",
              "      <th>cp_4.0</th>\n",
              "      <th>slope_1</th>\n",
              "      <th>slope_2</th>\n",
              "      <th>thal_3.0</th>\n",
              "      <th>thal_7.0</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>272</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>59</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>610</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>328</th>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>804</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>374</th>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>590</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>573</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>580</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>308</th>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>230 rows × 9 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "     sex  exang  cp_1.0  cp_2.0  cp_4.0  slope_1  slope_2  thal_3.0  thal_7.0\n",
              "272  1.0      1     0.0     0.0     1.0      0.0      1.0       0.0       1.0\n",
              "59   1.0      1     1.0     0.0     0.0      1.0      0.0       1.0       0.0\n",
              "610  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "328  1.0      0     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "804  1.0      1     0.0     0.0     1.0      0.0      0.0       1.0       0.0\n",
              "..   ...    ...     ...     ...     ...      ...      ...       ...       ...\n",
              "374  0.0      0     0.0     1.0     0.0      0.0      1.0       1.0       0.0\n",
              "590  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "573  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "580  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "308  0.0      0     0.0     1.0     0.0      0.0      1.0       1.0       0.0\n",
              "\n",
              "[230 rows x 9 columns]"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "X_test[clf.feature_names_in_]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 36,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KkBlxHuBY9cM",
        "outputId": "80420dc6-cd49-4f0c-fa5f-a466df712df7"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "0.8217391304347826\n"
          ]
        }
      ],
      "source": [
        "predictions = clf.predict(X_test[clf.feature_names_in_])\n",
        "print(accuracy_score(Y_test, predictions))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 34,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sex</th>\n",
              "      <th>exang</th>\n",
              "      <th>cp_1.0</th>\n",
              "      <th>cp_2.0</th>\n",
              "      <th>cp_4.0</th>\n",
              "      <th>slope_1</th>\n",
              "      <th>slope_2</th>\n",
              "      <th>thal_3.0</th>\n",
              "      <th>thal_7.0</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>272</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>59</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>610</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>328</th>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>804</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>374</th>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>590</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>573</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>580</th>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>308</th>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>230 rows × 9 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "     sex  exang  cp_1.0  cp_2.0  cp_4.0  slope_1  slope_2  thal_3.0  thal_7.0\n",
              "272  1.0      1     0.0     0.0     1.0      0.0      1.0       0.0       1.0\n",
              "59   1.0      1     1.0     0.0     0.0      1.0      0.0       1.0       0.0\n",
              "610  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "328  1.0      0     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "804  1.0      1     0.0     0.0     1.0      0.0      0.0       1.0       0.0\n",
              "..   ...    ...     ...     ...     ...      ...      ...       ...       ...\n",
              "374  0.0      0     0.0     1.0     0.0      0.0      1.0       1.0       0.0\n",
              "590  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "573  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "580  1.0      1     0.0     0.0     1.0      0.0      1.0       1.0       0.0\n",
              "308  0.0      0     0.0     1.0     0.0      0.0      1.0       1.0       0.0\n",
              "\n",
              "[230 rows x 9 columns]"
            ]
          },
          "execution_count": 34,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "X_test[clf.feature_names_in_]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 37,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "array([1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1,\n",
              "       0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n",
              "       1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1,\n",
              "       0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1,\n",
              "       1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1,\n",
              "       0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,\n",
              "       1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1,\n",
              "       1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,\n",
              "       1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1,\n",
              "       1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0,\n",
              "       0, 0, 1, 0, 1, 0, 1, 1, 1, 0], dtype=int64)"
            ]
          },
          "execution_count": 37,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "predictions"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.11.8"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}