import numpy as np import torch import pandas as pd import os import sys import json from eval.mle.mle import get_evaluator sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import warnings warnings.filterwarnings("ignore") import argparse def eval_mle(syn_data, test_data, info): task_type = info['task_type'] evaluator = get_evaluator(task_type) if task_type == 'regression': best_r2_scores, best_rmse_scores = evaluator( syn_data, test_data, info ) overall_scores = {} for score_name in ['best_r2_scores', 'best_rmse_scores']: overall_scores[score_name] = {} scores = eval(score_name) for method in scores: name = method['name'] method.pop('name') overall_scores[score_name][name] = method else: best_f1_scores, best_weighted_scores, best_auroc_scores, best_acc_scores, best_avg_scores = evaluator( syn_data, test_data, info ) overall_scores = {} for score_name in ['best_f1_scores', 'best_weighted_scores', 'best_auroc_scores', 'best_acc_scores', 'best_avg_scores']: overall_scores[score_name] = {} scores = eval(score_name) for method in scores: name = method['name'] method.pop('name') overall_scores[score_name][name] = method return overall_scores # def preprocess(train, test, info) # def norm_data(data, ) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--dataname', type=str, default='adult') parser.add_argument('--model', type=str, default='real') parser.add_argument('--path', type=str, default = None, help='The file path of the synthetic data') args = parser.parse_args() dataname = args.dataname model = args.model if not args.path: train_path = f'synthetic/{dataname}/{model}.csv' else: train_path = args.path test_path = f'synthetic/{dataname}/test.csv' train = pd.read_csv(train_path).to_numpy() test = pd.read_csv(test_path).to_numpy() with open(f'data/{dataname}/info.json', 'r') as f: info = json.load(f) task_type = info['task_type'] evaluator = get_evaluator(task_type) if task_type == 'regression': best_r2_scores, best_rmse_scores = evaluator(train, test, info) overall_scores = {} for score_name in ['best_r2_scores', 'best_rmse_scores']: overall_scores[score_name] = {} scores = eval(score_name) for method in scores: name = method['name'] method.pop('name') overall_scores[score_name][name] = method else: best_f1_scores, best_weighted_scores, best_auroc_scores, best_acc_scores, best_avg_scores = evaluator(train, test, info) overall_scores = {} for score_name in ['best_f1_scores', 'best_weighted_scores', 'best_auroc_scores', 'best_acc_scores', 'best_avg_scores']: overall_scores[score_name] = {} scores = eval(score_name) for method in scores: name = method['name'] method.pop('name') overall_scores[score_name][name] = method if not os.path.exists(f'eval/mle/{dataname}'): os.makedirs(f'eval/mle/{dataname}') save_path = f'eval/mle/{dataname}/{model}.json' print('Saving scores to ', save_path) with open(save_path, "w") as json_file: json.dump(overall_scores, json_file, indent=4, separators=(", ", ": "))