create_bar_plot.ipynb 84.7 KB
Newer Older
1
2
3
4
{
 "cells": [
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
5
   "execution_count": 1,
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
   "outputs": [],
   "source": [
    "from pymongo import MongoClient\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "from dcase2020_task2.data_sets.mcm_dataset import INVERSE_CLASS_MAP, TRAINING_ID_MAP, CLASS_MAP\n",
    "from scipy.stats import rankdata\n",
    "\n",
    "baseline_auc = {\n",
    "    'name': 'baseline',\n",
    "    0: {0: 0.5441, 2: 0.7340, 4: 0.6161, 6: 0.7392},\n",
    "    1: {0: 0.6715, 2: 0.6153, 4: 0.8833, 6: 0.7455},\n",
    "    2: {0: 0.9619, 2: 0.7897, 4: 0.9430, 6: 0.6959},\n",
    "    3: {1: 0.8136, 2: 0.8597, 3: 0.6330, 4: 0.8445},\n",
    "    4: {1: 0.7807, 2: 0.6416, 3: 0.7535},\n",
    "    5: {0: 0.6876, 2: 0.6818, 4: 0.7430, 6: 0.5390}\n",
    "    }\n",
    "    \n",
    "baseline_pauc = {\n",
    "    'name': 'baseline',\n",
    "    0: {0: 0.4937, 2: 0.5481, 4: 0.5326, 6: 0.5235},\n",
    "    1: {0: 0.5674, 2: 0.5810, 4: 0.6710, 6: 0.5802},\n",
    "    2: {0: 0.8144, 2: 0.6368, 4: 0.7198, 6: 0.4902},\n",
    "    3: {1: 0.6840, 2: 0.7772, 3: 0.5521, 4: 0.6897},\n",
    "    4: {1: 0.6425, 2: 0.5601, 3: 0.6103},\n",
    "    5: {0: 0.5170, 2: 0.5183, 4: 0.5197, 6: 0.4843}\n",
    "}\n",
    "\n",
    "baseline_both = {}\n",
    "for t in baseline_auc:\n",
    "    if t == 'name':\n",
    "        baseline_both[t] = 'baseline'\n",
    "        continue\n",
    "    else:\n",
    "        baseline_both[t] = {}\n",
    "    for i in baseline_auc[t]:\n",
    "        baseline_both[t][i] = np.array([baseline_auc[t][i], baseline_pauc[t][i]])\n",
    "\n",
    "\n",
    "def get_experiment(runs, name):\n",
    "    experiment_dict = dict()\n",
    "    for i in range(6):\n",
    "        experiment_dict[i] = dict()\n",
    "    \n",
    "    experiment_dict['name'] = name\n",
    "    \n",
    "    for experiment in runs:\n",
    "        if experiment['config'].get('id') == name:\n",
    "            machine_dict = experiment_dict.get(experiment['config']['machine_type'])\n",
    "            result = experiment.get('result')\n",
    "            machine_type = INVERSE_CLASS_MAP[experiment['config']['machine_type']]\n",
    "            machine_id = experiment['config']['machine_id']\n",
    "            \n",
    "            if result:\n",
    "                machine_dict[experiment['config']['machine_id']] = result.get(\n",
    "                    machine_type, {}\n",
    "                ).get(\n",
    "                    f'json://{machine_id}', -1\n",
    "                ).get('py/tuple', [0, 0])[:2]\n",
    "            else:\n",
    "                machine_dict[experiment['config']['machine_id']] = np.array([0, 0])\n",
    "    return experiment_dict\n",
    "\n",
    "\n",
    "def get_record(experiment):\n",
    "    record = []\n",
    "    for i in range(6):\n",
    "        for j in TRAINING_ID_MAP[i]:\n",
    "                v = experiment.get(i)\n",
    "                if v:\n",
    "                    v = v.get(j, [0, 0])\n",
    "                else:\n",
    "                    v = np.array([0, 0])\n",
    "                record.append(np.array(v))\n",
    "    assert len(record) == 23\n",
    "    return  experiment['name'], record"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
93
   "execution_count": 2,
94
95
96
97
   "outputs": [
    {
     "name": "stdout",
     "text": [
Paul Primus's avatar
Paul Primus committed
98
      "Loaded 400 runs.\n"
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "client = MongoClient('mongodb://student2.cp.jku.at:27017/')\n",
    "experiments = [r for r in client.resnet_gridsearch.runs.find({\"experiment.name\": \"dcase2020_task2_ClassificationExperiment\"})]\n",
    "print(f'Loaded {len(experiments)} runs.')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
118
   "execution_count": 4,
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "Loaded 10 distinct experiments.\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "descriptors = set()\n",
    "for experiment in experiments:\n",
    "    descriptors = descriptors.union(set([experiment['config']['id']]))\n",
    "descriptors = list(descriptors)\n",
    "print(f'Loaded {len(descriptors)} distinct experiments.')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
145
   "execution_count": 5,
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
   "outputs": [],
   "source": [
    "# Extract Results\n",
    "# Concatenate Baseline Results\n",
    "n, m = get_record(baseline_both)\n",
    "names = [n]\n",
    "metrics = [np.array(m)]\n",
    "\n",
    "for descriptor in descriptors:\n",
    "    n, m = get_record(\n",
    "            get_experiment(\n",
    "                experiments, \n",
    "                descriptor\n",
    "            )\n",
    "        )\n",
    "    names.append(n)\n",
    "    metrics.append(np.array(m))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
174
   "execution_count": 6,
175
176
177
178
   "outputs": [
    {
     "name": "stdout",
     "text": [
Paul Primus's avatar
Paul Primus committed
179
180
181
182
183
184
      "Best Model for Machine Type 0: 5\n",
      "Best Model for Machine Type 1: 8\n",
      "Best Model for Machine Type 2: 8\n",
      "Best Model for Machine Type 3: 1\n",
      "Best Model for Machine Type 4: 6\n",
      "Best Model for Machine Type 5: 10\n"
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "data = np.array(metrics)\n",
    "auc_ranks = []\n",
    "pauc_ranks = []\n",
    "idxes = [0, 4, 8, 12, 16, 19, 23]\n",
    "for type_, (i, j) in enumerate(zip(idxes[:-1], idxes[1:])):\n",
    "    average_auc = data[:, i:j, 0].mean(axis=1)\n",
    "    average_pauc = data[:, i:j, 1].mean(axis=1)\n",
    "    print(f'Best Model for Machine Type {type_}: {np.argmax(average_auc + average_pauc)}')\n",
    "    auc_ranks.append(rankdata(-average_auc))\n",
    "    pauc_ranks.append(rankdata(-average_pauc))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
211
   "execution_count": 8,
212
213
214
215
   "outputs": [
    {
     "name": "stdout",
     "text": [
Paul Primus's avatar
Paul Primus committed
216
217
218
219
220
221
222
223
224
225
226
      "0: ID-8 resnet_gridsearch_a_bit_larger_loose_1e-4_100_BCE\n",
      "1: ID-4 resnet_gridsearch_a_bit_larger_loose_1e-4_100_AUC\n",
      "2: ID-9 resnet_gridsearch_a_bit_larger_loose_1e-5_100_BCE\n",
      "3: ID-1 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_BCE\n",
      "4: ID-7 resnet_gridsearch_a_bit_larger_loose_1e-5_100_AUC\n",
      "5: ID-5 resnet_gridsearch_normal_loose_1e-4_100_BCE\n",
      "6: ID-3 resnet_gridsearch_normal_loose_1e-4_100_AUC\n",
      "7: ID-6 resnet_gridsearch_normal_loose_1e-5_100_BCE\n",
      "8: ID-10 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_AUC\n",
      "9: ID-2 resnet_gridsearch_normal_loose_1e-5_100_AUC\n",
      "10: ID-0 baseline\n"
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "ranks = np.stack([np.array(list(zip(*auc_ranks))), np.array(list(zip(*pauc_ranks)))], axis=-1).mean(axis=-1).mean(axis=-1)\n",
    "\n",
    "indices = list(np.argsort(ranks))\n",
    "names = np.array(names)\n",
    "for i, (n, r, j) in enumerate(zip(names[indices], ranks[indices], indices)):\n",
    "    print(f'{i}: ID-{j} {n}')\n",
    "    "
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
250
   "execution_count": 9,
251
252
253
254
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 1440x720 with 1 Axes>",
Paul Primus's avatar
Paul Primus committed
255
      "image/png": "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\n"
256
257
258
259
260
261
262
263
264
265
266
267
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "(11, 23, 2)"
     },
     "metadata": {},
     "output_type": "execute_result",
Paul Primus's avatar
Paul Primus committed
268
     "execution_count": 9
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
    }
   ],
   "source": [
    "metric = 'auroc_mean'\n",
    "bar_width = 0.6\n",
    "bar_spacing=0.00\n",
    "top = 10\n",
    "\n",
    "top_k_data = data[indices, :, 0 if metric == 'auroc_mean' else 1][:top]\n",
    "baseline_data = data[0:1, :, 0 if metric == 'auroc_mean' else 1]\n",
    "to_visualize = np.concatenate([baseline_data, top_k_data])\n",
    "\n",
    "plt.figure(figsize=(20,10))\n",
    "plt.rcParams.update({'font.size': 22})\n",
    "plt.title(f'{metric}')\n",
    "labels = []\n",
    "\n",
    "for i in range(6):\n",
    "    for j in TRAINING_ID_MAP[i]:\n",
    "        labels.append(\"{}, {}\".format(INVERSE_CLASS_MAP[i][:6], j))\n",
    "\n",
    "for i, d in enumerate(to_visualize):\n",
    "    plt.bar(\n",
    "        np.arange(len(labels)) + i * (bar_width / len(to_visualize) + bar_spacing), \n",
    "        d,\n",
    "        bar_width/ len(to_visualize),\n",
    "    )\n",
    "\n",
    "plt.xticks(np.arange(len(labels)), labels, rotation='vertical')\n",
    "plt.ylim(0.5, 1.)\n",
    "plt.yticks(np.arange(0.5, 1., 0.1))\n",
    "plt.grid()\n",
    "plt.savefig(f'top_{top}_auc.png')\n",
    "plt.show()\n",
    "\n",
    "data.shape"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
Paul Primus's avatar
Paul Primus committed
316
   "execution_count": 13,
317
318
319
320
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 1440x720 with 1 Axes>",
Paul Primus's avatar
Paul Primus committed
321
      "image/png": "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\n"
322
323
324
325
326
327
328
329
330
331
332
333
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "(11, 23, 2)"
     },
     "metadata": {},
     "output_type": "execute_result",
Paul Primus's avatar
Paul Primus committed
334
     "execution_count": 13
335
336
337
338
339
340
341
342
343
344
345
    }
   ],
   "source": [
    "\n",
    "\n",
    "\n",
    "metric = 'pauroc_mean'\n",
    "bar_width = 0.6\n",
    "bar_spacing=0.00\n",
    "top = 10\n",
    "\n",
Paul Primus's avatar
Paul Primus committed
346
    "top_k_data = data[[8, 1, 5, 6, 10], :, 0 if metric == 'auroc_mean' else 1][:top]\n",
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
    "baseline_data = data[0:1, :, 0 if metric == 'auroc_mean' else 1]\n",
    "to_visualize = np.concatenate([baseline_data, top_k_data])\n",
    "\n",
    "plt.figure(figsize=(20,10))\n",
    "plt.rcParams.update({'font.size': 22})\n",
    "plt.title(f'{metric}')\n",
    "labels = []\n",
    "\n",
    "for i in range(6):\n",
    "    for j in TRAINING_ID_MAP[i]:\n",
    "        labels.append(\"{}, {}\".format(INVERSE_CLASS_MAP[i][:6], j))\n",
    "\n",
    "for i, d in enumerate(to_visualize):\n",
    "    plt.bar(\n",
    "        np.arange(len(labels)) + i * (bar_width / len(to_visualize) + bar_spacing), \n",
    "        d,\n",
    "        bar_width/ len(to_visualize),\n",
    "    )\n",
    "\n",
    "plt.xticks(np.arange(len(labels)), labels, rotation='vertical')\n",
Paul Primus's avatar
Paul Primus committed
367
    "plt.ylim(0.0, 1.)\n",
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
    "plt.yticks(np.arange(0.5, 1., 0.1))\n",
    "plt.grid()\n",
    "plt.savefig(f'top_{top}_auc.png')\n",
    "plt.show()\n",
    "\n",
    "data.shape"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}