-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun_experiment.py
100 lines (79 loc) · 3.37 KB
/
run_experiment.py
1
2
3
4
5
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
93
94
95
96
97
98
99
100
import argparse
from datetime import datetime
import logging
import numpy as np
import experiments
import sys
sys.path.append("..")
from data import loader
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def run_experiment(experiment_details, experiment, timing_key, verbose, timings):
t = datetime.now()
for details in experiment_details:
exp = experiment(details, verbose=verbose)
logger.info("Running {} experiment: {}".format(timing_key, details.ds_readable_name))
exp.perform()
t_d = datetime.now() - t
timings[timing_key] = t_d.seconds
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Perform some SL experiments')
parser.add_argument('--threads', type=int, default=1, help='Number of threads (defaults to 1, -1 for auto)')
parser.add_argument('--seed', type=int, help='A random seed to set, if desired')
parser.add_argument('--ann', action='store_true', help='Run the ANN experiment')
parser.add_argument('--boosting', action='store_true', help='Run the Boosting experiment')
parser.add_argument('--dt', action='store_true', help='Run the Decision Tree experiment')
parser.add_argument('--knn', action='store_true', help='Run the KNN experiment')
parser.add_argument('--svm', action='store_true', help='Run the SVM experiment')
parser.add_argument('--all', action='store_true', help='Run all experiments')
parser.add_argument('--verbose', action='store_true', help='If true, provide verbose output')
args = parser.parse_args()
verbose = args.verbose
threads = args.threads
seed = args.seed
if seed is None:
seed = np.random.randint(0, (2 * 32) - 1)
print("Using seed {}".format(seed))
print("Loading data")
print("----------")
ds1_details = {
'data': loader.CreditDefaultData(verbose=verbose, seed=seed),
'name': 'credit_default',
'readable_name': 'Credit Default',
}
ds2_details = {
'data': loader.PenDigitData(verbose=verbose, seed=seed),
'name': 'pen_digits',
'readable_name': 'Handwritten Digits',
}
if verbose:
print("----------")
print("Running experiments")
timings = {}
datasets = [
#ds1_details
ds2_details
]
experiment_details = []
for ds in datasets:
data = ds['data']
data.load_and_process()
data.build_train_test_split()
data.scale_standard()
experiment_details.append(experiments.ExperimentDetails(
data, ds['name'], ds['readable_name'],
threads=threads,
seed=seed
))
if args.ann or args.all:
run_experiment(experiment_details, experiments.ANNExperiment, 'ANN', verbose, timings)
if args.boosting or args.all:
run_experiment(experiment_details, experiments.BoostingExperiment, 'Boosting', verbose, timings)
if args.dt or args.all:
run_experiment(experiment_details, experiments.DTExperiment, 'DT', verbose, timings)
if args.knn or args.all:
run_experiment(experiment_details, experiments.KNNExperiment, 'KNN', verbose, timings)
if args.svm or args.all:
run_experiment(experiment_details, experiments.SVMExperiment, 'SVM', verbose, timings)
print(timings)