55
66
77class 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