-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtime_measures.py
More file actions
61 lines (46 loc) · 2.21 KB
/
time_measures.py
File metadata and controls
61 lines (46 loc) · 2.21 KB
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
import pandas as pd
from aspbeef import main as beef
import argparse
import time
import tempfile
from itertools import product
import random
def main():
parser = argparse.ArgumentParser(description='Experimental ASP clustering tool')
parser.add_argument('file', type=str, help="CSV File")
parser.add_argument('target', type=str, help="Target Feature")
parser.add_argument('k', type=int, help="K for KMeans")
parser.add_argument('-i', '--iters', type=int, default=10, help="Number of time to perform each BEEF")
args = parser.parse_args()
data = pd.read_csv(args.file)
data_no_target = data.drop(columns=[args.target])
dicts = data_no_target.to_dict(orient='records')
data_features = list(dicts[0].keys())
attr_sizes = list(range(2,5))
sample_sizes = [60, 90, 150]
cases = product(attr_sizes, sample_sizes)
with open("beeftimes.csv", "w") as outfile:
outfile.write("sample_size,\tfeatures,\tfreetime,\tfixedtime\n")
for attr,samp in cases:
with tempfile.NamedTemporaryFile() as temp_file:
sample = data.sample(samp)
sample.to_csv(temp_file.name, index=False)
beefargs_free = [temp_file.name, args.target, "-k", str(args.k), "-hm", "weak", "--approximate", "-f", str(attr)]
free_exectime = 0
fixed_exectime = 0
for i in range(args.iters):
start = time.time()
beef(beefargs_free)
end = time.time()
free_exectime += end-start
sel_features = random.sample(data_features, attr)
beefargs_sel = [temp_file.name, args.target, "-k", str(args.k), "-hm", "weak", "--approximate", "-f", str(attr), "-s"] + sel_features
start = time.time()
beef(beefargs_sel)
end = time.time()
fixed_exectime += end-start
avg_exectime_free = free_exectime/args.iters
avg_exectime_fixed = fixed_exectime/args.iters
outfile.write(f"{samp},\t{attr},\t{avg_exectime_free:.4f}\t{avg_exectime_fixed:.4f}\n")
if __name__ == "__main__":
main()