Skip to content

Commit

Permalink
Fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Fuminides committed Feb 26, 2025
1 parent 4dead7c commit c32d504
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 39 deletions.
12 changes: 6 additions & 6 deletions ex_fuzzy/ex_fuzzy/eval_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ def compute_pattern_support(self, X: np.array=None, y: np.array=None) -> np.arra
antecedent_memberships = self.mrule_base.compute_firing_strenghts(
data_X, self.time_moments)


patterns = self._get_all_rules()

if self.mrule_base.fuzzy_type() == fs.FUZZY_SETS.t1:
Expand All @@ -112,14 +111,17 @@ def compute_pattern_support(self, X: np.array=None, y: np.array=None) -> np.arra
res = np.zeros((len(patterns), 2))
elif self.mrule_base.fuzzy_type() == fs.FUZZY_SETS.gt2:
res = np.zeros((len(patterns), 2))

consequents = self.mrule_base.get_consequents()
for ix, pattern in enumerate(patterns):
consequent_match = np.equal(data_y, consequents[ix])
try:
consequent_match = np.array(consequent_match, dtype=int)
except:
pass
pattern_firing_strength = antecedent_memberships[:, ix]



res[ix] = np.mean(pattern_firing_strength * consequent_match)
res[ix] = np.mean(pattern_firing_strength * consequent_match.reshape(-1, 1))

