Commit 483f75aa authored by Paul Primus's avatar Paul Primus
Browse files

add final submission package

parent dfebc6ca
%% Cell type:code id: tags:
``` python
from pymongo import MongoClient
from matplotlib import pyplot as plt
import numpy as np
from dcase2020_task2.data_sets.mcm_dataset import INVERSE_CLASS_MAP, TRAINING_ID_MAP, CLASS_MAP
from scipy.stats import rankdata
baseline_auc = {
'name': 'baseline',
0: {0: 0.5441, 2: 0.7340, 4: 0.6161, 6: 0.7392},
1: {0: 0.6715, 2: 0.6153, 4: 0.8833, 6: 0.7455},
2: {0: 0.9619, 2: 0.7897, 4: 0.9430, 6: 0.6959},
3: {1: 0.8136, 2: 0.8597, 3: 0.6330, 4: 0.8445},
4: {1: 0.7807, 2: 0.6416, 3: 0.7535},
5: {0: 0.6876, 2: 0.6818, 4: 0.7430, 6: 0.5390}
}
baseline_pauc = {
'name': 'baseline',
0: {0: 0.4937, 2: 0.5481, 4: 0.5326, 6: 0.5235},
1: {0: 0.5674, 2: 0.5810, 4: 0.6710, 6: 0.5802},
2: {0: 0.8144, 2: 0.6368, 4: 0.7198, 6: 0.4902},
3: {1: 0.6840, 2: 0.7772, 3: 0.5521, 4: 0.6897},
4: {1: 0.6425, 2: 0.5601, 3: 0.6103},
5: {0: 0.5170, 2: 0.5183, 4: 0.5197, 6: 0.4843}
}
baseline_both = {}
for t in baseline_auc:
if t == 'name':
baseline_both[t] = 'baseline'
continue
else:
baseline_both[t] = {}
for i in baseline_auc[t]:
baseline_both[t][i] = np.array([baseline_auc[t][i], baseline_pauc[t][i]])
def get_experiment(runs, name):
experiment_dict = dict()
for i in range(6):
experiment_dict[i] = dict()
experiment_dict['name'] = name
for experiment in runs:
if experiment['config'].get('id') == name:
machine_dict = experiment_dict.get(experiment['config']['machine_type'])
result = experiment.get('result')
machine_type = INVERSE_CLASS_MAP[experiment['config']['machine_type']]
machine_id = experiment['config']['machine_id']
if result:
machine_dict[experiment['config']['machine_id']] = result.get(
machine_type, {}
).get(
f'json://{machine_id}', -1
).get('py/tuple', [0, 0])[:2]
else:
machine_dict[experiment['config']['machine_id']] = np.array([0, 0])
return experiment_dict
def get_record(experiment):
record = []
for i in range(6):
for j in TRAINING_ID_MAP[i]:
v = experiment.get(i)
if v:
v = v.get(j, [0, 0])
else:
v = np.array([0, 0])
record.append(np.array(v))
assert len(record) == 23
return experiment['name'], record
```
%% Cell type:code id: tags:
``` python
client = MongoClient('mongodb://student2.cp.jku.at:27017/')
experiments = [r for r in client.resnet_gridsearch.runs.find({"experiment.name": "dcase2020_task2_ClassificationExperiment"})]
print(f'Loaded {len(experiments)} runs.')
```
%%%% Output: stream
Loaded 563 runs.
Loaded 572 runs.
%% Cell type:code id: tags:
``` python
descriptors = set()
for experiment in experiments:
descriptors = descriptors.union(set([experiment['config']['id']]))
descriptors = list(descriptors)
descriptors = [d for d in descriptors if d.split('_')[-1] != 'rerun']
print(f'Loaded {len(descriptors)} distinct experiments.')
```
%%%% Output: stream
Loaded 13 distinct experiments.
%% Cell type:code id: tags:
``` python
# Extract Results
# Concatenate Baseline Results
n, m = get_record(baseline_both)
names = [n]
metrics = [np.array(m)]
for descriptor in descriptors:
n, m = get_record(
get_experiment(
experiments,
descriptor
)
)
names.append(n)
metrics.append(np.array(m))
```
%% Cell type:code id: tags:
``` python
data = np.array(metrics)
auc_ranks = []
pauc_ranks = []
idxes = [0, 4, 8, 12, 16, 19, 23]
for type_, (i, j) in enumerate(zip(idxes[:-1], idxes[1:])):
average_auc = data[:, i:j, 0].mean(axis=1)
average_pauc = data[:, i:j, 1].mean(axis=1)
print(f'Best Model for Machine Type {type_}: {np.argsort(average_auc + average_pauc)[::-1]}')
auc_ranks.append(rankdata(-average_auc))
pauc_ranks.append(rankdata(-average_pauc))
```
%%%% Output: stream
Best Model for Machine Type 0: [ 1 6 5 12 11 9 2 10 3 7 13 4 8 0]
Best Model for Machine Type 1: [ 1 10 6 9 3 5 13 2 11 12 7 8 4 0]
Best Model for Machine Type 2: [10 5 12 1 11 3 2 13 9 6 4 8 7 0]
Best Model for Machine Type 3: [ 2 12 4 5 11 6 10 3 1 13 9 8 7 0]
Best Model for Machine Type 4: [13 3 12 11 10 9 7 6 8 4 5 2 0 1]
Best Model for Machine Type 5: [ 4 8 2 7 10 5 9 6 13 11 12 3 0 1]
Best Model for Machine Type 4: [13 3 12 11 10 9 7 6 8 4 5 2 1 0]
Best Model for Machine Type 5: [ 1 4 8 2 7 10 5 9 6 13 11 12 3 0]
%% Cell type:code id: tags:
``` python
ranks = np.stack([np.array(list(zip(*auc_ranks))), np.array(list(zip(*pauc_ranks)))], axis=-1).mean(axis=-1).mean(axis=-1)
indices = list(np.argsort(ranks))
names = np.array(names)
for i, (n, r, j) in enumerate(zip(names[indices], ranks[indices], indices)):
print(f'{i}: ID-{j} {n}')
```
%%%% Output: stream
0: ID-10 resnet_gridsearch_a_bit_larger_loose_1e-4_100_BCE
1: ID-5 resnet_gridsearch_a_bit_larger_loose_1e-4_100_AUC
2: ID-12 resnet_gridsearch_a_bit_larger_loose_1e-5_100_BCE
3: ID-2 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_BCE
4: ID-11 resnet_gridsearch_a_bit_larger_loose_1e-5_100_AUC
5: ID-6 resnet_gridsearch_normal_loose_1e-4_100_BCE
6: ID-1 resnet_gridsearch_2_a_bit_larger_loose_1e-4_0.99_100_BCE
0: ID-1 resnet_gridsearch_2_a_bit_larger_loose_1e-4_0.99_100_BCE
1: ID-10 resnet_gridsearch_a_bit_larger_loose_1e-4_100_BCE
2: ID-5 resnet_gridsearch_a_bit_larger_loose_1e-4_100_AUC
3: ID-12 resnet_gridsearch_a_bit_larger_loose_1e-5_100_BCE
4: ID-2 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_BCE
5: ID-11 resnet_gridsearch_a_bit_larger_loose_1e-5_100_AUC
6: ID-6 resnet_gridsearch_normal_loose_1e-4_100_BCE
7: ID-3 resnet_gridsearch_normal_loose_1e-5_100_BCE
8: ID-9 resnet_gridsearch_normal_loose_1e-4_100_AUC
9: ID-4 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_AUC
10: ID-13 resnet_gridsearch_normal_loose_1e-5_100_AUC
11: ID-7 resnet_gridsearch_a_bit_smaller_loose_1e-5_100_AUC
12: ID-8 resnet_gridsearch_a_bit_smaller_loose_1e-5_100_BCE
13: ID-0 baseline
%% Cell type:code id: tags:
``` python
indices
```
%%%% Output: execute_result
[10, 5, 12, 2, 11, 6, 1, 3, 9, 4, 13, 7, 8, 0]
[1, 10, 5, 12, 2, 11, 6, 3, 9, 4, 13, 7, 8, 0]
%% Cell type:code id: tags:
``` python
metric = 'auroc_mean'
bar_width = 0.6
bar_spacing=0.00
top = 10
top_k_data = data[[10, 1], :, 0 if metric == 'auroc_mean' else 1][:top]
baseline_data = data[0:1, :, 0 if metric == 'auroc_mean' else 1]
to_visualize = np.concatenate([baseline_data, top_k_data])
plt.figure(figsize=(20,10))
plt.rcParams.update({'font.size': 22})
plt.title(f'{metric}')
labels = []
for i in range(6):
for j in TRAINING_ID_MAP[i]:
labels.append("{}, {}".format(INVERSE_CLASS_MAP[i][:6], j))
for i, d in enumerate(to_visualize):
plt.bar(
np.arange(len(labels)) + i * (bar_width / len(to_visualize) + bar_spacing),
d,
bar_width/ len(to_visualize),
)
plt.xticks(np.arange(len(labels)), labels, rotation='vertical')
plt.ylim(0.5, 1.)
plt.yticks(np.arange(0.5, 1., 0.1))
plt.grid()
plt.savefig(f'top_{top}_auc.png')
plt.show()
data.shape
```
%%%% Output: display_data
![](data:image/png;base64,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dBEoAQAAANBFoAQAAABAF4ESAAAAAF0ESgAAAAB0ESgBAAAA0EWgBAAAAEAXgRIAAAAAXQRKAAAAAHQRKAEAAADQRaAEAAAAQBeBEgAAAABdBEoAAAAAdBEoAQAAANBFoAQAAABAF4ESAAAAAF0ESgAAAAB0ESgBAAAA0EWgBAAAAEAXgRIAAAAAXQRKAAAAAHQRKAEAAADQRaAEAAAAQBeBEgAAAABdBEoAAAAAdBEoAQAAANBFoAQAAABAF4ESAAAAAF0ESgAAAAB0ESgBAAAA0EWgBAAAAEAXgRIAAAAAXQRKAAAAAHQRKAEAAADQRaAEAAAAQBeBEgAAAABdBEoAAAAAdBEoAQAAANBly1o3wLF27Nl33LbdM0eya972g1un2REAAADAscxQAgAAAKCLQAkAAACALgIlAAAAALoIlAAAAADo4qbcAAAAwKY3+hCs0QdgJR6C1cMMJQAAAAC6CJQAAAAA6CJQAgAAAKCLQAkAAACALgIlAAAAALoIlAAAAADoIlACAAAAoItACQAAAIAuAiUAAAAAugiUAAAAAOgiUAIAAACgi0AJAAAAgC4CJQD4/9u77zBJqnKP4993AzkuWXJGSQICighIEhSUS1CSgKgomK8iqCggFwFRwQAiegkCwiVIUJS85CAZSQsSFliCAgoLu4Sdee8f5zTT23Rcps+pM/v7PE8/s9NdtfOd2dqertNVp0REREREpCcaUBIRERERERERkZ5oQElERERERERERHqiASUREREREREREemJBpRERERERERERKQnGlASEREREREREZGeaEBJRERERERERER6ogElERERERERERHpiQaURERERERERESkJxpQEhERERERERGRnmhASUREREREREREeqIBJRERERERERER6YkGlEREREREREREpCcaUBIRERERERERkZ5oQElERERERERERHqiASUREREREREREemJBpRERERERERERKQnGlASEREREREREZGeaEBJRERERERERER6ogElERERERERERHpiQaURERERERERESkJxpQEhERERERERGRnmhASUREREREREREetLzgJKZ7Wpm15nZS2b2ipndZmZfMrOe/i4zO8TMvM3ttV7bRERERERERESk/8b0srCZHQfsB7wGXAm8CWwG/ArYzMx2cveBHhvuBu5qcv+bPf49IiIi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)
%%%% Output: execute_result
(14, 23, 2)
%% Cell type:code id: tags:
``` python
metric = 'pauroc_mean'
bar_width = 0.6
bar_spacing=0.00
top = 10
top_k_data = data[indices, :, 0 if metric == 'auroc_mean' else 1][:top]
baseline_data = data[0:1, :, 0 if metric == 'auroc_mean' else 1]
to_visualize = np.concatenate([baseline_data, top_k_data])
plt.figure(figsize=(20,10))
plt.rcParams.update({'font.size': 22})
plt.title(f'{metric}')
labels = []
for i in range(6):
for j in TRAINING_ID_MAP[i]:
labels.append("{}, {}".format(INVERSE_CLASS_MAP[i][:6], j))
for i, d in enumerate(to_visualize):
plt.bar(
np.arange(len(labels)) + i * (bar_width / len(to_visualize) + bar_spacing),
d,
bar_width/ len(to_visualize),
)
plt.xticks(np.arange(len(labels)), labels, rotation='vertical')
plt.ylim(0.45, 1.)
plt.yticks(np.arange(0.5, 1., 0.1))
plt.grid()
plt.savefig(f'top_{top}_auc.png')
plt.show()
data.shape
```
%%%% Output: display_data
![](data:image/png;base64,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)
%%%% Output: execute_result
(11, 23, 2)
%% Cell type:code id: tags:
``` python
```
......
This diff is collapsed.
%% Cell type:code id: tags:
``` python
from pymongo import MongoClient
from matplotlib import pyplot as plt
import numpy as np
from dcase2020_task2.data_sets.mcm_dataset import INVERSE_CLASS_MAP, TRAINING_ID_MAP, EVALUATION_ID_MAP, CLASS_MAP
from scipy.stats import rankdata
import os
from shutil import copyfile
import pandas as pd
baseline_auc = {
'name': 'baseline',
0: {0: 0.5441, 2: 0.7340, 4: 0.6161, 6: 0.7392},
1: {0: 0.6715, 2: 0.6153, 4: 0.8833, 6: 0.7455},
2: {0: 0.9619, 2: 0.7897, 4: 0.9430, 6: 0.6959},
3: {1: 0.8136, 2: 0.8597, 3: 0.6330, 4: 0.8445},
4: {1: 0.7807, 2: 0.6416, 3: 0.7535},
5: {0: 0.6876, 2: 0.6818, 4: 0.7430, 6: 0.5390}
}
baseline_pauc = {
'name': 'baseline',
0: {0: 0.4937, 2: 0.5481, 4: 0.5326, 6: 0.5235},
1: {0: 0.5674, 2: 0.5810, 4: 0.6710, 6: 0.5802},
2: {0: 0.8144, 2: 0.6368, 4: 0.7198, 6: 0.4902},
3: {1: 0.6840, 2: 0.7772, 3: 0.5521, 4: 0.6897},
4: {1: 0.6425, 2: 0.5601, 3: 0.6103},
5: {0: 0.5170, 2: 0.5183, 4: 0.5197, 6: 0.4843}
}
baseline_both = {}
for t in baseline_auc:
if t == 'name':
baseline_both[t] = 'baseline'
continue
else:
baseline_both[t] = {}
for i in baseline_auc[t]:
baseline_both[t][i] = np.array([baseline_auc[t][i], baseline_pauc[t][i]])
def get_experiment(runs, name):
experiment_dict = dict()
for i in range(6):
experiment_dict[i] = dict()
experiment_dict['name'] = name
for experiment in runs:
if experiment['config'].get('id') == name:
machine_dict = experiment_dict.get(experiment['config']['machine_type'])
result = experiment.get('result')
machine_type = INVERSE_CLASS_MAP[experiment['config']['machine_type']]
machine_id = experiment['config']['machine_id']
if result:
machine_dict[experiment['config']['machine_id']] = result.get(
machine_type, {}
).get(
f'json://{machine_id}', -1
).get('py/tuple', [0, 0])[:2]
else:
machine_dict[experiment['config']['machine_id']] = np.array([0, 0])
return experiment_dict
def get_record(experiment):
record = []
for i in range(6):
for j in TRAINING_ID_MAP[i]:
v = experiment.get(i)
if v:
v = v.get(j, [0, 0])
else:
v = np.array([0, 0])
record.append(np.array(v))
assert len(record) == 23
return experiment['name'], record
```
%% Cell type:code id: tags:
``` python
client = MongoClient('mongodb://student2.cp.jku.at:27017/')
experiments = [r for r in client.resnet_gridsearch.runs.find({"experiment.name": "dcase2020_task2_ClassificationExperiment"})]
print(f'Loaded {len(experiments)} runs.')
```
%%%% Output: stream
Loaded 563 runs.
Loaded 572 runs.
%% Cell type:code id: tags:
``` python
descriptors = set()
for experiment in experiments:
descriptors = descriptors.union(set([experiment['config']['id']]))
descriptors = list(descriptors)
print(f'Loaded {len(descriptors)} distinct experiments.')
```
%%%% Output: stream
Loaded 25 distinct experiments.
%% Cell type:code id: tags:
``` python
descriptors = [d for d in descriptors if d.split('_')[-1] != 'rerun']
descriptors = [d for d in descriptors if d.split('_')[2] != '2']
# descriptors = [d for d in descriptors if d.split('_')[2] != '2']
# for descriptor in descriptors:
# print(descriptor)
print(f'Loaded {len(descriptors)} distinct experiments, without reruns.')
```
%%%% Output: stream
Loaded 12 distinct experiments, without reruns.
Loaded 13 distinct experiments, without reruns.
%% Cell type:code id: tags:
``` python
# Extract Results
# Concatenate Baseline Results
n, m = get_record(baseline_both)
names = [n]
metrics = [np.array(m)]
for descriptor in descriptors:
n, m = get_record(
get_experiment(
experiments,
descriptor
)
)
names.append(n)
metrics.append(np.array(m))
```
%% Cell type:code id: tags:
``` python
data = np.array(metrics)
auc_ranks = []
pauc_ranks = []
idxes = [0, 4, 8, 12, 16, 19, 23]
best_idxes = []
for type_, (i, j) in enumerate(zip(idxes[:-1], idxes[1:])):
average_auc = data[:, i:j, 0].mean(axis=1)
average_pauc = data[:, i:j, 1].mean(axis=1)
best_idxes.append(
np.argsort(average_auc + average_pauc)[::-1]
)
print(f'Best Model for Machine Type {type_}: {best_idxes[-1]}')
auc_ranks.append(rankdata(-average_auc))
pauc_ranks.append(rankdata(-average_pauc))
ranks = np.stack([np.array(list(zip(*auc_ranks))), np.array(list(zip(*pauc_ranks)))], axis=-1).mean(axis=-1).mean(axis=-1)
sorted_model_indices = list(np.argsort(ranks))
names = np.array(names)
for i, (n, r, j) in enumerate(zip(names[sorted_model_indices], ranks[sorted_model_indices], sorted_model_indices)):
print(f'{i:02d}: ID-{j:02d} {n}')
```
%%%% Output: stream
Best Model for Machine Type 0: [ 2 9 1 5 6 10 4 8 7 12 11 3 0]
Best Model for Machine Type 1: [ 4 2 6 8 9 12 10 5 1 7 3 11 0]
Best Model for Machine Type 2: [ 4 9 1 5 8 10 12 6 2 11 3 7 0]
Best Model for Machine Type 3: [10 1 11 9 5 2 4 8 12 6 3 7 0]
Best Model for Machine Type 4: [12 8 1 5 4 6 7 2 3 11 9 10 0]
Best Model for Machine Type 5: [11 3 10 7 4 9 6 2 12 5 1 8 0]
Best Model for Machine Type 0: [ 8 2 10 1 5 6 11 4 9 7 13 12 3 0]
Best Model for Machine Type 1: [ 8 4 2 6 9 10 13 11 5 1 7 3 12 0]
Best Model for Machine Type 2: [ 4 10 1 8 5 9 11 13 6 2 12 3 7 0]
Best Model for Machine Type 3: [11 1 12 10 5 2 4 9 8 13 6 3 7 0]
Best Model for Machine Type 4: [13 9 1 5 4 6 7 2 3 12 10 11 8 0]
Best Model for Machine Type 5: [ 8 12 3 11 7 4 10 6 2 13 5 1 9 0]
00: ID-04 resnet_gridsearch_a_bit_larger_loose_1e-4_100_BCE
01: ID-09 resnet_gridsearch_a_bit_larger_loose_1e-4_100_AUC
02: ID-01 resnet_gridsearch_a_bit_larger_loose_1e-5_100_BCE
03: ID-10 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_BCE
04: ID-05 resnet_gridsearch_a_bit_larger_loose_1e-5_100_AUC
05: ID-02 resnet_gridsearch_normal_loose_1e-4_100_BCE
06: ID-08 resnet_gridsearch_normal_loose_1e-5_100_BCE
07: ID-06 resnet_gridsearch_normal_loose_1e-4_100_AUC
08: ID-12 resnet_gridsearch_normal_loose_1e-5_100_AUC
09: ID-11 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_AUC
10: ID-07 resnet_gridsearch_a_bit_smaller_loose_1e-5_100_AUC
11: ID-03 resnet_gridsearch_a_bit_smaller_loose_1e-5_100_BCE
12: ID-00 baseline
01: ID-08 resnet_gridsearch_2_a_bit_larger_loose_1e-4_0.99_100_BCE
02: ID-10 resnet_gridsearch_a_bit_larger_loose_1e-4_100_AUC
03: ID-01 resnet_gridsearch_a_bit_larger_loose_1e-5_100_BCE
04: ID-11 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_BCE
05: ID-05 resnet_gridsearch_a_bit_larger_loose_1e-5_100_AUC
06: ID-02 resnet_gridsearch_normal_loose_1e-4_100_BCE
07: ID-09 resnet_gridsearch_normal_loose_1e-5_100_BCE
08: ID-06 resnet_gridsearch_normal_loose_1e-4_100_AUC
09: ID-12 resnet_gridsearch_a_bit_smaller_loose_1e-4_100_AUC
10: ID-13 resnet_gridsearch_normal_loose_1e-5_100_AUC
11: ID-07 resnet_gridsearch_a_bit_smaller_loose_1e-5_100_AUC
12: ID-03 resnet_gridsearch_a_bit_smaller_loose_1e-5_100_BCE
13: ID-00 baseline
%% Cell type:code id: tags:
``` python
import sklearn
def compute_auc(src):
scores = pd.read_csv(src, names=['file_name', 'score'], index_col=False).to_numpy()[:, 1]
names = pd.read_csv(src, names=['file_name', 'score'], index_col=False).to_numpy()[:, 0]
names = np.array([1 if name.split('_')[0] == 'anomaly' else 0 for name in names])
return sklearn.metrics.roc_auc_score(names, scores), sklearn.metrics.roc_auc_score(names, scores, max_fpr=0.1)
run_ids = names
```
%% Cell type:code id: tags:
``` python
# Create Submission 1
```
%% Cell type:code id: tags:
``` python
for machine_type in range(6):
for machine_id in EVALUATION_ID_MAP[machine_type]:
best_model_folder = run_ids[sorted_model_indices[0]]
src_path = os.path.join('..', 'experiment_logs', best_model_folder)
src = os.path.join(src_path, f'anomaly_score_{INVERSE_CLASS_MAP[machine_type]}_id_{machine_id}_mean.csv')
dst_path = os.path.join('..', 'submission_package', 'task2', 'Primus_CP-JKU_task2_1')
dst = os.path.join(dst_path, f'anomaly_score_{INVERSE_CLASS_MAP[machine_type]}_id_{machine_id:02d}.csv')
copyfile(src, dst)
```
%% Cell type:code id: tags:
``` python
for machine_type in range(6):
auc = []
pauc = []
for machine_id in TRAINING_ID_MAP[machine_type]:
best_model_folder = run_ids[sorted_model_indices[0]]
src_path = os.path.join('..', 'experiment_logs', best_model_folder)
src = os.path.join(src_path, f'anomaly_score_{INVERSE_CLASS_MAP[machine_type]}_id_{machine_id}_mean.csv')
a, p = compute_auc(src)
<