Skip to content

Commit 194f9c1

Browse files
committed
Update RuleList
1 parent 881e573 commit 194f9c1

File tree

1 file changed

+29
-98
lines changed

1 file changed

+29
-98
lines changed

niaarm/rule_list.py

Lines changed: 29 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,26 @@
55

66

77
class RuleList(UserList):
8-
"""A wrapper around a list of rules.
9-
10-
Attributes:
11-
mean_fitness (float): Mean fitness.
12-
mean_support (float): Mean support.
13-
mean_confidence (float): Mean confidence.
14-
mean_lift (float): Mean lift.
15-
mean_coverage (float): Mean coverage.
16-
mean_rhs_support (float): Mean consequent support.
17-
mean_conviction (float): Mean conviction.
18-
mean_inclusion (float): Mean inclusion.
19-
mean_amplitude (float): Mean amplitude.
20-
mean_interestingness (float): Mean interestingness.
21-
mean_comprehensibility (float): Mean comprehensibility.
22-
mean_netconf (float): Mean netconf.
23-
mean_yulesq (float): Mean Yule's Q.
24-
mean_antecedent_length (float): Mean antecedent length.
25-
mean_consequent_length (float): Mean consequent length.
26-
27-
"""
8+
"""A list of rules."""
9+
10+
def get(self, metric):
11+
"""Get values of `metric` for each rule as a numpy array.
12+
13+
Args:
14+
metric (str): Metric.
15+
16+
Returns:
17+
numpy.ndarray: Array of `metric` for all rules.
18+
19+
"""
20+
return np.array([getattr(rule, metric) for rule in self.data])
2821

2922
def sort(self, by='fitness', reverse=True):
3023
"""Sort rules by metric.
3124
3225
Args:
3326
by (str): Metric to sort rules by. Default: ``'fitness'``.
34-
reverse (bool): Sort in descending order. Default: ``True``
27+
reverse (bool): Sort in descending order. Default: ``True``.
3528
3629
"""
3730
self.data.sort(key=lambda rule: getattr(rule, by), reverse=reverse)
@@ -46,7 +39,7 @@ def mean(self, metric):
4639
float: Mean value of metric in rule list.
4740
4841
"""
49-
return np.mean([getattr(rule, metric) for rule in self.data])
42+
return sum(getattr(rule, metric) for rule in self.data) / len(self.data)
5043

5144
def min(self, metric):
5245
"""Get min value of metric.
@@ -97,87 +90,25 @@ def to_csv(self, filename):
9790
# write header
9891
writer.writerow(("antecedent", "consequent", "fitness") + Rule.metrics)
9992

100-
for rule in self:
93+
for rule in self.data:
10194
writer.writerow(
10295
[rule.antecedent, rule.consequent, rule.fitness] + [getattr(rule, metric) for metric in Rule.metrics])
10396
print(f"Rules exported to {filename}")
10497

105-
@property
106-
def mean_fitness(self):
107-
return np.mean([rule.fitness for rule in self.data])
108-
109-
@property
110-
def mean_support(self):
111-
return np.mean([rule.support for rule in self.data])
112-
113-
@property
114-
def mean_confidence(self):
115-
return np.mean([rule.confidence for rule in self.data])
116-
117-
@property
118-
def mean_lift(self):
119-
return np.mean([rule.lift for rule in self.data])
120-
121-
@property
122-
def mean_coverage(self):
123-
return np.mean([rule.coverage for rule in self.data])
124-
125-
@property
126-
def mean_rhs_support(self):
127-
return np.mean([rule.rhs_support for rule in self.data])
128-
129-
@property
130-
def mean_conviction(self):
131-
return np.mean([rule.conviction for rule in self.data])
132-
133-
@property
134-
def mean_inclusion(self):
135-
return np.mean([rule.inclusion for rule in self.data])
136-
137-
@property
138-
def mean_amplitude(self):
139-
return np.mean([rule.amplitude for rule in self.data])
140-
141-
@property
142-
def mean_interestingness(self):
143-
return np.mean([rule.interestingness for rule in self.data])
144-
145-
@property
146-
def mean_comprehensibility(self):
147-
return np.mean([rule.comprehensibility for rule in self.data])
148-
149-
@property
150-
def mean_netconf(self):
151-
return np.mean([rule.netconf for rule in self.data])
152-
153-
@property
154-
def mean_yulesq(self):
155-
return np.mean([rule.yulesq for rule in self.data])
156-
157-
@property
158-
def mean_antecedent_length(self):
159-
return np.mean([len(rule.antecedent) for rule in self.data])
160-
161-
@property
162-
def mean_consequent_length(self):
163-
return np.mean([len(rule.consequent) for rule in self.data])
164-
16598
def __str__(self):
16699
string = f'STATS:\n' \
167100
f'Total rules: {len(self)}\n' \
168-
f'Average fitness: {self.mean_fitness}\n' \
169-
f'Average support: {self.mean_support}\n' \
170-
f'Average confidence: {self.mean_confidence}\n' \
171-
f'Average lift: {self.mean_lift}\n' \
172-
f'Average coverage: {self.mean_coverage}\n' \
173-
f'Average consequent support: {self.mean_rhs_support}\n' \
174-
f'Average conviction: {self.mean_conviction}\n' \
175-
f'Average amplitude: {self.mean_amplitude}\n' \
176-
f'Average inclusion: {self.mean_inclusion}\n' \
177-
f'Average interestingness: {self.mean_interestingness}\n' \
178-
f'Average comprehensibility: {self.mean_comprehensibility}\n' \
179-
f'Average netconf: {self.mean_netconf}\n' \
180-
f'Average Yule\'s Q: {self.mean_yulesq}\n' \
181-
f'Average length of antecedent: {self.mean_antecedent_length}\n' \
182-
f'Average length of consequent: {self.mean_consequent_length}'
101+
f'Average fitness: {self.mean("fitness")}\n' \
102+
f'Average support: {self.mean("support")}\n' \
103+
f'Average confidence: {self.mean("confidence")}\n' \
104+
f'Average lift: {self.mean("lift")}\n' \
105+
f'Average coverage: {self.mean("coverage")}\n' \
106+
f'Average consequent support: {self.mean("rhs_support")}\n' \
107+
f'Average conviction: {self.mean("conviction")}\n' \
108+
f'Average amplitude: {self.mean("amplitude")}\n' \
109+
f'Average inclusion: {self.mean("inclusion")}\n' \
110+
f'Average interestingness: {self.mean("interestingness")}\n' \
111+
f'Average comprehensibility: {self.mean("comprehensibility")}\n' \
112+
f'Average netconf: {self.mean("netconf")}\n' \
113+
f'Average Yule\'s Q: {self.mean("yulesq")}\n'
183114
return string

0 commit comments

Comments
 (0)