-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfindComposition.py
More file actions
102 lines (83 loc) · 3.54 KB
/
findComposition.py
File metadata and controls
102 lines (83 loc) · 3.54 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
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
101
102
import numpy as np
import pandas as pd
import argparse
import random
import uuid
from CompositionTree import composition_tree, composition_tree_2, composition_tree_3
def main(args):
### DATA PREPARATION ###
composition_known = [
["X"],
["N", "PN", "N"],
["N", "PP", "N"],
["N", "PP", "PN", "N"],
["N", "PN", "PP", "N"],
["N", "PN", "PP", "PN", "N"],
]
labels=["N", "A", "B", "PP", "PN"]
nlabels = len(labels)
nclasses = len(composition_known)
window = 8
dataset = pd.read_csv(args.dataset)
features = list(dataset["label"])
#features = [features[x:x+window] for x in range(0, len(features), window)]
features = [features[x:x+window] for x in range(len(features)- window)]
classes = [0 for _ in range(len(features))]
for i, f in enumerate(features):
for j, c in enumerate(composition_known):
#print(i, f, c )
c_indices = [(i, i+len(c)) for i in range(len(f)) if f[i:i+len(c)] == c]
win_feat = [f[i:i+len(c)] for i in range(len(f)) if f[i:i+len(c)] == c]
if not len(c_indices) == 0:
#print(i, j, c, c_indices, f )
classes[i] = j
print("histo", np.histogram(classes, bins=list(range(nclasses))), nclasses)
if not len(features[-1]) == window:
_ = features.pop(-1)
_ = classes.pop(-1)
###
compotree = composition_tree_3(nclasses, window, labels, iteration_max=100000000)
compotree.fit(features, classes)
compositions = compotree.rules_per_class()
for i, rules in enumerate(compositions):
print("class", i, composition_known[i] )
for j, rule_branch in enumerate(rules):
#pruning_branch_rule(rule_branch, window)
print("support:", rule_branch[0][0])
for k, (n, r, uuid) in enumerate(rule_branch):
print(r["rule"], end=" ")
print("AND" if k < len(rule_branch)-1 else "\n", end=" " )
print("OR" if j < len(rules)-1 else "" )
print("#####")
#compotree.merge_branches_per_class()
#compositions = compotree.rules_per_class()
#for i, rules in enumerate(compositions):
# print("class", i, composition_known[i] )
# for j, rule_branch in enumerate(rules):
# #pruning_branch_rule(rule_branch, window)
# #print("support:", rule_branch[0][0])
# for k, (n, r, uuid) in enumerate(rule_branch):
# print(r["rule"], end=" ")
# print("AND" if k < len(rule_branch)-1 else "\n", end=" " )
# print("OR" if j < len(rules)-1 else "" )
# print("#####")
compotree.prune_branches_per_class()
compositions = compotree.branches
for i, rules in enumerate(compositions):
print("class", i, composition_known[i] )
for j, rule_branch in enumerate(rules):
#print("support:", rule_branch[0][0])
for k, node in enumerate(rule_branch):
rule = node.split_rule
print(rule["rule"], end=" ")
print("AND" if k < len(rule_branch)-1 else "\n", end=" " )
print("OR" if j < len(rules)-1 else "" )
print("#####")
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Composition-based desicion tree utilities.")
parser.add_argument("-f", "--file-dataset",
dest="dataset",
type=str,
help="dataset csv file",)
args = parser.parse_args()
main(args)