def _eval_previous(self): print('Parsing Previous ... ', end='', flush=True) fn_recent = Name_functions.parameter_evaluation_evaluation_metric_file('Previous') if Filefunctions.exists(fn_recent): print('Already done') return with open(fn_recent, 'w+') as wf: wf.write('S;Day;NumEntries;accuracy;f1\n') for S in self.Multi['S']: predictor = Classifiers.PreviousClassifier(S) fn = Name_functions.DS_file(S) _, labels, times, ids = Di(fn).get_data(fn_subset_ids=self.test_ids_fn, return_split_values=True, return_identifiers=True) data = pd.DataFrame(index=ids) data['time'] = times data['y_true'] = [l[0] for l in labels] data['Day'] = np.floor(data['time']) # Calculate the accuracy score for each day for day in data['Day'].unique(): subset = data[data['Day'] == day] acc_score, f1_score = self.get_scores(predictor=predictor, true_labels=subset['y_true'], times=subset['time'], ids=subset.index ) if not (acc_score is None or f1_score is None): wf.write('{};{};{};{};{}\n'.format(S, day, len(subset), acc_score, f1_score)) print('Done')
def _eval_param(self, evaluated_parameter): print('Parsing parameter {} ... '.format(evaluated_parameter), end='', flush=True) fn = Name_functions.parameter_evaluation_evaluation_metric_file(evaluated_parameter) if Filefunctions.exists(fn): print('Already done') return with open(fn, 'w+') as wf: wf.write('S;Beta;Tau;P;Day;NumEntries;accuracy;f1\n') for S in self.values(evaluated_parameter, 'S'): predictor = Classifiers.BPTSClassifier(s=S, score_function=None) fn = Name_functions.DS_file(S) _, labels, times, ids = Di(fn).get_data(fn_subset_ids=self.test_ids_fn, return_split_values=True, return_identifiers=True) data = pd.DataFrame(index=ids) data['time'] = times data['y_true'] = [l[0] for l in labels] data['Day'] = np.floor(data['time']) for beta in self.values(evaluated_parameter, 'Beta'): for p in self.values(evaluated_parameter, 'P'): for tau in self.values(evaluated_parameter, 'Tau'): scoring_function = PeriodScoring(s=S, beta=beta, tau=tau, p=p) predictor.set_scoring_function(scoring_function) for day in data['Day'].unique(): subset = data[data['Day'] == day] acc_score, f1_score = self.get_scores(predictor=predictor, ids=subset.index, times=subset['time'], true_labels=subset['y_true'], ) if not (acc_score is None or f1_score is None): wf.write('{};{};{};{};{};{};{};{}\n'.format(S, beta, tau, p, day, len(subset), acc_score, f1_score)) print('Done')