You Snooze You Win: The PhysioNet/Computing in Cardiology Challenge 2018 1.0.0
(1,700 bytes)
#!/usr/bin/env python3
import numpy as np
import os
import sys
import glob
import h5py
from pylab import find
from sklearn.metrics import precision_recall_curve, auc, roc_auc_score
import gc
def score_training_set():
AUROC, AUPRC = [], []
for vec_file in glob.glob('tr*.vec'):
gc.collect()
record_name = vec_file[:-4]
# Load predictions from .vec file
predictions = np.loadtxt(vec_file)
# Load target arousals
arousal_file = ('training/%s/%s-arousal.mat'
% (record_name, record_name))
f = h5py.File(arousal_file, 'r')
arousals = np.array(f['data']['arousals'])
# Remove any segments that have a -1 label before grading
keep = find(arousals != -1)
used_predictions = predictions[keep]
used_arousals = arousals[keep]
if np.any(used_arousals):
precision, recall, thresholds = \
precision_recall_curve(np.ravel(used_arousals),
used_predictions,
pos_label=1, sample_weight=None)
auprc = auc(recall, precision)
auroc = roc_auc_score(np.ravel(used_arousals), used_predictions)
AUPRC.append(auprc)
AUROC.append(auroc)
else:
auprc = auroc = float('nan')
print('%s AUROC:%f AUPRC:%f' % (record_name, auroc, auprc))
print()
print('Training AUROC Performance: %f+/-%f'
% (np.mean(AUROC), np.std(AUROC)))
print('Training AUPRC Performance: %f+/-%f'
% (np.mean(AUPRC), np.std(AUPRC)))
print()
if __name__ == '__main__':
score_training_set()