Newer
Older
{
"cell_type": "code",
"execution_count": null,
"id": "4994dbd6",
"metadata": {},
"outputs": [],
"source": [
"## TRAINING SET : MERGED DATA , TESTING DATA: TCGA mRNA data, MODEL: Support Vector Machine"
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
{
"cell_type": "code",
"execution_count": 1,
"id": "f097ad55",
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import RocCurveDisplay\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from imblearn.over_sampling import SMOTE\n",
"from sklearn.linear_model import Lasso\n",
"import xgboost as xgb\n",
"from sklearn.model_selection import GridSearchCV\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"np.random.seed(7)"
]
},
{
"cell_type": "markdown",
"id": "73b6611a",
"metadata": {},
"source": [
"# Data Preprocessing"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "0eeb7a35",
"metadata": {},
"outputs": [],
"source": [
"df_train = pd.read_csv(\"DS/mRNA_DS_preprocessed_training_data.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a6ab23aa",
"metadata": {},
"outputs": [],
"source": [
"df_test = pd.read_csv(\"DS/mRNA_TCGA_DS_test_data.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "683b63ce",
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train.T\n",
"df_test = df_test.T"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a701e30d",
"metadata": {},
"outputs": [],
"source": [
"#df_test = df_test[:-1]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "77d974be",
"metadata": {},
"outputs": [],
"source": [
"#Transform the input data\n",
"df_train.rename(columns=df_train.iloc[0], inplace = True)\n",
"df_train.drop(df_train.index[0], inplace = True)\n",
"df_train=df_train.reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "610fbe2d",
"metadata": {},
"outputs": [],
"source": [
"df_train=df_train.drop(['ACPP'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "2e78017d",
"metadata": {},
"outputs": [],
"source": [
"#Transform the input data\n",
"df_test.rename(columns=df_test.iloc[0], inplace = True)\n",
"df_test.drop(df_test.index[0], inplace = True)\n",
"df_test=df_test.reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ea60801d",
"metadata": {},
"outputs": [],
"source": [
"metadata_test = pd.read_csv(\"DS/mRNA_TCGA_DS_col_data.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "58d531b9",
"metadata": {},
"outputs": [],
"source": [
"df_test= df_test.merge(metadata_test, left_on=\"index\", right_on= \"Unnamed: 0\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "5eeaaa39",
"metadata": {},
"outputs": [],
"source": [
"df_test= df_test.rename(columns={\"group_assignments\": \"title0\"})"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "7910f2fa",
"metadata": {},
"outputs": [],
"source": [
"df_test['title0'] = df_test['title0'].replace('(?i)Control|mucosa|normal|healthy', 0, regex=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "c102e10e",
"metadata": {},
"outputs": [],
"source": [
"df_test['title0'] = df_test['title0'].replace('(?i)Tumor|Cancer|carcinoma', 1, regex=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ed00d2ce",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 19,
"id": "6c255d2e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"title0\n",
"1 184\n",
"0 13\n",
"Name: count, dtype: int64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_test['title0'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "636b44ab",
"metadata": {},
"outputs": [],
"source": [
"df_test = df_test[pd.to_numeric(df_test['title0'], errors='coerce').notnull()]#remove all non-numeric data from the column."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "34896f9a",
"metadata": {},
"outputs": [],
"source": [
"df_test= df_test.drop(['index', 'Unnamed: 0'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "359b5bab",
"metadata": {},
"outputs": [],
"source": [
"df_test= df_test.rename(columns={\"title0\": \"index\"})"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "e8befa4e",
"metadata": {},
"outputs": [],
"source": [
"# Select 13 rows of class 0\n",
"class_0 = df_test[df_test['index'] == 0].head(13)\n",
"\n",
"# Select 13 rows of class 1\n",
"class_1 = df_test[df_test['index'] == 1].head(27)\n",
"\n",
"# Concatenate the selected rows\n",
"df_test = pd.concat([class_0, class_1])"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "fc9ca29c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"index\n",
"1 27\n",
"0 13\n",
"Name: count, dtype: int64"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_test['index'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "dc14bb1c",
"metadata": {},
"outputs": [],
"source": [
"X_test=df_test.drop(\"index\",axis=1)\n",
"y_test=df_test['index']"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "4c50c510",
"metadata": {},
"outputs": [],
"source": [
"metadata_train = pd.read_csv(\"DS/mRNA_DS_metadata_col_info.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "6730cf89",
"metadata": {},
"outputs": [],
"source": [
"df_train= df_train.merge(metadata_train, left_on=\"index\", right_on= \"Unnamed: 0\")"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "7a8ad8ad",
"metadata": {},
"outputs": [],
"source": [
"df_train['title0'] = df_train['title0'].replace('(?i)mucosa|normal|healthy', 0, regex=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "a8cf8643",
"metadata": {},
"outputs": [],
"source": [
"df_train['title0'] = df_train['title0'].replace('(?i)Tumor|Cancer|carcinoma', 1, regex=True)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "f5d203aa",
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train[pd.to_numeric(df_train['title0'], errors='coerce').notnull()]#remove all non-numeric data from the column."
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "523bdaa6",
"metadata": {},
"outputs": [],
"source": [
"df_train= df_train.drop(['index', 'Unnamed: 0'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "46a6fb36",
"metadata": {},
"outputs": [],
"source": [
"df_train= df_train.rename(columns={\"title0\": \"index\"})"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "fbaf2507",
"metadata": {},
"outputs": [],
"source": [
"df_train= df_train.apply(pd.to_numeric)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "776cfbee",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"index\n",
"0 111\n",
"1 108\n",
"Name: count, dtype: int64"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train['index'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "8c0011ea",
"metadata": {},
"outputs": [],
"source": [
"X=df_train.drop(\"index\",axis=1)\n",
"y=df_train['index']"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "fc606979",
"metadata": {},
"outputs": [],
"source": [
"X=X.astype('int')"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "93e28118",
"metadata": {},
"outputs": [],
"source": [
"y=y.astype('int')"
]
},
{
"cell_type": "markdown",
"id": "e9830b6c",
"metadata": {},
"source": [
"# Feature Selection"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "1cc528fb",
"metadata": {},
"outputs": [],
"source": [
"# LASSO model:\n",
"lasso = Lasso(alpha=1)\n",
"# fitting the model:\n",
"lasso.fit(X, y)\n",
"# select all coefficients and the feature names\n",
"lasso_coefs = lasso.coef_\n",
"feature_names = X.columns\n",
"\n",
"# collect the selected features:\n",
"selected_feature_indices = np.nonzero(lasso_coefs)[0]\n",
"selected_features = [feature_names[i] for i in selected_feature_indices]\n",
"X_selected = X.iloc[:, selected_feature_indices]"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "8afa29ae",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"98"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(selected_features)"
]
},
{
"cell_type": "markdown",
"id": "6cee6462",
"metadata": {},
"source": [
"# Test train split"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "3af09ef8",
"metadata": {},
"outputs": [],
"source": [
"X_train = X_selected\n",
"y_train = y"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "129430e6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(index\n",
" 1 27\n",
" 0 13\n",
" Name: count, dtype: int64,\n",
" index\n",
" 0 111\n",
" 1 108\n",
" Name: count, dtype: int64)"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_test.value_counts(),y_train.value_counts()"
]
},
{
"cell_type": "markdown",
"id": "1cfe2a06",
"metadata": {},
"source": [
"# Cross validation"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "1fbca4b8",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.svm import SVC\n",
"# we can add class_weight='balanced' to add panalize mistake\n",
"svm_model = SVC(kernel = \"linear\", probability=True,random_state=47)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "0502e118",
"metadata": {},
"outputs": [],
"source": [
"\n",
"# Defining parameter range\n",
"param_grid = {\n",
" 'C': [0.0005,0.0001,0.001,0.1]\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "7f2d18b0",
"metadata": {},
"outputs": [],
"source": [
"\n",
"grid = GridSearchCV(svm_model, param_grid, refit=True, verbose=3)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "79790f1d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 4 candidates, totalling 20 fits\n",
"[CV 1/5] END ..........................C=0.0005;, score=0.955 total time= 0.0s\n",
"[CV 2/5] END ..........................C=0.0005;, score=0.932 total time= 0.0s\n",
"[CV 3/5] END ..........................C=0.0005;, score=0.955 total time= 0.0s\n",
"[CV 4/5] END ..........................C=0.0005;, score=0.932 total time= 0.0s\n",
"[CV 5/5] END ..........................C=0.0005;, score=0.884 total time= 0.0s\n",
"[CV 1/5] END ..........................C=0.0001;, score=0.932 total time= 0.0s\n",
"[CV 2/5] END ..........................C=0.0001;, score=0.795 total time= 0.0s\n",
"[CV 3/5] END ..........................C=0.0001;, score=0.955 total time= 0.0s\n",
"[CV 4/5] END ..........................C=0.0001;, score=0.886 total time= 0.0s\n",
"[CV 5/5] END ..........................C=0.0001;, score=0.860 total time= 0.0s\n",
"[CV 1/5] END ...........................C=0.001;, score=0.977 total time= 0.0s\n",
"[CV 2/5] END ...........................C=0.001;, score=0.977 total time= 0.0s\n",
"[CV 3/5] END ...........................C=0.001;, score=0.977 total time= 0.0s\n",
"[CV 4/5] END ...........................C=0.001;, score=0.932 total time= 0.0s\n",
"[CV 5/5] END ...........................C=0.001;, score=0.884 total time= 0.0s\n",
"[CV 1/5] END .............................C=0.1;, score=0.705 total time= 0.0s\n",
"[CV 2/5] END .............................C=0.1;, score=0.886 total time= 0.0s\n",
"[CV 3/5] END .............................C=0.1;, score=0.977 total time= 0.0s\n",
"[CV 4/5] END .............................C=0.1;, score=0.977 total time= 0.0s\n",
"[CV 5/5] END .............................C=0.1;, score=0.953 total time= 0.0s\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(estimator=SVC(kernel='linear', probability=True, random_state=47),\n",
" param_grid={'C': [0.0005, 0.0001, 0.001, 0.1]}, verbose=3)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GridSearchCV</label><div class=\"sk-toggleable__content\"><pre>GridSearchCV(estimator=SVC(kernel='linear', probability=True, random_state=47),\n",
" param_grid={'C': [0.0005, 0.0001, 0.001, 0.1]}, verbose=3)</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(kernel='linear', probability=True, random_state=47)</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(kernel='linear', probability=True, random_state=47)</pre></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"GridSearchCV(estimator=SVC(kernel='linear', probability=True, random_state=47),\n",
" param_grid={'C': [0.0005, 0.0001, 0.001, 0.1]}, verbose=3)"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Fitting the model for grid search\n",
"grid.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"id": "bc91d663",
"metadata": {},
"source": [
"# classification"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "5d327876",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'C': 0.001}\n",
"SVC(C=0.001, kernel='linear', probability=True, random_state=47)\n"
]
}
],
"source": [
"# print best parameter after tuning\n",
"print(grid.best_params_)\n",
" \n",
"# print how our model looks after hyper-parameter tuning\n",
"print(grid.best_estimator_)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "f8d67e2f",
"metadata": {},
"outputs": [],
"source": [
"# Select columns in df1 based on columns in df2\n",
"X_test = X_test.loc[:, X_train.columns]"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "e91a687d",
"metadata": {},
"outputs": [],
"source": [
"X_test=X_test.dropna(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "3b2776c0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-2 {color: black;background-color: white;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=0.001, kernel='linear', probability=True, random_state=47)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(C=0.001, kernel='linear', probability=True, random_state=47)</pre></div></div></div></div></div>"
],
"text/plain": [
"SVC(C=0.001, kernel='linear', probability=True, random_state=47)"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_svm = grid.best_estimator_\n",
"model_svm.fit(X_train,y_train)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "eb9cd20a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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2xUTE+O2vfjii+rYsaMiIiIUFxenMWPGKD8//5LX2LlzpxITE+VwOBQVFaUuXbpo+/btrs/T09PVvXt3hYeHKy4uTuPGjVNBQUFlfD1Aktz+fkdHR8tms7n29+/fL4fDoY8//lhdunSR3W5Xenq6Ro4cqYEDB7pdZ/z48erVq5dr3zAMOZ1OxcfHKzw8XJ07d9Z7771XuV8O+C8kDKhUISEhmjdvnvbs2aPFixdr48aNmjx58iXPHzZsmJo1a6avvvpKO3bs0NSpU1WnTh1JUnZ2tpKSkjRkyBDt2rVLy5cvV3p6upKTkyvr6wBemTp1qp544gnt27dPnTp18mqM0+nUkiVLtHDhQu3Zs0cpKSm6++67lZaWVsHRAhdHXQwVZs2aNW7l2H79+undd9917V911VV67LHHNHr0aL3yyisXvcaRI0c0adIktWvXTpLUunVr12dOp1PDhg3T+PHjXZ/NmzdPPXv21IIFC4L2BTCofmbPnq1bb73V6/OLioo0d+5cbdiwQd26dZMktWzZUunp6Xr11VfVs2fPigoVuCQSBlSYxMRELViwwLUfERGhDRs2yOl0av/+/crLy9O5c+dUWFios2fPqm7duhdcY8KECRo1apTefPNN9e7dW3fccYdatWolqaxdsWvXLi1dutR1vmmaMgxDhw4dUvv27Sv+SwJeuP766306PysrS2fPnr0gySguLta1115rZWiA10gYUGEiIiKUkJDg2j98+LB+85vf6IEHHtDjjz+uBg0aKD09Xffdd5+Ki4svmjDMnDlTv//977V27Vp9/PHHmjFjht555x0NGjRI+fn5+tOf/qRx48ZdMK558+YV+t0AX0RERLjth4SE6Oer8peUlLj+fH5ez9q1a9W0aVO383j/BKoKCQMqzY4dO2QYhp599lmFhJRNn1mxYoXHcW3atFGbNm2UkpKioUOHatGiRRo0aJCuu+467d271y0pAaqDhg0bavfu3W7HMjIyXPNzOnToILvdriNHjtB+QMBg0iMqTUJCgkpKSjR//nwdPHhQb775phYuXHjJ83/88UclJydr06ZN+u6777R161Z99dVXrlbDlClTtG3bNiUnJysjI0MHDhzQhx9+yKRHBLybb75Z27dv15IlS3TgwAHNmDHDLYFwOByaOHGiUlJStHjxYmVnZ+vrr7/W/PnztXjx4iqMHDUZCQMqTefOnfXcc8/pySef1NVXX62lS5fK6XRe8vxatWrp1KlTGj58uNq0aaM777xT/fr106xZsyRJnTp1Ulpamr799lt1795d1157raZPn67Y2NjK+kpAufTt21fTpk3T5MmTdcMNN+jMmTMaPny42zlz5szRtGnT5HQ61b59eyUlJWnt2rWKj4+voqhR0/F6awAA4BEVBgAA4BEJAwAA8IiEAQAAeETCAAAAPCJhAAAAHpEwAAAAj0gYAACARyQMQDUxcuRIDRw40LXfq1cv15s6K9OmTZtks9l0+vTpS55js9m0atUqr685c+ZMXXPNNX7FdfjwYdlsNmVkZPh1HQAXR8IA+GHkyJGy2Wyy2WwKDQ1VQkKCZs+erXPnzlX4vT/44APNmTPHq3O9+SEPAJfDy6cAPyUlJWnRokUqKirSRx99pLFjx6pOnTp65JFHLji3uLhYoaGhlty3QYMGllwHALxBhQHwk91uV0xMjFq0aKEHHnhAvXv31t///ndJ/2kjPP7444qNjVXbtm0lSUePHtWdd96pevXqqUGDBhowYIAOHz7sumZpaakmTJigevXq6YorrtDkyZMveB3yz1sSRUVFmjJliuLi4mS325WQkKA33nhDhw8fVmJioiSpfv36stlsGjlypCTJMAw5nU7Fx8crPDxcnTt31nvvved2n48++kht2rRReHi4EhMT3eL01pQpU9SmTRvVrVtXLVu21LRp09xe53zeq6++qri4ONWtW1d33nmncnNz3T5//fXX1b59e4WFhaldu3Z65ZVXfI4FQPmQMAAWCw8PV3FxsWv/008/VWZmptavX681a9aopKREffv2lcPh0JYtW7R161ZFRkYqKSnJNe7ZZ59Vamqq/va3vyk9PV0//PCDVq5cedn7Dh8+XG+//bbmzZunffv26dVXX1VkZKTi4uL0/vvvS5IyMzOVk5OjF198UZLkdDq1ZMkSLVy4UHv27FFKSoruvvtupaWlSSpLbAYPHqz+/fsrIyNDo0aN0tSpU33+38ThcCg1NVV79+7Viy++qNdee03PP/+82zlZWVlasWKFVq9erXXr1umbb77RmDFjXJ8vXbpU06dP1+OPP659+/Zp7ty5mjZtGm9vBCqLCaDcRowYYQ4YMMA0TdM0DMNcv369abfbzYkTJ7o+b9y4sVlUVOQa8+abb5pt27Y1DcNwHSsqKjLDw8PNTz75xDRN02zSpIn51FNPuT4vKSkxmzVr5rqXaZpmz549zYceesg0TdPMzMw0JZnr16+/aJyfffaZKcn897//7TpWWFho1q1b19y2bZvbuffdd585dOhQ0zRN85FHHjE7dOjg9vmUKVMuuNbPSTJXrlx5yc+ffvpps0uXLq79GTNmmLVq1TKPHTvmOvbxxx+bISEhZk5OjmmaptmqVStz2bJlbteZM2eO2a1bN9M0TfPQoUOmJPObb7655H0BlB9zGAA/rVmzRpGRkSopKZFhGPr973+vmTNnuj7v2LGj27yFnTt3KisrSw6Hw+06hYWFys7OVm5urnJyctS1a1fXZ7Vr19b1119/QVvivIyMDNWqVUs9e/b0Ou6srCydPXtWt956q9vx4uJiXXvttZKkffv2ucUhSd26dfP6HuctX75c8+bNU3Z2tvLz83Xu3DlFRUW5ndO8eXM1bdrU7T6GYSgzM1MOh0PZ2dm67777dP/997vOOXfunKKjo32OB4DvSBgAPyUmJmrBggUKDQ1VbGysatd2/88qIiLCbT8/P19dunTR0qVLL7hWw4YNyxVDeHi4z2Py8/MlSWvXrnX7QS2Vzcuwyueff65hw4Zp1qxZ6tu3r6Kjo/XOO+/o2Wef9TnW11577YIEplatWpbFCuDSSBgAP0VERCghIcHr86+77jotX75cjRo1uuC37POaNGmiL7/8Uj169JBU9pv0jh07dN111130/I4dO8owDKWlpal3794XfH6+wlFaWuo61qFDB9ntdh05cuSSlYn27du7JnCe98UXX3j+kv9l27ZtatGihR599FHXse++++6C844cOaLjx48rNjbWdZ+QkBC1bdtWjRs3VmxsrA4ePKhhw4b5dH8A1mDSI1DJhg0bpiuvvFIDBgzQli1bdOjQIW3atEnjxo3TsWPHJEkPPfSQnnjiCa1atUr79+/XmDFjLruGwlVXXaURI0bo3nvv1apVq1zXXLFihSSpRYsWstlsWrNmjf75z38qPz9fDodDEydOVEpKihYvXqzs7Gx9/fXXmj9/vmsi4ejRo3XgwAFNmjRJmZmZWrZsmVJTU336vq1bt9aRI0f0zjvvKDs7W/PmzbvoBM6wsDCNGDFCO3fu1JYtWzRu3DjdeeediomJkSTNmjVLTqdT8+bN07fffqt//OMfWrRokZ577jmf4gFQPiQMQCWrW7euNm/erObNm2vw4MFq37697rvvPhUWFroqDg8//LD+8Ic/aMSIEerWrZscDocGDRp02esuWLBAv/3tbzVmzBi1a9dO999/vwoKCiRJTZs21axZszR16lQ1btxYycnJkqQ5c+Zo2rRpcjqdat++vZKSkrR27VrFx8dLKptX8P7772vVqlXq3LmzFi5cqLlz5/r0fW+//XalpKQoOTlZ11xzjbZt26Zp06ZdcF5CQoIGDx6s2267TX369FGnTp3cHpscNWqUXn/9dS1atEgdO3ZUz549lZqa6ooVQMWymZeaRQUAAPATKgwAAMAjEgYAAOARCQMAAPCIhAEAAHhEwgAAADwiYQAAAB6RMAAAAI9IGAAAgEckDAAAwCMSBgAA4BEJAwAA8IiEAQAAePT/Abvl/HA9pBryAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#######CONFUSION MATRIX ###########\n",
"from sklearn import metrics\n",
"y_test_pred_svm = model_svm.predict(X_test)\n",
"confusion_matrix_test = metrics.confusion_matrix(y_test, y_test_pred_svm)\n",
"cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix_test, display_labels = [False, True])\n",
"cm_display.plot()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "94871ada",
"metadata": {},
"outputs": [],
"source": [
"y_proba = model_svm.fit(X_train, y_train).predict_proba(X_test)[:,1]"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "2d5767d3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy : 0.725\n",
"Sensitivity : 0.3076923076923077\n",
"Specificity : 0.9259259259259259\n"
]
}
],
"source": [
"total1=sum(sum(confusion_matrix_test))\n",
"#####from confusion matrix calculate accuracy\n",
"accuracy1=(confusion_matrix_test[0,0]+confusion_matrix_test[1,1])/total1\n",
"print ('Accuracy : ', accuracy1)\n",
"\n",
"sensitivity1 = confusion_matrix_test[0,0]/(confusion_matrix_test[0,0]+confusion_matrix_test[0,1])\n",
"print('Sensitivity : ', sensitivity1 )\n",
"\n",
"specificity1 = confusion_matrix_test[1,1]/(confusion_matrix_test[1,0]+confusion_matrix_test[1,1])\n",
"print('Specificity : ', specificity1)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "66858777",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0 0.67 0.31 0.42 13\n",
" 1 0.74 0.93 0.82 27\n",
"\n",
" accuracy 0.73 40\n",
" macro avg 0.70 0.62 0.62 40\n",
"weighted avg 0.71 0.72 0.69 40\n",
"\n"
]
}
],
"source": [
"from sklearn.metrics import classification_report, confusion_matrix\n",
"grid_predictions = grid.predict(X_test)\n",
"print(classification_report(y_test, grid_predictions))"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "c1095af0",
"metadata": {},
"outputs": [],
"source": [
"# for important features:\n",
"important_feat = model_svm.coef_[0]\n",
"#get indices of those important features\n",
"idx = important_feat.argsort(kind= \"quicksort\")\n",
"idx= idx[::-1][:50]"
]
},
{
"cell_type": "code",
"execution_count": 67,
"id": "ae7e0162",
"metadata": {},
"outputs": [],
"source": [
"df1 = X_selected.T"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "1d97f818",
"metadata": {},
"outputs": [],
"source": [
"top_met = df1.iloc[idx]"
]
},
{
"cell_type": "code",
"execution_count": 69,
"id": "4cd4227b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['COL1A1', 'ECT2', 'COL7A1', 'IGF2BP2', 'COL5A2', 'NUSAP1', 'MCM2',\n",
" 'IGFBP3', 'FSCN1', 'LAMB3', 'RPN1', 'AGRN', 'EFNA1', 'LAMC2', 'TAPBP',\n",
" 'HSPBAP1', 'TGIF1', 'TYMP', 'ANO1', 'LCN2', 'UCHL1', 'AURKA', 'AIM2',\n",
" 'RUVBL1', 'TSPAN6', 'MYH10', 'DHRS2', 'IFI35', 'ERCC3', 'ENTPD6',\n",
" 'SLC2A1', 'PITX1', 'SSRP1', 'PCSK5', 'HSPD1', 'IL1RN', 'SERPINB13',\n",
" 'LYPD3', 'ACLY', 'SCNN1A', 'TMF1', 'GALNT1', 'SPRR3', 'ITPKC', 'STK24',\n",
" 'NT5C2', 'PTN', 'EMP1', 'TMPRSS11D', 'TST'],\n",
" dtype='object')"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"top_met.index"
]
},
{
"cell_type": "code",
"execution_count": 70,
"id": "8f6d88bb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['ACLY', 'ACTG2', 'AGRN', 'AIM2', 'ALDH9A1', 'ALOX12', 'ANO1', 'AQP3',\n",
" 'ATP6V1D', 'AURKA', 'CCNG2', 'CES2', 'CFD', 'CH25H', 'CLIC3', 'COL1A1',\n",
" 'COL5A2', 'COL7A1', 'CRABP2', 'CRCT1', 'CRISP3', 'CRNN', 'CYP4B1',\n",
" 'DHRS1', 'DHRS2', 'DUOX1', 'DUSP5', 'ECM1', 'ECT2', 'EFNA1', 'EMP1',\n",
" 'ENTPD6', 'ERCC3', 'FLG', 'FSCN1', 'GALE', 'GALNT1', 'GPX3', 'HOPX',\n",
" 'HSPB8', 'HSPBAP1', 'HSPD1', 'ID4', 'IFI35', 'IGF2BP2', 'IGFBP3',\n",
" 'IL1RN', 'INPP1', 'ITPKC', 'KANK1', 'KLK13', 'KRT4', 'LAMB3', 'LAMC2',\n",
" 'LCN2', 'LYPD3', 'MAL', 'MCM2', 'MUC1', 'MYH10', 'NDRG2', 'NT5C2',\n",
" 'NUSAP1', 'PCSK5', 'PHLDA1', 'PITX1', 'PPP1R3C', 'PTN', 'RAB11FIP1',\n",
" 'RANBP9', 'RHCG', 'RND3', 'RPN1', 'RUVBL1', 'SCNN1A', 'SERPINB13',\n",
" 'SERPINB2', 'SIM2', 'SLC2A1', 'SLK', 'SPRR3', 'SSRP1', 'STK24',\n",
" 'SYNPO2L', 'TAPBP', 'TFAP2B', 'TGIF1', 'TIAM1', 'TJP1', 'TMF1',\n",
" 'TMPRSS11D', 'TMPRSS11E', 'TSPAN6', 'TST', 'TYMP', 'UCHL1', 'ZBTB16',\n",
" 'ZNF185'],\n",
" dtype='object')"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_selected.columns"
]
},
{
"cell_type": "code",
"execution_count": 72,
"id": "5d9ff727",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr4AAAIjCAYAAADlfxjoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwi0lEQVR4nO3deZyN5f/H8dfMmBUz9n00KEvZ11ApKW0S9U1ZU+lblsqkskWp6JeUklIqJCLtUiRF2ZJlRES2ryUjk2UwZj3X74+rGYahOePM3HPOeT8fj3nM3Pfc55zPcRjv+ZxrCTDGGEREREREfFyg0wWIiIiIiBQEBV8RERER8QsKviIiIiLiFxR8RURERMQvKPiKiIiIiF9Q8BURERERv6DgKyIiIiJ+QcFXRERERPyCgq+IiIiI+AUFXxERERHxCwq+IiKFwIYNG7jjjju46KKLCAsLo3Llylx33XVMmDCBtWvXEhAQwPDhw895+z/++IOAgABiY2MBePrppwkICCAwMJA9e/acdX1iYiLh4eEEBATQv3//fHteIiKFiYKviIjDli9fTtOmTVm/fj19+vTh9ddf5/777ycwMJBXX32Vxo0bU7t2bT788MNz3sfMmTMB6N69e7bzoaGhOd7u008/9eyTEBHxAkWcLkBExN89//zzREVF8csvv1CiRIls3/vrr78A6NatG0899RQrV67k8ssvP+s+PvzwQ2rXrk3jxo2znb/pppv48MMPeeKJJ7KdnzlzJjfffDOffPKJZ5+MiEghpo6viIjDtm/fzmWXXXZW6AUoV64cYIMvnOrsnm7NmjVs2bIl65rTde3albi4OH7//fesc/Hx8Xz//fd07drVQ89ARMQ7KPiKiDjsoosuYs2aNWzcuPGc11SrVo1WrVrx0UcfkZGRke17mWE4pyB71VVXUaVKlWyBefbs2RQrVoybb77ZQ89ARMQ7KPiKiDhs0KBBJCUl0bBhQ1q1asWTTz7Jt99+S1paWrbrunXrxoEDB1i0aFHWOZfLxezZs2nZsiXVq1c/674DAgK46667so3znTFjBp07dyY0NDT/npSISCGk4Csi4rDrrruOFStWcOutt7J+/XpefPFF2rdvT+XKlfnyyy+zruvSpQvBwcHZurdLlixh3759OQ5zyNS1a1e2bdvGL7/8kvVZwxxExB8p+IqIFALNmjXj008/5fDhw6xatYohQ4Zw7Ngx7rjjDjZt2gRA6dKlad++PZ999hnJycmAHeZQpEgR7rzzznPed6NGjahduzYzZ85kxowZVKhQgbZt2xbI8xIRKUwUfEVECpGQkBCaNWvG6NGjefPNN0lLS2POnDlZ3+/evTuJiYl89dVXpKam8sknn3D99ddTtmzZ895v165dmT17NjNnzqRLly4EBurHv4j4H/3kExEppJo2bQrA/v37s87deuutFC9enJkzZ/LNN99w+PDh8w5zyNS1a1f279/P1q1bNcxBRPyW1vEVEXHYDz/8wNVXX01AQEC2819//TUAtWrVyjoXHh5Op06dmD17NklJSRQtWpSOHTv+62PUqFGD8ePHc/LkSZo3b+7ZJyAi4iUUfEVEHDZgwACSkpLo1KkTtWvXJjU1leXLlzN79mxiYmLo3bt3tuu7d+/O+++/z4IFC+jWrRtFixbN1eM88sgj+VG+iIjXUPAVEXHYSy+9xJw5c/j66695++23SU1NpWrVqvTt25fhw4eftbFF27ZtqVixIvv378/VMAcREbECjDHG6SJERERERPKbJreJiIiIiF9Q8BURERERv6DgKyIiIiJ+QcFXRERERPyCgq+IiIiI+AUFXxERERHxC363jq/L5eLPP/+kePHiZ+2SJCIiIiLOM8Zw7NgxKlWqRGCg5/q0fhd8//zzT6Kjo50uQ0RERET+xZ49e6hSpYrH7s/vgm/x4sUB+wcZGRnpcDUiIiIicqbExESio6Ozcpun+F3wzRzeEBkZqeArIiIiUoh5eliqJreJiIiIiF9Q8BURERERv6DgKyIiIiJ+QcFXRERERPyCgq+IiIiI+AUFXxERERHxCwq+IiIiIuIXFHxFRERExC8o+IqIiIiIX1DwFRERERG/oOArIiIiIn5BwVdERERE/IKCr4iIiIj4BQVfEREREfELCr4iIiIi4hccDb4//vgjHTp0oFKlSgQEBPD555//620WL15M48aNCQ0N5eKLL2bq1Kn5XqeIiIiIeD9Hg++JEydo0KABEydOzNX1O3fu5Oabb+aaa64hLi6ORx99lPvvv58FCxbkc6UiIiIi4u2KOPngN954IzfeeGOur580aRLVqlVj3LhxANSpU4elS5fyyiuv0L59+/wqU0RERPzQ5s32QwpeUlL+3K+jwdddK1asoF27dtnOtW/fnkcf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xEcp+OaShjn4mG+/hXr14Isv7O5rR486XZGIiIjkMwXfXNLENh+RnAwDB0L79hAfD3XqaMUGERERP1Eogu/EiROJiYkhLCyMFi1asGrVqnNeO3nyZK688kpKlixJyZIladeu3Xmv9xR1fH3Axo3QvDmMH2+P+/aF1auhYUMnqxIREZEC4njwnT17NrGxsYwcOZK1a9fSoEED2rdvz19//ZXj9YsXL+buu+/mhx9+YMWKFURHR3P99dezb9++fK1THV8v9/ff0LIlbNgAZcvC3Ll26+GICKcrExERkQISYEzmtHZntGjRgmbNmvH6668D4HK5iI6OZsCAAQwePPhfb5+RkUHJkiV5/fXX6dmz579en5iYSFRUFEePHiUyMjJXNZ44AcWK2a8TEqB06VzdTAqbZ5+FFStgyhQoX97pakREROQc8pLXcsPR5cxSU1NZs2YNQ4YMyToXGBhIu3btWLFiRa7uIykpibS0NEqVKpXj91NSUkhJSck6TszDtrNbt9rPZcoo9HqVuXOhWjWoW9ceDx0KgYF26TIRERHxO44OdUhISCAjI4PyZ3TfypcvT3x8fK7u48knn6RSpUq0a9cux++PGTOGqKiorI/o6Gi369T4Xi+TlAQPPQS33grdutkJbWC3H1boFRER8VuOj/G9EC+88AKzZs3is88+IywsLMdrhgwZwtGjR7M+9uzZ4/bjZI7vVfD1AmvXQuPGMGmSPW7XTmFXREREAIeHOpQpU4agoCAOHDiQ7fyBAweoUKHCeW/70ksv8cILL/Ddd99Rv379c14XGhpKaGjoBdWZ2fHVxLZCzOWCl16C4cMhLQ0qVoT337fBV0RERASHO74hISE0adKERYsWZZ1zuVwsWrSIli1bnvN2L774Is8++yzz58+nadOm+V6nhjoUcocP24D75JM29HbqZFdvUOgVERGR0zja8QWIjY2lV69eNG3alObNmzN+/HhOnDhB7969AejZsyeVK1dmzJgxAPzf//0fI0aMYObMmcTExGSNBS5WrBjFMpde8CCXSx3fQi8y0gbeiAh47TW4914NbxAREZGzOB58u3TpwsGDBxkxYgTx8fE0bNiQ+fPnZ0142717N4GBpxrTb775Jqmpqdxxxx3Z7mfkyJE8/fTTHq9v3z47V6pIEbtAgBQSx45BcDCEhdlJazNmQEoKXHKJ05WJiIhI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zHZNTjUaY8yGDRvMDTfcYIoWLWrKlStnunfvbg4ePJh1u2+++ca0bt3aREVFmVKlSpmbb77ZbNu27bw1XqjmzZubfv36ZR1nZGSYSpUqmTFjxpzzNhUrVjSvv/56tnOdO3c23bp1c/t+r7nmGjN8+PAcHyenf3OZTs9rnuTXHd8CWcosKcmO3+3QAQ4etKs3rFkD/fur0ysiUsglJUGxYs58XMjmcRs3bmT58uWEhIRknfv4449JS0s7q7ML8N///pdixYrx4YcfAjBjxgyKFStG3759c7z/Eud4m/T48eO0adOGffv28eWXX7J+/XqeeOIJXC6XW/VPmzaNkJAQli1bxqRJk+jWrRtz587l+PHjWdcsWLCApKQkOnXqBMCYMWN4//33mTRpEr/99hsDBw6ke/fuLFmy5JyP89NPP9G0adNs55KTk2nSpAnz5s1j48aNPPDAA/To0eOs4QFn1njkyBHatm1Lo0aNWL16NfPnz+fAgQPceeedWbc5ceIEsbGxrF69mkWLFhEYGEinTp3O++czevRoihUrdt6P3bt353jb1NRU1qxZQ7t27bLOBQYG0q5dO1asWHHOx0xJSSEsLCzbufDwcJYuXer2/TZv3pyffvrpnI9V0Px6VYd8X8ps/367Hm9mwo6NhdGjITQ0nx5QRET81VdffUWxYsVIT08nJSWFwMBAXn/99azvb926laioKCpWrHjWbUNCQqhevTpbt24F4I8//qB69eoEBwe7VcPMmTM5ePAgv/zyC6VKlQLg4osvdvu5XHLJJbz44otZxzVq1KBo0aJ89tln9OjRI+uxbr31VooXL05KSgqjR4/mu+++o2XLlgBUr16dpUuX8tZbb9GmTZscH+d///vfWcG3cuXK2X45GDBgAAsWLOCjjz6iefPm56zxueeeo1GjRowePTrr3HvvvUd0dDRbt26lZs2a3H777dke67333qNs2bJs2rSJunXr5ljjgw8+mC0856RSpUo5nk9ISCAjI4Py5ctnO1++fHl+z8wmOWjfvj0vv/wyV111FTVq1GDRokV8+umnZGRkuH2/lSpV4n//+9956y9ICr7kY8e3fHmoWBGOHoVp0+C66/LpgUREJD9ERMBpTcYCf2x3XHPNNbz55pucOHGCV155hSJFipwVtHLLGJOn28XFxdGoUaOs0JtXTZo0yXZcpEgR7rzzTmbMmEGPHj04ceIEX3zxBbNmzQJg27ZtJCUlcd0Z/8+mpqbS6DyrJZ08efKszmZGRgajR4/mo48+Yt++faSmppKSknLWbn5n1rh+/Xp++OEHihUrdtbjbN++nZo1a/LHH38wYsQIfv75ZxISErI6vbt37z5n8C1VqtQF/3m669VXX6VPnz7Url2bgIAAatSoQe/evXnvvffcvq/w8HCSLuTtCw/z2+DrcsE/v9h6tuO7dy+UKmV/YgUG2nV5g4OhTBkPPoiIiBSEgAAoWtTpKnKnaNGiWd3V9957jwYNGvDuu+9y3333AVCzZk2OHj3Kn3/+eVaHMDU1le3bt3PNNddkXbt06VLS0tLc6vqGh4ef9/uBgYFnheq0tLQcn8uZunXrRps2bfjrr79YuHAh4eHh3HDDDQBZQyDmzZtH5cqVs90u9DzvspYpU4bDhw9nOzd27FheffVVxo8fT7169ShatCiPPvroWRPYzqzx+PHjdOjQgf/7v/8763Eyu+wdOnTgoosuYvLkyVSqVAmXy0XdunXPOzlu9OjR2brIOdm0aRNVq1bN8fkFBQVx4MCBbOcPHDhAhQoVznl/ZcuW5fPPPyc5OZm///6bSpUqMXjwYKpXr+72/R46dIiyZcuet/6C5LdjfPfssYsqhIRATIyH7nTOHDuG9/TxUxUrKvSKiEiBCgwMZOjQoQwfPpyTJ08CcPvttxMcHMy4cePOun7SpEmcOHGCu+++G4CuXbty/Phx3njjjRzv/8iRIzmer1+/PnFxcedc7qxs2bLs378/27m405f3PI9WrVoRHR3N7NmzmTFjBv/5z3+yQvmll15KaGgou3fv5uKLL872ER0dfc77bNSoEZs2bcp2btmyZXTs2JHu3bvToEGDbENAzqdx48b89ttvxMTEnFVD0aJF+fvvv9myZQvDhw/n2muvpU6dOmeF7pw8+OCDxMXFnffjXEMdQkJCaNKkCYsWLco653K5WLRoUdaQkPMJCwujcuXKpKen88knn9CxY0e373fjxo3n7boXOI9OlfMCmbMEP/74qAFjLrvMA3eamGhM7952xQYwpnlzY5KSPHDHIiJSUM43w7ywy2m1hLS0NFO5cmUzduzYrHOvvPKKCQwMNEOHDjWbN28227ZtM+PGjTOhoaHmsccey3b7J554wgQFBZnHH3/cLF++3Ozatct899135o477jjnag8pKSmmZs2a5sorrzRLly4127dvNx9//LFZvny5McaY+fPnm4CAADNt2jSzdetWM2LECBMZGXnWqg6PPPJIjvc/bNgwc+mll5oiRYqYn3766azvlS5d2kydOtVs27bNrFmzxrz22mtm6tSp5/xz+/LLL025cuVMenp61rmBAwea6Ohos2zZMrNp0yZz//33m8jIyGx/vjnVuG/fPlO2bFlzxx13mFWrVplt27aZ+fPnm3vuucekp6ebjIwMU7p0adO9e3fzxx9/mEWLFplmzZoZwHz22WfnrPFCzZo1y4SGhpqpU6eaTZs2mQceeMCUKFHCxMfHZ13To0cPM3jw4KzjlStXmk8++cRs377d/Pjjj6Zt27amWrVq2VbzyM39GmPMRRddZN5///0ca3NiVQe/Db4vvGCDb+fOF3iHK1YYU6OGDbwBAcYMG2ZMaqpHahURkYLja8HXGGPGjBljypYta44fP5517osvvjBXXnmlKVq0qAkLCzNNmjQx7733Xo73O3v2bHPVVVeZ4sWLm6JFi5r69eubUaNGnXc5s127dpnbb7/dREZGmoiICNO0aVPz888/Z31/xIgRpnz58iYqKsoMHDjQ9O/fP9fBd9OmTQYwF110kXGdsd6by+Uy48ePN7Vq1TLBwcGmbNmypn379mbJkiXnrDUtLc1UqlTJzJ8/P+vc33//bTp27GiKFStmypUrZ4YPH2569uz5r8HXGGO2bt1qOnXqZEqUKGHCw8NN7dq1zaOPPppV68KFC02dOnVMaGioqV+/vlm8eHG+B19jjJkwYYKpWrWqCQkJMc2bN89aXu7059OrV6+s48WLF2fVWbp0adOjRw+zb98+t+93+fLlpkSJEibpHM1AJ4JvgDF5HMHupRITE4mKiuLee4/y3nuRDBliF1pwW3q6veGoUZCRAVWrwvTpcNVVHq9ZRETyX3JyMjt37qRatWpnTXgS3zVx4kS+/PJLFixY4HQpPqdLly40aNCAoUOH5vj98/2by8xrR48eJTIy0mM1+e3ktj/+sJ/zPLHt4EF49VUbeu++G954o4C2fxMRERFP+e9//8uRI0c4duyYT29bXNBSU1OpV68eAwcOdLqUbPw2+GaOU8/zUmYVK8J778GxY9C9u8fqEhERkYJTpEgRhg0b5nQZPickJIThw4c7XcZZ/HZVh8wVOHId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BFO1alUTEhJimjdvblauXJn1vTZt2phevXplu/6jjz4yNWvWNCEhIeayyy4z8+bNK+CK5UK483pfdNFFBjjrY+TIkQVfuOSJu/++T6fg633cfb2XL19uWrRoYUJDQ0316tXN888/b9LT0wu4askrd17vtLQ08/TTT5saNWqYsLAwEx0dbfr27WsOHz5c8IWL23744Ycc/z/OfI179epl2rRpc9ZtGjZsaEJCQkz16tXNlClT3H7cAGP0foCIiIiI+D6fGuMrIiIiInIuCr4iIiIi4hcUfEVERETELyj4ioiIiIhfUPAVEREREb+g4CsiIiIifkHBV0RERET8goKviIiIiPgFBV8REWDq1KmUKFHC6TLyLCAggM8///y819xzzz3cdtttBVKPiEhhpOArIj7jnnvuISAg4KyPbdu2OV0aU6dOzaonMDCQKlWq0Lt3b/766y+P3P/+/fu58cYbAdi1axcBAQHExcVlu+bVV19l6tSpHnm8c3n66aeznmdQUBDR0dE88MADHDp0yK37UUgXkfxQxOkCREQ86YYbbmDKlCnZzpUtW9aharKLjIxky5YtuFwu1q9fT+/evfnzzz9ZsGDBBd93hQoV/vWaqKioC36c3Ljsssv47rvvyMjIYPPmzdx7770cPXqU2bNnF8jji4icizq+IuJTQkNDqVChQraPoKAgXn75ZerVq0fRokWJjo6mb9++HD9+/Jz3s379eq655hqKFy9OZGQkTZo0YfXq1VnfX7p0KVdeeSXh4eFER0fz8MMPc+LEifPWFhAQQIUKFahUqRI33ngjDz/8MN999x0nT57E5XIxatQoqlSpQmhoKA0bNmT+/PlZt01NTaV///5UrFiRsLAwLrroIsaMGZPtvjOHOlSrVg2ARo0aERAQwNVXXw1k76K+/fbbVKpUCZfLla3Gjh07cu+992Ydf/HFFzRu3JiwsDCqV6/OM888Q3p6+nmfZ5EiRahQoQKVK1emXbt2/Oc//2HhwoVZ38/IyOC+++6jWrVqhIeHU6tWLV599dWs7z/99NNMmzaNL774Iqt7vHjxYgD27NnDnXfeSYkSJShVqhQdO3Zk165d561HRCSTgq+I+IXAwEBee+01fvvtN6ZNm8b333/PE088cc7ru3XrRpUqVfjll19Ys2YNgwcPJjg4GIDt27dzww03cPvtt/Prr78ye/Zsli5dSv/+/d2qKTw8HJfLRXp6Oq+++irjxo3jpZde4tdff6V9+/bceuut/PHHHwC89tprfPnll3z00Uds2bKFGTNmEBMTk+P9rlq1CoDvvvuO/fv38+mnn551zX/+8x/+/vtvfvjhh6xzhw4dYv78+XTr1g2An376iZ49e/LII4+wadMm3nrrLaZOncrzzz+f6+e4a9cuFixYQEhISNY5l8tFlSpVmDNnDps2bWLEiBEMHTqUjz76CIBBgwZx5513csMNN7B//372799Pq1atSEtLo3379hQvXpyffvqJZcuWUaxYMW644QZSU1NzXZOI+DEjIuIjevXqZYKCgkzRokWzPu64444cr50zZ44pXbp01vGUKVNMVFRU1nHx4sXN1KlTc7ztfffdZx544IFs53766ScTGBhoTp48meNtzrz/rVu3mpo1a5qmTZsaY4ypVKmSef7557PdplmzZqZv377GGGMGDBhg2rZta1wuV473D5jPPvvMGGPMzp07DWDWrVuX7ZpevXqZjh07Zh137NjR3HvvvVnHb731lqlUqZLJyMgwxhhz7bXXmtGjR2e7j+nTp5uKFSvmWIMxxowcOdIEBgaaokWLmrCwMAMYwLz88svnvI0xxvTr18/cfvvt56w187Fr1aqV7c8gJSXFhIeHmwULFpz3/kVEjDFGY3xFxKdcc801vPnmm1nHRYsWBWz3c8yYMfz+++8kJiaSnp5OcnIySUlJREREnHU/sbGx3H///UyfPj3r7foaNWoAdhjEr7/+yowZM7KuN8bgcrnYuXMnderUybG2o0ePUqxYMVwuF8nJyVxxxRW88847JCYm8ueff9K6dets17du3Zr169cDdpjCddddR61atbjhhhu45ZZbuP766y/oz6pbt2706dOHN954g9DQUGbMmMFdd91FYGBg1vNctmxZtg5vRkbGef/cAGrVqsWXX35JcnIyH3zwAXFxcQwYMCDbNRMnTuS9995j9+7dnDx5ktTUVBo2bHjeetevX8+2bdsoXrx4tvPJycls3749D38CIuJvFHxFxKcULVqUiy++ONu5Xbt2ccstt/DQQw/x/PPPU6pUKZYuXcp9991HampqjgHu6aefpmvXrsybN49vvvmGkSNHMmvWLDp16sTx48f573//y8MPP3zW7apWrXrO2ooXL87atWsJDAykYsWKhIeHA5CYmPivz6tx48bs3LmTb775hu+++44777yTdu3a8fHHH//rbc+lQ4cOGGOYN28ezZo146effuKVV17J+v7x48d55pln6Ny581m3DQsLO+f9hoSEZL0GL7zwAjfffDPPPPMMzz77LACzZs1i0KBBjBs3jpYtW1K8eHHGjh3Lzz//fN56jx8/TpMmTbL9wpGpsExgFJHCTcFXRHzemjVrcLlcjBs3LqubmTme9Hxq1qxJzZo1GThwIHfffTdTpkyhU6dONG7cmE2bNp0VsP9NYGBgjreJjIykUqVKLFu2jDZt2mSdX7ZsGc2bN892XZcuXejSpQt33HEHN9xwA4cOHaJUqVLZ7i9zPG1GRsZ56wkLC6Nz587MmDGDbdu2UatWLRo3bpz1/caNG7Nlyxa3n+eZhg8fTtu2bXnooYeynmerVq3o27dv1jVndmxDQkLOqr9x48bMnj2bcuXKERkZeUE1iYh/0uQ2EfF5F198MWlpaUyYMIEdO3Ywffp0Jk2adM7rT548Sf/+/Vm8eDH/+9//WLZsGb/88kvWEIYnn3yS5cuX079/f+Li4vjjjz/44osv3J7cdrrHH3+c//u//2P27Nls2bKFwYMHExcXxyOPPALAyy+/zIcffsjvv//O1q1bmTNnDhUqVMhx041y5coRHh7O/PnzOXDgAEePHj3n43br1o158+bx3nvvZU1qyzRixAjef/99nnnmGX777Tc2b97MrFmzGD58uFvPrWXLltSvX5/Ro0cDcMkll7B69WoWLFjA1q1beeqpp/jll1+y3SYmJoZff/2VLVu2kJCQQFpaGt26daNMmTJ07NiRn376iZ07d7J48WIefvhh9u7d61ZNIuKfFHxFxOc1aNCAl19+mf/7v/+jbt26zJgxI9tSYGcKCgri77//pmfPntSsWZM777yTG2+8kWeeeQaA+vXrs2TJErZu3cqVV15Jo0aNGDFiBJUqVcpzjQ8//DCxsbE89thj1KtXj/nz5/Pll19yySWXAHaYxIsvvkjTpk1p1qwZu3bt4uuvv87qYJ+uSJEivPbaa7z11ltUqlSJjh07nvNx27ZtS6lSpdiyZQtdu3bN9r327dvz1Vdf8e2339KsWTMuv/xyXnnlFS666CK3n9/AgQN555132LNnD//973/p3LkzXbp0oUWLFvz999/Zur8Affr0oVatWjRt2pSyZcuybNkyIiIi+PHHH6latSqdO3emTp063HfffSQnJ6sDLCK5EmCMMU4XISIiIiKS39TxFRERERG/oOArIiIiIn5BwVdERERE/IKCr4iIiIj4BQVfEREREfELCr4iIiIi4hcUfEVERETELyj4ioiIiIhfUPAVEREREb+g4CsiIiIifkHBV0RERET8wv8D8zUh+trmaZ4AAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import roc_curve, auc\n",
"# Calculate the false positive rate (FPR), true positive rate (TPR), and thresholds\n",
"fpr, tpr, thresholds = roc_curve(y_test, y_proba)\n",
"\n",
"# Calculate the area under the ROC curve (AUC)\n",
"roc_auc = auc(fpr, tpr)\n",
"\n",
"# Plot the ROC curve\n",
"plt.figure(figsize=(8, 6))\n",
"plt.plot(fpr, tpr, color='blue', label='ROC curve (area = %0.2f)' % roc_auc)\n",
"plt.plot([0, 1], [0, 1], color='red', linestyle='--')\n",
"plt.xlim([0.0, 1.0])\n",
"plt.ylim([0.0, 1.05])\n",
"plt.xlabel('False Positive Rate')\n",
"plt.ylabel('True Positive Rate')\n",
"plt.title('SVM')\n",
"plt.legend(loc='lower right')\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"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.9.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}