Switch to unified view

a b/scripts/Multi-Lead-DataFrame-Update.ipynb
1
{
2
 "cells": [
3
  {
4
   "cell_type": "code",
5
   "execution_count": 1,
6
   "id": "f5a54e19",
7
   "metadata": {},
8
   "outputs": [],
9
   "source": [
10
    "import pandas as pd\n",
11
    "import numpy as np\n",
12
    "import cv2\n",
13
    "import matplotlib.pyplot as plt\n",
14
    "import seaborn as sn\n",
15
    "import os.path, sys, re\n",
16
    "import time\n",
17
    "from PIL import Image\n",
18
    "\n",
19
    "from sktime.utils.data_processing import (\n",
20
    "    from_3d_numpy_to_nested,\n",
21
    "    from_multi_index_to_3d_numpy,\n",
22
    "    from_nested_to_3d_numpy,\n",
23
    "    from_multi_index_to_nested,\n",
24
    "    from_nested_to_multi_index,\n",
25
    ")\n",
26
    "\n",
27
    "from sklearn.model_selection import train_test_split\n",
28
    "from sklearn.pipeline import Pipeline\n",
29
    "import sklearn.metrics as metrics\n",
30
    "from sklearn.model_selection import StratifiedShuffleSplit\n",
31
    "from sklearn.model_selection import cross_val_predict\n",
32
    "\n",
33
    "from sktime.classification.compose import ColumnEnsembleClassifier\n",
34
    "from sktime.classification.dictionary_based import BOSSEnsemble\n",
35
    "from sktime.classification.interval_based import TimeSeriesForestClassifier\n",
36
    "from sktime.classification.shapelet_based import MrSEQLClassifier\n",
37
    "from sktime.datasets import load_basic_motions\n",
38
    "from sktime.transformations.panel.compose import ColumnConcatenator\n"
39
   ]
40
  },
41
  {
42
   "cell_type": "code",
43
   "execution_count": 2,
44
   "id": "70e3cc1c",
45
   "metadata": {},
46
   "outputs": [
47
    {
48
     "name": "stdout",
49
     "output_type": "stream",
50
     "text": [
51
      "/home/moise/Desktop/Data_Science/Erdos_Institute/ecg-proj/ecg-copy\n"
52
     ]
53
    }
54
   ],
55
   "source": [
56
    "cd ~/Desktop/Data_Science/Erdos_Institute/ecg-proj/ecg-copy/"
57
   ]
58
  },
59
  {
60
   "cell_type": "markdown",
61
   "id": "f0cdc5d0",
62
   "metadata": {},
63
   "source": [
64
    "### Data Preprocessing task"
65
   ]
66
  },
67
  {
68
   "cell_type": "code",
69
   "execution_count": 3,
70
   "id": "96b63a75",
71
   "metadata": {},
72
   "outputs": [],
73
   "source": [
74
    "pathroot = \"CSV_data_v2/\""
75
   ]
76
  },
77
  {
78
   "cell_type": "code",
79
   "execution_count": 4,
80
   "id": "952c9fcc",
81
   "metadata": {},
82
   "outputs": [],
83
   "source": [
84
    "LeadDict={'Lead1':np.array([[]]),'Lead2':np.array([[]]),'Lead3':np.array([[]]),'Lead4':np.array([[]]),\n",
85
    "          'Lead5':np.array([[]]),'Lead6':np.array([[]]),'Lead7':np.array([[]]),'Lead8':np.array([[]]),\n",
86
    "         'Lead9':np.array([[]]),'Lead10':np.array([[]]),'Lead11':np.array([[]]),'Lead12':np.array([[]])}"
87
   ]
88
  },
89
  {
90
   "cell_type": "code",
91
   "execution_count": 5,
92
   "id": "b25f602e",
93
   "metadata": {},
94
   "outputs": [],
95
   "source": [
96
    "leadMinLen = {'Lead1':0,'Lead2':0,'Lead3':0,'Lead4':0,'Lead5':0,'Lead6':0,\n",
97
    "           'Lead7':0,'Lead8':0,'Lead9':0,'Lead10':0,'Lead11':0,'Lead12':0}"
98
   ]
99
  },
100
  {
101
   "cell_type": "code",
102
   "execution_count": 6,
103
   "id": "34d659e8",
104
   "metadata": {},
105
   "outputs": [],
106
   "source": [
107
    "ClassLabels={'ECGImagesofPatientthathaveHistoryofMI':0,'ECGImagesofPatientthathaveabnormalheartbeat':1,\n",
108
    "            'ECGImagesofCOVID-19Patients':2,'NormalPersonECGImages':3,'ECGImagesofMyocardialInfarctionPatients':4}"
109
   ]
110
  },
111
  {
112
   "cell_type": "code",
113
   "execution_count": 7,
114
   "id": "4bfdbe9c",
115
   "metadata": {},
116
   "outputs": [],
117
   "source": [
118
    "\"\"\"\n",
119
    "For every \"x\" value of the signal, average the \"y\" values over duplicates.\n",
120
    "\n",
121
    "Inputs:\n",
122
    "-------\n",
123
    "df  data frame of two columns containing the signal \"x\" and \"y\" coordinates corresponding to \"active\" pixels\n",
124
    "\n",
125
    "Outputs:\n",
126
    "--------\n",
127
    "signal numpy array of unique values (\"y\") of the signal\n",
128
    "\"\"\"\n",
129
    "def uniqValsSignal(df):\n",
130
    "    xdf=df[0].to_numpy()\n",
131
    "    ydf=df[1].to_numpy()\n",
132
    "    unikVals = pd.unique(xdf)\n",
133
    "    signal = np.zeros(len(unikVals))\n",
134
    "    for i in range(len(unikVals)):\n",
135
    "        mask = (xdf==unikVals[i])\n",
136
    "        signal[i] = np.mean(ydf[mask])\n",
137
    "    return signal"
138
   ]
139
  },
140
  {
141
   "cell_type": "code",
142
   "execution_count": 8,
143
   "id": "3a10f67e",
144
   "metadata": {
145
    "scrolled": true
146
   },
147
   "outputs": [
148
    {
149
     "name": "stdout",
150
     "output_type": "stream",
151
     "text": [
152
      "Processing ECGImagesofPatientthathaveHistoryofMI folder ...\n",
153
      "2064 files processed in this folder in 19 sec...\n",
154
      "\n",
155
      "Processing ECGImagesofPatientthathaveabnormalheartbeat folder ...\n",
156
      "2796 files processed in this folder in 29 sec...\n",
157
      "\n",
158
      "Processing ECGImagesofCOVID-19Patients folder ...\n",
159
      "3000 files processed in this folder in 14 sec...\n",
160
      "\n",
161
      "Processing NormalPersonECGImages folder ...\n",
162
      "3408 files processed in this folder in 33 sec...\n",
163
      "\n",
164
      "Processing ECGImagesofMyocardialInfarctionPatients folder ...\n",
165
      "2868 files processed in this folder in 28 sec...\n",
166
      "\n"
167
     ]
168
    }
169
   ],
170
   "source": [
171
    "\"\"\"\n",
172
    "Note:\n",
173
    "-----\n",
174
    "\n",
175
    "1) For the \"time series\", only the second column of every lead is extracted as signal.\n",
176
    "2) Because of non-uniformity in signal lenght across both observations and Leads, the code\n",
177
    "uses the minimum signal length across observation and leads, in order to make the date \"proper\n",
178
    "for multivariate time series classification.\n",
179
    "\"\"\"\n",
180
    "\n",
181
    "labelArr = np.array([])\n",
182
    "for dirs in os.listdir(pathroot):\n",
183
    "#     if dirs == 'ECGImagesofCOVID-19Patients':\n",
184
    "#         continue\n",
185
    "    t = time.time()\n",
186
    "    count = 0\n",
187
    "    print('Processing {0} folder ...'.format(dirs))\n",
188
    "    if not os.path.isfile(dirs):\n",
189
    "        for item in os.listdir(os.path.join(pathroot,dirs)):\n",
190
    "            #print('Processing {0} file ...'.format(item))\n",
191
    "            of, oe = os.path.splitext(item)\n",
192
    "            if of[0]=='.':\n",
193
    "                continue\n",
194
    "            else:\n",
195
    "                signal = pd.read_csv(os.path.join(pathroot,os.path.join(dirs,item)),header=None,sep=' ')#[1].to_numpy()\n",
196
    "                signal = uniqValsSignal(signal)\n",
197
    "            try:\n",
198
    "                leadNum = int(of[-2:])\n",
199
    "            except ValueError:\n",
200
    "                leadNum = int(of[-1:])\n",
201
    "            finally:\n",
202
    "                leadKey = 'Lead'+str(leadNum)\n",
203
    "            if leadNum == 13:\n",
204
    "                continue\n",
205
    "            if LeadDict[leadKey].shape[1] > 0:\n",
206
    "                if len(signal)> leadMinLen[leadKey]:\n",
207
    "                    signal = np.reshape(signal[:leadMinLen[leadKey]],(1,leadMinLen[leadKey]))\n",
208
    "                    LeadDict[leadKey] = np.concatenate( (LeadDict[leadKey],signal) )\n",
209
    "                else:\n",
210
    "                    LeadDict[leadKey] = LeadDict[leadKey][:,:len(signal)]\n",
211
    "                    LeadDict[leadKey] = np.concatenate( (LeadDict[leadKey],np.reshape(signal,(1,len(signal)))) )\n",
212
    "                    leadMinLen[leadKey] = len(signal) \n",
213
    "            else:\n",
214
    "                LeadDict[leadKey] = np.reshape(signal,(1,len(signal)))\n",
215
    "                leadMinLen[leadKey] = len(signal)         \n",
216
    "            count = count+1\n",
217
    "        labelArr = np.append(labelArr,np.repeat(ClassLabels[dirs],len(LeadDict[leadKey])-len(labelArr))) ##Add labels\n",
218
    "        t = time.time()-t\n",
219
    "        print('{0} files processed in this folder in {1} sec...\\n'.format(count,round(t)))    "
220
   ]
221
  },
222
  {
223
   "cell_type": "code",
224
   "execution_count": 9,
225
   "id": "e2823e5f",
226
   "metadata": {
227
    "scrolled": true
228
   },
229
   "outputs": [],
230
   "source": [
231
    "\"\"\"\n",
232
    "Post Processing:\n",
233
    "---------------\n",
234
    "\n",
235
    "1) Put all the leads on the same \"time\" scale/Length\n",
236
    "2) Pull all the leads(2D) into a 3D array of shape (n_obs,n_col,n_timepoints)\n",
237
    "3) Convert result from step 2 into a nested data frame.\n",
238
    "\"\"\"\n",
239
    "\n",
240
    "minLen = min(leadMinLen.values())\n",
241
    "for key in LeadDict.keys():\n",
242
    "    LeadDict[key] = LeadDict[key][:,:minLen]\n",
243
    "\n",
244
    "dim1 = LeadDict['Lead1'].shape[0]\n",
245
    "dim2 = len(LeadDict.keys())\n",
246
    "dim3 = LeadDict['Lead1'].shape[1]\n",
247
    "X3d = np.zeros((dim1,dim2,dim3))\n",
248
    "for j in range(dim2):\n",
249
    "    X3d[:,j,:] = list(LeadDict.values())[j]\n",
250
    "    \n",
251
    "X3d_nested=from_3d_numpy_to_nested(X3d)\n",
252
    "X3d_nested.columns = list(LeadDict.keys())\n",
253
    "X3d_nested['Label'] = labelArr\n",
254
    "X3d_nested.to_csv('muti-lead-dataFrame.csv',index=False,float_format='%d')"
255
   ]
256
  },
257
  {
258
   "cell_type": "code",
259
   "execution_count": 10,
260
   "id": "fdfd5abc",
261
   "metadata": {
262
    "scrolled": true
263
   },
264
   "outputs": [
265
    {
266
     "data": {
267
      "text/html": [
268
       "<div>\n",
269
       "<style scoped>\n",
270
       "    .dataframe tbody tr th:only-of-type {\n",
271
       "        vertical-align: middle;\n",
272
       "    }\n",
273
       "\n",
274
       "    .dataframe tbody tr th {\n",
275
       "        vertical-align: top;\n",
276
       "    }\n",
277
       "\n",
278
       "    .dataframe thead th {\n",
279
       "        text-align: right;\n",
280
       "    }\n",
281
       "</style>\n",
282
       "<table border=\"1\" class=\"dataframe\">\n",
283
       "  <thead>\n",
284
       "    <tr style=\"text-align: right;\">\n",
285
       "      <th></th>\n",
286
       "      <th>Lead1</th>\n",
287
       "      <th>Lead2</th>\n",
288
       "      <th>Lead3</th>\n",
289
       "      <th>Lead4</th>\n",
290
       "      <th>Lead5</th>\n",
291
       "      <th>Lead6</th>\n",
292
       "      <th>Lead7</th>\n",
293
       "      <th>Lead8</th>\n",
294
       "      <th>Lead9</th>\n",
295
       "      <th>Lead10</th>\n",
296
       "      <th>Lead11</th>\n",
297
       "      <th>Lead12</th>\n",
298
       "      <th>Label</th>\n",
299
       "    </tr>\n",
300
       "  </thead>\n",
301
       "  <tbody>\n",
302
       "    <tr>\n",
303
       "      <th>0</th>\n",
304
       "      <td>0      126.0\n",
305
       "1      119.5\n",
306
       "2      134.0\n",
307
       "3      ...</td>\n",
308
       "      <td>0      105.0\n",
309
       "1      104.5\n",
310
       "2      104.5\n",
311
       "3      ...</td>\n",
312
       "      <td>0      104.714286\n",
313
       "1      117.250000\n",
314
       "2      101...</td>\n",
315
       "      <td>0       35.957447\n",
316
       "1       35.500000\n",
317
       "2       46...</td>\n",
318
       "      <td>0      158.000000\n",
319
       "1      157.333333\n",
320
       "2      149...</td>\n",
321
       "      <td>0      119.5\n",
322
       "1      116.5\n",
323
       "2      125.5\n",
324
       "3      ...</td>\n",
325
       "      <td>0      137.5\n",
326
       "1      137.0\n",
327
       "2      136.5\n",
328
       "3      ...</td>\n",
329
       "      <td>0      156.0\n",
330
       "1      154.0\n",
331
       "2      153.5\n",
332
       "3      ...</td>\n",
333
       "      <td>0      162.000000\n",
334
       "1      162.000000\n",
335
       "2      151...</td>\n",
336
       "      <td>0      155.0\n",
337
       "1      154.5\n",
338
       "2      155.5\n",
339
       "3      ...</td>\n",
340
       "      <td>0      193.545455\n",
341
       "1        3.500000\n",
342
       "2        3...</td>\n",
343
       "      <td>0       89.000000\n",
344
       "1      109.500000\n",
345
       "2       91...</td>\n",
346
       "      <td>0.0</td>\n",
347
       "    </tr>\n",
348
       "    <tr>\n",
349
       "      <th>1</th>\n",
350
       "      <td>0      139.0\n",
351
       "1      129.0\n",
352
       "2      127.0\n",
353
       "3      ...</td>\n",
354
       "      <td>0      103.0\n",
355
       "1      103.0\n",
356
       "2      102.0\n",
357
       "3      ...</td>\n",
358
       "      <td>0      80.5\n",
359
       "1      80.0\n",
360
       "2      79.0\n",
361
       "3      79....</td>\n",
362
       "      <td>0       67.5\n",
363
       "1       72.0\n",
364
       "2       77.0\n",
365
       "3      ...</td>\n",
366
       "      <td>0      127.5\n",
367
       "1      126.0\n",
368
       "2      131.5\n",
369
       "3      ...</td>\n",
370
       "      <td>0      130.0\n",
371
       "1      139.0\n",
372
       "2      130.5\n",
373
       "3      ...</td>\n",
374
       "      <td>0      129.5\n",
375
       "1      129.5\n",
376
       "2      129.5\n",
377
       "3      ...</td>\n",
378
       "      <td>0      155.5\n",
379
       "1      155.5\n",
380
       "2      155.5\n",
381
       "3      ...</td>\n",
382
       "      <td>0      139.0\n",
383
       "1      131.5\n",
384
       "2      128.5\n",
385
       "3      ...</td>\n",
386
       "      <td>0      153.5\n",
387
       "1      149.0\n",
388
       "2      151.0\n",
389
       "3      ...</td>\n",
390
       "      <td>0       80.166667\n",
391
       "1       77.071429\n",
392
       "2       82...</td>\n",
393
       "      <td>0      109.000000\n",
394
       "1      100.000000\n",
395
       "2      111...</td>\n",
396
       "      <td>0.0</td>\n",
397
       "    </tr>\n",
398
       "    <tr>\n",
399
       "      <th>2</th>\n",
400
       "      <td>0      158.333333\n",
401
       "1      158.333333\n",
402
       "2      149...</td>\n",
403
       "      <td>0      103.5\n",
404
       "1      106.5\n",
405
       "2      110.5\n",
406
       "3      ...</td>\n",
407
       "      <td>0      103.5\n",
408
       "1      103.5\n",
409
       "2      103.5\n",
410
       "3      ...</td>\n",
411
       "      <td>0       97.5\n",
412
       "1       97.5\n",
413
       "2       97.0\n",
414
       "3      ...</td>\n",
415
       "      <td>0      118.363636\n",
416
       "1       97.000000\n",
417
       "2       94...</td>\n",
418
       "      <td>0      116.666667\n",
419
       "1      155.500000\n",
420
       "2      156...</td>\n",
421
       "      <td>0      131.200000\n",
422
       "1      136.166667\n",
423
       "2      104...</td>\n",
424
       "      <td>0      108.5\n",
425
       "1      100.0\n",
426
       "2      112.5\n",
427
       "3      ...</td>\n",
428
       "      <td>0      169.500000\n",
429
       "1      153.000000\n",
430
       "2      145...</td>\n",
431
       "      <td>0      156.0\n",
432
       "1      156.0\n",
433
       "2      157.5\n",
434
       "3      ...</td>\n",
435
       "      <td>0      145.5\n",
436
       "1      145.5\n",
437
       "2      145.5\n",
438
       "3      ...</td>\n",
439
       "      <td>0      107.170732\n",
440
       "1      104.000000\n",
441
       "2      121...</td>\n",
442
       "      <td>0.0</td>\n",
443
       "    </tr>\n",
444
       "    <tr>\n",
445
       "      <th>3</th>\n",
446
       "      <td>0      116.5\n",
447
       "1      117.5\n",
448
       "2      126.0\n",
449
       "3      ...</td>\n",
450
       "      <td>0      100.5\n",
451
       "1      100.5\n",
452
       "2      101.5\n",
453
       "3      ...</td>\n",
454
       "      <td>0      104.5\n",
455
       "1      104.5\n",
456
       "2      104.0\n",
457
       "3      ...</td>\n",
458
       "      <td>0       63.0\n",
459
       "1       60.0\n",
460
       "2       67.5\n",
461
       "3      ...</td>\n",
462
       "      <td>0      130.0\n",
463
       "1      123.5\n",
464
       "2      129.5\n",
465
       "3      ...</td>\n",
466
       "      <td>0      131.5\n",
467
       "1      130.0\n",
468
       "2      131.5\n",
469
       "3      ...</td>\n",
470
       "      <td>0      140.5\n",
471
       "1      150.0\n",
472
       "2      144.5\n",
473
       "3      ...</td>\n",
474
       "      <td>0      155.0\n",
475
       "1      155.0\n",
476
       "2      155.0\n",
477
       "3      ...</td>\n",
478
       "      <td>0      169.500000\n",
479
       "1      153.000000\n",
480
       "2      145...</td>\n",
481
       "      <td>0      119.5\n",
482
       "1      122.0\n",
483
       "2      129.5\n",
484
       "3      ...</td>\n",
485
       "      <td>0      154.055944\n",
486
       "1      136.396396\n",
487
       "2       44...</td>\n",
488
       "      <td>0      121.714286\n",
489
       "1      144.000000\n",
490
       "2      133...</td>\n",
491
       "      <td>0.0</td>\n",
492
       "    </tr>\n",
493
       "    <tr>\n",
494
       "      <th>4</th>\n",
495
       "      <td>0      157.000000\n",
496
       "1      157.000000\n",
497
       "2      148...</td>\n",
498
       "      <td>0      106.5\n",
499
       "1      106.5\n",
500
       "2      106.0\n",
501
       "3      ...</td>\n",
502
       "      <td>0      107.0\n",
503
       "1      106.0\n",
504
       "2      106.0\n",
505
       "3      ...</td>\n",
506
       "      <td>0       58.5\n",
507
       "1       70.0\n",
508
       "2       86.0\n",
509
       "3      ...</td>\n",
510
       "      <td>0      141.0\n",
511
       "1      136.5\n",
512
       "2      138.0\n",
513
       "3      ...</td>\n",
514
       "      <td>0      155.5\n",
515
       "1      158.5\n",
516
       "2      156.5\n",
517
       "3      ...</td>\n",
518
       "      <td>0      131.0\n",
519
       "1      130.5\n",
520
       "2      130.0\n",
521
       "3      ...</td>\n",
522
       "      <td>0      133.5\n",
523
       "1      133.0\n",
524
       "2      146.5\n",
525
       "3      ...</td>\n",
526
       "      <td>0      139.333333\n",
527
       "1      159.357143\n",
528
       "2      156...</td>\n",
529
       "      <td>0      137.0\n",
530
       "1      138.5\n",
531
       "2      145.5\n",
532
       "3      ...</td>\n",
533
       "      <td>0      137.5\n",
534
       "1      138.0\n",
535
       "2      146.5\n",
536
       "3      ...</td>\n",
537
       "      <td>0      140.0\n",
538
       "1      135.0\n",
539
       "2      142.0\n",
540
       "3      ...</td>\n",
541
       "      <td>0.0</td>\n",
542
       "    </tr>\n",
543
       "    <tr>\n",
544
       "      <th>...</th>\n",
545
       "      <td>...</td>\n",
546
       "      <td>...</td>\n",
547
       "      <td>...</td>\n",
548
       "      <td>...</td>\n",
549
       "      <td>...</td>\n",
550
       "      <td>...</td>\n",
551
       "      <td>...</td>\n",
552
       "      <td>...</td>\n",
553
       "      <td>...</td>\n",
554
       "      <td>...</td>\n",
555
       "      <td>...</td>\n",
556
       "      <td>...</td>\n",
557
       "      <td>...</td>\n",
558
       "    </tr>\n",
559
       "    <tr>\n",
560
       "      <th>1173</th>\n",
561
       "      <td>0      130.5\n",
562
       "1      127.5\n",
563
       "2      127.0\n",
564
       "3      ...</td>\n",
565
       "      <td>0      100.5\n",
566
       "1      100.0\n",
567
       "2       99.5\n",
568
       "3      ...</td>\n",
569
       "      <td>0      107.0\n",
570
       "1      107.0\n",
571
       "2      109.0\n",
572
       "3      ...</td>\n",
573
       "      <td>0       57.0\n",
574
       "1       67.5\n",
575
       "2       82.5\n",
576
       "3      ...</td>\n",
577
       "      <td>0      110.5\n",
578
       "1      107.5\n",
579
       "2      123.5\n",
580
       "3      ...</td>\n",
581
       "      <td>0      142.5\n",
582
       "1      145.0\n",
583
       "2      156.5\n",
584
       "3      ...</td>\n",
585
       "      <td>0       97.0\n",
586
       "1      124.5\n",
587
       "2      105.5\n",
588
       "3      ...</td>\n",
589
       "      <td>0      127.5\n",
590
       "1      126.0\n",
591
       "2      127.5\n",
592
       "3      ...</td>\n",
593
       "      <td>0      142.5\n",
594
       "1      137.5\n",
595
       "2      137.5\n",
596
       "3      ...</td>\n",
597
       "      <td>0      133.0\n",
598
       "1      132.5\n",
599
       "2      132.5\n",
600
       "3      ...</td>\n",
601
       "      <td>0        4.0\n",
602
       "1       12.5\n",
603
       "2       19.0\n",
604
       "3      ...</td>\n",
605
       "      <td>0      138.5\n",
606
       "1      143.0\n",
607
       "2      143.5\n",
608
       "3      ...</td>\n",
609
       "      <td>4.0</td>\n",
610
       "    </tr>\n",
611
       "    <tr>\n",
612
       "      <th>1174</th>\n",
613
       "      <td>0       92.5\n",
614
       "1       78.5\n",
615
       "2       92.0\n",
616
       "3      ...</td>\n",
617
       "      <td>0      102.5\n",
618
       "1      103.0\n",
619
       "2      103.0\n",
620
       "3      ...</td>\n",
621
       "      <td>0       87.5\n",
622
       "1       87.5\n",
623
       "2       87.5\n",
624
       "3      ...</td>\n",
625
       "      <td>0       74.0\n",
626
       "1       72.5\n",
627
       "2       74.5\n",
628
       "3      ...</td>\n",
629
       "      <td>0       71.5\n",
630
       "1       74.5\n",
631
       "2       83.0\n",
632
       "3      ...</td>\n",
633
       "      <td>0      113.0\n",
634
       "1      111.0\n",
635
       "2      119.0\n",
636
       "3      ...</td>\n",
637
       "      <td>0      141.600000\n",
638
       "1      133.250000\n",
639
       "2      122...</td>\n",
640
       "      <td>0      121.0\n",
641
       "1      120.5\n",
642
       "2      120.0\n",
643
       "3      ...</td>\n",
644
       "      <td>0       87.0\n",
645
       "1       86.5\n",
646
       "2       86.0\n",
647
       "3      ...</td>\n",
648
       "      <td>0      140.0\n",
649
       "1      148.5\n",
650
       "2      142.0\n",
651
       "3      ...</td>\n",
652
       "      <td>0      137.909091\n",
653
       "1      140.000000\n",
654
       "2      137...</td>\n",
655
       "      <td>0      117.5\n",
656
       "1      125.0\n",
657
       "2      127.0\n",
658
       "3      ...</td>\n",
659
       "      <td>4.0</td>\n",
660
       "    </tr>\n",
661
       "    <tr>\n",
662
       "      <th>1175</th>\n",
663
       "      <td>0      130.0\n",
664
       "1      131.5\n",
665
       "2      138.0\n",
666
       "3      ...</td>\n",
667
       "      <td>0      103.0\n",
668
       "1      103.5\n",
669
       "2      103.5\n",
670
       "3      ...</td>\n",
671
       "      <td>0       97.0\n",
672
       "1       96.5\n",
673
       "2       96.0\n",
674
       "3      ...</td>\n",
675
       "      <td>0       54.5\n",
676
       "1       40.0\n",
677
       "2       70.0\n",
678
       "3      ...</td>\n",
679
       "      <td>0      142.000\n",
680
       "1      147.000\n",
681
       "2      142.000\n",
682
       "3...</td>\n",
683
       "      <td>0      135.0\n",
684
       "1      145.0\n",
685
       "2      138.5\n",
686
       "3      ...</td>\n",
687
       "      <td>0       97.0\n",
688
       "1      124.5\n",
689
       "2      105.5\n",
690
       "3      ...</td>\n",
691
       "      <td>0      137.5\n",
692
       "1      144.5\n",
693
       "2      153.5\n",
694
       "3      ...</td>\n",
695
       "      <td>0       87.0\n",
696
       "1       86.5\n",
697
       "2       86.0\n",
698
       "3      ...</td>\n",
699
       "      <td>0      156.5\n",
700
       "1      156.5\n",
701
       "2      155.5\n",
702
       "3      ...</td>\n",
703
       "      <td>0      135.0\n",
704
       "1      135.0\n",
705
       "2      135.5\n",
706
       "3      ...</td>\n",
707
       "      <td>0      128.0\n",
708
       "1      124.5\n",
709
       "2      136.5\n",
710
       "3      ...</td>\n",
711
       "      <td>4.0</td>\n",
712
       "    </tr>\n",
713
       "    <tr>\n",
714
       "      <th>1176</th>\n",
715
       "      <td>0      127.0\n",
716
       "1      133.5\n",
717
       "2      137.5\n",
718
       "3      ...</td>\n",
719
       "      <td>0      100.5\n",
720
       "1      100.0\n",
721
       "2      102.5\n",
722
       "3      ...</td>\n",
723
       "      <td>0       91.5\n",
724
       "1       94.5\n",
725
       "2       96.0\n",
726
       "3      ...</td>\n",
727
       "      <td>0       74.0\n",
728
       "1       72.5\n",
729
       "2       74.5\n",
730
       "3      ...</td>\n",
731
       "      <td>0      113.875000\n",
732
       "1      144.000000\n",
733
       "2      152...</td>\n",
734
       "      <td>0      132.5\n",
735
       "1      134.0\n",
736
       "2      143.5\n",
737
       "3      ...</td>\n",
738
       "      <td>0      119.0\n",
739
       "1      118.5\n",
740
       "2      118.0\n",
741
       "3      ...</td>\n",
742
       "      <td>0      125.5\n",
743
       "1      121.5\n",
744
       "2      129.0\n",
745
       "3      ...</td>\n",
746
       "      <td>0      137.0\n",
747
       "1      136.5\n",
748
       "2      138.5\n",
749
       "3      ...</td>\n",
750
       "      <td>0       55.5\n",
751
       "1       52.0\n",
752
       "2       77.5\n",
753
       "3      ...</td>\n",
754
       "      <td>0      116.5\n",
755
       "1      116.5\n",
756
       "2      117.0\n",
757
       "3      ...</td>\n",
758
       "      <td>0      114.0\n",
759
       "1      110.5\n",
760
       "2      123.5\n",
761
       "3      ...</td>\n",
762
       "      <td>4.0</td>\n",
763
       "    </tr>\n",
764
       "    <tr>\n",
765
       "      <th>1177</th>\n",
766
       "      <td>0      158.857143\n",
767
       "1      158.857143\n",
768
       "2      150...</td>\n",
769
       "      <td>0      103.0\n",
770
       "1      103.5\n",
771
       "2      107.0\n",
772
       "3      ...</td>\n",
773
       "      <td>0      103.5\n",
774
       "1      105.0\n",
775
       "2      114.0\n",
776
       "3      ...</td>\n",
777
       "      <td>0       74.5\n",
778
       "1       74.5\n",
779
       "2       75.0\n",
780
       "3      ...</td>\n",
781
       "      <td>0      142.0\n",
782
       "1      136.5\n",
783
       "2      133.0\n",
784
       "3      ...</td>\n",
785
       "      <td>0      150.0\n",
786
       "1      144.5\n",
787
       "2      154.5\n",
788
       "3      ...</td>\n",
789
       "      <td>0      103.0\n",
790
       "1       95.5\n",
791
       "2      103.5\n",
792
       "3      ...</td>\n",
793
       "      <td>0      111.5\n",
794
       "1      100.0\n",
795
       "2      104.5\n",
796
       "3      ...</td>\n",
797
       "      <td>0      165.428571\n",
798
       "1      165.875000\n",
799
       "2      154...</td>\n",
800
       "      <td>0      146.5\n",
801
       "1      145.0\n",
802
       "2      144.0\n",
803
       "3      ...</td>\n",
804
       "      <td>0       96.5\n",
805
       "1       96.5\n",
806
       "2       96.5\n",
807
       "3      ...</td>\n",
808
       "      <td>0      137.0\n",
809
       "1      134.0\n",
810
       "2      129.5\n",
811
       "3      ...</td>\n",
812
       "      <td>4.0</td>\n",
813
       "    </tr>\n",
814
       "  </tbody>\n",
815
       "</table>\n",
816
       "<p>1178 rows × 13 columns</p>\n",
817
       "</div>"
818
      ],
819
      "text/plain": [
820
       "                                                  Lead1  \\\n",
821
       "0     0      126.0\n",
822
       "1      119.5\n",
823
       "2      134.0\n",
824
       "3      ...   \n",
825
       "1     0      139.0\n",
826
       "1      129.0\n",
827
       "2      127.0\n",
828
       "3      ...   \n",
829
       "2     0      158.333333\n",
830
       "1      158.333333\n",
831
       "2      149...   \n",
832
       "3     0      116.5\n",
833
       "1      117.5\n",
834
       "2      126.0\n",
835
       "3      ...   \n",
836
       "4     0      157.000000\n",
837
       "1      157.000000\n",
838
       "2      148...   \n",
839
       "...                                                 ...   \n",
840
       "1173  0      130.5\n",
841
       "1      127.5\n",
842
       "2      127.0\n",
843
       "3      ...   \n",
844
       "1174  0       92.5\n",
845
       "1       78.5\n",
846
       "2       92.0\n",
847
       "3      ...   \n",
848
       "1175  0      130.0\n",
849
       "1      131.5\n",
850
       "2      138.0\n",
851
       "3      ...   \n",
852
       "1176  0      127.0\n",
853
       "1      133.5\n",
854
       "2      137.5\n",
855
       "3      ...   \n",
856
       "1177  0      158.857143\n",
857
       "1      158.857143\n",
858
       "2      150...   \n",
859
       "\n",
860
       "                                                  Lead2  \\\n",
861
       "0     0      105.0\n",
862
       "1      104.5\n",
863
       "2      104.5\n",
864
       "3      ...   \n",
865
       "1     0      103.0\n",
866
       "1      103.0\n",
867
       "2      102.0\n",
868
       "3      ...   \n",
869
       "2     0      103.5\n",
870
       "1      106.5\n",
871
       "2      110.5\n",
872
       "3      ...   \n",
873
       "3     0      100.5\n",
874
       "1      100.5\n",
875
       "2      101.5\n",
876
       "3      ...   \n",
877
       "4     0      106.5\n",
878
       "1      106.5\n",
879
       "2      106.0\n",
880
       "3      ...   \n",
881
       "...                                                 ...   \n",
882
       "1173  0      100.5\n",
883
       "1      100.0\n",
884
       "2       99.5\n",
885
       "3      ...   \n",
886
       "1174  0      102.5\n",
887
       "1      103.0\n",
888
       "2      103.0\n",
889
       "3      ...   \n",
890
       "1175  0      103.0\n",
891
       "1      103.5\n",
892
       "2      103.5\n",
893
       "3      ...   \n",
894
       "1176  0      100.5\n",
895
       "1      100.0\n",
896
       "2      102.5\n",
897
       "3      ...   \n",
898
       "1177  0      103.0\n",
899
       "1      103.5\n",
900
       "2      107.0\n",
901
       "3      ...   \n",
902
       "\n",
903
       "                                                  Lead3  \\\n",
904
       "0     0      104.714286\n",
905
       "1      117.250000\n",
906
       "2      101...   \n",
907
       "1     0      80.5\n",
908
       "1      80.0\n",
909
       "2      79.0\n",
910
       "3      79....   \n",
911
       "2     0      103.5\n",
912
       "1      103.5\n",
913
       "2      103.5\n",
914
       "3      ...   \n",
915
       "3     0      104.5\n",
916
       "1      104.5\n",
917
       "2      104.0\n",
918
       "3      ...   \n",
919
       "4     0      107.0\n",
920
       "1      106.0\n",
921
       "2      106.0\n",
922
       "3      ...   \n",
923
       "...                                                 ...   \n",
924
       "1173  0      107.0\n",
925
       "1      107.0\n",
926
       "2      109.0\n",
927
       "3      ...   \n",
928
       "1174  0       87.5\n",
929
       "1       87.5\n",
930
       "2       87.5\n",
931
       "3      ...   \n",
932
       "1175  0       97.0\n",
933
       "1       96.5\n",
934
       "2       96.0\n",
935
       "3      ...   \n",
936
       "1176  0       91.5\n",
937
       "1       94.5\n",
938
       "2       96.0\n",
939
       "3      ...   \n",
940
       "1177  0      103.5\n",
941
       "1      105.0\n",
942
       "2      114.0\n",
943
       "3      ...   \n",
944
       "\n",
945
       "                                                  Lead4  \\\n",
946
       "0     0       35.957447\n",
947
       "1       35.500000\n",
948
       "2       46...   \n",
949
       "1     0       67.5\n",
950
       "1       72.0\n",
951
       "2       77.0\n",
952
       "3      ...   \n",
953
       "2     0       97.5\n",
954
       "1       97.5\n",
955
       "2       97.0\n",
956
       "3      ...   \n",
957
       "3     0       63.0\n",
958
       "1       60.0\n",
959
       "2       67.5\n",
960
       "3      ...   \n",
961
       "4     0       58.5\n",
962
       "1       70.0\n",
963
       "2       86.0\n",
964
       "3      ...   \n",
965
       "...                                                 ...   \n",
966
       "1173  0       57.0\n",
967
       "1       67.5\n",
968
       "2       82.5\n",
969
       "3      ...   \n",
970
       "1174  0       74.0\n",
971
       "1       72.5\n",
972
       "2       74.5\n",
973
       "3      ...   \n",
974
       "1175  0       54.5\n",
975
       "1       40.0\n",
976
       "2       70.0\n",
977
       "3      ...   \n",
978
       "1176  0       74.0\n",
979
       "1       72.5\n",
980
       "2       74.5\n",
981
       "3      ...   \n",
982
       "1177  0       74.5\n",
983
       "1       74.5\n",
984
       "2       75.0\n",
985
       "3      ...   \n",
986
       "\n",
987
       "                                                  Lead5  \\\n",
988
       "0     0      158.000000\n",
989
       "1      157.333333\n",
990
       "2      149...   \n",
991
       "1     0      127.5\n",
992
       "1      126.0\n",
993
       "2      131.5\n",
994
       "3      ...   \n",
995
       "2     0      118.363636\n",
996
       "1       97.000000\n",
997
       "2       94...   \n",
998
       "3     0      130.0\n",
999
       "1      123.5\n",
1000
       "2      129.5\n",
1001
       "3      ...   \n",
1002
       "4     0      141.0\n",
1003
       "1      136.5\n",
1004
       "2      138.0\n",
1005
       "3      ...   \n",
1006
       "...                                                 ...   \n",
1007
       "1173  0      110.5\n",
1008
       "1      107.5\n",
1009
       "2      123.5\n",
1010
       "3      ...   \n",
1011
       "1174  0       71.5\n",
1012
       "1       74.5\n",
1013
       "2       83.0\n",
1014
       "3      ...   \n",
1015
       "1175  0      142.000\n",
1016
       "1      147.000\n",
1017
       "2      142.000\n",
1018
       "3...   \n",
1019
       "1176  0      113.875000\n",
1020
       "1      144.000000\n",
1021
       "2      152...   \n",
1022
       "1177  0      142.0\n",
1023
       "1      136.5\n",
1024
       "2      133.0\n",
1025
       "3      ...   \n",
1026
       "\n",
1027
       "                                                  Lead6  \\\n",
1028
       "0     0      119.5\n",
1029
       "1      116.5\n",
1030
       "2      125.5\n",
1031
       "3      ...   \n",
1032
       "1     0      130.0\n",
1033
       "1      139.0\n",
1034
       "2      130.5\n",
1035
       "3      ...   \n",
1036
       "2     0      116.666667\n",
1037
       "1      155.500000\n",
1038
       "2      156...   \n",
1039
       "3     0      131.5\n",
1040
       "1      130.0\n",
1041
       "2      131.5\n",
1042
       "3      ...   \n",
1043
       "4     0      155.5\n",
1044
       "1      158.5\n",
1045
       "2      156.5\n",
1046
       "3      ...   \n",
1047
       "...                                                 ...   \n",
1048
       "1173  0      142.5\n",
1049
       "1      145.0\n",
1050
       "2      156.5\n",
1051
       "3      ...   \n",
1052
       "1174  0      113.0\n",
1053
       "1      111.0\n",
1054
       "2      119.0\n",
1055
       "3      ...   \n",
1056
       "1175  0      135.0\n",
1057
       "1      145.0\n",
1058
       "2      138.5\n",
1059
       "3      ...   \n",
1060
       "1176  0      132.5\n",
1061
       "1      134.0\n",
1062
       "2      143.5\n",
1063
       "3      ...   \n",
1064
       "1177  0      150.0\n",
1065
       "1      144.5\n",
1066
       "2      154.5\n",
1067
       "3      ...   \n",
1068
       "\n",
1069
       "                                                  Lead7  \\\n",
1070
       "0     0      137.5\n",
1071
       "1      137.0\n",
1072
       "2      136.5\n",
1073
       "3      ...   \n",
1074
       "1     0      129.5\n",
1075
       "1      129.5\n",
1076
       "2      129.5\n",
1077
       "3      ...   \n",
1078
       "2     0      131.200000\n",
1079
       "1      136.166667\n",
1080
       "2      104...   \n",
1081
       "3     0      140.5\n",
1082
       "1      150.0\n",
1083
       "2      144.5\n",
1084
       "3      ...   \n",
1085
       "4     0      131.0\n",
1086
       "1      130.5\n",
1087
       "2      130.0\n",
1088
       "3      ...   \n",
1089
       "...                                                 ...   \n",
1090
       "1173  0       97.0\n",
1091
       "1      124.5\n",
1092
       "2      105.5\n",
1093
       "3      ...   \n",
1094
       "1174  0      141.600000\n",
1095
       "1      133.250000\n",
1096
       "2      122...   \n",
1097
       "1175  0       97.0\n",
1098
       "1      124.5\n",
1099
       "2      105.5\n",
1100
       "3      ...   \n",
1101
       "1176  0      119.0\n",
1102
       "1      118.5\n",
1103
       "2      118.0\n",
1104
       "3      ...   \n",
1105
       "1177  0      103.0\n",
1106
       "1       95.5\n",
1107
       "2      103.5\n",
1108
       "3      ...   \n",
1109
       "\n",
1110
       "                                                  Lead8  \\\n",
1111
       "0     0      156.0\n",
1112
       "1      154.0\n",
1113
       "2      153.5\n",
1114
       "3      ...   \n",
1115
       "1     0      155.5\n",
1116
       "1      155.5\n",
1117
       "2      155.5\n",
1118
       "3      ...   \n",
1119
       "2     0      108.5\n",
1120
       "1      100.0\n",
1121
       "2      112.5\n",
1122
       "3      ...   \n",
1123
       "3     0      155.0\n",
1124
       "1      155.0\n",
1125
       "2      155.0\n",
1126
       "3      ...   \n",
1127
       "4     0      133.5\n",
1128
       "1      133.0\n",
1129
       "2      146.5\n",
1130
       "3      ...   \n",
1131
       "...                                                 ...   \n",
1132
       "1173  0      127.5\n",
1133
       "1      126.0\n",
1134
       "2      127.5\n",
1135
       "3      ...   \n",
1136
       "1174  0      121.0\n",
1137
       "1      120.5\n",
1138
       "2      120.0\n",
1139
       "3      ...   \n",
1140
       "1175  0      137.5\n",
1141
       "1      144.5\n",
1142
       "2      153.5\n",
1143
       "3      ...   \n",
1144
       "1176  0      125.5\n",
1145
       "1      121.5\n",
1146
       "2      129.0\n",
1147
       "3      ...   \n",
1148
       "1177  0      111.5\n",
1149
       "1      100.0\n",
1150
       "2      104.5\n",
1151
       "3      ...   \n",
1152
       "\n",
1153
       "                                                  Lead9  \\\n",
1154
       "0     0      162.000000\n",
1155
       "1      162.000000\n",
1156
       "2      151...   \n",
1157
       "1     0      139.0\n",
1158
       "1      131.5\n",
1159
       "2      128.5\n",
1160
       "3      ...   \n",
1161
       "2     0      169.500000\n",
1162
       "1      153.000000\n",
1163
       "2      145...   \n",
1164
       "3     0      169.500000\n",
1165
       "1      153.000000\n",
1166
       "2      145...   \n",
1167
       "4     0      139.333333\n",
1168
       "1      159.357143\n",
1169
       "2      156...   \n",
1170
       "...                                                 ...   \n",
1171
       "1173  0      142.5\n",
1172
       "1      137.5\n",
1173
       "2      137.5\n",
1174
       "3      ...   \n",
1175
       "1174  0       87.0\n",
1176
       "1       86.5\n",
1177
       "2       86.0\n",
1178
       "3      ...   \n",
1179
       "1175  0       87.0\n",
1180
       "1       86.5\n",
1181
       "2       86.0\n",
1182
       "3      ...   \n",
1183
       "1176  0      137.0\n",
1184
       "1      136.5\n",
1185
       "2      138.5\n",
1186
       "3      ...   \n",
1187
       "1177  0      165.428571\n",
1188
       "1      165.875000\n",
1189
       "2      154...   \n",
1190
       "\n",
1191
       "                                                 Lead10  \\\n",
1192
       "0     0      155.0\n",
1193
       "1      154.5\n",
1194
       "2      155.5\n",
1195
       "3      ...   \n",
1196
       "1     0      153.5\n",
1197
       "1      149.0\n",
1198
       "2      151.0\n",
1199
       "3      ...   \n",
1200
       "2     0      156.0\n",
1201
       "1      156.0\n",
1202
       "2      157.5\n",
1203
       "3      ...   \n",
1204
       "3     0      119.5\n",
1205
       "1      122.0\n",
1206
       "2      129.5\n",
1207
       "3      ...   \n",
1208
       "4     0      137.0\n",
1209
       "1      138.5\n",
1210
       "2      145.5\n",
1211
       "3      ...   \n",
1212
       "...                                                 ...   \n",
1213
       "1173  0      133.0\n",
1214
       "1      132.5\n",
1215
       "2      132.5\n",
1216
       "3      ...   \n",
1217
       "1174  0      140.0\n",
1218
       "1      148.5\n",
1219
       "2      142.0\n",
1220
       "3      ...   \n",
1221
       "1175  0      156.5\n",
1222
       "1      156.5\n",
1223
       "2      155.5\n",
1224
       "3      ...   \n",
1225
       "1176  0       55.5\n",
1226
       "1       52.0\n",
1227
       "2       77.5\n",
1228
       "3      ...   \n",
1229
       "1177  0      146.5\n",
1230
       "1      145.0\n",
1231
       "2      144.0\n",
1232
       "3      ...   \n",
1233
       "\n",
1234
       "                                                 Lead11  \\\n",
1235
       "0     0      193.545455\n",
1236
       "1        3.500000\n",
1237
       "2        3...   \n",
1238
       "1     0       80.166667\n",
1239
       "1       77.071429\n",
1240
       "2       82...   \n",
1241
       "2     0      145.5\n",
1242
       "1      145.5\n",
1243
       "2      145.5\n",
1244
       "3      ...   \n",
1245
       "3     0      154.055944\n",
1246
       "1      136.396396\n",
1247
       "2       44...   \n",
1248
       "4     0      137.5\n",
1249
       "1      138.0\n",
1250
       "2      146.5\n",
1251
       "3      ...   \n",
1252
       "...                                                 ...   \n",
1253
       "1173  0        4.0\n",
1254
       "1       12.5\n",
1255
       "2       19.0\n",
1256
       "3      ...   \n",
1257
       "1174  0      137.909091\n",
1258
       "1      140.000000\n",
1259
       "2      137...   \n",
1260
       "1175  0      135.0\n",
1261
       "1      135.0\n",
1262
       "2      135.5\n",
1263
       "3      ...   \n",
1264
       "1176  0      116.5\n",
1265
       "1      116.5\n",
1266
       "2      117.0\n",
1267
       "3      ...   \n",
1268
       "1177  0       96.5\n",
1269
       "1       96.5\n",
1270
       "2       96.5\n",
1271
       "3      ...   \n",
1272
       "\n",
1273
       "                                                 Lead12  Label  \n",
1274
       "0     0       89.000000\n",
1275
       "1      109.500000\n",
1276
       "2       91...    0.0  \n",
1277
       "1     0      109.000000\n",
1278
       "1      100.000000\n",
1279
       "2      111...    0.0  \n",
1280
       "2     0      107.170732\n",
1281
       "1      104.000000\n",
1282
       "2      121...    0.0  \n",
1283
       "3     0      121.714286\n",
1284
       "1      144.000000\n",
1285
       "2      133...    0.0  \n",
1286
       "4     0      140.0\n",
1287
       "1      135.0\n",
1288
       "2      142.0\n",
1289
       "3      ...    0.0  \n",
1290
       "...                                                 ...    ...  \n",
1291
       "1173  0      138.5\n",
1292
       "1      143.0\n",
1293
       "2      143.5\n",
1294
       "3      ...    4.0  \n",
1295
       "1174  0      117.5\n",
1296
       "1      125.0\n",
1297
       "2      127.0\n",
1298
       "3      ...    4.0  \n",
1299
       "1175  0      128.0\n",
1300
       "1      124.5\n",
1301
       "2      136.5\n",
1302
       "3      ...    4.0  \n",
1303
       "1176  0      114.0\n",
1304
       "1      110.5\n",
1305
       "2      123.5\n",
1306
       "3      ...    4.0  \n",
1307
       "1177  0      137.0\n",
1308
       "1      134.0\n",
1309
       "2      129.5\n",
1310
       "3      ...    4.0  \n",
1311
       "\n",
1312
       "[1178 rows x 13 columns]"
1313
      ]
1314
     },
1315
     "execution_count": 10,
1316
     "metadata": {},
1317
     "output_type": "execute_result"
1318
    }
1319
   ],
1320
   "source": [
1321
    "X3d_nested"
1322
   ]
1323
  },
1324
  {
1325
   "cell_type": "code",
1326
   "execution_count": null,
1327
   "id": "e3b5fedb",
1328
   "metadata": {},
1329
   "outputs": [],
1330
   "source": []
1331
  },
1332
  {
1333
   "cell_type": "markdown",
1334
   "id": "c2a71ae7",
1335
   "metadata": {},
1336
   "source": [
1337
    "### Classification Task"
1338
   ]
1339
  },
1340
  {
1341
   "cell_type": "code",
1342
   "execution_count": 11,
1343
   "id": "69ec3a5d",
1344
   "metadata": {},
1345
   "outputs": [],
1346
   "source": [
1347
    "split = StratifiedShuffleSplit(n_splits=1, test_size=0.25, random_state=42)\n",
1348
    "for train_index, test_index in split.split(X3d_nested, X3d_nested['Label']):\n",
1349
    "    X_train = X3d_nested.loc[train_index]\n",
1350
    "    X_test = X3d_nested.loc[test_index]"
1351
   ]
1352
  },
1353
  {
1354
   "cell_type": "code",
1355
   "execution_count": 12,
1356
   "id": "0df5b1b4",
1357
   "metadata": {},
1358
   "outputs": [
1359
    {
1360
     "name": "stdout",
1361
     "output_type": "stream",
1362
     "text": [
1363
      "Data set proportions:\n",
1364
      "3.0    0.241087\n",
1365
      "2.0    0.212224\n",
1366
      "4.0    0.202886\n",
1367
      "1.0    0.197793\n",
1368
      "0.0    0.146010\n",
1369
      "Name: Label, dtype: float64\n",
1370
      "\n",
1371
      "Test set proportions:\n",
1372
      "3.0    0.240678\n",
1373
      "2.0    0.213559\n",
1374
      "4.0    0.203390\n",
1375
      "1.0    0.196610\n",
1376
      "0.0    0.145763\n",
1377
      "Name: Label, dtype: float64\n"
1378
     ]
1379
    }
1380
   ],
1381
   "source": [
1382
    "#Ascertain the spits are balanced\n",
1383
    "dataSetProp = X3d_nested['Label'].value_counts()/len(X3d_nested)\n",
1384
    "testSetProp = X_test['Label'].value_counts() / len(X_test)\n",
1385
    "print('Data set proportions:')\n",
1386
    "print(dataSetProp)\n",
1387
    "print('\\nTest set proportions:')\n",
1388
    "print(testSetProp)"
1389
   ]
1390
  },
1391
  {
1392
   "cell_type": "code",
1393
   "execution_count": 13,
1394
   "id": "c68b5285",
1395
   "metadata": {
1396
    "scrolled": true
1397
   },
1398
   "outputs": [],
1399
   "source": [
1400
    "y_train = X_train['Label']\n",
1401
    "X_train.drop('Label',axis=1,inplace=True)\n",
1402
    "y_test = X_test['Label']\n",
1403
    "X_test.drop('Label',axis=1,inplace=True)"
1404
   ]
1405
  },
1406
  {
1407
   "cell_type": "code",
1408
   "execution_count": 14,
1409
   "id": "3f727d3e",
1410
   "metadata": {
1411
    "scrolled": true
1412
   },
1413
   "outputs": [
1414
    {
1415
     "data": {
1416
      "text/html": [
1417
       "<div>\n",
1418
       "<style scoped>\n",
1419
       "    .dataframe tbody tr th:only-of-type {\n",
1420
       "        vertical-align: middle;\n",
1421
       "    }\n",
1422
       "\n",
1423
       "    .dataframe tbody tr th {\n",
1424
       "        vertical-align: top;\n",
1425
       "    }\n",
1426
       "\n",
1427
       "    .dataframe thead th {\n",
1428
       "        text-align: right;\n",
1429
       "    }\n",
1430
       "</style>\n",
1431
       "<table border=\"1\" class=\"dataframe\">\n",
1432
       "  <thead>\n",
1433
       "    <tr style=\"text-align: right;\">\n",
1434
       "      <th></th>\n",
1435
       "      <th>Lead1</th>\n",
1436
       "      <th>Lead2</th>\n",
1437
       "      <th>Lead3</th>\n",
1438
       "      <th>Lead4</th>\n",
1439
       "      <th>Lead5</th>\n",
1440
       "      <th>Lead6</th>\n",
1441
       "      <th>Lead7</th>\n",
1442
       "      <th>Lead8</th>\n",
1443
       "      <th>Lead9</th>\n",
1444
       "      <th>Lead10</th>\n",
1445
       "      <th>Lead11</th>\n",
1446
       "      <th>Lead12</th>\n",
1447
       "    </tr>\n",
1448
       "  </thead>\n",
1449
       "  <tbody>\n",
1450
       "    <tr>\n",
1451
       "      <th>309</th>\n",
1452
       "      <td>0      138.0\n",
1453
       "1      140.5\n",
1454
       "2      143.5\n",
1455
       "3      ...</td>\n",
1456
       "      <td>0      100.0\n",
1457
       "1       89.5\n",
1458
       "2       88.5\n",
1459
       "3      ...</td>\n",
1460
       "      <td>0       96.5\n",
1461
       "1       96.0\n",
1462
       "2      101.0\n",
1463
       "3      ...</td>\n",
1464
       "      <td>0       40.0\n",
1465
       "1       33.0\n",
1466
       "2       66.5\n",
1467
       "3      ...</td>\n",
1468
       "      <td>0      108.50\n",
1469
       "1       98.00\n",
1470
       "2      113.00\n",
1471
       "3   ...</td>\n",
1472
       "      <td>0      156.0\n",
1473
       "1      155.0\n",
1474
       "2      156.5\n",
1475
       "3      ...</td>\n",
1476
       "      <td>0      125.535714\n",
1477
       "1      147.666667\n",
1478
       "2      139...</td>\n",
1479
       "      <td>0      133.0\n",
1480
       "1      135.5\n",
1481
       "2      131.5\n",
1482
       "3      ...</td>\n",
1483
       "      <td>0      107.5\n",
1484
       "1       97.5\n",
1485
       "2      123.0\n",
1486
       "3      ...</td>\n",
1487
       "      <td>0      140.5\n",
1488
       "1      139.5\n",
1489
       "2      146.0\n",
1490
       "3      ...</td>\n",
1491
       "      <td>0      153.0\n",
1492
       "1      150.5\n",
1493
       "2      162.5\n",
1494
       "3      ...</td>\n",
1495
       "      <td>0      101.0\n",
1496
       "1      100.5\n",
1497
       "2      110.0\n",
1498
       "3      ...</td>\n",
1499
       "    </tr>\n",
1500
       "    <tr>\n",
1501
       "      <th>1108</th>\n",
1502
       "      <td>0      124.5\n",
1503
       "1      115.0\n",
1504
       "2      116.5\n",
1505
       "3      ...</td>\n",
1506
       "      <td>0      101.0\n",
1507
       "1      101.5\n",
1508
       "2      102.5\n",
1509
       "3      ...</td>\n",
1510
       "      <td>0      107.0\n",
1511
       "1      107.0\n",
1512
       "2      109.0\n",
1513
       "3      ...</td>\n",
1514
       "      <td>0       25.5\n",
1515
       "1       22.5\n",
1516
       "2       40.5\n",
1517
       "3      ...</td>\n",
1518
       "      <td>0      106.5\n",
1519
       "1      112.5\n",
1520
       "2      117.5\n",
1521
       "3      ...</td>\n",
1522
       "      <td>0      135.0\n",
1523
       "1      145.0\n",
1524
       "2      138.5\n",
1525
       "3      ...</td>\n",
1526
       "      <td>0      145.148148\n",
1527
       "1        6.000000\n",
1528
       "2        6...</td>\n",
1529
       "      <td>0      123.5\n",
1530
       "1      111.0\n",
1531
       "2      114.0\n",
1532
       "3      ...</td>\n",
1533
       "      <td>0      165.428571\n",
1534
       "1      165.875000\n",
1535
       "2      154...</td>\n",
1536
       "      <td>0      130.0\n",
1537
       "1      132.0\n",
1538
       "2      133.0\n",
1539
       "3      ...</td>\n",
1540
       "      <td>0       89.5\n",
1541
       "1       92.5\n",
1542
       "2      102.5\n",
1543
       "3      ...</td>\n",
1544
       "      <td>0      135.0\n",
1545
       "1      128.5\n",
1546
       "2      125.0\n",
1547
       "3      ...</td>\n",
1548
       "    </tr>\n",
1549
       "    <tr>\n",
1550
       "      <th>647</th>\n",
1551
       "      <td>0      65.000000\n",
1552
       "1      56.000000\n",
1553
       "2      58.85...</td>\n",
1554
       "      <td>0      80.0\n",
1555
       "1      80.0\n",
1556
       "2      80.0\n",
1557
       "3      81....</td>\n",
1558
       "      <td>0      45.000000\n",
1559
       "1      44.500000\n",
1560
       "2      46.00...</td>\n",
1561
       "      <td>0      40.500000\n",
1562
       "1      51.914286\n",
1563
       "2      45.92...</td>\n",
1564
       "      <td>0       77.000000\n",
1565
       "1       78.555556\n",
1566
       "2       78...</td>\n",
1567
       "      <td>0      45.500000\n",
1568
       "1      50.200000\n",
1569
       "2      46.00...</td>\n",
1570
       "      <td>0       78.000000\n",
1571
       "1       82.000000\n",
1572
       "2       76...</td>\n",
1573
       "      <td>0      54.636364\n",
1574
       "1      58.500000\n",
1575
       "2      62.12...</td>\n",
1576
       "      <td>0      133.500000\n",
1577
       "1      133.500000\n",
1578
       "2      133...</td>\n",
1579
       "      <td>0       73.000000\n",
1580
       "1       75.000000\n",
1581
       "2       75...</td>\n",
1582
       "      <td>0      68.333333\n",
1583
       "1      57.500000\n",
1584
       "2      59.09...</td>\n",
1585
       "      <td>0       74.631579\n",
1586
       "1       76.466667\n",
1587
       "2       79...</td>\n",
1588
       "    </tr>\n",
1589
       "    <tr>\n",
1590
       "      <th>863</th>\n",
1591
       "      <td>0      157.666667\n",
1592
       "1      157.666667\n",
1593
       "2      149...</td>\n",
1594
       "      <td>0      105.0\n",
1595
       "1      109.5\n",
1596
       "2      102.5\n",
1597
       "3      ...</td>\n",
1598
       "      <td>0      104.0\n",
1599
       "1      112.5\n",
1600
       "2      104.5\n",
1601
       "3      ...</td>\n",
1602
       "      <td>0       52.0\n",
1603
       "1       76.0\n",
1604
       "2       58.0\n",
1605
       "3      ...</td>\n",
1606
       "      <td>0      124.5\n",
1607
       "1      120.5\n",
1608
       "2      128.5\n",
1609
       "3      ...</td>\n",
1610
       "      <td>0      118.333333\n",
1611
       "1      125.500000\n",
1612
       "2      128...</td>\n",
1613
       "      <td>0      113.5\n",
1614
       "1      120.0\n",
1615
       "2      151.0\n",
1616
       "3      ...</td>\n",
1617
       "      <td>0       92.5\n",
1618
       "1       94.0\n",
1619
       "2      109.5\n",
1620
       "3      ...</td>\n",
1621
       "      <td>0      120.0\n",
1622
       "1      120.0\n",
1623
       "2      126.5\n",
1624
       "3      ...</td>\n",
1625
       "      <td>0      150.0\n",
1626
       "1      153.5\n",
1627
       "2      145.5\n",
1628
       "3      ...</td>\n",
1629
       "      <td>0      144.0\n",
1630
       "1      137.5\n",
1631
       "2      145.5\n",
1632
       "3      ...</td>\n",
1633
       "      <td>0      127.888889\n",
1634
       "1      126.962963\n",
1635
       "2      133...</td>\n",
1636
       "    </tr>\n",
1637
       "    <tr>\n",
1638
       "      <th>207</th>\n",
1639
       "      <td>0      122.0\n",
1640
       "1      130.0\n",
1641
       "2      130.0\n",
1642
       "3      ...</td>\n",
1643
       "      <td>0       97.5\n",
1644
       "1       92.0\n",
1645
       "2       93.0\n",
1646
       "3      ...</td>\n",
1647
       "      <td>0       85.000000\n",
1648
       "1       80.500000\n",
1649
       "2       86...</td>\n",
1650
       "      <td>0       34.0\n",
1651
       "1       33.0\n",
1652
       "2       63.0\n",
1653
       "3      ...</td>\n",
1654
       "      <td>0       83.50\n",
1655
       "1       85.00\n",
1656
       "2       94.04\n",
1657
       "3   ...</td>\n",
1658
       "      <td>0      117.5\n",
1659
       "1      113.5\n",
1660
       "2      122.5\n",
1661
       "3      ...</td>\n",
1662
       "      <td>0      157.818182\n",
1663
       "1      144.714286\n",
1664
       "2      122...</td>\n",
1665
       "      <td>0      104.5\n",
1666
       "1       93.0\n",
1667
       "2      113.5\n",
1668
       "3      ...</td>\n",
1669
       "      <td>0      116.5\n",
1670
       "1      106.5\n",
1671
       "2      128.5\n",
1672
       "3      ...</td>\n",
1673
       "      <td>0      147.0\n",
1674
       "1      145.0\n",
1675
       "2      149.0\n",
1676
       "3      ...</td>\n",
1677
       "      <td>0      153.781022\n",
1678
       "1      141.024793\n",
1679
       "2       22...</td>\n",
1680
       "      <td>0      106.0\n",
1681
       "1      101.5\n",
1682
       "2      113.5\n",
1683
       "3      ...</td>\n",
1684
       "    </tr>\n",
1685
       "  </tbody>\n",
1686
       "</table>\n",
1687
       "</div>"
1688
      ],
1689
      "text/plain": [
1690
       "                                                  Lead1  \\\n",
1691
       "309   0      138.0\n",
1692
       "1      140.5\n",
1693
       "2      143.5\n",
1694
       "3      ...   \n",
1695
       "1108  0      124.5\n",
1696
       "1      115.0\n",
1697
       "2      116.5\n",
1698
       "3      ...   \n",
1699
       "647   0      65.000000\n",
1700
       "1      56.000000\n",
1701
       "2      58.85...   \n",
1702
       "863   0      157.666667\n",
1703
       "1      157.666667\n",
1704
       "2      149...   \n",
1705
       "207   0      122.0\n",
1706
       "1      130.0\n",
1707
       "2      130.0\n",
1708
       "3      ...   \n",
1709
       "\n",
1710
       "                                                  Lead2  \\\n",
1711
       "309   0      100.0\n",
1712
       "1       89.5\n",
1713
       "2       88.5\n",
1714
       "3      ...   \n",
1715
       "1108  0      101.0\n",
1716
       "1      101.5\n",
1717
       "2      102.5\n",
1718
       "3      ...   \n",
1719
       "647   0      80.0\n",
1720
       "1      80.0\n",
1721
       "2      80.0\n",
1722
       "3      81....   \n",
1723
       "863   0      105.0\n",
1724
       "1      109.5\n",
1725
       "2      102.5\n",
1726
       "3      ...   \n",
1727
       "207   0       97.5\n",
1728
       "1       92.0\n",
1729
       "2       93.0\n",
1730
       "3      ...   \n",
1731
       "\n",
1732
       "                                                  Lead3  \\\n",
1733
       "309   0       96.5\n",
1734
       "1       96.0\n",
1735
       "2      101.0\n",
1736
       "3      ...   \n",
1737
       "1108  0      107.0\n",
1738
       "1      107.0\n",
1739
       "2      109.0\n",
1740
       "3      ...   \n",
1741
       "647   0      45.000000\n",
1742
       "1      44.500000\n",
1743
       "2      46.00...   \n",
1744
       "863   0      104.0\n",
1745
       "1      112.5\n",
1746
       "2      104.5\n",
1747
       "3      ...   \n",
1748
       "207   0       85.000000\n",
1749
       "1       80.500000\n",
1750
       "2       86...   \n",
1751
       "\n",
1752
       "                                                  Lead4  \\\n",
1753
       "309   0       40.0\n",
1754
       "1       33.0\n",
1755
       "2       66.5\n",
1756
       "3      ...   \n",
1757
       "1108  0       25.5\n",
1758
       "1       22.5\n",
1759
       "2       40.5\n",
1760
       "3      ...   \n",
1761
       "647   0      40.500000\n",
1762
       "1      51.914286\n",
1763
       "2      45.92...   \n",
1764
       "863   0       52.0\n",
1765
       "1       76.0\n",
1766
       "2       58.0\n",
1767
       "3      ...   \n",
1768
       "207   0       34.0\n",
1769
       "1       33.0\n",
1770
       "2       63.0\n",
1771
       "3      ...   \n",
1772
       "\n",
1773
       "                                                  Lead5  \\\n",
1774
       "309   0      108.50\n",
1775
       "1       98.00\n",
1776
       "2      113.00\n",
1777
       "3   ...   \n",
1778
       "1108  0      106.5\n",
1779
       "1      112.5\n",
1780
       "2      117.5\n",
1781
       "3      ...   \n",
1782
       "647   0       77.000000\n",
1783
       "1       78.555556\n",
1784
       "2       78...   \n",
1785
       "863   0      124.5\n",
1786
       "1      120.5\n",
1787
       "2      128.5\n",
1788
       "3      ...   \n",
1789
       "207   0       83.50\n",
1790
       "1       85.00\n",
1791
       "2       94.04\n",
1792
       "3   ...   \n",
1793
       "\n",
1794
       "                                                  Lead6  \\\n",
1795
       "309   0      156.0\n",
1796
       "1      155.0\n",
1797
       "2      156.5\n",
1798
       "3      ...   \n",
1799
       "1108  0      135.0\n",
1800
       "1      145.0\n",
1801
       "2      138.5\n",
1802
       "3      ...   \n",
1803
       "647   0      45.500000\n",
1804
       "1      50.200000\n",
1805
       "2      46.00...   \n",
1806
       "863   0      118.333333\n",
1807
       "1      125.500000\n",
1808
       "2      128...   \n",
1809
       "207   0      117.5\n",
1810
       "1      113.5\n",
1811
       "2      122.5\n",
1812
       "3      ...   \n",
1813
       "\n",
1814
       "                                                  Lead7  \\\n",
1815
       "309   0      125.535714\n",
1816
       "1      147.666667\n",
1817
       "2      139...   \n",
1818
       "1108  0      145.148148\n",
1819
       "1        6.000000\n",
1820
       "2        6...   \n",
1821
       "647   0       78.000000\n",
1822
       "1       82.000000\n",
1823
       "2       76...   \n",
1824
       "863   0      113.5\n",
1825
       "1      120.0\n",
1826
       "2      151.0\n",
1827
       "3      ...   \n",
1828
       "207   0      157.818182\n",
1829
       "1      144.714286\n",
1830
       "2      122...   \n",
1831
       "\n",
1832
       "                                                  Lead8  \\\n",
1833
       "309   0      133.0\n",
1834
       "1      135.5\n",
1835
       "2      131.5\n",
1836
       "3      ...   \n",
1837
       "1108  0      123.5\n",
1838
       "1      111.0\n",
1839
       "2      114.0\n",
1840
       "3      ...   \n",
1841
       "647   0      54.636364\n",
1842
       "1      58.500000\n",
1843
       "2      62.12...   \n",
1844
       "863   0       92.5\n",
1845
       "1       94.0\n",
1846
       "2      109.5\n",
1847
       "3      ...   \n",
1848
       "207   0      104.5\n",
1849
       "1       93.0\n",
1850
       "2      113.5\n",
1851
       "3      ...   \n",
1852
       "\n",
1853
       "                                                  Lead9  \\\n",
1854
       "309   0      107.5\n",
1855
       "1       97.5\n",
1856
       "2      123.0\n",
1857
       "3      ...   \n",
1858
       "1108  0      165.428571\n",
1859
       "1      165.875000\n",
1860
       "2      154...   \n",
1861
       "647   0      133.500000\n",
1862
       "1      133.500000\n",
1863
       "2      133...   \n",
1864
       "863   0      120.0\n",
1865
       "1      120.0\n",
1866
       "2      126.5\n",
1867
       "3      ...   \n",
1868
       "207   0      116.5\n",
1869
       "1      106.5\n",
1870
       "2      128.5\n",
1871
       "3      ...   \n",
1872
       "\n",
1873
       "                                                 Lead10  \\\n",
1874
       "309   0      140.5\n",
1875
       "1      139.5\n",
1876
       "2      146.0\n",
1877
       "3      ...   \n",
1878
       "1108  0      130.0\n",
1879
       "1      132.0\n",
1880
       "2      133.0\n",
1881
       "3      ...   \n",
1882
       "647   0       73.000000\n",
1883
       "1       75.000000\n",
1884
       "2       75...   \n",
1885
       "863   0      150.0\n",
1886
       "1      153.5\n",
1887
       "2      145.5\n",
1888
       "3      ...   \n",
1889
       "207   0      147.0\n",
1890
       "1      145.0\n",
1891
       "2      149.0\n",
1892
       "3      ...   \n",
1893
       "\n",
1894
       "                                                 Lead11  \\\n",
1895
       "309   0      153.0\n",
1896
       "1      150.5\n",
1897
       "2      162.5\n",
1898
       "3      ...   \n",
1899
       "1108  0       89.5\n",
1900
       "1       92.5\n",
1901
       "2      102.5\n",
1902
       "3      ...   \n",
1903
       "647   0      68.333333\n",
1904
       "1      57.500000\n",
1905
       "2      59.09...   \n",
1906
       "863   0      144.0\n",
1907
       "1      137.5\n",
1908
       "2      145.5\n",
1909
       "3      ...   \n",
1910
       "207   0      153.781022\n",
1911
       "1      141.024793\n",
1912
       "2       22...   \n",
1913
       "\n",
1914
       "                                                 Lead12  \n",
1915
       "309   0      101.0\n",
1916
       "1      100.5\n",
1917
       "2      110.0\n",
1918
       "3      ...  \n",
1919
       "1108  0      135.0\n",
1920
       "1      128.5\n",
1921
       "2      125.0\n",
1922
       "3      ...  \n",
1923
       "647   0       74.631579\n",
1924
       "1       76.466667\n",
1925
       "2       79...  \n",
1926
       "863   0      127.888889\n",
1927
       "1      126.962963\n",
1928
       "2      133...  \n",
1929
       "207   0      106.0\n",
1930
       "1      101.5\n",
1931
       "2      113.5\n",
1932
       "3      ...  "
1933
      ]
1934
     },
1935
     "execution_count": 14,
1936
     "metadata": {},
1937
     "output_type": "execute_result"
1938
    }
1939
   ],
1940
   "source": [
1941
    "X_train.head()"
1942
   ]
1943
  },
1944
  {
1945
   "cell_type": "markdown",
1946
   "id": "7fa8a41a",
1947
   "metadata": {},
1948
   "source": [
1949
    "#### Column concatenator"
1950
   ]
1951
  },
1952
  {
1953
   "cell_type": "code",
1954
   "execution_count": 15,
1955
   "id": "36fbcee6",
1956
   "metadata": {},
1957
   "outputs": [
1958
    {
1959
     "name": "stdout",
1960
     "output_type": "stream",
1961
     "text": [
1962
      "training time: 9 sec\n"
1963
     ]
1964
    }
1965
   ],
1966
   "source": [
1967
    "pipItems = [\n",
1968
    "    (\"concatenate\", ColumnConcatenator()),\n",
1969
    "    (\"classify\", TimeSeriesForestClassifier(n_estimators=100,n_jobs=-1))]\n",
1970
    "concClf = Pipeline(pipItems)\n",
1971
    "t = time.time()\n",
1972
    "concClf.fit(X_train, y_train)\n",
1973
    "print('training time: {} sec'.format(round(time.time()-t)))"
1974
   ]
1975
  },
1976
  {
1977
   "cell_type": "code",
1978
   "execution_count": 16,
1979
   "id": "cd2aacae",
1980
   "metadata": {},
1981
   "outputs": [
1982
    {
1983
     "data": {
1984
      "image/png": "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\n",
1985
      "text/plain": [
1986
       "<Figure size 288x288 with 2 Axes>"
1987
      ]
1988
     },
1989
     "metadata": {
1990
      "needs_background": "light"
1991
     },
1992
     "output_type": "display_data"
1993
    },
1994
    {
1995
     "name": "stdout",
1996
     "output_type": "stream",
1997
     "text": [
1998
      "Column-Concatenator classifier score: 0.9254237288135593\n"
1999
     ]
2000
    }
2001
   ],
2002
   "source": [
2003
    "y_train_pred = cross_val_predict(concClf, X_train, y_train, cv=10)\n",
2004
    "confmat = metrics.confusion_matrix(y_train,y_train_pred)\n",
2005
    "plt.matshow(confmat)\n",
2006
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
2007
    "plt.xlabel(\"Actual\")\n",
2008
    "plt.ylabel(\"Predicted\")\n",
2009
    "plt.show()\n",
2010
    "print('Column-Concatenator classifier score: {}'.format(concClf.score(X_test, y_test)))"
2011
   ]
2012
  },
2013
  {
2014
   "cell_type": "code",
2015
   "execution_count": null,
2016
   "id": "73c95904",
2017
   "metadata": {},
2018
   "outputs": [],
2019
   "source": []
2020
  },
2021
  {
2022
   "cell_type": "code",
2023
   "execution_count": 17,
2024
   "id": "cb7021a3",
2025
   "metadata": {},
2026
   "outputs": [],
2027
   "source": [
2028
    "#### Column-wise ensembling"
2029
   ]
2030
  },
2031
  {
2032
   "cell_type": "code",
2033
   "execution_count": 20,
2034
   "id": "4b2d8cdd",
2035
   "metadata": {},
2036
   "outputs": [
2037
    {
2038
     "name": "stdout",
2039
     "output_type": "stream",
2040
     "text": [
2041
      "training time: 1417 sec\n"
2042
     ]
2043
    }
2044
   ],
2045
   "source": [
2046
    "ensClf = ColumnEnsembleClassifier(\n",
2047
    "    estimators=[\n",
2048
    "        (\"TSF0\", TimeSeriesForestClassifier(n_estimators=100), [0]),\n",
2049
    "        (\"BOSSEnsemble\", BOSSEnsemble(max_ensemble_size=5,n_jobs=-1), [6])])\n",
2050
    "t = time.time()\n",
2051
    "ensClf.fit(X_train, y_train)\n",
2052
    "print('training time: {} sec'.format(round(time.time()-t)))"
2053
   ]
2054
  },
2055
  {
2056
   "cell_type": "code",
2057
   "execution_count": 21,
2058
   "id": "af8c34bc",
2059
   "metadata": {
2060
    "scrolled": true
2061
   },
2062
   "outputs": [
2063
    {
2064
     "data": {
2065
      "image/png": "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\n",
2066
      "text/plain": [
2067
       "<Figure size 288x288 with 2 Axes>"
2068
      ]
2069
     },
2070
     "metadata": {
2071
      "needs_background": "light"
2072
     },
2073
     "output_type": "display_data"
2074
    },
2075
    {
2076
     "name": "stdout",
2077
     "output_type": "stream",
2078
     "text": [
2079
      "Column-wise ensembling classifier score: 0.9084745762711864\n"
2080
     ]
2081
    }
2082
   ],
2083
   "source": [
2084
    "y_train_pred = cross_val_predict(ensClf, X_train, y_train, cv=3)\n",
2085
    "confmat = metrics.confusion_matrix(y_train,y_train_pred)\n",
2086
    "plt.matshow(confmat)\n",
2087
    "sn.heatmap(confmat,annot=True, annot_kws={\"size\":10}, fmt='d')\n",
2088
    "plt.xlabel(\"Actual\")\n",
2089
    "plt.ylabel(\"Predicted\")\n",
2090
    "plt.show()\n",
2091
    "print('Column-wise ensembling classifier score: {}'.format(ensClf.score(X_test, y_test)))"
2092
   ]
2093
  },
2094
  {
2095
   "cell_type": "code",
2096
   "execution_count": null,
2097
   "id": "82f302c7",
2098
   "metadata": {},
2099
   "outputs": [],
2100
   "source": []
2101
  },
2102
  {
2103
   "cell_type": "code",
2104
   "execution_count": null,
2105
   "id": "21353e0e",
2106
   "metadata": {},
2107
   "outputs": [],
2108
   "source": []
2109
  }
2110
 ],
2111
 "metadata": {
2112
  "kernelspec": {
2113
   "display_name": "Python 3",
2114
   "language": "python",
2115
   "name": "python3"
2116
  },
2117
  "language_info": {
2118
   "codemirror_mode": {
2119
    "name": "ipython",
2120
    "version": 3
2121
   },
2122
   "file_extension": ".py",
2123
   "mimetype": "text/x-python",
2124
   "name": "python",
2125
   "nbconvert_exporter": "python",
2126
   "pygments_lexer": "ipython3",
2127
   "version": "3.7.10"
2128
  }
2129
 },
2130
 "nbformat": 4,
2131
 "nbformat_minor": 5
2132
}