|
a |
|
b/project.ipynb |
|
|
1 |
{ |
|
|
2 |
"cells": [ |
|
|
3 |
{ |
|
|
4 |
"attachments": {}, |
|
|
5 |
"cell_type": "markdown", |
|
|
6 |
"metadata": {}, |
|
|
7 |
"source": [ |
|
|
8 |
"### Precision Medicine using Machine Learning " |
|
|
9 |
] |
|
|
10 |
}, |
|
|
11 |
{ |
|
|
12 |
"attachments": {}, |
|
|
13 |
"cell_type": "markdown", |
|
|
14 |
"metadata": {}, |
|
|
15 |
"source": [ |
|
|
16 |
"Once sequenced, a cancer tumor can have thousands of genetic mutations. The time-consuming challenging part is to classify those mutations as tumor growth(drivers) or neutral mutations(passengers). This is a time-consuming and challenging task currently done manually by clinicans based on text-based clinical literature. \n", |
|
|
17 |
"\n", |
|
|
18 |
"This project uses an expert-annotated knowledge base released by Memorial Sloan Kettering Cancer Center (MSKCC) containing thousands of manually annotated mutations by onclogists. \n", |
|
|
19 |
"\n", |
|
|
20 |
"Objective: We need your help to develop a Machine Learning algorithm that, using this knowledge base as a baseline, automatically classifies genetic variations." |
|
|
21 |
] |
|
|
22 |
}, |
|
|
23 |
{ |
|
|
24 |
"cell_type": "code", |
|
|
25 |
"execution_count": 1, |
|
|
26 |
"metadata": {}, |
|
|
27 |
"outputs": [], |
|
|
28 |
"source": [ |
|
|
29 |
"import numpy as np \n", |
|
|
30 |
"import pandas as pd\n", |
|
|
31 |
"import seaborn as sns\n", |
|
|
32 |
"import matplotlib.pyplot as plt\n", |
|
|
33 |
"import seaborn as sns\n", |
|
|
34 |
"import re\n", |
|
|
35 |
"#import warnings \n", |
|
|
36 |
"import math\n", |
|
|
37 |
"import nltk\n", |
|
|
38 |
"from nltk.corpus import stopwords" |
|
|
39 |
] |
|
|
40 |
}, |
|
|
41 |
{ |
|
|
42 |
"cell_type": "markdown", |
|
|
43 |
"metadata": {}, |
|
|
44 |
"source": [ |
|
|
45 |
"Step 1: Loading Data " |
|
|
46 |
] |
|
|
47 |
}, |
|
|
48 |
{ |
|
|
49 |
"cell_type": "code", |
|
|
50 |
"execution_count": 2, |
|
|
51 |
"metadata": {}, |
|
|
52 |
"outputs": [ |
|
|
53 |
{ |
|
|
54 |
"data": { |
|
|
55 |
"text/html": [ |
|
|
56 |
"<div>\n", |
|
|
57 |
"<style scoped>\n", |
|
|
58 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
59 |
" vertical-align: middle;\n", |
|
|
60 |
" }\n", |
|
|
61 |
"\n", |
|
|
62 |
" .dataframe tbody tr th {\n", |
|
|
63 |
" vertical-align: top;\n", |
|
|
64 |
" }\n", |
|
|
65 |
"\n", |
|
|
66 |
" .dataframe thead th {\n", |
|
|
67 |
" text-align: right;\n", |
|
|
68 |
" }\n", |
|
|
69 |
"</style>\n", |
|
|
70 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
71 |
" <thead>\n", |
|
|
72 |
" <tr style=\"text-align: right;\">\n", |
|
|
73 |
" <th></th>\n", |
|
|
74 |
" <th>ID</th>\n", |
|
|
75 |
" <th>Gene</th>\n", |
|
|
76 |
" <th>Variation</th>\n", |
|
|
77 |
" <th>Class</th>\n", |
|
|
78 |
" </tr>\n", |
|
|
79 |
" </thead>\n", |
|
|
80 |
" <tbody>\n", |
|
|
81 |
" <tr>\n", |
|
|
82 |
" <th>0</th>\n", |
|
|
83 |
" <td>0</td>\n", |
|
|
84 |
" <td>FAM58A</td>\n", |
|
|
85 |
" <td>Truncating Mutations</td>\n", |
|
|
86 |
" <td>1</td>\n", |
|
|
87 |
" </tr>\n", |
|
|
88 |
" <tr>\n", |
|
|
89 |
" <th>1</th>\n", |
|
|
90 |
" <td>1</td>\n", |
|
|
91 |
" <td>CBL</td>\n", |
|
|
92 |
" <td>W802*</td>\n", |
|
|
93 |
" <td>2</td>\n", |
|
|
94 |
" </tr>\n", |
|
|
95 |
" <tr>\n", |
|
|
96 |
" <th>2</th>\n", |
|
|
97 |
" <td>2</td>\n", |
|
|
98 |
" <td>CBL</td>\n", |
|
|
99 |
" <td>Q249E</td>\n", |
|
|
100 |
" <td>2</td>\n", |
|
|
101 |
" </tr>\n", |
|
|
102 |
" <tr>\n", |
|
|
103 |
" <th>3</th>\n", |
|
|
104 |
" <td>3</td>\n", |
|
|
105 |
" <td>CBL</td>\n", |
|
|
106 |
" <td>N454D</td>\n", |
|
|
107 |
" <td>3</td>\n", |
|
|
108 |
" </tr>\n", |
|
|
109 |
" <tr>\n", |
|
|
110 |
" <th>4</th>\n", |
|
|
111 |
" <td>4</td>\n", |
|
|
112 |
" <td>CBL</td>\n", |
|
|
113 |
" <td>L399V</td>\n", |
|
|
114 |
" <td>4</td>\n", |
|
|
115 |
" </tr>\n", |
|
|
116 |
" </tbody>\n", |
|
|
117 |
"</table>\n", |
|
|
118 |
"</div>" |
|
|
119 |
], |
|
|
120 |
"text/plain": [ |
|
|
121 |
" ID Gene Variation Class\n", |
|
|
122 |
"0 0 FAM58A Truncating Mutations 1\n", |
|
|
123 |
"1 1 CBL W802* 2\n", |
|
|
124 |
"2 2 CBL Q249E 2\n", |
|
|
125 |
"3 3 CBL N454D 3\n", |
|
|
126 |
"4 4 CBL L399V 4" |
|
|
127 |
] |
|
|
128 |
}, |
|
|
129 |
"execution_count": 2, |
|
|
130 |
"metadata": {}, |
|
|
131 |
"output_type": "execute_result" |
|
|
132 |
} |
|
|
133 |
], |
|
|
134 |
"source": [ |
|
|
135 |
"train_model_variants = pd.read_csv(r\"G:\\Shared drives\\Hack(Her)thon 2023 Project\\data\\training_variants\\training_variants\")\n", |
|
|
136 |
"train_model_variants.head()\n" |
|
|
137 |
] |
|
|
138 |
}, |
|
|
139 |
{ |
|
|
140 |
"cell_type": "code", |
|
|
141 |
"execution_count": 3, |
|
|
142 |
"metadata": {}, |
|
|
143 |
"outputs": [ |
|
|
144 |
{ |
|
|
145 |
"data": { |
|
|
146 |
"text/plain": [ |
|
|
147 |
"(3321, 4)" |
|
|
148 |
] |
|
|
149 |
}, |
|
|
150 |
"execution_count": 3, |
|
|
151 |
"metadata": {}, |
|
|
152 |
"output_type": "execute_result" |
|
|
153 |
} |
|
|
154 |
], |
|
|
155 |
"source": [ |
|
|
156 |
"train_model_variants.shape" |
|
|
157 |
] |
|
|
158 |
}, |
|
|
159 |
{ |
|
|
160 |
"cell_type": "code", |
|
|
161 |
"execution_count": 4, |
|
|
162 |
"metadata": {}, |
|
|
163 |
"outputs": [ |
|
|
164 |
{ |
|
|
165 |
"data": { |
|
|
166 |
"text/html": [ |
|
|
167 |
"<div>\n", |
|
|
168 |
"<style scoped>\n", |
|
|
169 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
170 |
" vertical-align: middle;\n", |
|
|
171 |
" }\n", |
|
|
172 |
"\n", |
|
|
173 |
" .dataframe tbody tr th {\n", |
|
|
174 |
" vertical-align: top;\n", |
|
|
175 |
" }\n", |
|
|
176 |
"\n", |
|
|
177 |
" .dataframe thead th {\n", |
|
|
178 |
" text-align: right;\n", |
|
|
179 |
" }\n", |
|
|
180 |
"</style>\n", |
|
|
181 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
182 |
" <thead>\n", |
|
|
183 |
" <tr style=\"text-align: right;\">\n", |
|
|
184 |
" <th></th>\n", |
|
|
185 |
" <th>ID</th>\n", |
|
|
186 |
" <th>Gene</th>\n", |
|
|
187 |
" <th>Variation</th>\n", |
|
|
188 |
" </tr>\n", |
|
|
189 |
" </thead>\n", |
|
|
190 |
" <tbody>\n", |
|
|
191 |
" <tr>\n", |
|
|
192 |
" <th>0</th>\n", |
|
|
193 |
" <td>0</td>\n", |
|
|
194 |
" <td>ACSL4</td>\n", |
|
|
195 |
" <td>R570S</td>\n", |
|
|
196 |
" </tr>\n", |
|
|
197 |
" <tr>\n", |
|
|
198 |
" <th>1</th>\n", |
|
|
199 |
" <td>1</td>\n", |
|
|
200 |
" <td>NAGLU</td>\n", |
|
|
201 |
" <td>P521L</td>\n", |
|
|
202 |
" </tr>\n", |
|
|
203 |
" <tr>\n", |
|
|
204 |
" <th>2</th>\n", |
|
|
205 |
" <td>2</td>\n", |
|
|
206 |
" <td>PAH</td>\n", |
|
|
207 |
" <td>L333F</td>\n", |
|
|
208 |
" </tr>\n", |
|
|
209 |
" <tr>\n", |
|
|
210 |
" <th>3</th>\n", |
|
|
211 |
" <td>3</td>\n", |
|
|
212 |
" <td>ING1</td>\n", |
|
|
213 |
" <td>A148D</td>\n", |
|
|
214 |
" </tr>\n", |
|
|
215 |
" <tr>\n", |
|
|
216 |
" <th>4</th>\n", |
|
|
217 |
" <td>4</td>\n", |
|
|
218 |
" <td>TMEM216</td>\n", |
|
|
219 |
" <td>G77A</td>\n", |
|
|
220 |
" </tr>\n", |
|
|
221 |
" </tbody>\n", |
|
|
222 |
"</table>\n", |
|
|
223 |
"</div>" |
|
|
224 |
], |
|
|
225 |
"text/plain": [ |
|
|
226 |
" ID Gene Variation\n", |
|
|
227 |
"0 0 ACSL4 R570S\n", |
|
|
228 |
"1 1 NAGLU P521L\n", |
|
|
229 |
"2 2 PAH L333F\n", |
|
|
230 |
"3 3 ING1 A148D\n", |
|
|
231 |
"4 4 TMEM216 G77A" |
|
|
232 |
] |
|
|
233 |
}, |
|
|
234 |
"execution_count": 4, |
|
|
235 |
"metadata": {}, |
|
|
236 |
"output_type": "execute_result" |
|
|
237 |
} |
|
|
238 |
], |
|
|
239 |
"source": [ |
|
|
240 |
"test_variants = pd.read_csv(r\"G:\\Shared drives\\Hack(Her)thon 2023 Project\\data\\test_variants\\test_variants\")\n", |
|
|
241 |
"test_variants.head()" |
|
|
242 |
] |
|
|
243 |
}, |
|
|
244 |
{ |
|
|
245 |
"cell_type": "code", |
|
|
246 |
"execution_count": 5, |
|
|
247 |
"metadata": {}, |
|
|
248 |
"outputs": [ |
|
|
249 |
{ |
|
|
250 |
"data": { |
|
|
251 |
"text/plain": [ |
|
|
252 |
"(5668, 3)" |
|
|
253 |
] |
|
|
254 |
}, |
|
|
255 |
"execution_count": 5, |
|
|
256 |
"metadata": {}, |
|
|
257 |
"output_type": "execute_result" |
|
|
258 |
} |
|
|
259 |
], |
|
|
260 |
"source": [ |
|
|
261 |
"test_variants.shape" |
|
|
262 |
] |
|
|
263 |
}, |
|
|
264 |
{ |
|
|
265 |
"cell_type": "code", |
|
|
266 |
"execution_count": 6, |
|
|
267 |
"metadata": {}, |
|
|
268 |
"outputs": [ |
|
|
269 |
{ |
|
|
270 |
"data": { |
|
|
271 |
"text/html": [ |
|
|
272 |
"<div>\n", |
|
|
273 |
"<style scoped>\n", |
|
|
274 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
275 |
" vertical-align: middle;\n", |
|
|
276 |
" }\n", |
|
|
277 |
"\n", |
|
|
278 |
" .dataframe tbody tr th {\n", |
|
|
279 |
" vertical-align: top;\n", |
|
|
280 |
" }\n", |
|
|
281 |
"\n", |
|
|
282 |
" .dataframe thead th {\n", |
|
|
283 |
" text-align: right;\n", |
|
|
284 |
" }\n", |
|
|
285 |
"</style>\n", |
|
|
286 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
287 |
" <thead>\n", |
|
|
288 |
" <tr style=\"text-align: right;\">\n", |
|
|
289 |
" <th></th>\n", |
|
|
290 |
" <th>ID</th>\n", |
|
|
291 |
" <th>Text</th>\n", |
|
|
292 |
" </tr>\n", |
|
|
293 |
" </thead>\n", |
|
|
294 |
" <tbody>\n", |
|
|
295 |
" <tr>\n", |
|
|
296 |
" <th>0</th>\n", |
|
|
297 |
" <td>0</td>\n", |
|
|
298 |
" <td>Cyclin-dependent kinases (CDKs) regulate a var...</td>\n", |
|
|
299 |
" </tr>\n", |
|
|
300 |
" <tr>\n", |
|
|
301 |
" <th>1</th>\n", |
|
|
302 |
" <td>1</td>\n", |
|
|
303 |
" <td>Abstract Background Non-small cell lung canc...</td>\n", |
|
|
304 |
" </tr>\n", |
|
|
305 |
" <tr>\n", |
|
|
306 |
" <th>2</th>\n", |
|
|
307 |
" <td>2</td>\n", |
|
|
308 |
" <td>Abstract Background Non-small cell lung canc...</td>\n", |
|
|
309 |
" </tr>\n", |
|
|
310 |
" <tr>\n", |
|
|
311 |
" <th>3</th>\n", |
|
|
312 |
" <td>3</td>\n", |
|
|
313 |
" <td>Recent evidence has demonstrated that acquired...</td>\n", |
|
|
314 |
" </tr>\n", |
|
|
315 |
" <tr>\n", |
|
|
316 |
" <th>4</th>\n", |
|
|
317 |
" <td>4</td>\n", |
|
|
318 |
" <td>Oncogenic mutations in the monomeric Casitas B...</td>\n", |
|
|
319 |
" </tr>\n", |
|
|
320 |
" </tbody>\n", |
|
|
321 |
"</table>\n", |
|
|
322 |
"</div>" |
|
|
323 |
], |
|
|
324 |
"text/plain": [ |
|
|
325 |
" ID Text\n", |
|
|
326 |
"0 0 Cyclin-dependent kinases (CDKs) regulate a var...\n", |
|
|
327 |
"1 1 Abstract Background Non-small cell lung canc...\n", |
|
|
328 |
"2 2 Abstract Background Non-small cell lung canc...\n", |
|
|
329 |
"3 3 Recent evidence has demonstrated that acquired...\n", |
|
|
330 |
"4 4 Oncogenic mutations in the monomeric Casitas B..." |
|
|
331 |
] |
|
|
332 |
}, |
|
|
333 |
"execution_count": 6, |
|
|
334 |
"metadata": {}, |
|
|
335 |
"output_type": "execute_result" |
|
|
336 |
} |
|
|
337 |
], |
|
|
338 |
"source": [ |
|
|
339 |
"train_model_text = pd.read_csv(r\"G:\\Shared drives\\Hack(Her)thon 2023 Project\\data\\training_text\\training_text\", sep=\"\\|\\|\", names=[\"ID\", \"Text\"], skiprows=1, engine=\"python\", encoding=\"latin-1\")\n", |
|
|
340 |
"train_model_text.head()\n" |
|
|
341 |
] |
|
|
342 |
}, |
|
|
343 |
{ |
|
|
344 |
"cell_type": "code", |
|
|
345 |
"execution_count": 7, |
|
|
346 |
"metadata": {}, |
|
|
347 |
"outputs": [ |
|
|
348 |
{ |
|
|
349 |
"data": { |
|
|
350 |
"text/html": [ |
|
|
351 |
"<div>\n", |
|
|
352 |
"<style scoped>\n", |
|
|
353 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
354 |
" vertical-align: middle;\n", |
|
|
355 |
" }\n", |
|
|
356 |
"\n", |
|
|
357 |
" .dataframe tbody tr th {\n", |
|
|
358 |
" vertical-align: top;\n", |
|
|
359 |
" }\n", |
|
|
360 |
"\n", |
|
|
361 |
" .dataframe thead th {\n", |
|
|
362 |
" text-align: right;\n", |
|
|
363 |
" }\n", |
|
|
364 |
"</style>\n", |
|
|
365 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
366 |
" <thead>\n", |
|
|
367 |
" <tr style=\"text-align: right;\">\n", |
|
|
368 |
" <th></th>\n", |
|
|
369 |
" <th>ID</th>\n", |
|
|
370 |
" <th>Text</th>\n", |
|
|
371 |
" </tr>\n", |
|
|
372 |
" </thead>\n", |
|
|
373 |
" <tbody>\n", |
|
|
374 |
" <tr>\n", |
|
|
375 |
" <th>0</th>\n", |
|
|
376 |
" <td>0</td>\n", |
|
|
377 |
" <td>2. This mutation resulted in a myeloproliferat...</td>\n", |
|
|
378 |
" </tr>\n", |
|
|
379 |
" <tr>\n", |
|
|
380 |
" <th>1</th>\n", |
|
|
381 |
" <td>1</td>\n", |
|
|
382 |
" <td>Abstract The Large Tumor Suppressor 1 (LATS1)...</td>\n", |
|
|
383 |
" </tr>\n", |
|
|
384 |
" <tr>\n", |
|
|
385 |
" <th>2</th>\n", |
|
|
386 |
" <td>2</td>\n", |
|
|
387 |
" <td>Vascular endothelial growth factor receptor (V...</td>\n", |
|
|
388 |
" </tr>\n", |
|
|
389 |
" <tr>\n", |
|
|
390 |
" <th>3</th>\n", |
|
|
391 |
" <td>3</td>\n", |
|
|
392 |
" <td>Inflammatory myofibroblastic tumor (IMT) is a ...</td>\n", |
|
|
393 |
" </tr>\n", |
|
|
394 |
" <tr>\n", |
|
|
395 |
" <th>4</th>\n", |
|
|
396 |
" <td>4</td>\n", |
|
|
397 |
" <td>Abstract Retinoblastoma is a pediatric retina...</td>\n", |
|
|
398 |
" </tr>\n", |
|
|
399 |
" </tbody>\n", |
|
|
400 |
"</table>\n", |
|
|
401 |
"</div>" |
|
|
402 |
], |
|
|
403 |
"text/plain": [ |
|
|
404 |
" ID Text\n", |
|
|
405 |
"0 0 2. This mutation resulted in a myeloproliferat...\n", |
|
|
406 |
"1 1 Abstract The Large Tumor Suppressor 1 (LATS1)...\n", |
|
|
407 |
"2 2 Vascular endothelial growth factor receptor (V...\n", |
|
|
408 |
"3 3 Inflammatory myofibroblastic tumor (IMT) is a ...\n", |
|
|
409 |
"4 4 Abstract Retinoblastoma is a pediatric retina..." |
|
|
410 |
] |
|
|
411 |
}, |
|
|
412 |
"execution_count": 7, |
|
|
413 |
"metadata": {}, |
|
|
414 |
"output_type": "execute_result" |
|
|
415 |
} |
|
|
416 |
], |
|
|
417 |
"source": [ |
|
|
418 |
"test_text = pd.read_csv(r\"G:\\Shared drives\\Hack(Her)thon 2023 Project\\data\\test_text\\test_text\", sep=\"\\|\\|\", names=[\"ID\", \"Text\"], skiprows=1, engine=\"python\", encoding=\"latin-1\")\n", |
|
|
419 |
"test_text.head()" |
|
|
420 |
] |
|
|
421 |
}, |
|
|
422 |
{ |
|
|
423 |
"cell_type": "code", |
|
|
424 |
"execution_count": 8, |
|
|
425 |
"metadata": {}, |
|
|
426 |
"outputs": [ |
|
|
427 |
{ |
|
|
428 |
"name": "stderr", |
|
|
429 |
"output_type": "stream", |
|
|
430 |
"text": [ |
|
|
431 |
"[nltk_data] Downloading package stopwords to\n", |
|
|
432 |
"[nltk_data] C:\\Users\\chawl\\AppData\\Roaming\\nltk_data...\n", |
|
|
433 |
"[nltk_data] Package stopwords is already up-to-date!\n" |
|
|
434 |
] |
|
|
435 |
} |
|
|
436 |
], |
|
|
437 |
"source": [ |
|
|
438 |
"#right not the training_text's 'TEXT' column needs cleaning so that it can be processed to look for data that indicates cancerous class\n", |
|
|
439 |
"\n", |
|
|
440 |
"#loading stop words from nltk library \n", |
|
|
441 |
"nltk.download('stopwords')\n", |
|
|
442 |
"stop_words = set(stopwords.words('english'))\n", |
|
|
443 |
"\n", |
|
|
444 |
"def cleaning_text(full_text, index, column):\n", |
|
|
445 |
" if type(full_text) is not str:\n", |
|
|
446 |
" full_text = str(full_text)\n", |
|
|
447 |
" \n", |
|
|
448 |
" new_text = \"\"\n", |
|
|
449 |
" empty_string = ' '\n", |
|
|
450 |
" full_text = re.sub('[^a-zA-Z0-9\\n]', empty_string, full_text)\n", |
|
|
451 |
" full_text = re.sub('\\s+', empty_string, full_text)\n", |
|
|
452 |
" full_text = full_text.lower()\n", |
|
|
453 |
"\n", |
|
|
454 |
" for word in full_text.split():\n", |
|
|
455 |
" if not word in stop_words:\n", |
|
|
456 |
" new_text += word + \" \"\n", |
|
|
457 |
" \n", |
|
|
458 |
" train_model_text[column][index] = new_text" |
|
|
459 |
] |
|
|
460 |
}, |
|
|
461 |
{ |
|
|
462 |
"cell_type": "code", |
|
|
463 |
"execution_count": 9, |
|
|
464 |
"metadata": {}, |
|
|
465 |
"outputs": [ |
|
|
466 |
{ |
|
|
467 |
"name": "stderr", |
|
|
468 |
"output_type": "stream", |
|
|
469 |
"text": [ |
|
|
470 |
"C:\\Users\\chawl\\AppData\\Local\\Temp\\ipykernel_21704\\3679951068.py:21: SettingWithCopyWarning: \n", |
|
|
471 |
"A value is trying to be set on a copy of a slice from a DataFrame\n", |
|
|
472 |
"\n", |
|
|
473 |
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", |
|
|
474 |
" train_model_text[column][index] = new_text\n" |
|
|
475 |
] |
|
|
476 |
}, |
|
|
477 |
{ |
|
|
478 |
"data": { |
|
|
479 |
"text/plain": [ |
|
|
480 |
"str" |
|
|
481 |
] |
|
|
482 |
}, |
|
|
483 |
"execution_count": 9, |
|
|
484 |
"metadata": {}, |
|
|
485 |
"output_type": "execute_result" |
|
|
486 |
} |
|
|
487 |
], |
|
|
488 |
"source": [ |
|
|
489 |
"#column 1109 in 'Text' created issues because it was null. And initial type float\n", |
|
|
490 |
"cleaning_text(train_model_text['Text'][1109], 1109, 'Text')\n", |
|
|
491 |
"type(train_model_text['Text'][1109])" |
|
|
492 |
] |
|
|
493 |
}, |
|
|
494 |
{ |
|
|
495 |
"cell_type": "code", |
|
|
496 |
"execution_count": 10, |
|
|
497 |
"metadata": {}, |
|
|
498 |
"outputs": [ |
|
|
499 |
{ |
|
|
500 |
"name": "stderr", |
|
|
501 |
"output_type": "stream", |
|
|
502 |
"text": [ |
|
|
503 |
"C:\\Users\\chawl\\AppData\\Local\\Temp\\ipykernel_21704\\3679951068.py:21: SettingWithCopyWarning: \n", |
|
|
504 |
"A value is trying to be set on a copy of a slice from a DataFrame\n", |
|
|
505 |
"\n", |
|
|
506 |
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", |
|
|
507 |
" train_model_text[column][index] = new_text\n" |
|
|
508 |
] |
|
|
509 |
} |
|
|
510 |
], |
|
|
511 |
"source": [ |
|
|
512 |
"#processing all the text in the training set\n", |
|
|
513 |
"\n", |
|
|
514 |
"for index, row in train_model_text.iterrows():\n", |
|
|
515 |
" cleaning_text(row['Text'], index, 'Text')" |
|
|
516 |
] |
|
|
517 |
}, |
|
|
518 |
{ |
|
|
519 |
"cell_type": "code", |
|
|
520 |
"execution_count": 11, |
|
|
521 |
"metadata": {}, |
|
|
522 |
"outputs": [ |
|
|
523 |
{ |
|
|
524 |
"data": { |
|
|
525 |
"text/html": [ |
|
|
526 |
"<div>\n", |
|
|
527 |
"<style scoped>\n", |
|
|
528 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
529 |
" vertical-align: middle;\n", |
|
|
530 |
" }\n", |
|
|
531 |
"\n", |
|
|
532 |
" .dataframe tbody tr th {\n", |
|
|
533 |
" vertical-align: top;\n", |
|
|
534 |
" }\n", |
|
|
535 |
"\n", |
|
|
536 |
" .dataframe thead th {\n", |
|
|
537 |
" text-align: right;\n", |
|
|
538 |
" }\n", |
|
|
539 |
"</style>\n", |
|
|
540 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
541 |
" <thead>\n", |
|
|
542 |
" <tr style=\"text-align: right;\">\n", |
|
|
543 |
" <th></th>\n", |
|
|
544 |
" <th>ID</th>\n", |
|
|
545 |
" <th>Gene</th>\n", |
|
|
546 |
" <th>Variation</th>\n", |
|
|
547 |
" <th>Class</th>\n", |
|
|
548 |
" <th>Text</th>\n", |
|
|
549 |
" </tr>\n", |
|
|
550 |
" </thead>\n", |
|
|
551 |
" <tbody>\n", |
|
|
552 |
" <tr>\n", |
|
|
553 |
" <th>0</th>\n", |
|
|
554 |
" <td>0</td>\n", |
|
|
555 |
" <td>FAM58A</td>\n", |
|
|
556 |
" <td>Truncating Mutations</td>\n", |
|
|
557 |
" <td>1</td>\n", |
|
|
558 |
" <td>cyclin dependent kinases cdks regulate variety...</td>\n", |
|
|
559 |
" </tr>\n", |
|
|
560 |
" <tr>\n", |
|
|
561 |
" <th>1</th>\n", |
|
|
562 |
" <td>1</td>\n", |
|
|
563 |
" <td>CBL</td>\n", |
|
|
564 |
" <td>W802*</td>\n", |
|
|
565 |
" <td>2</td>\n", |
|
|
566 |
" <td>abstract background non small cell lung cancer...</td>\n", |
|
|
567 |
" </tr>\n", |
|
|
568 |
" <tr>\n", |
|
|
569 |
" <th>2</th>\n", |
|
|
570 |
" <td>2</td>\n", |
|
|
571 |
" <td>CBL</td>\n", |
|
|
572 |
" <td>Q249E</td>\n", |
|
|
573 |
" <td>2</td>\n", |
|
|
574 |
" <td>abstract background non small cell lung cancer...</td>\n", |
|
|
575 |
" </tr>\n", |
|
|
576 |
" <tr>\n", |
|
|
577 |
" <th>3</th>\n", |
|
|
578 |
" <td>3</td>\n", |
|
|
579 |
" <td>CBL</td>\n", |
|
|
580 |
" <td>N454D</td>\n", |
|
|
581 |
" <td>3</td>\n", |
|
|
582 |
" <td>recent evidence demonstrated acquired uniparen...</td>\n", |
|
|
583 |
" </tr>\n", |
|
|
584 |
" <tr>\n", |
|
|
585 |
" <th>4</th>\n", |
|
|
586 |
" <td>4</td>\n", |
|
|
587 |
" <td>CBL</td>\n", |
|
|
588 |
" <td>L399V</td>\n", |
|
|
589 |
" <td>4</td>\n", |
|
|
590 |
" <td>oncogenic mutations monomeric casitas b lineag...</td>\n", |
|
|
591 |
" </tr>\n", |
|
|
592 |
" </tbody>\n", |
|
|
593 |
"</table>\n", |
|
|
594 |
"</div>" |
|
|
595 |
], |
|
|
596 |
"text/plain": [ |
|
|
597 |
" ID Gene Variation Class \\\n", |
|
|
598 |
"0 0 FAM58A Truncating Mutations 1 \n", |
|
|
599 |
"1 1 CBL W802* 2 \n", |
|
|
600 |
"2 2 CBL Q249E 2 \n", |
|
|
601 |
"3 3 CBL N454D 3 \n", |
|
|
602 |
"4 4 CBL L399V 4 \n", |
|
|
603 |
"\n", |
|
|
604 |
" Text \n", |
|
|
605 |
"0 cyclin dependent kinases cdks regulate variety... \n", |
|
|
606 |
"1 abstract background non small cell lung cancer... \n", |
|
|
607 |
"2 abstract background non small cell lung cancer... \n", |
|
|
608 |
"3 recent evidence demonstrated acquired uniparen... \n", |
|
|
609 |
"4 oncogenic mutations monomeric casitas b lineag... " |
|
|
610 |
] |
|
|
611 |
}, |
|
|
612 |
"execution_count": 11, |
|
|
613 |
"metadata": {}, |
|
|
614 |
"output_type": "execute_result" |
|
|
615 |
} |
|
|
616 |
], |
|
|
617 |
"source": [ |
|
|
618 |
"#Merging Training Text and Training Variants\n", |
|
|
619 |
"training_dataframe = pd.merge(train_model_variants, train_model_text, on = \"ID\")\n", |
|
|
620 |
"training_dataframe.head()\n" |
|
|
621 |
] |
|
|
622 |
}, |
|
|
623 |
{ |
|
|
624 |
"cell_type": "code", |
|
|
625 |
"execution_count": 12, |
|
|
626 |
"metadata": {}, |
|
|
627 |
"outputs": [ |
|
|
628 |
{ |
|
|
629 |
"data": { |
|
|
630 |
"text/html": [ |
|
|
631 |
"<div>\n", |
|
|
632 |
"<style scoped>\n", |
|
|
633 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
634 |
" vertical-align: middle;\n", |
|
|
635 |
" }\n", |
|
|
636 |
"\n", |
|
|
637 |
" .dataframe tbody tr th {\n", |
|
|
638 |
" vertical-align: top;\n", |
|
|
639 |
" }\n", |
|
|
640 |
"\n", |
|
|
641 |
" .dataframe thead th {\n", |
|
|
642 |
" text-align: right;\n", |
|
|
643 |
" }\n", |
|
|
644 |
"</style>\n", |
|
|
645 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
646 |
" <thead>\n", |
|
|
647 |
" <tr style=\"text-align: right;\">\n", |
|
|
648 |
" <th></th>\n", |
|
|
649 |
" <th>ID</th>\n", |
|
|
650 |
" <th>Gene</th>\n", |
|
|
651 |
" <th>Variation</th>\n", |
|
|
652 |
" <th>Text</th>\n", |
|
|
653 |
" </tr>\n", |
|
|
654 |
" </thead>\n", |
|
|
655 |
" <tbody>\n", |
|
|
656 |
" <tr>\n", |
|
|
657 |
" <th>0</th>\n", |
|
|
658 |
" <td>0</td>\n", |
|
|
659 |
" <td>ACSL4</td>\n", |
|
|
660 |
" <td>R570S</td>\n", |
|
|
661 |
" <td>2. This mutation resulted in a myeloproliferat...</td>\n", |
|
|
662 |
" </tr>\n", |
|
|
663 |
" <tr>\n", |
|
|
664 |
" <th>1</th>\n", |
|
|
665 |
" <td>1</td>\n", |
|
|
666 |
" <td>NAGLU</td>\n", |
|
|
667 |
" <td>P521L</td>\n", |
|
|
668 |
" <td>Abstract The Large Tumor Suppressor 1 (LATS1)...</td>\n", |
|
|
669 |
" </tr>\n", |
|
|
670 |
" <tr>\n", |
|
|
671 |
" <th>2</th>\n", |
|
|
672 |
" <td>2</td>\n", |
|
|
673 |
" <td>PAH</td>\n", |
|
|
674 |
" <td>L333F</td>\n", |
|
|
675 |
" <td>Vascular endothelial growth factor receptor (V...</td>\n", |
|
|
676 |
" </tr>\n", |
|
|
677 |
" <tr>\n", |
|
|
678 |
" <th>3</th>\n", |
|
|
679 |
" <td>3</td>\n", |
|
|
680 |
" <td>ING1</td>\n", |
|
|
681 |
" <td>A148D</td>\n", |
|
|
682 |
" <td>Inflammatory myofibroblastic tumor (IMT) is a ...</td>\n", |
|
|
683 |
" </tr>\n", |
|
|
684 |
" <tr>\n", |
|
|
685 |
" <th>4</th>\n", |
|
|
686 |
" <td>4</td>\n", |
|
|
687 |
" <td>TMEM216</td>\n", |
|
|
688 |
" <td>G77A</td>\n", |
|
|
689 |
" <td>Abstract Retinoblastoma is a pediatric retina...</td>\n", |
|
|
690 |
" </tr>\n", |
|
|
691 |
" </tbody>\n", |
|
|
692 |
"</table>\n", |
|
|
693 |
"</div>" |
|
|
694 |
], |
|
|
695 |
"text/plain": [ |
|
|
696 |
" ID Gene Variation Text\n", |
|
|
697 |
"0 0 ACSL4 R570S 2. This mutation resulted in a myeloproliferat...\n", |
|
|
698 |
"1 1 NAGLU P521L Abstract The Large Tumor Suppressor 1 (LATS1)...\n", |
|
|
699 |
"2 2 PAH L333F Vascular endothelial growth factor receptor (V...\n", |
|
|
700 |
"3 3 ING1 A148D Inflammatory myofibroblastic tumor (IMT) is a ...\n", |
|
|
701 |
"4 4 TMEM216 G77A Abstract Retinoblastoma is a pediatric retina..." |
|
|
702 |
] |
|
|
703 |
}, |
|
|
704 |
"execution_count": 12, |
|
|
705 |
"metadata": {}, |
|
|
706 |
"output_type": "execute_result" |
|
|
707 |
} |
|
|
708 |
], |
|
|
709 |
"source": [ |
|
|
710 |
"test_dataframe = pd.merge(test_variants, test_text, on = \"ID\")\n", |
|
|
711 |
"test_dataframe.head()" |
|
|
712 |
] |
|
|
713 |
}, |
|
|
714 |
{ |
|
|
715 |
"cell_type": "code", |
|
|
716 |
"execution_count": 13, |
|
|
717 |
"metadata": {}, |
|
|
718 |
"outputs": [ |
|
|
719 |
{ |
|
|
720 |
"name": "stderr", |
|
|
721 |
"output_type": "stream", |
|
|
722 |
"text": [ |
|
|
723 |
"C:\\Users\\chawl\\AppData\\Local\\Temp\\ipykernel_21704\\736478266.py:2: FutureWarning: The default value of regex will change from True to False in a future version.\n", |
|
|
724 |
" training_dataframe.Variation= training_dataframe.Variation.str.replace('\\s+', '_')\n" |
|
|
725 |
] |
|
|
726 |
} |
|
|
727 |
], |
|
|
728 |
"source": [ |
|
|
729 |
"#fixing the variation column \n", |
|
|
730 |
"training_dataframe.Variation= training_dataframe.Variation.str.replace('\\s+', '_')" |
|
|
731 |
] |
|
|
732 |
}, |
|
|
733 |
{ |
|
|
734 |
"attachments": {}, |
|
|
735 |
"cell_type": "markdown", |
|
|
736 |
"metadata": {}, |
|
|
737 |
"source": [ |
|
|
738 |
"Step 2: Splitting the dataset for Training, Validation and Testing" |
|
|
739 |
] |
|
|
740 |
}, |
|
|
741 |
{ |
|
|
742 |
"cell_type": "code", |
|
|
743 |
"execution_count": 14, |
|
|
744 |
"metadata": {}, |
|
|
745 |
"outputs": [], |
|
|
746 |
"source": [ |
|
|
747 |
"from sklearn.model_selection import train_test_split" |
|
|
748 |
] |
|
|
749 |
}, |
|
|
750 |
{ |
|
|
751 |
"cell_type": "code", |
|
|
752 |
"execution_count": 15, |
|
|
753 |
"metadata": {}, |
|
|
754 |
"outputs": [], |
|
|
755 |
"source": [ |
|
|
756 |
"#split the class column from the dataframe since we are trying to predict it\n", |
|
|
757 |
"X = training_dataframe.copy()\n", |
|
|
758 |
"y = training_dataframe['Class'].values\n", |
|
|
759 |
"\n", |
|
|
760 |
"X_train, X_rem, y_train, y_rem = train_test_split(X, y, train_size = 0.8)\n", |
|
|
761 |
"\n", |
|
|
762 |
"X_vaildation, X_test, y_validation, y_test = train_test_split(X_rem, y_rem, test_size=0.5)" |
|
|
763 |
] |
|
|
764 |
}, |
|
|
765 |
{ |
|
|
766 |
"cell_type": "code", |
|
|
767 |
"execution_count": 16, |
|
|
768 |
"metadata": {}, |
|
|
769 |
"outputs": [ |
|
|
770 |
{ |
|
|
771 |
"name": "stdout", |
|
|
772 |
"output_type": "stream", |
|
|
773 |
"text": [ |
|
|
774 |
"Number of records in training set: (2656, 5)\n", |
|
|
775 |
"Number of records in Cross validation set: (332, 5)\n", |
|
|
776 |
"Number of records in testing set: (333, 5)\n" |
|
|
777 |
] |
|
|
778 |
} |
|
|
779 |
], |
|
|
780 |
"source": [ |
|
|
781 |
"print(\"Number of records in training set:\", X_train.shape)\n", |
|
|
782 |
"print(\"Number of records in Cross validation set:\", X_vaildation.shape)\n", |
|
|
783 |
"print(\"Number of records in testing set:\", X_test.shape)\n" |
|
|
784 |
] |
|
|
785 |
}, |
|
|
786 |
{ |
|
|
787 |
"cell_type": "code", |
|
|
788 |
"execution_count": 17, |
|
|
789 |
"metadata": {}, |
|
|
790 |
"outputs": [ |
|
|
791 |
{ |
|
|
792 |
"name": "stdout", |
|
|
793 |
"output_type": "stream", |
|
|
794 |
"text": [ |
|
|
795 |
"Counter({7: 768, 4: 549, 1: 443, 2: 361, 6: 219, 5: 196, 3: 77, 9: 27, 8: 16})\n" |
|
|
796 |
] |
|
|
797 |
} |
|
|
798 |
], |
|
|
799 |
"source": [ |
|
|
800 |
"import collections\n", |
|
|
801 |
"from collections import Counter\n", |
|
|
802 |
"z_train = y_train.tolist()\n", |
|
|
803 |
"d_train = Counter(z_train)\n", |
|
|
804 |
"print(d_train)" |
|
|
805 |
] |
|
|
806 |
}, |
|
|
807 |
{ |
|
|
808 |
"cell_type": "code", |
|
|
809 |
"execution_count": 18, |
|
|
810 |
"metadata": {}, |
|
|
811 |
"outputs": [ |
|
|
812 |
{ |
|
|
813 |
"name": "stdout", |
|
|
814 |
"output_type": "stream", |
|
|
815 |
"text": [ |
|
|
816 |
"Counter({7: 28.91566265060241, 4: 20.670180722891565, 1: 16.67921686746988, 2: 13.591867469879517, 6: 8.245481927710843, 5: 7.379518072289157, 3: 2.8990963855421685, 9: 1.016566265060241, 8: 0.6024096385542169})\n", |
|
|
817 |
"<class 'collections.Counter'>\n", |
|
|
818 |
"Counter({7: 29.518072289156628, 1: 20.783132530120483, 4: 18.97590361445783, 2: 13.55421686746988, 5: 7.530120481927711, 6: 6.927710843373494, 3: 1.8072289156626506, 9: 0.6024096385542169, 8: 0.30120481927710846})\n", |
|
|
819 |
"Counter({7: 26.126126126126128, 4: 22.22222222222222, 1: 16.816816816816818, 2: 13.813813813813814, 6: 9.90990990990991, 5: 6.306306306306307, 9: 2.4024024024024024, 3: 1.8018018018018018, 8: 0.6006006006006006})\n" |
|
|
820 |
] |
|
|
821 |
} |
|
|
822 |
], |
|
|
823 |
"source": [ |
|
|
824 |
"\n", |
|
|
825 |
"s = sum(d_train.values())\n", |
|
|
826 |
"for k,v in d_train.items():\n", |
|
|
827 |
" pct = v* 100.0/s\n", |
|
|
828 |
" d_train[k] = pct\n", |
|
|
829 |
"print(d_train)\n", |
|
|
830 |
"print(type(d_train))\n", |
|
|
831 |
"#print(d.values())\n", |
|
|
832 |
"\n", |
|
|
833 |
"z_cv = y_validation.tolist()\n", |
|
|
834 |
"d_cv = Counter(z_cv)\n", |
|
|
835 |
"s2 = sum(d_cv.values())\n", |
|
|
836 |
"for k,v in d_cv.items():\n", |
|
|
837 |
" pct = v* 100.0/s2\n", |
|
|
838 |
" d_cv[k] = pct\n", |
|
|
839 |
"print(d_cv)\n", |
|
|
840 |
"\n", |
|
|
841 |
"\n", |
|
|
842 |
"z_testing = y_test.tolist()\n", |
|
|
843 |
"d_testing = Counter(z_testing)\n", |
|
|
844 |
"\n", |
|
|
845 |
"s3 = sum(d_testing.values())\n", |
|
|
846 |
"for k,v in d_testing.items():\n", |
|
|
847 |
" pct = v* 100.0/s3\n", |
|
|
848 |
" d_testing[k] = pct\n", |
|
|
849 |
"print(d_testing)" |
|
|
850 |
] |
|
|
851 |
}, |
|
|
852 |
{ |
|
|
853 |
"cell_type": "code", |
|
|
854 |
"execution_count": 19, |
|
|
855 |
"metadata": {}, |
|
|
856 |
"outputs": [ |
|
|
857 |
{ |
|
|
858 |
"data": { |
|
|
859 |
"image/png": "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", |
|
|
860 |
"text/plain": [ |
|
|
861 |
"<Figure size 300x300 with 1 Axes>" |
|
|
862 |
] |
|
|
863 |
}, |
|
|
864 |
"metadata": {}, |
|
|
865 |
"output_type": "display_data" |
|
|
866 |
}, |
|
|
867 |
{ |
|
|
868 |
"data": { |
|
|
869 |
"image/png": "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", |
|
|
870 |
"text/plain": [ |
|
|
871 |
"<Figure size 300x300 with 1 Axes>" |
|
|
872 |
] |
|
|
873 |
}, |
|
|
874 |
"metadata": {}, |
|
|
875 |
"output_type": "display_data" |
|
|
876 |
}, |
|
|
877 |
{ |
|
|
878 |
"data": { |
|
|
879 |
"image/png": "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", |
|
|
880 |
"text/plain": [ |
|
|
881 |
"<Figure size 300x300 with 1 Axes>" |
|
|
882 |
] |
|
|
883 |
}, |
|
|
884 |
"metadata": {}, |
|
|
885 |
"output_type": "display_data" |
|
|
886 |
} |
|
|
887 |
], |
|
|
888 |
"source": [ |
|
|
889 |
"#Distribution of classes across all 3 datsets: Training, cross validation and testing should be fair \n", |
|
|
890 |
"\n", |
|
|
891 |
"#1. training\n", |
|
|
892 |
"fig_train = plt.figure(figsize=(3,3))\n", |
|
|
893 |
"plt.bar(d_train.keys(), d_train.values(), color = 'pink', width = 0.5)\n", |
|
|
894 |
"plt.xlabel(\"Classes\")\n", |
|
|
895 |
"plt.ylabel(\"Total cases\")\n", |
|
|
896 |
"plt.title(\"Distribution of classes in the Training DataSet\")\n", |
|
|
897 |
"plt.show()\n", |
|
|
898 |
"\n", |
|
|
899 |
"#2. cross-validation\n", |
|
|
900 |
"fig_cv = plt.figure(figsize=(3,3))\n", |
|
|
901 |
"plt.bar(d_cv.keys(), d_cv.values(), color = 'pink', width = 0.5)\n", |
|
|
902 |
"plt.xlabel(\"Classes\")\n", |
|
|
903 |
"plt.ylabel(\"Total cases\")\n", |
|
|
904 |
"plt.title(\"Distribution of classes in the Cross-Validation DataSet\")\n", |
|
|
905 |
"plt.show()\n", |
|
|
906 |
"\n", |
|
|
907 |
"#3. testing\n", |
|
|
908 |
"fig = plt.figure(figsize=(3,3))\n", |
|
|
909 |
"plt.bar(d_testing.keys(), d_testing.values(), color = 'pink', width = 0.5)\n", |
|
|
910 |
"plt.xlabel(\"Classes\")\n", |
|
|
911 |
"plt.ylabel(\"Total cases\")\n", |
|
|
912 |
"plt.title(\"Distribution of classes in the Testing DataSet\")\n", |
|
|
913 |
"plt.show()\n" |
|
|
914 |
] |
|
|
915 |
}, |
|
|
916 |
{ |
|
|
917 |
"attachments": {}, |
|
|
918 |
"cell_type": "markdown", |
|
|
919 |
"metadata": {}, |
|
|
920 |
"source": [ |
|
|
921 |
"Setting performance Standards for the model: Log Loss\n", |
|
|
922 |
"\n", |
|
|
923 |
"For a multi-classification problem where each class has an equal probability of being classified, \n", |
|
|
924 |
"log_loss = -log(1/M) where M is the number of classes\n", |
|
|
925 |
"-log(1/9) = 0.954\n", |
|
|
926 |
"\n", |
|
|
927 |
"But that is not the case here. As we saw from the graphs above, all 3 dataset are unequally distributed over classes. \n", |
|
|
928 |
"So, how do we calculate log-loss for imbalanced multi-class problem.\n", |
|
|
929 |
"\n", |
|
|
930 |
"By my calculation, the random guessing log-loss for this imbalanced multi class(K=9) problem comes out as 1.829\n", |
|
|
931 |
"Pictures of calculation on github.\n", |
|
|
932 |
"\n", |
|
|
933 |
"Therefore, our model has to do better than this i.e. logloss<1.829" |
|
|
934 |
] |
|
|
935 |
}, |
|
|
936 |
{ |
|
|
937 |
"attachments": {}, |
|
|
938 |
"cell_type": "markdown", |
|
|
939 |
"metadata": {}, |
|
|
940 |
"source": [ |
|
|
941 |
"### Univariate Analysis" |
|
|
942 |
] |
|
|
943 |
}, |
|
|
944 |
{ |
|
|
945 |
"attachments": {}, |
|
|
946 |
"cell_type": "markdown", |
|
|
947 |
"metadata": {}, |
|
|
948 |
"source": [ |
|
|
949 |
"##### Gene Feature" |
|
|
950 |
] |
|
|
951 |
}, |
|
|
952 |
{ |
|
|
953 |
"cell_type": "code", |
|
|
954 |
"execution_count": 20, |
|
|
955 |
"metadata": {}, |
|
|
956 |
"outputs": [ |
|
|
957 |
{ |
|
|
958 |
"name": "stdout", |
|
|
959 |
"output_type": "stream", |
|
|
960 |
"text": [ |
|
|
961 |
"There are 244 different categories of genes in the training data\n", |
|
|
962 |
"Gene\n", |
|
|
963 |
"BRCA1 220\n", |
|
|
964 |
"TP53 117\n", |
|
|
965 |
"EGFR 113\n", |
|
|
966 |
"PTEN 106\n", |
|
|
967 |
"BRCA2 89\n", |
|
|
968 |
" ... \n", |
|
|
969 |
"LATS1 1\n", |
|
|
970 |
"KLF4 1\n", |
|
|
971 |
"BCL2L11 1\n", |
|
|
972 |
"KDM6A 1\n", |
|
|
973 |
"FLT1 1\n", |
|
|
974 |
"Length: 244, dtype: int64\n" |
|
|
975 |
] |
|
|
976 |
} |
|
|
977 |
], |
|
|
978 |
"source": [ |
|
|
979 |
"#unique, number of occuerences of each gene, cumulative distribution \n", |
|
|
980 |
"unique_genes =X_train.value_counts('Gene') \n", |
|
|
981 |
"print(\"There are\", unique_genes.shape[0], \"different categories of genes in the training data\" )\n", |
|
|
982 |
"print(unique_genes)" |
|
|
983 |
] |
|
|
984 |
}, |
|
|
985 |
{ |
|
|
986 |
"cell_type": "code", |
|
|
987 |
"execution_count": 21, |
|
|
988 |
"metadata": {}, |
|
|
989 |
"outputs": [ |
|
|
990 |
{ |
|
|
991 |
"data": { |
|
|
992 |
"image/png": "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3vGeiIjILOh92b1CocCGDRuwYMECHDt2DGq1Gp07d0bLli2NUZ9FEgQAIkeIiIiIzEWd9iECgICAAAQEBBiyFqshEwCVyEXVRERE5kLvKbPXXnsNixcv1jm+ZMkS/O1vfzNIUZauqtO5qJqIiMg81Gljxqobuj7ohRdewC+//GKQoixd1bpqTpkRERGZB70DUXFxcbV3jVcoFCgsLDRIUZau6sp7TpkRERGZB70DUVBQEBISEnSOb9q0CW3btjVIUZZOM2XGESIiIiKzoPei6lmzZuHVV19FRkYGnnvuOQDA7t27sXHjRvzvf/8zeIGWSDNlxhEiIiIis6B3IBo4cCC+++47LFy4EN9++y0cHBzQoUMH7Nq1Cz179jRGjRbnzykz09ZBRERElep02f2LL75Y7cJqqh1OmREREZmXOu9DVF5ejtzcXKj/Mszh6+v72EVZOk6ZERERmRe9A9GFCxcwatQopKamah0XRRGCIEClUhmsOEulmTLjCBEREZFZ0DsQjRw5EjY2Nti2bRu8vLwgPHD3dqodbsxIRERkXvQORMePH8fRo0fRpk0bY9RjFWTch4iIiMis6L0PUdu2bZGXl2eMWqyGwJ2qiYiIzIregejDDz/Ee++9h7179yI/Px+FhYVaf+jROGVGRERkXvSeMuvduzcA4Pnnn9c6zkXVtSfjomoiIiKzoncg+vnnn41Rh1X587J709ZBRERElfQORNyN+vFVXZfHKTMiIiLzoPcaIgDYt28f/v73vyMsLAzXr18HAHzzzTfYv3+/QYuzVJwyIyIiMi96B6LNmzejb9++cHBwwLFjx1BWVgYAKCoqwsKFCw1eoCXiTtVERETmRe9A9O9//xurV6/GmjVroFAoNMfDwsJw7NgxgxZnqQRUBiGOEBEREZkHvQPRuXPn0KNHD53jrq6uKCgoMERNFo8jREREROZF70Dk5eWFixcv6hzfv38/AgICDFKUpWMgIiIiMi96B6J//etfmDRpEn777TcIgoAbN25gw4YNmDJlCqKiooxRo8WpusqMU2ZERETmQe/L7t977z3cuXMHvXr1wr1799CjRw/Y2dlhypQpGD9+vDFqtDjch4iIiMi86BWIVCoV9u/fj3feeQczZszAmTNnoFar0bZtWzg7OxurRosj473MiIiIzIpegUgul6Nv375IT09Hw4YNERISYqy6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7xGijIwMvPPOO5owBAByuRwxMTHIyMgwaHHWqCoQXbrJK82IiIikoncg6tKlC9LT03WOp6eno1OnToaoyar537/0/hKnzIiIiCRTqymzEydOaP4+ceJETJo0CRcvXsQzzzwDAPj111+xYsUKLF682DhVWpGqEaKbRWUouqeEi73CxBURERFZvloFok6dOkEQBIiiqDn23nvv6bQbNmwYhgwZYrjqrJCrvQINHBW4XarEtdt3EejFQERERGRstQpEmZmZxq6DHtDYxR63S5XIKy4zdSlERERWoVaByM/Pz9h10APcXexw7o8i3CxiICIiIpJCnTZmvH79Og4cOIDc3Fyo1dq3mJg4caJBCrNmbs62AMBAREREJBG9A9FXX32FyMhI2NraolGjRhAEQfOcIAgMRAbg7mIHAJwyIyIikojegWj27NmYPXs2pk+fDplM76v2qRaqAhFHiIiIiKShd6IpLS3FG2+8wTBkRJpAxBEiIiIiSeidakaPHo3//e9/xqiF7nN3tgfAESIiIiKp6D1ltmjRIgwYMAA7duxA+/btoVBo75MTGxtrsOKsFafMiIiIpKV3IFq4cCF27tyJ1q1bA4DOomp6fFVXmd0uVUKpUkMh5/QkERGRMekdiGJjY7F27VqMHDnSCOUQADRwtIVcJkClFpFfXA7PevamLomIiMii6T30YGdnh27duhmjFrpPJhO4FxEREZGE9A5EkyZNwmeffWaMWugBf15pds/ElRAREVk+vafMDh06hD179mDbtm1o166dzqLqLVu2GKw4a+buzIXVREREUtE7ENWvXx+vvPKKMWqhB/y5W3W5iSshIiKyfHW6dQcZnxtHiIiIiCTD67nNFPciIiIiko7eI0T+/v4P3W/o0qVLj1UQVWIgIiIiko7egWjy5Mlaj5VKJdLS0rBjxw68++67hqrL6mkWVfN+ZkREREandyCaNGlStcdXrFiBI0eOPHZBVEmzqJojREREREZnsDVE/fr1w+bNmw11Oqvn4Vq5O3VRWQUK7ylNXA0REZFlM1gg+vbbb9GwYUNDnc7qOdnZoJFT5W7VWfmlJq6GiIjIsuk9Zda5c2etRdWiKCInJwc3b97EypUrDVqctfNt5Ij8knJcvVWKoCb1TF0OERGRxdI7EL388staj2UyGdzd3fHss8+iTZs2hqqLAPg2dERaVgGu3OII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", |
|
|
993 |
"text/plain": [ |
|
|
994 |
"<Figure size 640x480 with 1 Axes>" |
|
|
995 |
] |
|
|
996 |
}, |
|
|
997 |
"metadata": {}, |
|
|
998 |
"output_type": "display_data" |
|
|
999 |
} |
|
|
1000 |
], |
|
|
1001 |
"source": [ |
|
|
1002 |
"s= sum(unique_genes.values)\n", |
|
|
1003 |
"h = unique_genes.values/s\n", |
|
|
1004 |
"plt.plot(h, label = \"Histogram of Genes\")\n", |
|
|
1005 |
"plt.ylabel(\"Number of occurences\")\n", |
|
|
1006 |
"plt.xlabel(\"Index of a gene\")\n", |
|
|
1007 |
"plt.legend()\n", |
|
|
1008 |
"plt.grid()\n", |
|
|
1009 |
"plt.show()" |
|
|
1010 |
] |
|
|
1011 |
}, |
|
|
1012 |
{ |
|
|
1013 |
"cell_type": "code", |
|
|
1014 |
"execution_count": 22, |
|
|
1015 |
"metadata": {}, |
|
|
1016 |
"outputs": [ |
|
|
1017 |
{ |
|
|
1018 |
"data": { |
|
|
1019 |
"image/png": "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", |
|
|
1020 |
"text/plain": [ |
|
|
1021 |
"<Figure size 640x480 with 1 Axes>" |
|
|
1022 |
] |
|
|
1023 |
}, |
|
|
1024 |
"metadata": {}, |
|
|
1025 |
"output_type": "display_data" |
|
|
1026 |
}, |
|
|
1027 |
{ |
|
|
1028 |
"name": "stdout", |
|
|
1029 |
"output_type": "stream", |
|
|
1030 |
"text": [ |
|
|
1031 |
"Top 50 most frequent genes nearly contribute to 75% of data\n" |
|
|
1032 |
] |
|
|
1033 |
} |
|
|
1034 |
], |
|
|
1035 |
"source": [ |
|
|
1036 |
"cdf = np.cumsum(h)\n", |
|
|
1037 |
"plt.plot(cdf, color =\"green\", label = \"Cumulative Distribution of Genes\")\n", |
|
|
1038 |
"plt.legend()\n", |
|
|
1039 |
"plt.grid()\n", |
|
|
1040 |
"plt.show()\n", |
|
|
1041 |
"print(\"Top 50 most frequent genes nearly contribute to 75% of data\")\n" |
|
|
1042 |
] |
|
|
1043 |
}, |
|
|
1044 |
{ |
|
|
1045 |
"attachments": {}, |
|
|
1046 |
"cell_type": "markdown", |
|
|
1047 |
"metadata": {}, |
|
|
1048 |
"source": [ |
|
|
1049 |
"Converting the genes into vectore by Response Coding and One-Hot Encoding\n" |
|
|
1050 |
] |
|
|
1051 |
}, |
|
|
1052 |
{ |
|
|
1053 |
"cell_type": "code", |
|
|
1054 |
"execution_count": 23, |
|
|
1055 |
"metadata": {}, |
|
|
1056 |
"outputs": [ |
|
|
1057 |
{ |
|
|
1058 |
"name": "stdout", |
|
|
1059 |
"output_type": "stream", |
|
|
1060 |
"text": [ |
|
|
1061 |
"Here's the first 10 items in the Gene array after response coding: \n", |
|
|
1062 |
"\n", |
|
|
1063 |
"('BRCA1', [0.10560344827586207, 0.0021551724137931034, 0.034482758620689655, 0.07543103448275862, 0.17672413793103448, 0.09267241379310345, 0.0021551724137931034, 0.0021551724137931034, 0.0021551724137931034])\n", |
|
|
1064 |
"('TP53', [0.1772853185595568, 0.00554016620498615, 0.00554016620498615, 0.1329639889196676, 0.008310249307479225, 0.0110803324099723, 0.002770083102493075, 0.002770083102493075, 0.002770083102493075])\n", |
|
|
1065 |
"('EGFR', [0.0056022408963585435, 0.10084033613445378, 0.0028011204481792717, 0.014005602240896359, 0.011204481792717087, 0.0028011204481792717, 0.19607843137254902, 0.0056022408963585435, 0.0028011204481792717])\n", |
|
|
1066 |
"('PTEN', [0.011428571428571429, 0.002857142857142857, 0.017142857142857144, 0.27714285714285714, 0.005714285714285714, 0.002857142857142857, 0.005714285714285714, 0.002857142857142857, 0.002857142857142857])\n", |
|
|
1067 |
"('BRCA2', [0.02702702702702703, 0.003003003003003003, 0.003003003003003003, 0.009009009009009009, 0.03003003003003003, 0.2132132132132132, 0.003003003003003003, 0.003003003003003003, 0.003003003003003003])\n", |
|
|
1068 |
"('KIT', [0.003076923076923077, 0.11076923076923077, 0.006153846153846154, 0.003076923076923077, 0.003076923076923077, 0.003076923076923077, 0.14153846153846153, 0.003076923076923077, 0.003076923076923077])\n", |
|
|
1069 |
"('BRAF', [0.003205128205128205, 0.07371794871794872, 0.00641025641025641, 0.003205128205128205, 0.019230769230769232, 0.01282051282051282, 0.12179487179487179, 0.003205128205128205, 0.003205128205128205])\n", |
|
|
1070 |
"('ERBB2', [0.006600660066006601, 0.039603960396039604, 0.0033003300330033004, 0.0165016501650165, 0.019801980198019802, 0.039603960396039604, 0.0891089108910891, 0.006600660066006601, 0.0033003300330033004])\n", |
|
|
1071 |
"('ALK', [0.0033112582781456954, 0.026490066225165563, 0.026490066225165563, 0.0033112582781456954, 0.019867549668874173, 0.0033112582781456954, 0.13245033112582782, 0.0033112582781456954, 0.0033112582781456954])\n", |
|
|
1072 |
"('PDGFRA', [0.006802721088435374, 0.013605442176870748, 0.030612244897959183, 0.006802721088435374, 0.017006802721088437, 0.003401360544217687, 0.11564625850340136, 0.003401360544217687, 0.003401360544217687])\n" |
|
|
1073 |
] |
|
|
1074 |
} |
|
|
1075 |
], |
|
|
1076 |
"source": [ |
|
|
1077 |
"#In Response Coding, each level of a categorical variable is assigned a probability value based \n", |
|
|
1078 |
"#on the propoertion of positive class observations for that level.\n", |
|
|
1079 |
"\n", |
|
|
1080 |
"#response coding for a gene using laplace smoothing \n", |
|
|
1081 |
"alpha = 1\n", |
|
|
1082 |
"\n", |
|
|
1083 |
"#Creating a mehtod for gene one-hot encoding that can be used for all 3 data sets \n", |
|
|
1084 |
"def gene_response_coding(df):\n", |
|
|
1085 |
" gene_dict = dict()\n", |
|
|
1086 |
" values = df['Gene'].value_counts()\n", |
|
|
1087 |
" for gene, freq in values.items():\n", |
|
|
1088 |
" prob_vec = []\n", |
|
|
1089 |
" for cancer_class in range(1,10):\n", |
|
|
1090 |
" class_occurence = df.loc[(df['Class'] == cancer_class) & (df['Gene'] == gene)]\n", |
|
|
1091 |
" prob_vec.append((class_occurence.shape[0] + alpha)/(freq + (alpha * values.shape[0])))\n", |
|
|
1092 |
" gene_dict[gene] = prob_vec\n", |
|
|
1093 |
" \n", |
|
|
1094 |
" return gene_dict\n", |
|
|
1095 |
"\n", |
|
|
1096 |
"\n", |
|
|
1097 |
"train_gene_responseCoding = gene_response_coding(X_train)\n", |
|
|
1098 |
"cv_gene_responseCoding = gene_response_coding(X_vaildation)\n", |
|
|
1099 |
"test_gene_responseCoding = gene_response_coding(X_test)\n", |
|
|
1100 |
"print(\"Here's the first 10 items in the Gene array after response coding: \\n\")\n", |
|
|
1101 |
"from itertools import islice\n", |
|
|
1102 |
"n_items = list(islice(train_gene_responseCoding.items(), 10))\n", |
|
|
1103 |
"for i in range(0,10):\n", |
|
|
1104 |
" print(n_items[i]) \n", |
|
|
1105 |
"\n", |
|
|
1106 |
"\n", |
|
|
1107 |
"\n", |
|
|
1108 |
"\n", |
|
|
1109 |
"\n" |
|
|
1110 |
] |
|
|
1111 |
}, |
|
|
1112 |
{ |
|
|
1113 |
"cell_type": "code", |
|
|
1114 |
"execution_count": 24, |
|
|
1115 |
"metadata": {}, |
|
|
1116 |
"outputs": [], |
|
|
1117 |
"source": [ |
|
|
1118 |
"# So if you look at the first entry BRCA 1, its mutatations have the highest probability of being in class 5 \n", |
|
|
1119 |
"#Then, the probability of the mutation falling under class 1, 4, 6 is nearly the same " |
|
|
1120 |
] |
|
|
1121 |
}, |
|
|
1122 |
{ |
|
|
1123 |
"cell_type": "code", |
|
|
1124 |
"execution_count": 25, |
|
|
1125 |
"metadata": {}, |
|
|
1126 |
"outputs": [ |
|
|
1127 |
{ |
|
|
1128 |
"name": "stdout", |
|
|
1129 |
"output_type": "stream", |
|
|
1130 |
"text": [ |
|
|
1131 |
"The 'Gene' column of the training dataset once transformed using one hot encoding has shape: (2656, 244)\n" |
|
|
1132 |
] |
|
|
1133 |
} |
|
|
1134 |
], |
|
|
1135 |
"source": [ |
|
|
1136 |
"\n", |
|
|
1137 |
"#One Hot Encoding is a representation of categorical variables as binary vectors to be used in a machine learning model.\n", |
|
|
1138 |
"\n", |
|
|
1139 |
"from sklearn.preprocessing import OneHotEncoder\n", |
|
|
1140 |
"encoder = OneHotEncoder(handle_unknown='ignore')\n", |
|
|
1141 |
"train_gene_oneHotEncoding = encoder.fit_transform(X_train[['Gene']])\n", |
|
|
1142 |
"cv_gene_oneHotEncoding = encoder.transform(X_vaildation[['Gene']])\n", |
|
|
1143 |
"test_gene_oneHotEncoding = encoder.transform(X_test[['Gene']])\n", |
|
|
1144 |
"\n", |
|
|
1145 |
"print(\"The 'Gene' column of the training dataset once transformed using one hot encoding has shape: \", train_gene_oneHotEncoding.shape)" |
|
|
1146 |
] |
|
|
1147 |
}, |
|
|
1148 |
{ |
|
|
1149 |
"cell_type": "code", |
|
|
1150 |
"execution_count": 26, |
|
|
1151 |
"metadata": {}, |
|
|
1152 |
"outputs": [ |
|
|
1153 |
{ |
|
|
1154 |
"name": "stdout", |
|
|
1155 |
"output_type": "stream", |
|
|
1156 |
"text": [ |
|
|
1157 |
"When model trained on just 'Gene' feature, the log loss for test data is 1.6249787609089872\n" |
|
|
1158 |
] |
|
|
1159 |
}, |
|
|
1160 |
{ |
|
|
1161 |
"name": "stderr", |
|
|
1162 |
"output_type": "stream", |
|
|
1163 |
"text": [ |
|
|
1164 |
"c:\\Users\\chawl\\anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:676: UserWarning: The least populated class in y has only 1 members, which is less than n_splits=5.\n", |
|
|
1165 |
" warnings.warn(\n" |
|
|
1166 |
] |
|
|
1167 |
} |
|
|
1168 |
], |
|
|
1169 |
"source": [ |
|
|
1170 |
"#Building a model just based on the gene feature \n", |
|
|
1171 |
"from sklearn.linear_model import SGDClassifier\n", |
|
|
1172 |
"from sklearn.calibration import CalibratedClassifierCV\n", |
|
|
1173 |
"sgdc_gene_model = SGDClassifier() # default method = 'sigmoid' (logistic regression model) \n", |
|
|
1174 |
"sgdc_gene_model.fit(train_gene_oneHotEncoding, y_train)\n", |
|
|
1175 |
"\n", |
|
|
1176 |
"#Calibrated Classification\n", |
|
|
1177 |
"calibrator = CalibratedClassifierCV(sgdc_gene_model)\n", |
|
|
1178 |
"calibrator.fit(cv_gene_oneHotEncoding, y_validation)\n", |
|
|
1179 |
"ypredict_cal_test = calibrator.predict_proba(test_gene_oneHotEncoding) \n", |
|
|
1180 |
"\n", |
|
|
1181 |
"# printed for my own understanding \n", |
|
|
1182 |
"#print(y_test) \n", |
|
|
1183 |
"#print(y_test.shape)\n", |
|
|
1184 |
"#print(ypredict_cal_test[:, 1])\n", |
|
|
1185 |
"#print(ypredict_cal_test[:, 1].shape)\n", |
|
|
1186 |
"from sklearn.metrics import log_loss\n", |
|
|
1187 |
"log_loss_test = log_loss(y_test, ypredict_cal_test, labels=sgdc_gene_model.classes_)\n", |
|
|
1188 |
"print(\"When model trained on just 'Gene' feature, the log loss for test data is \", log_loss_test)\n", |
|
|
1189 |
"\n", |
|
|
1190 |
"\n" |
|
|
1191 |
] |
|
|
1192 |
}, |
|
|
1193 |
{ |
|
|
1194 |
"cell_type": "code", |
|
|
1195 |
"execution_count": 27, |
|
|
1196 |
"metadata": {}, |
|
|
1197 |
"outputs": [ |
|
|
1198 |
{ |
|
|
1199 |
"name": "stdout", |
|
|
1200 |
"output_type": "stream", |
|
|
1201 |
"text": [ |
|
|
1202 |
"Number of unique genes in training set: 244\n", |
|
|
1203 |
"Number of unique genes in cross-validation set 109\n", |
|
|
1204 |
"Number of unique genes in testing set 109\n", |
|
|
1205 |
"Percentage of genes in cross-validation set that have not been encountered in the training dataset = 11.926605504587156\n", |
|
|
1206 |
"Percentage of genes in Testing set that have not been encountered in the training dataset = 6.422018348623854\n" |
|
|
1207 |
] |
|
|
1208 |
} |
|
|
1209 |
], |
|
|
1210 |
"source": [ |
|
|
1211 |
"#Question: How many genes in the cross-validation and testing set are the same unique_genes that were encountered in the training set? \n", |
|
|
1212 |
"print(\"Number of unique genes in training set: \", unique_genes.shape[0])\n", |
|
|
1213 |
"unique_genes_cv = X_vaildation['Gene'].value_counts()\n", |
|
|
1214 |
"unique_genes_test = X_test['Gene'].value_counts()\n", |
|
|
1215 |
"print(\"Number of unique genes in cross-validation set \", unique_genes_cv.shape[0])\n", |
|
|
1216 |
"print(\"Number of unique genes in testing set \", unique_genes_test.shape[0])\n", |
|
|
1217 |
"\n", |
|
|
1218 |
"counter = 0\n", |
|
|
1219 |
"\n", |
|
|
1220 |
"for i in unique_genes_cv.index:\n", |
|
|
1221 |
" if i not in unique_genes.index:\n", |
|
|
1222 |
" counter +=1\n", |
|
|
1223 |
"\n", |
|
|
1224 |
"print(\"Percentage of genes in cross-validation set that have not been encountered in the training dataset = \", counter/unique_genes_cv.shape[0]*100)\n", |
|
|
1225 |
"\n", |
|
|
1226 |
"counter2 =0\n", |
|
|
1227 |
"for i in unique_genes_test.index:\n", |
|
|
1228 |
" if i not in unique_genes.index:\n", |
|
|
1229 |
" counter2 +=1\n", |
|
|
1230 |
"\n", |
|
|
1231 |
"print(\"Percentage of genes in Testing set that have not been encountered in the training dataset = \", counter2/unique_genes_test.shape[0]*100)\n" |
|
|
1232 |
] |
|
|
1233 |
}, |
|
|
1234 |
{ |
|
|
1235 |
"attachments": {}, |
|
|
1236 |
"cell_type": "markdown", |
|
|
1237 |
"metadata": {}, |
|
|
1238 |
"source": [ |
|
|
1239 |
"Variation feature" |
|
|
1240 |
] |
|
|
1241 |
}, |
|
|
1242 |
{ |
|
|
1243 |
"cell_type": "code", |
|
|
1244 |
"execution_count": 28, |
|
|
1245 |
"metadata": {}, |
|
|
1246 |
"outputs": [ |
|
|
1247 |
{ |
|
|
1248 |
"name": "stdout", |
|
|
1249 |
"output_type": "stream", |
|
|
1250 |
"text": [ |
|
|
1251 |
"Number of variations in training set: 2656\n", |
|
|
1252 |
"Total number of unique variations in training set: 2406\n", |
|
|
1253 |
"Top ten most frequently occuring variations are:\n", |
|
|
1254 |
" Truncating_Mutations 70\n", |
|
|
1255 |
"Amplification 59\n", |
|
|
1256 |
"Deletion 57\n", |
|
|
1257 |
"Fusions 28\n", |
|
|
1258 |
"Overexpression 5\n", |
|
|
1259 |
"G12V 4\n", |
|
|
1260 |
"Q61L 3\n", |
|
|
1261 |
"E17K 3\n", |
|
|
1262 |
"F384L 2\n", |
|
|
1263 |
"Q209L 2\n", |
|
|
1264 |
"Name: Variation, dtype: int64\n" |
|
|
1265 |
] |
|
|
1266 |
} |
|
|
1267 |
], |
|
|
1268 |
"source": [ |
|
|
1269 |
"#Number of unique variations \n", |
|
|
1270 |
"\n", |
|
|
1271 |
"print(\"Number of variations in training set: \", X_train['Variation'].shape[0])\n", |
|
|
1272 |
"unique_variations = X_train['Variation'].value_counts()\n", |
|
|
1273 |
"print(\"Total number of unique variations in training set: \", unique_variations.shape[0])\n", |
|
|
1274 |
"print(\"Top ten most frequently occuring variations are:\\n\", unique_variations.head(10))" |
|
|
1275 |
] |
|
|
1276 |
}, |
|
|
1277 |
{ |
|
|
1278 |
"cell_type": "code", |
|
|
1279 |
"execution_count": 29, |
|
|
1280 |
"metadata": {}, |
|
|
1281 |
"outputs": [ |
|
|
1282 |
{ |
|
|
1283 |
"name": "stdout", |
|
|
1284 |
"output_type": "stream", |
|
|
1285 |
"text": [ |
|
|
1286 |
"Percentage of variations in cross-validation set that have not been encountered in the training dataset = 96.36963696369637\n", |
|
|
1287 |
"Percentage of variations in cross-validation set that have not been encountered in the training dataset = 96.45161290322581\n" |
|
|
1288 |
] |
|
|
1289 |
} |
|
|
1290 |
], |
|
|
1291 |
"source": [ |
|
|
1292 |
"#Overlap between training, CV, and Testing set \n", |
|
|
1293 |
"unique_variations_cv = X_vaildation['Variation'].value_counts()\n", |
|
|
1294 |
"\n", |
|
|
1295 |
"counter3 =0\n", |
|
|
1296 |
"for i in unique_variations_cv.index:\n", |
|
|
1297 |
" if i not in unique_variations.index:\n", |
|
|
1298 |
" counter3 +=1\n", |
|
|
1299 |
"\n", |
|
|
1300 |
"print(\"Percentage of variations in cross-validation set that have not been encountered in the training dataset = \", (counter3/unique_variations_cv.shape[0])*100)\n", |
|
|
1301 |
"\n", |
|
|
1302 |
"unique_variations_test = X_test['Variation'].value_counts()\n", |
|
|
1303 |
"\n", |
|
|
1304 |
"counter4 =0\n", |
|
|
1305 |
"for i in unique_variations_test.index:\n", |
|
|
1306 |
" if i not in unique_variations.index:\n", |
|
|
1307 |
" counter4 +=1\n", |
|
|
1308 |
"\n", |
|
|
1309 |
"print(\"Percentage of variations in cross-validation set that have not been encountered in the training dataset = \", (counter4/unique_variations_test.shape[0])*100)\n", |
|
|
1310 |
"\n", |
|
|
1311 |
"\n" |
|
|
1312 |
] |
|
|
1313 |
}, |
|
|
1314 |
{ |
|
|
1315 |
"cell_type": "code", |
|
|
1316 |
"execution_count": 30, |
|
|
1317 |
"metadata": {}, |
|
|
1318 |
"outputs": [ |
|
|
1319 |
{ |
|
|
1320 |
"data": { |
|
|
1321 |
"image/png": "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3QoPDw9RgmruFFy9TkREJEt6L15fsGABxo4di8uXL+Ppp58GAOzZswdbtmzBP//5T9EDJCIiIpILvQurF198Ed999x2WLFmCb775BlZWVujduzd2796NYcOGGSLGZou3tCEiIpKXRm238Pzzz+tcwE7i4EQgERGRPDV6H6vKykoUFRWhpqZGo93FxeWxg6L7uHidiIhIXvQurHJzczF58mRkZmZqtAuCAIVCgerqatGCa7Y4ZEVERCRLehdWkyZNgpmZGXbu3AlHR0dewUZERET0B70Lq1OnTuHEiRPo2bOnIeIhIiIiki2997Hy8PBAcXGxIWKhP3AMkIiISJ70LqyWLVuG2bNnY//+/SgpKUFpaanGDxEREVFzpfdU4LPPPgsAeOaZZzTauXhdfLwqkIiISF70Lqz27dtniDjoAbwggIiISJ70Lqy4u3rT4c7rRERE8qL3GisAOHjwIN588034+fnh+vXrAICvv/4aGRkZogbXXHG8ioiISJ70LqySkpIwcuRIWFlZ4eTJk6ioqAAA3L59G0uWLBE9QCIiIiK50Luw+vjjjxEfH49169ZBqVSq2/38/HDy5ElRg2vuuHidiIhIXvQurC5evIihQ4dqtdvZ2eH3338XI6Zmj2vXiYiI5EnvwsrR0RGXLl3Sas/IyICbm5soQRERERHJkd6F1f/93/9hxowZOHLkCBQKBW7cuIHNmzdj1qxZCA8PN0SMzRZnAomIiORF7+0WZs+ejVu3buGpp57CvXv3MHToUFhYWGDWrFl46623DBFjs8OZQCIiInnSq7Cqrq5GRkYG3nnnHcybNw/nz59HTU0NPDw8YGNjY6gYmy2Bq9eJiIhkRa/CytTUFCNHjkROTg7atGkDHx8fQ8XVvHH1OhERkSzpvcbKy8sLV65cMUQsRERERLKmd2H1ySefYNasWdi5cycKCgpQWlqq8UPi4UQgERGRvOi9eP25554DALz44osaNwsWBAEKhQLV1dXiRddMcSKQiIhInvQurPbt22eIOIiIiIhkT+/CatiwYYaIg3ThXCAREZGs6F1YHThwoN7ndd3uhvTDiwKJiIjkSe/Cavjw4VptD6614hor8XDAioiISF70virw5s2bGj9FRUVISUlB//79kZqaaogYmx0Fl68TERHJkt4jVi1bttRqGzFiBCwsLBAREYETJ06IEhgRERGR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Nzf1wvHjx4+jqqoKK1euhInJ/f9/3b59e4NjqlVSUoKcnBx88cUX8Pf3BwBkZGRo9DE3Nwdwf+StLt26dYO5uTkyMjLUhaxKpcLx48cxc+ZMveMiorpxxIqIHsuzzz6LHj16YMKECTh9+jQOHjyIefPmafR544030LZtW4wePRoHDx5EXl4e0tPTMWPGDPW0XVhYGJydnTF//nzExMRAEATMmjWrzvOGh4fj2rVrePvtt3HhwgX861//wsKFCxEZGakuZhqiW7duSEtLQ2ZmJnJycvB///d/jxwtqxUaGorMzEzExcVh8uTJ6gKva9euqKqqwueff44rV67g66+/Rnx8fINjqlV7BeWXX36JS5cuYe/evYiMjNTo0759e1hZWSElJQW//PILbt26pXWcFi1aYNq0aXj33XeRkpKC8+fPY+rUqSgvL2/U1hBEVDcWVkT0WExMTPDtt9+ioqICAwYMwJQpU/DJJ59o9LG2tsaBAwfg4uKCMWPGwN3dHZMnT8bdu3dhZ2eHTZs2ITk5GV9//TXMzMxgbW2NzZs346uvvkJycrLO83bs2BHJyck4evQo+vTpg7CwMISGhmL+/Pl6xb9gwQL069cPI0eOxPDhw+Hg4NDgDVKHDBmCHj16oLS0FBMnTlS39+3bFzExMVi2bBk8PT2xefNmREVF6RUXcD+3W7duxYkTJ+Dp6YmIiAisWLFCo4+ZmRlWrVqFL774Ak5OThg9erTOYy1duhRjx45FSEgI+vXrh0uXLmHXrl1o3bq13nERUd0Ugq4FEkRERESkN45YEREREYmEhRURERGRSFhYEREREYmEhRURERGRSFhYEREREYmEhRURERGRSFhYEREREYmEhRURERGRSFhYEREREYmEhRURERGRSFhYEREREYnk/wHGQsnAPX90ZwAAAABJRU5ErkJggg==", |
|
|
1322 |
"text/plain": [ |
|
|
1323 |
"<Figure size 640x480 with 1 Axes>" |
|
|
1324 |
] |
|
|
1325 |
}, |
|
|
1326 |
"metadata": {}, |
|
|
1327 |
"output_type": "display_data" |
|
|
1328 |
} |
|
|
1329 |
], |
|
|
1330 |
"source": [ |
|
|
1331 |
"#histogram to see frequency of variations\n", |
|
|
1332 |
"s2= sum(unique_variations.values)\n", |
|
|
1333 |
"h2 = unique_variations.values/s2\n", |
|
|
1334 |
"plt.plot(h2, label = \"Histogram of Variations\")\n", |
|
|
1335 |
"plt.ylabel(\"Number of occurences\")\n", |
|
|
1336 |
"plt.xlabel(\"Index of a Variation\")\n", |
|
|
1337 |
"plt.legend()\n", |
|
|
1338 |
"plt.grid()\n", |
|
|
1339 |
"plt.show()" |
|
|
1340 |
] |
|
|
1341 |
}, |
|
|
1342 |
{ |
|
|
1343 |
"cell_type": "code", |
|
|
1344 |
"execution_count": 31, |
|
|
1345 |
"metadata": {}, |
|
|
1346 |
"outputs": [ |
|
|
1347 |
{ |
|
|
1348 |
"data": { |
|
|
1349 |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGdCAYAAAAMm0nCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABX2ElEQVR4nO3dd1zV9f///9thDwE3LlRcaTlTy5ENB46cWVombhNXqaVpVo58q6WpmSu3YsNvJZppKrlNLXOkpZW5MAVxAorCgfP6/eFHfhKogMCLA/fr5eKlzuu8xuP1OC84d16v13kei2EYBiIiIiJ2xMHsAkRERETSSwFGRERE7I4CjIiIiNgdBRgRERGxOwowIiIiYncUYERERMTuKMCIiIiI3VGAEREREbvjZHYBaWGz2Th//jxeXl5YLBazyxEREZE0MAyDmJgYSpQogYND5p4zsYsAc/78efz8/MwuQ0RERDLg7NmzlCpVKlPXaRcBxsvLC7jdAG9v70xbr9VqZdOmTQQEBODs7Jxp65X7U9/Nob6bQ33Pfuq5OVLre3R0NH5+fknv45nJLgLMnctG3t7emR5gPDw88Pb21kGejdR3c6jv5lDfs596bo779T0rbv/QTbwiIiJidxRgRERExO4owIiIiIjdsYt7YNLCMAwSEhJITExM8zJWqxUnJydu3bqVruXk4ajv5lDfzfGgvjs6OuLk5KQhIkTSKVcEmPj4eMLDw4mNjU3XcoZhUKxYMc6ePatfHtlIfTeH+m6OtPTdw8OD4sWL4+Liks3Vidgvuw8wNpuNU6dO4ejoSIkSJXBxcUnzL2ebzcb169fJly9fpg+wI/emvptDfTfH/fpuGAbx8fFcvHiRU6dOUbFiRb02Imlk9wEmPj4em82Gn58fHh4e6VrWZrMRHx+Pm5ubfmlkI/XdHOq7OR7Ud3d3d5ydnTlz5kzSfCLyYLnmt5h+IYuIvdLvL5H000+NiIiI2J10B5gdO3bQpk0bSpQogcViYfXq1Q9cZvv27dSuXRs3NzfKlSvHvHnzMlKriIiICJCBAHPjxg1q1KjBrFmz0jT/qVOnaNWqFY0aNeLgwYO88847vP7663z77bfpLlayV1oDanatJzNs27YNi8XCtWvXMn3dd+/n6dOnsVgsHDp0KNO3899tmSkiIoJmzZrh6elJ/vz5s337ZcuWZcaMGTlmPSKSfdIdYFq2bMmECRN44YUX0jT/vHnzKF26NDNmzKBKlSr06dOHXr16MXXq1HQXm9tEREQwePBgypUrh6urK35+frRp04bNmzebXVqGjB07lpo1a6aYHh4eTsuWLbN022XLlsVisWCxWHB3d6ds2bJ06tSJLVu2JJuvQYMGhIeH4+Pj88B1pjfsZMV+mtnTtJg+fTrh4eEcOnSIv//+O8XzgwcPpmLFiqkue+7cORwdHVm1alWGt79v3z5ee+21NM+/dOnSVINWetcjIubL8k8h7dmzh4CAgGTTmjdvzqJFi7Baral+0VZcXBxxcXFJj6Ojo4HbA0JZrdZk81qtVgzDwGazYbPZ0lWbYRhJ/03vsg/r9OnTNGrUiPz58zN58mSqV6+e9E2eAwcO5OjRo9laz72kp693+vnf+YsWLZpselb1fdy4cfTp04f4+HhOnz7N559/TtOmTRk/fjzvvPMOAE5OThQtWhTDMJLquJc7tT2oB/Hx8bi4uCTbz7Qu+yBp7Wl61pWZff/nn394/PHHKV++fKr19OzZk1mzZrF9+3YaNWqU7LklS5ZQqFAhnn/++XTXc6fnhQoVSnW793L363K39K4nPdLSd5vNhmEYWK1WHB0dM72GvObO+8R/3y8kdTvO7GDy7sl83fFrPF08M7ye1Pqela9BlgeYiIgIfH19k03z9fUlISGBS5cuUbx48RTLTJo0iXHjxqWYvmnTphQflXZycqJYsWJcv36d+Ph4DMMgNiF9A9rduHIjXfPfi4eTR5rHoOnXrx9we588Pf//A6Z37968+OKLREdHExYWRo0aNdixYwfVqlUDICoqirJly7J27Vqeeuopdu3aRZs2bfjmm28YN24cx48fp27duixatIhDhw7x7rvvEh4eTrNmzfj000+T+le9enX69+9P//79k7bdqFEjnn/+eUaOHJk07ebNm0kBcsyYMaxbt47z589TtGhRXnrpJUaMGIGzszNffPEF48ePB0j6BTx79my6dOlCgQIFWLFiBc8//zwBAQE0aNCAsWPHEhMTA8ClS5eoUqUKq1atolGjRsTHxzNhwgS++eYboqKiqFKlCmPHjuWpp566Zz9tNhvOzs54eHjg4eFBzZo1qVmzJgULFmTMmDE0b96cihUrJvXr9OnT+Pj4EBYWxogRI9i7dy9Wq5XSpUszbtw4KleuTJMmTYD//83tlVdeYc6cObRu3ZoqVarg4uLCV199ReXKlVm3bl2y/bx+/ToABw8eJCgoiMOHD+Pv78+UKVOS9uOLL75g1KhRnDlzJmk/1q1bR9euXbl69Wqaewrwxx9/MGrUKPbt24e7uztt27ZlwoQJ5MuXD4ABAwYQFRVFvXr1mD17NvHx8bzwwgtMmjTpvt/Wu2jRImbNmsW5c+coU6YMb775Ji+//HLSMXT27FkAgoODk/pzt3LlylGjRg3mz59PjRo1kj23ZMkSOnfuzPXr1xkyZAg7duwgMjKSUqVK0bt3b4KCgpLmvVN/7dq1WbBgAc7Ozhw+fDjFcTx79mw+//xzzpw5Q/78+WnRogXjxo0jX7587Nq1i969eyfr59tvv83IkSNTrOfs2bO8/fbb7NixAwcHB5o0acKHH36YFBwnT57MunXrGDhwIBMnTuTatWs0bdqUTz75BC8vLwDWrFnDhx9+yKlTp3B3d6d69ep8/vnnyX7e74iPj+fmzZvs2LGDhISEe74ekj6hoaFml5Cjxdvi+SL8C9ZcXIOBwWvBr/Fq8Vcfer139z29A8ymR7aMA/PfN/U7f5Hc681+1KhRDBs2LOlxdHQ0fn5+BAQE4O3tnWzeW7ducfbsWfLly4ebmxs34m9Q6sNSmbwHaRP9dnSa0uuVK1fYvHkzEyZMSDXA3dnHO28+np6eSdPu/AV35yvL7wSSqVOnMnv2bDw8PHj55Zfp27cvLi4ufPHFF1y/fp2OHTuyfPlyRowYAdz+2Kabm1uyfjo6OuLq6ppsmru7e9LjwoULs3TpUkqUKMGRI0fo168fhQsXZvjw4XTv3p0TJ06wceNGNm3aBICPjw/u7u7J1hMYGMjUqVMZM2YM3t7eWCwWgoOD8fX1pWXLljg4ONC1a1fOnDnDl19+SYkSJVi9ejUvvvgiv/322z0vR6S2PwDDhw9nypQpbNmyhdq1ayf1y8vLC29vb0aNGkViYiLbt2/H09OTo0eP4u3tTZUqVfj666956aWXOHbsGN7e3kn74OTkxFdffUVQUBC7du3CMIyk7d6Z585rN3bsWKZNm8ajjz7K9OnT6dKlCydOnKBQoUK4ublhsVhS9PvOMZDWnsbGxtKpUyeefPJJfv75ZyIjI3nttdcYPXo0S5YsAcDZ2Zldu3bh6+vL5s2bOXHiBK+88gp169alb9++qfY0JCSEUaNGMX36dJo0acK6desYNGgQFStW5LnnnmPfvn10794db29vZsyYkexYuVvfvn15++23mTt3blJftm/fzsmTJ+nXrx/58uXD39+fQYMGUbhwYXbv3k1QUFDSZcA79e/YsYOCBQuyadOmpJ7/93X38PDg008/pWzZspw6dYpBgwbxv//9j9mzZ9O0aVOmT5/OmDFjOHbsGHD7Z+zOAHN31mMYBt27d8fT05OtW7eSkJDAoEGDeO2115IuSbq6unL69Gk2bdrE999/z9WrV3n55ZeZO3cuEyZMIDw8nD59+vDhhx/Srl07IiIiOHjwIF5eXkk9uNutW7dwd3fn6aef1jgwmcBqtRIaGkqzZs3uG9Dzst8u/EaP73rwx8U/AOhVsxdTmkzBy9Urw+tMre93/gDOClkeYIoVK0ZERESyaZGRkTg5OSX9Zftfrq6uuLq6ppju7Oyc4mBMTEzEYrHg4OCQ9M8sad3+yZMnMQyDKlWq3Hf+O8/dvd7/TrvzeMKECUmn6Hv37s2oUaM4ceIE5cqVA+DFF19k27Ztyc6u3Onb3f477e5tvPfee0nTy5Urx99//83KlSt5++238fT0xMvLCycnJ0qUKHHP3rz88ssMGzaMPXv20KJFCxwcHPjyyy/p0qULTk5OnDhxgq+++op///03aT3Dhw9n48aNLFu2jIkTJ96zX6ntT+HChSlatChnzpxJ0UcHBwfOnj1Lx44dk84OVKhQIdmycPsY/u99ExUqVGDKlCn33M872xk0aBAvvfQScPt+sI0bN7JkyRJGjBiR4jW9+/8dHBzS3NMvv/ySmzdvEhwcnPTX/axZs2jTpg0fffQRvr6+WCwWChQowJQpUyhQoACPPfYYzz//PFu3bk06G/hf06ZNo0ePHgwcOBCAypUr8/PPPzNt2jSaNGmCr68vbm5ueHh4pFrfHa+++ipvvfUW3377LT179gRu34tSv359qlatCpB0pgmgfPny7N27l2+++SbpbI/FYsHT05NFixalGG7/7td96NChydbzwQcf0L9/f+bOnYubmxv58+fHYrGkWu+d9YSGhnL48GFOnTqFn58fcPsM02OPPcb+/fupW7cuFosFm83GsmXLks64BAYGsmXLFhwcHLhw4QIJCQl07NgRPz8/ChUqRP369e/58+7g4IDFYkn1d5xknPqZUqItkam7p/Le1vew2qwU9SzKgjYLaPtI20zbxt19z8r+Z3mAqV+/PmvXrk02bdOmTdSpUydLdszD2YPro66naV6bzUZ0TDTeXt6ZEnw8nNM2EvCDzkBlRPXq1ZP+39fXFw8Pj6TwcmfaL7/88lDb+Oabb5gxYwb//PMP169fJyEhIdW/uO+nSJEiNG3alK+//poWLVpw6tQp9uzZw9y5cwE4cOAAhmFQqVKlZMvFxcXdM/A+iGEY9+z166+/Tv/+/dm0aRNNmzalY8eOyXp5L3Xq1EnTtuvXr5/0/05OTtSpUyfpr//McuzYMWrUqJHs0kTDhg2x2Wz89ddfSZdwH3300WT3VxQvXpwjR47cd73/vbG1YcOGfPLJJ+mqL3/+/LzwwgssXryYnj17EhMTw7fffpvsUz/z5s1j4cKFnDlzhps3bxIfH5/i5uVq1ao98LuCtm7dysSJEzl69CjR0dEkJCRw69Ytbty4keqlm9QcO3YMPz+/pPACt3uXP39+jh07Rt26dYHbN47fCS9wu5+RkZEA1KhRgyZNmlCtWjUCAgJo1KgRXbt2zfAxLJIZTl49SffV3dkVtguA9pXbM7/1fIp4FjG5soxJ97v29evXOXToUNLHQ0+dOsWhQ4cICwsDbl/+6datW9L8QUFBnDlzhmHDhnHs2DEWL17MokWLeOuttzJnD/7DYrHg6eKZ9n/O6Zj3Af/SGkgqVqyIxWJ54BvZnVB1982m97oh6u4weOcvuf/25e4bCB0cHFLcxHq/m6327t3Lyy+/TMuWLfn+++85ePAgo0ePJj4+/r77kJouXbrw3XffYbVa+eKLL3jssceSzoDYbDYcHR3Zv39/0nF26NAhjh07lu43ToDLly9z8eJF/P39U32+T58+nDx5ksDAQI4cOUKdOnX49NNPH7jetL4ZpubOcZLe1+Be7hfQ7p7+oGPiQcs/aFv307t3b3bt2sXx48dZuXIlAJ07dwbg//2//8fQoUPp1asXmzZt4tChQ/Ts2TPFsfWgnp85c4ZWrVpRtWpVvv32W/bv38/s2bOB9PX1Xvv43+n366ejoyOhoaH88MMPPProo8yfP58qVapw6tSpNNchklkMw2DRgUXUmFeDXWG78HLxYnHbxazqtMpuwwtkIMD8+uuv1KpVi1q1agEwbNgwatWqxfvvvw/c/njnnTAD4O/vz/r169m2bRs1a9bkgw8+YObMmXTs2DGTdsH+FCxYkObNmzN79mxu3Eh5A/Gdj+0WKXL7wAoPD096LrPGFSlSpEiy9UZHR9/3l+tPP/1EmTJlGD16NHXq1KFixYrJbj4FcHFxITEx8YHbbt++PXFxcWzYsIEvvviCrl27Jj1Xq1YtEhMTiYyMpEKFCsn+FStWLN37+cknn+Dg4ED79u3vOY+fnx9BQUGsWrWKN998kwULFiTtD5CmfbqXvXv3Jv1/QkIC+/fvp3LlysDt1yAmJibZMfDf1zctPX300Uc5dOhQsvX89NNPODg4pDiTlR5VqlRh165dyabt3r2bKlWqpHtdzz33HOXKlWPp0qUsXryYTp06JZ292LlzJw0aNGDAgAHUqlWLChUqcOLEiXRv49dffyUhIYGPP/6YevXqUalSJc6fP59snrT2MywsLOkGZYCjR48m3VCeVhaLhYYNGzJ27Fh27NiBi4sLISEh6dspkYd04foF2n3Vjj5r+3A9/jqNSjfit6Df6Fmrp91/K326LyE9++yz9/346dKlS1NMe+aZZzhw4EB6N5WrzZkzhwYNGvDEE08wfvx4qlevTkJCAqGhocydO5djx47h7u5OvXr1mDx5MmXLluXSpUu8++67mbL9xo0bs3TpUtq0aUOBAgV477337vvxzQoVKhAWFsZXX31F3bp1WbduXYpfxndunDx06BClSpXCy8sr1XuZPD09admyZdLNlF26dEl6rlKlSrz66qt069aNjz/+mFq1anHp0iW2bNlCtWrVaNWq1T1rjImJISIiAqvVyqlTp1ixYgULFy5k0qRJye5tuduQIUNo2bIllSpV4urVq2zZsiXpTapMmTJYLBa+//57WrVqhbu7e6o3YN7P7NmzqVixIlWqVGH69OlcvXqVXr16AfDkk0/i4eHBO++8w+DBg/nll19S/PykpaevvvoqY8aMoXv37owdO5aLFy8yePBgAgMDU3wCMD2GDx9Op06dePzxx2nSpAlr165l1apV/Pjjj+lel8VioWfPnkybNo2rV68mu3+oQoUKLF++nI0bN+Lv709wcDD79u2751mzeylfvjwJCQl8+umntGnThp9++inFqN9ly5bl+vXrbN68mRo1aiR9au1uTZs2pXr16rz66qvMmDGDhIQEBgwYwDPPPJPmS4c///wzmzdvJiAggMKFC7Nt2zYuXryY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l5N6er9+R0RE4OLiQoECBe45j9xfZvU5IiKCokWLplh/0aJF9VqkomXLlnz++eds2bKFjz/+mH379tG4cWPi4uIA9TwzGIbBsGHDeOqpp6hatSqg4z2rpdZzyFnHu118G3VWsVgsyR4bhpFimqRNy5Ytk/6/WrVq1K9fn/Lly7Ns2bKkG7wy0m+9JumXGX1ObX69Fqnr3Llz0v9XrVqVOnXqUKZMGdatW8cLL7xwz+XU87QbNGgQhw8fZteuXSme0/GeNe7V85x0vOfJMzCFCxfG0dExRdKLjIxMkeYlYzw9PalWrRrHjx9P+jTS/fpdrFgx4uPjuXr16j3nkfvLrD4XK1aMCxcupFj/xYsX9VqkQfHixSlTpgzHjx8H1POHNXjwYL777ju2bt1KqVKlkqbreM869+p5asw83vNkgHFxcaF27dqEhoYmmx4aGkqDBg1Mqip3iYuL49ixYxQvXhx/f3+KFSuWrN/x8fFs3749qd+1a9fG2dk52Tzh4eH8/vvvek3SKLP6XL9+faKiovjll1+S5vn555+JiorSa5EGly9f5uzZsxQvXhxQzzPKMAwGDRrEqlWr2LJlC/7+/sme1/Ge+R7U89SYeryn+XbfXOarr74ynJ2djUWLFhlHjx41hgwZYnh6ehqnT582uzS79Oabbxrbtm0zTp48aezdu9do3bq14eXlldTPyZMnGz4+PsaqVauMI0eOGK+88opRvHhxIzo6OmkdQUFBRqlSpYwff/zROHDggNG4cWOjRo0aRkJCglm7lePExMQYBw8eNA4ePGgAxrRp04yDBw8aZ86cMQwj8/rcokULo3r16saePXuMPXv2GNWqVTNat26d7fubE9yv5zExMcabb75p7N692zh16pSxdetWo379+kbJkiXV84fUv39/w8fHx9i2bZsRHh6e9C82NjZpHh3vmetBPc9px3ueDTCGYRizZ882ypQpY7i4uBiPP/54so+KSfp07tzZKF68uOHs7GyUKFHCeOGFF4w//vgj6XmbzWaMGTPGKFasmOHq6mo8/fTTxpEjR5Kt4+bNm8agQYOMggULGu7u7kbr1q2NsLCw7N6VHG3r1q0GkOJf9+7dDcPIvD5fvnzZePXVVw0vLy/Dy8vLePXVV42rV69m017mLPfreWxsrBEQEGAUKVLEcHZ2NkqXLm107949RT/V8/RLreeAsWTJkqR5dLxnrgf1PKcd75b/K1pERETEbuTJe2BERETEvinAiIiIiN1RgBERERG7owAjIiIidkcBRkREROyOAoyIiIjYHQUYERERsTsKMCIiImJ3FGBERETE7ijAiIiIiN1RgBERERG7owAjIiIiduf/AwEj7Y8XP6KxAAAAAElFTkSuQmCC", |
|
|
1350 |
"text/plain": [ |
|
|
1351 |
"<Figure size 640x480 with 1 Axes>" |
|
|
1352 |
] |
|
|
1353 |
}, |
|
|
1354 |
"metadata": {}, |
|
|
1355 |
"output_type": "display_data" |
|
|
1356 |
}, |
|
|
1357 |
{ |
|
|
1358 |
"name": "stdout", |
|
|
1359 |
"output_type": "stream", |
|
|
1360 |
"text": [ |
|
|
1361 |
"Constant growth of cdf graph, meaning almost all genes contribute equally to the dataset\n" |
|
|
1362 |
] |
|
|
1363 |
} |
|
|
1364 |
], |
|
|
1365 |
"source": [ |
|
|
1366 |
"#cumulative distribution of variations \n", |
|
|
1367 |
"cdf2 = np.cumsum(h2)\n", |
|
|
1368 |
"plt.plot(cdf2, color =\"green\", label = \"Cumulative Distribution of Variations\")\n", |
|
|
1369 |
"plt.legend()\n", |
|
|
1370 |
"plt.grid()\n", |
|
|
1371 |
"plt.show()\n", |
|
|
1372 |
"print(\"Constant growth of cdf graph, meaning almost all genes contribute equally to the dataset\")" |
|
|
1373 |
] |
|
|
1374 |
}, |
|
|
1375 |
{ |
|
|
1376 |
"cell_type": "code", |
|
|
1377 |
"execution_count": 32, |
|
|
1378 |
"metadata": {}, |
|
|
1379 |
"outputs": [ |
|
|
1380 |
{ |
|
|
1381 |
"name": "stdout", |
|
|
1382 |
"output_type": "stream", |
|
|
1383 |
"text": [ |
|
|
1384 |
"Here's the first 10 items in the Variation array after response coding: \n", |
|
|
1385 |
"\n", |
|
|
1386 |
"('Truncating_Mutations', [0.027463651050080775, 0.0008077544426494346, 0.0004038772213247173, 0.0008077544426494346, 0.0004038772213247173, 0.0008077544426494346, 0.0004038772213247173, 0.0004038772213247173, 0.0004038772213247173])\n", |
|
|
1387 |
"('Amplification', [0.00040567951318458417, 0.008113590263691683, 0.00040567951318458417, 0.00040567951318458417, 0.00040567951318458417, 0.004056795131845842, 0.012981744421906694, 0.00040567951318458417, 0.00040567951318458417])\n", |
|
|
1388 |
"('Deletion', [0.017864393016646368, 0.0004060089321965083, 0.0004060089321965083, 0.005684125050751117, 0.0004060089321965083, 0.0008120178643930166, 0.0004060089321965083, 0.0004060089321965083, 0.0004060089321965083])\n", |
|
|
1389 |
"('Fusions', [0.0012325390304026294, 0.010682004930156122, 0.0004108463434675431, 0.0004108463434675431, 0.0004108463434675431, 0.0004108463434675431, 0.0004108463434675431, 0.0008216926869350862, 0.0004108463434675431])\n", |
|
|
1390 |
"('Overexpression', [0.00041476565740356696, 0.001244296972210701, 0.00041476565740356696, 0.00041476565740356696, 0.00041476565740356696, 0.00041476565740356696, 0.0016590626296142678, 0.00041476565740356696, 0.00041476565740356696])\n", |
|
|
1391 |
"('G12V', [0.0004149377593360996, 0.0004149377593360996, 0.0004149377593360996, 0.0004149377593360996, 0.0004149377593360996, 0.0004149377593360996, 0.002074688796680498, 0.0004149377593360996, 0.0004149377593360996])\n", |
|
|
1392 |
"('Q61L', [0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.0016604400166044002, 0.00041511000415110004, 0.00041511000415110004])\n", |
|
|
1393 |
"('E17K', [0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.00041511000415110004, 0.0016604400166044002, 0.00041511000415110004, 0.00041511000415110004])\n", |
|
|
1394 |
"('F384L', [0.0004152823920265781, 0.0008305647840531562, 0.0004152823920265781, 0.0004152823920265781, 0.0008305647840531562, 0.0004152823920265781, 0.0004152823920265781, 0.0004152823920265781, 0.0004152823920265781])\n", |
|
|
1395 |
"('Q209L', [0.0004152823920265781, 0.0004152823920265781, 0.0004152823920265781, 0.0004152823920265781, 0.0004152823920265781, 0.0004152823920265781, 0.0012458471760797341, 0.0004152823920265781, 0.0004152823920265781])\n", |
|
|
1396 |
"\n", |
|
|
1397 |
"\n", |
|
|
1398 |
"From the first 10 variations shown above, we can see that if it is a Truncating Mutation, it has the highest probability to belong to class 1\n" |
|
|
1399 |
] |
|
|
1400 |
} |
|
|
1401 |
], |
|
|
1402 |
"source": [ |
|
|
1403 |
"#Response Coding of variations\n", |
|
|
1404 |
"def variation_response_coding(df):\n", |
|
|
1405 |
" var_dict = dict()\n", |
|
|
1406 |
" values = df['Variation'].value_counts()\n", |
|
|
1407 |
" for var, freq in values.items():\n", |
|
|
1408 |
" prob_vec = []\n", |
|
|
1409 |
" for cancer_class in range(1,10):\n", |
|
|
1410 |
" class_occurence = df.loc[(df['Class'] == cancer_class) & (df['Variation'] == var)]\n", |
|
|
1411 |
" prob_vec.append((class_occurence.shape[0] + alpha)/(freq + (alpha * values.shape[0])))\n", |
|
|
1412 |
" var_dict[var] = prob_vec\n", |
|
|
1413 |
" \n", |
|
|
1414 |
" return var_dict\n", |
|
|
1415 |
"\n", |
|
|
1416 |
"\n", |
|
|
1417 |
"train_var_responseCoding = variation_response_coding(X_train)\n", |
|
|
1418 |
"cv_var_responseCoding = variation_response_coding(X_vaildation)\n", |
|
|
1419 |
"test_var_responseCoding = variation_response_coding(X_test)\n", |
|
|
1420 |
"print(\"Here's the first 10 items in the Variation array after response coding: \\n\")\n", |
|
|
1421 |
"from itertools import islice\n", |
|
|
1422 |
"n_items2 = list(islice(train_var_responseCoding.items(), 10))\n", |
|
|
1423 |
"for i in range(0,10):\n", |
|
|
1424 |
" print(n_items2[i]) \n", |
|
|
1425 |
"\n", |
|
|
1426 |
"print(\"\\n\")\n", |
|
|
1427 |
"print(\"From the first 10 variations shown above, we can see that if it is a Truncating Mutation, it has the highest probability to belong to class 1\")" |
|
|
1428 |
] |
|
|
1429 |
}, |
|
|
1430 |
{ |
|
|
1431 |
"cell_type": "code", |
|
|
1432 |
"execution_count": 33, |
|
|
1433 |
"metadata": {}, |
|
|
1434 |
"outputs": [ |
|
|
1435 |
{ |
|
|
1436 |
"name": "stdout", |
|
|
1437 |
"output_type": "stream", |
|
|
1438 |
"text": [ |
|
|
1439 |
"The 'Variation' column of the training dataset once transformed using one hot encoding has shape: (2656, 2406) \n", |
|
|
1440 |
"\n", |
|
|
1441 |
"Printing the first row: \n", |
|
|
1442 |
" (0, 1765)\t1.0\n" |
|
|
1443 |
] |
|
|
1444 |
} |
|
|
1445 |
], |
|
|
1446 |
"source": [ |
|
|
1447 |
"#one-hot encoding of variations \n", |
|
|
1448 |
"\n", |
|
|
1449 |
"train_var_oneHotEncoding = encoder.fit_transform(X_train[['Variation']])\n", |
|
|
1450 |
"cv_var_oneHotEncoding = encoder.transform(X_vaildation[['Variation']])\n", |
|
|
1451 |
"test_var_oneHotEncoding = encoder.transform(X_test[['Variation']])\n", |
|
|
1452 |
"\n", |
|
|
1453 |
"\n", |
|
|
1454 |
"print(\"The 'Variation' column of the training dataset once transformed using one hot encoding has shape: \", train_var_oneHotEncoding.shape, \"\\n\")\n", |
|
|
1455 |
"print(\"Printing the first row: \")\n", |
|
|
1456 |
"print(train_var_oneHotEncoding[1])" |
|
|
1457 |
] |
|
|
1458 |
}, |
|
|
1459 |
{ |
|
|
1460 |
"cell_type": "code", |
|
|
1461 |
"execution_count": 34, |
|
|
1462 |
"metadata": {}, |
|
|
1463 |
"outputs": [ |
|
|
1464 |
{ |
|
|
1465 |
"name": "stdout", |
|
|
1466 |
"output_type": "stream", |
|
|
1467 |
"text": [ |
|
|
1468 |
"When model trained on just 'Variation' feature, the log loss for test data is 1.799630234372917\n" |
|
|
1469 |
] |
|
|
1470 |
}, |
|
|
1471 |
{ |
|
|
1472 |
"name": "stderr", |
|
|
1473 |
"output_type": "stream", |
|
|
1474 |
"text": [ |
|
|
1475 |
"c:\\Users\\chawl\\anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:676: UserWarning: The least populated class in y has only 1 members, which is less than n_splits=5.\n", |
|
|
1476 |
" warnings.warn(\n" |
|
|
1477 |
] |
|
|
1478 |
} |
|
|
1479 |
], |
|
|
1480 |
"source": [ |
|
|
1481 |
"#Building a model just based on 'Variation' feature and seeing how effective it is in prediciting 'Class'\n", |
|
|
1482 |
"#for future purposes, alpha could be varied to see how the model performance increases or decreses, but for my first project I'll just go with default alpha = 0.0001\n", |
|
|
1483 |
"\n", |
|
|
1484 |
"sgdc_var_model = SGDClassifier() # default method = 'sigmoid' (logistic regression model) \n", |
|
|
1485 |
"sgdc_var_model.fit(train_var_oneHotEncoding, y_train)\n", |
|
|
1486 |
"\n", |
|
|
1487 |
"#Calibrated Classification\n", |
|
|
1488 |
"calibrator2 = CalibratedClassifierCV(sgdc_var_model)\n", |
|
|
1489 |
"calibrator2.fit(cv_var_oneHotEncoding, y_validation)\n", |
|
|
1490 |
"ypredict_cal_test2 = calibrator2.predict_proba(test_var_oneHotEncoding) \n", |
|
|
1491 |
"\n", |
|
|
1492 |
"log_loss_test_var = log_loss(y_test, ypredict_cal_test2, labels=sgdc_var_model.classes_)\n", |
|
|
1493 |
"print(\"When model trained on just 'Variation' feature, the log loss for test data is \", log_loss_test_var)" |
|
|
1494 |
] |
|
|
1495 |
}, |
|
|
1496 |
{ |
|
|
1497 |
"attachments": {}, |
|
|
1498 |
"cell_type": "markdown", |
|
|
1499 |
"metadata": {}, |
|
|
1500 |
"source": [ |
|
|
1501 |
"'Text' Feature " |
|
|
1502 |
] |
|
|
1503 |
}, |
|
|
1504 |
{ |
|
|
1505 |
"cell_type": "code", |
|
|
1506 |
"execution_count": 35, |
|
|
1507 |
"metadata": {}, |
|
|
1508 |
"outputs": [ |
|
|
1509 |
{ |
|
|
1510 |
"name": "stdout", |
|
|
1511 |
"output_type": "stream", |
|
|
1512 |
"text": [ |
|
|
1513 |
"Total number of unique words in training set: 138265\n", |
|
|
1514 |
"Total number of unique words in cross-validation set: 54558\n", |
|
|
1515 |
"Total number of unique words in testing set: 53565 \n", |
|
|
1516 |
"\n", |
|
|
1517 |
"Percentage of words in cross-validation set that have not been encountered in the training dataset = 14.10059019758789\n", |
|
|
1518 |
"Percentage of words in testing set that have not been encountered in the training dataset = 14.177167926817885\n" |
|
|
1519 |
] |
|
|
1520 |
} |
|
|
1521 |
], |
|
|
1522 |
"source": [ |
|
|
1523 |
"#Overlap between Train, CV and Test set \n", |
|
|
1524 |
"\n", |
|
|
1525 |
"from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n", |
|
|
1526 |
"\n", |
|
|
1527 |
"train_text_allwords = CountVectorizer()\n", |
|
|
1528 |
"train_text_allwords_vec = train_text_allwords.fit_transform(X_train['Text'])\n", |
|
|
1529 |
"print(\"Total number of unique words in training set: \", len(train_text_allwords.vocabulary_))\n", |
|
|
1530 |
"\n", |
|
|
1531 |
"text_cv_vectorizer = CountVectorizer()\n", |
|
|
1532 |
"validation_text_onehotencoding = text_cv_vectorizer.fit_transform(X_vaildation['Text'])\n", |
|
|
1533 |
"print(\"Total number of unique words in cross-validation set: \", len(text_cv_vectorizer.vocabulary_))\n", |
|
|
1534 |
"\n", |
|
|
1535 |
"text_test_vectorizer = CountVectorizer()\n", |
|
|
1536 |
"test_text_onehotencoding = text_test_vectorizer.fit_transform(X_test['Text'])\n", |
|
|
1537 |
"print(\"Total number of unique words in testing set: \", len(text_test_vectorizer.vocabulary_), \"\\n\")\n", |
|
|
1538 |
"\n", |
|
|
1539 |
"counter5 =0\n", |
|
|
1540 |
"for i in text_cv_vectorizer.vocabulary_.keys():\n", |
|
|
1541 |
" if i not in train_text_allwords.vocabulary_.keys():\n", |
|
|
1542 |
" counter5 +=1\n", |
|
|
1543 |
"\n", |
|
|
1544 |
"#print(counter5)\n", |
|
|
1545 |
"\n", |
|
|
1546 |
"print(\"Percentage of words in cross-validation set that have not been encountered in the training dataset = \", (counter5/len(text_cv_vectorizer.vocabulary_))*100)\n", |
|
|
1547 |
"\n", |
|
|
1548 |
"\n", |
|
|
1549 |
"counter6 =0\n", |
|
|
1550 |
"for i in text_test_vectorizer.vocabulary_.keys():\n", |
|
|
1551 |
" if i not in train_text_allwords.vocabulary_.keys():\n", |
|
|
1552 |
" counter6 +=1\n", |
|
|
1553 |
"\n", |
|
|
1554 |
"\n", |
|
|
1555 |
"print(\"Percentage of words in testing set that have not been encountered in the training dataset = \", (counter6/len(text_test_vectorizer.vocabulary_))*100)\n" |
|
|
1556 |
] |
|
|
1557 |
}, |
|
|
1558 |
{ |
|
|
1559 |
"cell_type": "code", |
|
|
1560 |
"execution_count": 36, |
|
|
1561 |
"metadata": {}, |
|
|
1562 |
"outputs": [ |
|
|
1563 |
{ |
|
|
1564 |
"name": "stderr", |
|
|
1565 |
"output_type": "stream", |
|
|
1566 |
"text": [ |
|
|
1567 |
"c:\\Users\\chawl\\anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:87: FutureWarning: Function get_feature_names is deprecated; get_feature_names is deprecated in 1.0 and will be removed in 1.2. Please use get_feature_names_out instead.\n", |
|
|
1568 |
" warnings.warn(msg, category=FutureWarning)\n" |
|
|
1569 |
] |
|
|
1570 |
}, |
|
|
1571 |
{ |
|
|
1572 |
"name": "stdout", |
|
|
1573 |
"output_type": "stream", |
|
|
1574 |
"text": [ |
|
|
1575 |
"Total number of unique words that occured atleast 5 times in training set: 43391\n" |
|
|
1576 |
] |
|
|
1577 |
} |
|
|
1578 |
], |
|
|
1579 |
"source": [ |
|
|
1580 |
"# one-hot encoding \n", |
|
|
1581 |
"#for words that occured atleast five times in the dataset \n", |
|
|
1582 |
"\n", |
|
|
1583 |
"\n", |
|
|
1584 |
"#building TfidVectorizer with all words that occured min 5 times in training data\n", |
|
|
1585 |
"\n", |
|
|
1586 |
"text_vectorizer = TfidfVectorizer(min_df =5, binary=True, use_idf=True)\n", |
|
|
1587 |
"train_text_onehotencoding = text_vectorizer.fit_transform(X_train['Text'])\n", |
|
|
1588 |
"# getting all the feature names (words)\n", |
|
|
1589 |
"train_text_features= text_vectorizer.get_feature_names()\n", |
|
|
1590 |
"print(\"Total number of unique words that occured atleast 5 times in training set: \", len(train_text_features))\n", |
|
|
1591 |
"\n", |
|
|
1592 |
"cv_text_onehotencoding = text_vectorizer.transform(X_vaildation['Text'])\n", |
|
|
1593 |
"\n", |
|
|
1594 |
"test_text_onehotencoding = text_vectorizer.transform(X_test['Text'])\n", |
|
|
1595 |
"\n", |
|
|
1596 |
"\n", |
|
|
1597 |
"#normalizing to [0,1]\n", |
|
|
1598 |
"from sklearn.preprocessing import normalize\n", |
|
|
1599 |
"train_text_onehotencoding = normalize(train_text_onehotencoding, axis =0)\n", |
|
|
1600 |
"cv_text_onehotencoding = normalize(cv_text_onehotencoding, axis =0)\n", |
|
|
1601 |
"test_text_onehotencoding = normalize(test_text_onehotencoding, axis =0)\n" |
|
|
1602 |
] |
|
|
1603 |
}, |
|
|
1604 |
{ |
|
|
1605 |
"cell_type": "code", |
|
|
1606 |
"execution_count": 37, |
|
|
1607 |
"metadata": {}, |
|
|
1608 |
"outputs": [ |
|
|
1609 |
{ |
|
|
1610 |
"name": "stdout", |
|
|
1611 |
"output_type": "stream", |
|
|
1612 |
"text": [ |
|
|
1613 |
"When model trained on just 'Text' feature, the log loss for test data is 1.3097283788034129\n" |
|
|
1614 |
] |
|
|
1615 |
} |
|
|
1616 |
], |
|
|
1617 |
"source": [ |
|
|
1618 |
"#building a model based on just 'Text' feature to see how well it is able to predict class\n", |
|
|
1619 |
"\n", |
|
|
1620 |
"sgdc_text_model = SGDClassifier(loss = 'log', random_state=42, penalty=\"l2\") # default method = 'sigmoid' (logistic regression model) \n", |
|
|
1621 |
"sgdc_text_model.fit(train_text_onehotencoding, y_train)\n", |
|
|
1622 |
"\n", |
|
|
1623 |
"#Calibrated Classification\n", |
|
|
1624 |
"calibrator3 = CalibratedClassifierCV(sgdc_text_model, method = 'sigmoid')\n", |
|
|
1625 |
"calibrator3.fit(train_text_onehotencoding, y_train)\n", |
|
|
1626 |
"predict_y = calibrator3.predict_proba(cv_text_onehotencoding) \n", |
|
|
1627 |
"\n", |
|
|
1628 |
"log_loss_test_text = log_loss(y_validation, predict_y, labels=sgdc_text_model.classes_)\n", |
|
|
1629 |
"print(\"When model trained on just 'Text' feature, the log loss for test data is \", log_loss_test_text)" |
|
|
1630 |
] |
|
|
1631 |
}, |
|
|
1632 |
{ |
|
|
1633 |
"attachments": {}, |
|
|
1634 |
"cell_type": "markdown", |
|
|
1635 |
"metadata": {}, |
|
|
1636 |
"source": [ |
|
|
1637 |
"Stacking all 3 features to prepare for model " |
|
|
1638 |
] |
|
|
1639 |
}, |
|
|
1640 |
{ |
|
|
1641 |
"cell_type": "code", |
|
|
1642 |
"execution_count": 38, |
|
|
1643 |
"metadata": {}, |
|
|
1644 |
"outputs": [ |
|
|
1645 |
{ |
|
|
1646 |
"name": "stdout", |
|
|
1647 |
"output_type": "stream", |
|
|
1648 |
"text": [ |
|
|
1649 |
"(2656, 244)\n", |
|
|
1650 |
"<class 'scipy.sparse.csr.csr_matrix'>\n", |
|
|
1651 |
"(2656, 2406)\n", |
|
|
1652 |
"<class 'scipy.sparse.csr.csr_matrix'>\n" |
|
|
1653 |
] |
|
|
1654 |
} |
|
|
1655 |
], |
|
|
1656 |
"source": [ |
|
|
1657 |
"print(train_gene_oneHotEncoding.shape)\n", |
|
|
1658 |
"print(type(train_gene_oneHotEncoding))\n", |
|
|
1659 |
"print(train_var_oneHotEncoding.shape)\n", |
|
|
1660 |
"print(type(train_var_oneHotEncoding))" |
|
|
1661 |
] |
|
|
1662 |
}, |
|
|
1663 |
{ |
|
|
1664 |
"cell_type": "code", |
|
|
1665 |
"execution_count": 39, |
|
|
1666 |
"metadata": {}, |
|
|
1667 |
"outputs": [], |
|
|
1668 |
"source": [ |
|
|
1669 |
"from scipy.sparse import hstack\n", |
|
|
1670 |
"\n", |
|
|
1671 |
"train_gv_ohc = hstack((train_var_oneHotEncoding, train_gene_oneHotEncoding))\n", |
|
|
1672 |
"cv_gv_ohc = hstack((cv_gene_oneHotEncoding, cv_var_oneHotEncoding))\n", |
|
|
1673 |
"test_gv_ohc = hstack((test_gene_oneHotEncoding, test_var_oneHotEncoding))\n", |
|
|
1674 |
"\n", |
|
|
1675 |
"train_X_onehotencoding = hstack((train_gv_ohc, train_text_onehotencoding))\n", |
|
|
1676 |
"\n", |
|
|
1677 |
"cv_X_onehotencoding = hstack((cv_gv_ohc, cv_text_onehotencoding))\n", |
|
|
1678 |
"\n", |
|
|
1679 |
"test_X_onehotencoding = hstack((test_gv_ohc, test_text_onehotencoding))\n" |
|
|
1680 |
] |
|
|
1681 |
}, |
|
|
1682 |
{ |
|
|
1683 |
"cell_type": "code", |
|
|
1684 |
"execution_count": 40, |
|
|
1685 |
"metadata": {}, |
|
|
1686 |
"outputs": [ |
|
|
1687 |
{ |
|
|
1688 |
"name": "stdout", |
|
|
1689 |
"output_type": "stream", |
|
|
1690 |
"text": [ |
|
|
1691 |
"(Number of records, number of features) in the final dataset use for training is: (2656, 46041)\n", |
|
|
1692 |
"(Number of records, number of features) in the final dataset use for cross-validation is: (332, 46041)\n", |
|
|
1693 |
"(Number of records, number of features) in the final dataset use for testing is: (333, 46041)\n" |
|
|
1694 |
] |
|
|
1695 |
} |
|
|
1696 |
], |
|
|
1697 |
"source": [ |
|
|
1698 |
"#Final dataset features \n", |
|
|
1699 |
"\n", |
|
|
1700 |
"print(\"(Number of records, number of features) in the final dataset use for training is: \", train_X_onehotencoding.shape)\n", |
|
|
1701 |
"print(\"(Number of records, number of features) in the final dataset use for cross-validation is: \", cv_X_onehotencoding.shape)\n", |
|
|
1702 |
"print(\"(Number of records, number of features) in the final dataset use for testing is: \", test_X_onehotencoding.shape)" |
|
|
1703 |
] |
|
|
1704 |
}, |
|
|
1705 |
{ |
|
|
1706 |
"attachments": {}, |
|
|
1707 |
"cell_type": "markdown", |
|
|
1708 |
"metadata": {}, |
|
|
1709 |
"source": [ |
|
|
1710 |
"#### Machine Learning Models" |
|
|
1711 |
] |
|
|
1712 |
}, |
|
|
1713 |
{ |
|
|
1714 |
"attachments": {}, |
|
|
1715 |
"cell_type": "markdown", |
|
|
1716 |
"metadata": {}, |
|
|
1717 |
"source": [ |
|
|
1718 |
"Linear Support Vector Machine " |
|
|
1719 |
] |
|
|
1720 |
}, |
|
|
1721 |
{ |
|
|
1722 |
"cell_type": "code", |
|
|
1723 |
"execution_count": 41, |
|
|
1724 |
"metadata": {}, |
|
|
1725 |
"outputs": [ |
|
|
1726 |
{ |
|
|
1727 |
"name": "stdout", |
|
|
1728 |
"output_type": "stream", |
|
|
1729 |
"text": [ |
|
|
1730 |
"Log Loss with Support Vector Machine on Training set: 0.49413293509235245\n", |
|
|
1731 |
"Log Loss with Support Vector Machine on Cross-Validatiob set: 1.379463690206224\n", |
|
|
1732 |
"Log Loss with Support Vector Machine on Testing set: 1.2134525598397619\n" |
|
|
1733 |
] |
|
|
1734 |
} |
|
|
1735 |
], |
|
|
1736 |
"source": [ |
|
|
1737 |
"svm = SGDClassifier(loss='hinge', random_state=42) \n", |
|
|
1738 |
"#loss ='hinge' gives linear SVM\n", |
|
|
1739 |
"#default penalty='l2' which is the standard regulizer for SVM \n", |
|
|
1740 |
"\n", |
|
|
1741 |
"svm.fit(train_X_onehotencoding, y_train)\n", |
|
|
1742 |
"calibrated_svm = CalibratedClassifierCV(svm, method= 'sigmoid')\n", |
|
|
1743 |
"calibrated_svm.fit(train_X_onehotencoding, y_train)\n", |
|
|
1744 |
"calibrated_svm_cv_predict = calibrated_svm.predict_proba(cv_X_onehotencoding)\n", |
|
|
1745 |
"calibrated_svm_train_predict = calibrated_svm.predict_proba(train_X_onehotencoding)\n", |
|
|
1746 |
"calibrated_svm_test_predict = calibrated_svm.predict_proba(test_X_onehotencoding)\n", |
|
|
1747 |
"log_loss_svm_cv = log_loss(y_validation, calibrated_svm_cv_predict)\n", |
|
|
1748 |
"log_loss_svm_train = log_loss(y_train, calibrated_svm_train_predict)\n", |
|
|
1749 |
"log_loss_svm_test = log_loss(y_test, calibrated_svm_test_predict)\n", |
|
|
1750 |
"\n", |
|
|
1751 |
"\n", |
|
|
1752 |
"print(\"Log Loss with Support Vector Machine on Training set: \", log_loss_svm_train)\n", |
|
|
1753 |
"print(\"Log Loss with Support Vector Machine on Cross-Validatiob set: \", log_loss_svm_cv)\n", |
|
|
1754 |
"print(\"Log Loss with Support Vector Machine on Testing set: \", log_loss_svm_test)\n", |
|
|
1755 |
"\n", |
|
|
1756 |
"\n" |
|
|
1757 |
] |
|
|
1758 |
}, |
|
|
1759 |
{ |
|
|
1760 |
"attachments": {}, |
|
|
1761 |
"cell_type": "markdown", |
|
|
1762 |
"metadata": {}, |
|
|
1763 |
"source": [ |
|
|
1764 |
"##### Evaluating The SVM Model Performance " |
|
|
1765 |
] |
|
|
1766 |
}, |
|
|
1767 |
{ |
|
|
1768 |
"cell_type": "code", |
|
|
1769 |
"execution_count": 42, |
|
|
1770 |
"metadata": {}, |
|
|
1771 |
"outputs": [ |
|
|
1772 |
{ |
|
|
1773 |
"name": "stdout", |
|
|
1774 |
"output_type": "stream", |
|
|
1775 |
"text": [ |
|
|
1776 |
" precision recall f1-score support\n", |
|
|
1777 |
"\n", |
|
|
1778 |
" 1 0.74 0.45 0.56 56\n", |
|
|
1779 |
" 2 0.72 0.46 0.56 46\n", |
|
|
1780 |
" 3 0.33 0.33 0.33 6\n", |
|
|
1781 |
" 4 0.64 0.76 0.70 74\n", |
|
|
1782 |
" 5 0.41 0.33 0.37 21\n", |
|
|
1783 |
" 6 0.81 0.64 0.71 33\n", |
|
|
1784 |
" 7 0.63 0.91 0.74 87\n", |
|
|
1785 |
" 8 0.00 0.00 0.00 2\n", |
|
|
1786 |
" 9 0.71 0.62 0.67 8\n", |
|
|
1787 |
"\n", |
|
|
1788 |
" accuracy 0.65 333\n", |
|
|
1789 |
" macro avg 0.56 0.50 0.51 333\n", |
|
|
1790 |
"weighted avg 0.66 0.65 0.63 333\n", |
|
|
1791 |
"\n" |
|
|
1792 |
] |
|
|
1793 |
} |
|
|
1794 |
], |
|
|
1795 |
"source": [ |
|
|
1796 |
"from sklearn.metrics import classification_report\n", |
|
|
1797 |
"\n", |
|
|
1798 |
"y_test_predict = calibrated_svm.predict(test_X_onehotencoding)\n", |
|
|
1799 |
"print(classification_report(y_test, y_test_predict, zero_division =0))" |
|
|
1800 |
] |
|
|
1801 |
}, |
|
|
1802 |
{ |
|
|
1803 |
"cell_type": "code", |
|
|
1804 |
"execution_count": 63, |
|
|
1805 |
"metadata": {}, |
|
|
1806 |
"outputs": [ |
|
|
1807 |
{ |
|
|
1808 |
"data": { |
|
|
1809 |
"image/png": "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", |
|
|
1810 |
"text/plain": [ |
|
|
1811 |
"<Figure size 640x480 with 2 Axes>" |
|
|
1812 |
] |
|
|
1813 |
}, |
|
|
1814 |
"metadata": {}, |
|
|
1815 |
"output_type": "display_data" |
|
|
1816 |
} |
|
|
1817 |
], |
|
|
1818 |
"source": [ |
|
|
1819 |
"from sklearn.metrics import plot_confusion_matrix, confusion_matrix,ConfusionMatrixDisplay\n", |
|
|
1820 |
"confusion_matrix_svm = confusion_matrix(y_test, y_test_predict)\n", |
|
|
1821 |
"disp = ConfusionMatrixDisplay(confusion_matrix=confusion_matrix_svm, display_labels=calibrated_svm.classes_)\n", |
|
|
1822 |
"disp.plot(cmap = \"PuRd\")\n", |
|
|
1823 |
"plt.xlabel(\"Predicted Class\")\n", |
|
|
1824 |
"plt.ylabel(\"True Class\")\n", |
|
|
1825 |
"plt.title(\"Confusion Matrix for SVM model\")\n", |
|
|
1826 |
"plt.show()" |
|
|
1827 |
] |
|
|
1828 |
} |
|
|
1829 |
], |
|
|
1830 |
"metadata": { |
|
|
1831 |
"kernelspec": { |
|
|
1832 |
"display_name": "base", |
|
|
1833 |
"language": "python", |
|
|
1834 |
"name": "python3" |
|
|
1835 |
}, |
|
|
1836 |
"language_info": { |
|
|
1837 |
"codemirror_mode": { |
|
|
1838 |
"name": "ipython", |
|
|
1839 |
"version": 3 |
|
|
1840 |
}, |
|
|
1841 |
"file_extension": ".py", |
|
|
1842 |
"mimetype": "text/x-python", |
|
|
1843 |
"name": "python", |
|
|
1844 |
"nbconvert_exporter": "python", |
|
|
1845 |
"pygments_lexer": "ipython3", |
|
|
1846 |
"version": "3.9.12" |
|
|
1847 |
}, |
|
|
1848 |
"orig_nbformat": 4 |
|
|
1849 |
}, |
|
|
1850 |
"nbformat": 4, |
|
|
1851 |
"nbformat_minor": 2 |
|
|
1852 |
} |