if self.mrule_base.fuzzy_type() == fs.FUZZY_SETS.t2 or self.mrule_base.fuzzy_type() == fs.FUZZY_SETS.gt2:
res = np.mean(res, axis=1)
Expand Down Expand Up @@ -214,8 +216,6 @@ def compute_pattern_confidence(self, X: np.array=None, y: np.array=None, precomp
pattern_firing_strength = antecedent_memberships[:, ix]
dem = np.sum(pattern_firing_strength)
if dem == 0:


res[ix] = 0
else:
res[ix] = np.sum(
Expand Down
5 changes: 4 additions & 1 deletion ex_fuzzy/ex_fuzzy/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -1181,7 +1181,10 @@ def explainable_predict(self, X: np.array, out_class_names=False, precomputed_tr
else:
res[ix] = -1

return np.array(res), winning_rules, winning_association_degrees, winning_rule_confidence_intervals * winning_association_degrees.reshape(len(winning_association_degrees),1)
if len(winning_association_degrees.shape) == 1:
winning_association_degrees = winning_association_degrees[:, None]

return np.array(res), winning_rules, winning_association_degrees, np.array(winning_rule_confidence_intervals) * winning_association_degrees



Expand Down
65 changes: 33 additions & 32 deletions ex_fuzzy/ex_fuzzy/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,48 +259,49 @@ def t2_n_partition_parameters(x, n_partitions):
'''
trap_memberships_size = 4
n_variables = x.shape[1]
quantile_numbers = compute_quantiles(x, n_partitions)
quantile_numbers = compute_quantiles(x, 4 + (n_partitions-2) * 2)

# Initialize the array for partition parameters
partition_parameters = np.zeros((n_variables, n_partitions, trap_memberships_size, 2))


for partition in range(n_partitions):
if partition == 0: # First partition
partition_parameters[:, partition, 0, 1] = quantile_numbers[0]
partition_parameters[:, partition, 1, 1] = quantile_numbers[0]
partition_parameters[:, partition, 2, 1] = quantile_numbers[1]
partition_parameters[:, partition, 3, 1] = quantile_numbers[2]

partition_parameters[:, partition, 0, 0] = quantile_numbers[0]
partition_parameters[:, partition, 1, 0] = quantile_numbers[0]
partition_parameters[:, partition, 2, 0] = quantile_numbers[1]
partition_parameters[:, partition, 3, 0] = quantile_numbers[1] + \
0.9 * (quantile_numbers[2] - quantile_numbers[1])

partition_parameters[:, partition, 0, 0] = quantile_numbers[0, :]
partition_parameters[:, partition, 0, 1] = quantile_numbers[0, :]

partition_parameters[:, partition, 1, 0] = quantile_numbers[0, :]
partition_parameters[:, partition, 1, 1] = quantile_numbers[0, :]

partition_parameters[:, partition, 2, 0] = quantile_numbers[1, :]
partition_parameters[:, partition, 2, 1] = quantile_numbers[1, :]

partition_parameters[:, partition, 3, 0] = quantile_numbers[2, :] - (quantile_numbers[2, :] - quantile_numbers[1, :]) / 2
partition_parameters[:, partition, 3, 1] = quantile_numbers[2, :]
elif partition == n_partitions - 1: # Last partition
partition_parameters[:, partition, 0, 1] = quantile_numbers[partition]
partition_parameters[:, partition, 1, 1] = quantile_numbers[partition + 1]
partition_parameters[:, partition, 2, 1] = quantile_numbers[partition + 2]
partition_parameters[:, partition, 3, 1] = quantile_numbers[partition + 2]
partition_parameters[:, partition, 0, 1] = quantile_numbers[-3, :]
partition_parameters[:, partition, 0, 0] = quantile_numbers[-3, :] + (quantile_numbers[-2, :] - quantile_numbers[-3, :]) / 2

partition_parameters[:, partition, 1, 0] = quantile_numbers[-2, :]
partition_parameters[:, partition, 1, 1] = quantile_numbers[-2, :]

partition_parameters[:, partition, 0, 0] = quantile_numbers[partition] + \
0.1 * (quantile_numbers[partition + 1] - quantile_numbers[partition])
partition_parameters[:, partition, 1, 0] = quantile_numbers[partition + 1]
partition_parameters[:, partition, 2, 0] = quantile_numbers[partition + 2]
partition_parameters[:, partition, 3, 0] = quantile_numbers[partition + 2]
partition_parameters[:, partition, 2, 0] = quantile_numbers[-1, :]
partition_parameters[:, partition, 2, 1] = quantile_numbers[-1, :]

partition_parameters[:, partition, 3, 0] = quantile_numbers[-1, :]
partition_parameters[:, partition, 3, 1] = quantile_numbers[-1, :]
else: # Intermediate partitions
partition_parameters[:, partition, 0, 1] = quantile_numbers[partition, :]
partition_parameters[:, partition, 1, 1] = (quantile_numbers[partition, :] + quantile_numbers[partition + 1, :] ) / 2
partition_parameters[:, partition, 2, 1] = (quantile_numbers[partition + 1, :] + quantile_numbers[partition + 2, :] ) / 2
partition_parameters[:, partition, 3, 1] = quantile_numbers[partition + 2, :]

partition_parameters[:, partition, 0, 0] = quantile_numbers[partition] + \
0.1 * (quantile_numbers[partition + 1] - quantile_numbers[partition])
partition_parameters[:, partition, 1, 0] = (quantile_numbers[partition, :] + quantile_numbers[partition + 1, :] ) / 2
partition_parameters[:, partition, 2, 0] = (quantile_numbers[partition + 1, :] + quantile_numbers[partition + 2, :] ) / 2
partition_parameters[:, partition, 3, 0] = ((quantile_numbers[partition + 1, :] + quantile_numbers[partition + 2, :] ) / 2) + \
0.9 * (quantile_numbers[partition + 2] - ((quantile_numbers[partition + 1, :] + quantile_numbers[partition + 2, :] ) / 2))
partition_parameters[:, partition, 0, 1] = quantile_numbers[1 + 2*(partition-1), :]
partition_parameters[:, partition, 0, 0] = quantile_numbers[1 + 2*(partition-1), :] + (quantile_numbers[1 + 2*(partition-1) + 2, :] - quantile_numbers[1 + 2*(partition-1), :]) / 2

partition_parameters[:, partition, 1, 0] = quantile_numbers[1 + 2*(partition-1) + 1, :]
partition_parameters[:, partition, 1, 1] = quantile_numbers[1 + 2*(partition-1) + 1, :]

partition_parameters[:, partition, 2, 0] = quantile_numbers[1 + 2*(partition-1) + 2, :]
partition_parameters[:, partition, 2, 1] = quantile_numbers[1 + 2*(partition-1) + 2, :]

partition_parameters[:, partition, 3, 0] = quantile_numbers[1 + 2*(partition-1) + 3, :] - (quantile_numbers[1 + 2*(partition-1) + 3, :] - quantile_numbers[1 + 2*(partition-1) + 2, :]) / 2
partition_parameters[:, partition, 3, 1] = quantile_numbers[1 + 2*(partition-1) + 3, :]

return partition_parameters

Expand Down

0 comments on commit c32d504

Please sign in to comment.