From c88591dd64674db721c343c9a851cbaa01ad826f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Wed, 1 Feb 2023 23:33:05 +0100 Subject: [PATCH 01/21] fix: :bug: Change exit condition in KDB add_m_edges method Change test if every conditional weight is less or equal to zero for less or equal to theta --- bayesclass/clfs.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index cb037af..ec21f31 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -323,7 +323,7 @@ class KDB(BayesBase): # Loops are not allowed pass cond_w[idx, max_minfo] = -1 - exit_cond = num == n_edges or np.all(cond_w[idx, :] <= 0) + exit_cond = num == n_edges or np.all(cond_w[idx, :] <= self.theta) def _build(self): """ @@ -354,21 +354,22 @@ class KDB(BayesBase): )._get_conditional_weights( self.dataset_, self.class_name_, show_progress=self.show_progress ) - # 3. + # 3. Let the used variable list, S, be empty. S_nodes = [] - # 4. + # 4. Let the BN being constructed, BN, begin with a single class node dag = BayesianNetwork() dag.add_node(self.class_name_) # , state_names=self.classes_) - # 5. 5.1 + # 5. Repeat until S includes all domain features + # 5.1 Select feature Xmax which is not in S and has the largest value for idx in np.argsort(mutual): - # 5.2 + # 5.2 Add a node to BN representing Xmax. feature = self.feature_names_in_[idx] dag.add_node(feature) - # 5.3 + # 5.3 Add an arc from C to Xmax in BN. dag.add_edge(self.class_name_, feature) # 5.4 self._add_m_edges(dag, idx, S_nodes, conditional_weights) - # 5.5 + # 5.5 Add Xmax to S. S_nodes.append(idx) self.dag_ = dag From 41ca6fad5e5ac5bc2c4a1f15f50a0a9b6642f0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Wed, 1 Feb 2023 23:33:05 +0100 Subject: [PATCH 02/21] fix: :bug: Change exit condition in KDB add_m_edges method Change test if every conditional weight is less or equal to zero for less or equal to theta Add text comments to KDB algorithm --- bayesclass/clfs.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index cb037af..ec21f31 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -323,7 +323,7 @@ class KDB(BayesBase): # Loops are not allowed pass cond_w[idx, max_minfo] = -1 - exit_cond = num == n_edges or np.all(cond_w[idx, :] <= 0) + exit_cond = num == n_edges or np.all(cond_w[idx, :] <= self.theta) def _build(self): """ @@ -354,21 +354,22 @@ class KDB(BayesBase): )._get_conditional_weights( self.dataset_, self.class_name_, show_progress=self.show_progress ) - # 3. + # 3. Let the used variable list, S, be empty. S_nodes = [] - # 4. + # 4. Let the BN being constructed, BN, begin with a single class node dag = BayesianNetwork() dag.add_node(self.class_name_) # , state_names=self.classes_) - # 5. 5.1 + # 5. Repeat until S includes all domain features + # 5.1 Select feature Xmax which is not in S and has the largest value for idx in np.argsort(mutual): - # 5.2 + # 5.2 Add a node to BN representing Xmax. feature = self.feature_names_in_[idx] dag.add_node(feature) - # 5.3 + # 5.3 Add an arc from C to Xmax in BN. dag.add_edge(self.class_name_, feature) # 5.4 self._add_m_edges(dag, idx, S_nodes, conditional_weights) - # 5.5 + # 5.5 Add Xmax to S. S_nodes.append(idx) self.dag_ = dag From 9019b878f0ddf7b5c7af84aadb17fe2423554970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Wed, 1 Feb 2023 23:42:32 +0100 Subject: [PATCH 03/21] docs: :memo: Add text comment to KDB algorithm --- bayesclass/clfs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index ec21f31..c5242ad 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -367,7 +367,7 @@ class KDB(BayesBase): dag.add_node(feature) # 5.3 Add an arc from C to Xmax in BN. dag.add_edge(self.class_name_, feature) - # 5.4 + # 5.4 Add m = min(lSl,/c) arcs from m distinct features Xj in S self._add_m_edges(dag, idx, S_nodes, conditional_weights) # 5.5 Add Xmax to S. S_nodes.append(idx) From de45a94c9b148f6f74d0c4a222f34d2ca54df262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Sat, 4 Feb 2023 17:39:32 +0100 Subject: [PATCH 04/21] Add KDBNew estimator --- bayesclass/__init__.py | 1 + bayesclass/clfs.py | 101 ++++++++++++++++++++++++++++------------- 2 files changed, 70 insertions(+), 32 deletions(-) diff --git a/bayesclass/__init__.py b/bayesclass/__init__.py index fb89952..0ef73dd 100644 --- a/bayesclass/__init__.py +++ b/bayesclass/__init__.py @@ -16,4 +16,5 @@ __all__ = [ "TAN", "KDB", "AODE", + "KDBNew", ] diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index c5242ad..2e4a98b 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -12,6 +12,7 @@ import networkx as nx from pgmpy.estimators import TreeSearch, BayesianEstimator from pgmpy.models import BayesianNetwork import matplotlib.pyplot as plt +from fimdlp.mdlp import MultiDiscretizer from ._version import __version__ @@ -75,7 +76,7 @@ class BayesBase(BaseEstimator, ClassifierMixin): return self.states_ def fit(self, X, y, **kwargs): - """A reference implementation of a fitting function for a classifier. + """Fit classifier Parameters ---------- @@ -130,6 +131,9 @@ class BayesBase(BaseEstimator, ClassifierMixin): # Return the classifier return self + def _build(self): + pass + def _train(self, kwargs): self.model_ = BayesianNetwork( self.dag_.edges(), show_progress=self.show_progress @@ -260,37 +264,38 @@ class TAN(BayesBase): return X, y def _build(self): - # est = TreeSearch(self.dataset_, - # root_node=self.feature_names_in_[self.head_]) - # self.dag_ = est.estimate( - # estimator_type="tan", - # class_node=self.class_name_, - # show_progress=self.show_progress, - # ) + est = TreeSearch( + self.dataset_, root_node=self.feature_names_in_[self.head_] + ) + self.dag_ = est.estimate( + estimator_type="tan", + class_node=self.class_name_, + show_progress=self.show_progress, + ) # Code taken from pgmpy - n_jobs = -1 - weights = TreeSearch._get_conditional_weights( - self.dataset_, - self.class_name_, - "mutual_info", - n_jobs, - self.show_progress, - ) - # Step 4.2: Construct chow-liu DAG on {data.columns - class_node} - class_node_idx = np.where(self.dataset_.columns == self.class_name_)[ - 0 - ][0] - weights = np.delete(weights, class_node_idx, axis=0) - weights = np.delete(weights, class_node_idx, axis=1) - reduced_columns = np.delete(self.dataset_.columns, class_node_idx) - D = TreeSearch._create_tree_and_dag( - weights, reduced_columns, self.feature_names_in_[self.head_] - ) - # Step 4.3: Add edges from class_node to all other nodes. - D.add_edges_from( - [(self.class_name_, node) for node in reduced_columns] - ) - self.dag_ = D + # n_jobs = -1 + # weights = TreeSearch._get_conditional_weights( + # self.dataset_, + # self.class_name_, + # "mutual_info", + # n_jobs, + # self.show_progress, + # ) + # # Step 4.2: Construct chow-liu DAG on {data.columns - class_node} + # class_node_idx = np.where(self.dataset_.columns == self.class_name_)[ + # 0 + # ][0] + # weights = np.delete(weights, class_node_idx, axis=0) + # weights = np.delete(weights, class_node_idx, axis=1) + # reduced_columns = np.delete(self.dataset_.columns, class_node_idx) + # D = TreeSearch._create_tree_and_dag( + # weights, reduced_columns, self.feature_names_in_[self.head_] + # ) + # # Step 4.3: Add edges from class_node to all other nodes. + # D.add_edges_from( + # [(self.class_name_, node) for node in reduced_columns] + # ) + # self.dag_ = D class KDB(BayesBase): @@ -345,7 +350,6 @@ class KDB(BayesBase): Compute the conditional probabilility infered by the structure of BN by using counts from DB, and output BN. """ - # 1. get the mutual information between each feature and the class mutual = mutual_info_classif(self.X_, self.y_, discrete_features=True) # 2. symmetric matrix where each element represents I(X, Y| class_node) @@ -449,3 +453,36 @@ class AODE(BayesBase, BaseEnsemble): for index, model in enumerate(self.models_): result[:, index] = model.predict(dataset).values.ravel() return mode(result, axis=1, keepdims=False).mode.ravel() + + +class KDBNew(KDB): + def fit(self, X, y, **kwargs): + self.discretizer_ = MultiDiscretizer(n_jobs=1) + Xd = self.discretizer_.fit_transform(X, y) + features = kwargs["features"] + states = { + features[i]: np.unique(Xd[:, i]).tolist() + for i in range(Xd.shape[1]) + } + kwargs["state_names"] = states + return super().fit(Xd, y, **kwargs) + + def predict(self, X, **kwargs): + return super().predict(self.discretizer_.transform(X)) + + def check_integrity(self, X, state_names, features): + for i in range(X.shape[1]): + if not np.array_equal( + np.unique(X[:, i]), np.array(state_names[features[i]]) + ): + print( + "i", + i, + "features[i]", + features[i], + "np.unique(X[:, i])", + np.unique(X[:, i]), + "np.array(state_names[features[i]])", + np.array(state_names[features[i]]), + ) + raise ValueError("Discretization error") From 2a6547c71d345d483a42fd1f172c1df55fa4e9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Sun, 5 Feb 2023 00:30:25 +0100 Subject: [PATCH 05/21] Complete KDBNew --- bayesclass/clfs.py | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 2e4a98b..c28066d 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -12,7 +12,7 @@ import networkx as nx from pgmpy.estimators import TreeSearch, BayesianEstimator from pgmpy.models import BayesianNetwork import matplotlib.pyplot as plt -from fimdlp.mdlp import MultiDiscretizer +from fimdlp.mdlp import FImdlp from ._version import __version__ @@ -194,7 +194,6 @@ class BayesBase(BaseEstimator, ClassifierMixin): """ # Check is fit had been called check_is_fitted(self, ["X_", "y_", "fitted_"]) - # Input validation X = check_array(X) dataset = pd.DataFrame( @@ -457,18 +456,28 @@ class AODE(BayesBase, BaseEnsemble): class KDBNew(KDB): def fit(self, X, y, **kwargs): - self.discretizer_ = MultiDiscretizer(n_jobs=1) + self.discretizer_ = FImdlp(n_jobs=1) Xd = self.discretizer_.fit_transform(X, y) + features = kwargs["features"] + self.compute_kwargs(Xd, y, kwargs) + # Build the model + super().fit(Xd, y, **kwargs) + self.idx_features_ = dict(list(zip(features, range(len(features))))) + self.proposal(Xd) + return self + + def predict(self, X): + return super().predict(self.discretizer_.transform(X)) + + def compute_kwargs(self, Xd, y, kwargs): features = kwargs["features"] states = { features[i]: np.unique(Xd[:, i]).tolist() for i in range(Xd.shape[1]) } + states[kwargs["class_name"]] = np.unique(y).tolist() kwargs["state_names"] = states - return super().fit(Xd, y, **kwargs) - - def predict(self, X, **kwargs): - return super().predict(self.discretizer_.transform(X)) + self.kwargs_ = kwargs def check_integrity(self, X, state_names, features): for i in range(X.shape[1]): @@ -486,3 +495,23 @@ class KDBNew(KDB): np.array(state_names[features[i]]), ) raise ValueError("Discretization error") + + def proposal(self, Xd): + """Discretize each feature with its fathers and the class""" + res = Xd.copy() + upgraded = False + for idx, feature in enumerate(self.feature_names_in_): + fathers = self.dag_.get_parents(feature) + if len(fathers) > 1: + # First remove the class name as it will be added later + fathers.remove(self.class_name_) + # Get the fathers indices + features = [self.idx_features_[f] for f in fathers] + # Update the discretization of the feature + res[:, idx] = self.discretizer_.join_fit( + target=idx, features=features, data=Xd + ) + upgraded = True + if upgraded: + self.compute_kwargs(res, self.y_, self.kwargs_) + super().fit(res, self.y_, **self.kwargs_) From 3e049ac89d75abbbedb9baf393529a64ea7f3313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Sun, 5 Feb 2023 20:18:44 +0100 Subject: [PATCH 06/21] default_features_class_name --- bayesclass/clfs.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index c28066d..6dc7a32 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -39,6 +39,14 @@ class BayesBase(BaseEstimator, ClassifierMixin): return len(self.dag_), len(self.dag_.edges()) return 0, 0 + @staticmethod + def default_feature_names(num_features): + return [f"feature_{i}" for i in range(num_features)] + + @staticmethod + def default_class_name(): + return "class" + def _check_params_fit(self, X, y, expected_args, kwargs): """Check the common parameters passed to fit""" # Check that X and y have correct shape @@ -48,8 +56,8 @@ class BayesBase(BaseEstimator, ClassifierMixin): self.classes_ = unique_labels(y) self.n_classes_ = self.classes_.shape[0] # Default values - self.class_name_ = "class" - self.features_ = [f"feature_{i}" for i in range(X.shape[1])] + self.class_name_ = self.default_class_name() + self.features_ = self.default_feature_names(X.shape[1]) for key, value in kwargs.items(): if key in expected_args: setattr(self, f"{key}_", value) @@ -458,7 +466,11 @@ class KDBNew(KDB): def fit(self, X, y, **kwargs): self.discretizer_ = FImdlp(n_jobs=1) Xd = self.discretizer_.fit_transform(X, y) - features = kwargs["features"] + features = ( + kwargs["features"] + if "features" in kwargs + else self.default_feature_names(Xd.shape[1]) + ) self.compute_kwargs(Xd, y, kwargs) # Build the model super().fit(Xd, y, **kwargs) @@ -475,7 +487,12 @@ class KDBNew(KDB): features[i]: np.unique(Xd[:, i]).tolist() for i in range(Xd.shape[1]) } - states[kwargs["class_name"]] = np.unique(y).tolist() + class_name = ( + kwargs["class_name"] + if "class_name" in kwargs + else self.default_class_name() + ) + states[class_name] = np.unique(y).tolist() kwargs["state_names"] = states self.kwargs_ = kwargs From 63a2feef3a21177cb0c0ca44a293c768585f87b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Tue, 7 Feb 2023 09:42:42 +0100 Subject: [PATCH 07/21] Begin refactorization of new estimators --- bayesclass/clfs.py | 166 +++++++++++++++++++++++++++++++++------------ 1 file changed, 123 insertions(+), 43 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 6dc7a32..4e5808e 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -462,73 +462,153 @@ class AODE(BayesBase, BaseEnsemble): return mode(result, axis=1, keepdims=False).mode.ravel() +class TANNew(TAN): + pass + + class KDBNew(KDB): + def __init__(self, k, theta=0.3, show_progress=False, random_state=None): + super().__init__( + k, theta, show_progress=show_progress, random_state=random_state + ) + self.estimator = Proposal(self) + def fit(self, X, y, **kwargs): + Xd, kwargs = self.estimator.discretize_train(X, y, kwargs) + super().fit(Xd, y, **kwargs) + upgraded, Xd, kwargs = self.estimator.local_discretization(kwargs) + if upgraded: + super().fit(Xd, y, **kwargs) + + def predict(self, X): + return self.estimator.predict(X) + + # def fit(self, X, y, **kwargs): + # self.discretizer_ = FImdlp(n_jobs=1) + # Xd = self.discretizer_.fit_transform(X, y) + # features = ( + # kwargs["features"] + # if "features" in kwargs + # else self.default_feature_names(Xd.shape[1]) + # ) + # self.compute_kwargs(Xd, y, kwargs) + # # Build the model + # super().fit(Xd, y, **kwargs) + # self.idx_features_ = dict(list(zip(features, range(len(features))))) + # self.proposal(Xd) + # return self + + # def predict(self, X): + # return super().predict(self.discretizer_.transform(X)) + + # def compute_kwargs(self, Xd, y, kwargs): + # features = kwargs["features"] + # states = { + # features[i]: np.unique(Xd[:, i]).tolist() + # for i in range(Xd.shape[1]) + # } + # class_name = ( + # kwargs["class_name"] + # if "class_name" in kwargs + # else self.default_class_name() + # ) + # states[class_name] = np.unique(y).tolist() + # kwargs["state_names"] = states + # self.kwargs_ = kwargs + + # def check_integrity(self, X, state_names, features): + # for i in range(X.shape[1]): + # if not np.array_equal( + # np.unique(X[:, i]), np.array(state_names[features[i]]) + # ): + # print( + # "i", + # i, + # "features[i]", + # features[i], + # "np.unique(X[:, i])", + # np.unique(X[:, i]), + # "np.array(state_names[features[i]])", + # np.array(state_names[features[i]]), + # ) + # raise ValueError("Discretization error") + + # def proposal(self, Xd): + # """Discretize each feature with its fathers and the class""" + # res = Xd.copy() + # upgraded = False + # for idx, feature in enumerate(self.feature_names_in_): + # fathers = self.dag_.get_parents(feature) + # if len(fathers) > 1: + # # First remove the class name as it will be added later + # fathers.remove(self.class_name_) + # # Get the fathers indices + # features = [self.idx_features_[f] for f in fathers] + # # Update the discretization of the feature + # res[:, idx] = self.discretizer_.join_fit( + # target=idx, features=features, data=Xd + # ) + # upgraded = True + # if upgraded: + # self.compute_kwargs(res, self.y_, self.kwargs_) + # super().fit(res, self.y_, **self.kwargs_) + + +class Proposal: + def __init__(self, estimator): + self.estimator = estimator + + def discretize_train(self, X, y, kwargs): self.discretizer_ = FImdlp(n_jobs=1) - Xd = self.discretizer_.fit_transform(X, y) + self.Xd = self.discretizer_.fit_transform(X, y) + kwargs = self.compute_kwargs(y, kwargs) + return self.Xd, kwargs + + def local_discretization(self, kwargs): + features = kwargs["features"] + self.idx_features_ = dict(list(zip(features, range(len(features))))) + return self._local_discretization(kwargs) + + def predict(self, X): + return self.estimator.predict(self.discretizer_.transform(X)) + + def compute_kwargs(self, y, kwargs): features = ( kwargs["features"] if "features" in kwargs - else self.default_feature_names(Xd.shape[1]) + else self.estimator.default_feature_names(self.Xd.shape[1]) ) - self.compute_kwargs(Xd, y, kwargs) - # Build the model - super().fit(Xd, y, **kwargs) - self.idx_features_ = dict(list(zip(features, range(len(features))))) - self.proposal(Xd) - return self - - def predict(self, X): - return super().predict(self.discretizer_.transform(X)) - - def compute_kwargs(self, Xd, y, kwargs): - features = kwargs["features"] states = { - features[i]: np.unique(Xd[:, i]).tolist() - for i in range(Xd.shape[1]) + features[i]: np.unique(self.Xd[:, i]).tolist() + for i in range(self.Xd.shape[1]) } class_name = ( kwargs["class_name"] if "class_name" in kwargs - else self.default_class_name() + else self.estimator.default_class_name() ) states[class_name] = np.unique(y).tolist() kwargs["state_names"] = states - self.kwargs_ = kwargs + kwargs["features"] = features + kwargs["class_name"] = class_name + return kwargs - def check_integrity(self, X, state_names, features): - for i in range(X.shape[1]): - if not np.array_equal( - np.unique(X[:, i]), np.array(state_names[features[i]]) - ): - print( - "i", - i, - "features[i]", - features[i], - "np.unique(X[:, i])", - np.unique(X[:, i]), - "np.array(state_names[features[i]])", - np.array(state_names[features[i]]), - ) - raise ValueError("Discretization error") - - def proposal(self, Xd): + def _local_discretization(self, kwargs): """Discretize each feature with its fathers and the class""" - res = Xd.copy() + res = self.Xd.copy() upgraded = False - for idx, feature in enumerate(self.feature_names_in_): - fathers = self.dag_.get_parents(feature) + for idx, feature in enumerate(self.estimator.feature_names_in_): + fathers = self.estimator.dag_.get_parents(feature) if len(fathers) > 1: # First remove the class name as it will be added later - fathers.remove(self.class_name_) + fathers.remove(self.estimator.class_name_) # Get the fathers indices features = [self.idx_features_[f] for f in fathers] # Update the discretization of the feature res[:, idx] = self.discretizer_.join_fit( - target=idx, features=features, data=Xd + target=idx, features=features, data=self.Xd ) upgraded = True if upgraded: - self.compute_kwargs(res, self.y_, self.kwargs_) - super().fit(res, self.y_, **self.kwargs_) + kwargs = self.compute_kwargs(res, self.estimator.y_, kwargs) + return upgraded, res, kwargs From 42ac57eb79bc0cd5600a2b98035e77c280b9334d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Tue, 7 Feb 2023 18:02:35 +0100 Subject: [PATCH 08/21] Continue with New estimators --- bayesclass/clfs.py | 163 +++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 102 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 4e5808e..b9cf8de 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -139,9 +139,6 @@ class BayesBase(BaseEstimator, ClassifierMixin): # Return the classifier return self - def _build(self): - pass - def _train(self, kwargs): self.model_ = BayesianNetwork( self.dag_.edges(), show_progress=self.show_progress @@ -463,116 +460,54 @@ class AODE(BayesBase, BaseEnsemble): class TANNew(TAN): - pass + def fit(self, X, y, **kwargs): + self.estimator = Proposal(self) + return self.estimator.fit(X, y, **kwargs) + + def predict(self, X): + self.plot() + return self.estimator.predict(X) class KDBNew(KDB): - def __init__(self, k, theta=0.3, show_progress=False, random_state=None): - super().__init__( - k, theta, show_progress=show_progress, random_state=random_state - ) - self.estimator = Proposal(self) - def fit(self, X, y, **kwargs): - Xd, kwargs = self.estimator.discretize_train(X, y, kwargs) - super().fit(Xd, y, **kwargs) - upgraded, Xd, kwargs = self.estimator.local_discretization(kwargs) - if upgraded: - super().fit(Xd, y, **kwargs) + self.estimator = Proposal(self) + return self.estimator.fit(X, y, **kwargs) def predict(self, X): + self.plot() return self.estimator.predict(X) - # def fit(self, X, y, **kwargs): - # self.discretizer_ = FImdlp(n_jobs=1) - # Xd = self.discretizer_.fit_transform(X, y) - # features = ( - # kwargs["features"] - # if "features" in kwargs - # else self.default_feature_names(Xd.shape[1]) - # ) - # self.compute_kwargs(Xd, y, kwargs) - # # Build the model - # super().fit(Xd, y, **kwargs) - # self.idx_features_ = dict(list(zip(features, range(len(features))))) - # self.proposal(Xd) - # return self - - # def predict(self, X): - # return super().predict(self.discretizer_.transform(X)) - - # def compute_kwargs(self, Xd, y, kwargs): - # features = kwargs["features"] - # states = { - # features[i]: np.unique(Xd[:, i]).tolist() - # for i in range(Xd.shape[1]) - # } - # class_name = ( - # kwargs["class_name"] - # if "class_name" in kwargs - # else self.default_class_name() - # ) - # states[class_name] = np.unique(y).tolist() - # kwargs["state_names"] = states - # self.kwargs_ = kwargs - - # def check_integrity(self, X, state_names, features): - # for i in range(X.shape[1]): - # if not np.array_equal( - # np.unique(X[:, i]), np.array(state_names[features[i]]) - # ): - # print( - # "i", - # i, - # "features[i]", - # features[i], - # "np.unique(X[:, i])", - # np.unique(X[:, i]), - # "np.array(state_names[features[i]])", - # np.array(state_names[features[i]]), - # ) - # raise ValueError("Discretization error") - - # def proposal(self, Xd): - # """Discretize each feature with its fathers and the class""" - # res = Xd.copy() - # upgraded = False - # for idx, feature in enumerate(self.feature_names_in_): - # fathers = self.dag_.get_parents(feature) - # if len(fathers) > 1: - # # First remove the class name as it will be added later - # fathers.remove(self.class_name_) - # # Get the fathers indices - # features = [self.idx_features_[f] for f in fathers] - # # Update the discretization of the feature - # res[:, idx] = self.discretizer_.join_fit( - # target=idx, features=features, data=Xd - # ) - # upgraded = True - # if upgraded: - # self.compute_kwargs(res, self.y_, self.kwargs_) - # super().fit(res, self.y_, **self.kwargs_) - class Proposal: def __init__(self, estimator): self.estimator = estimator + self.class_type = estimator.__class__ - def discretize_train(self, X, y, kwargs): - self.discretizer_ = FImdlp(n_jobs=1) - self.Xd = self.discretizer_.fit_transform(X, y) - kwargs = self.compute_kwargs(y, kwargs) - return self.Xd, kwargs - - def local_discretization(self, kwargs): - features = kwargs["features"] - self.idx_features_ = dict(list(zip(features, range(len(features))))) - return self._local_discretization(kwargs) + def fit(self, X, y, **kwargs): + # Discretize train data + self.discretizer = FImdlp(n_jobs=1) + self.Xd = self.discretizer.fit_transform(X, y) + kwargs = self.update_kwargs(y, kwargs) + # Build the model + super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) + self.check_integrity("f", self.Xd) + # # Local discretization based on the model + # features = kwargs["features"] + # # assign indices to feature names + # self.idx_features_ = dict(list(zip(features, range(len(features))))) + # upgraded, self.Xd = self._local_discretization() + # if upgraded: + # kwargs = self.update_kwargs(y, kwargs) + # super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) def predict(self, X): - return self.estimator.predict(self.discretizer_.transform(X)) + self.check_integrity("p", self.discretizer.transform(X)) + return super(self.class_type, self.estimator).predict( + self.discretizer.transform(X) + ) - def compute_kwargs(self, y, kwargs): + def update_kwargs(self, y, kwargs): features = ( kwargs["features"] if "features" in kwargs @@ -589,26 +524,50 @@ class Proposal: ) states[class_name] = np.unique(y).tolist() kwargs["state_names"] = states + self.state_names_ = states + self.features_ = features kwargs["features"] = features kwargs["class_name"] = class_name return kwargs - def _local_discretization(self, kwargs): + def _local_discretization(self): """Discretize each feature with its fathers and the class""" res = self.Xd.copy() upgraded = False + print("-" * 80) for idx, feature in enumerate(self.estimator.feature_names_in_): fathers = self.estimator.dag_.get_parents(feature) if len(fathers) > 1: + print( + "Discretizing " + feature + " with " + str(fathers), + end=" ", + ) # First remove the class name as it will be added later fathers.remove(self.estimator.class_name_) # Get the fathers indices features = [self.idx_features_[f] for f in fathers] # Update the discretization of the feature - res[:, idx] = self.discretizer_.join_fit( + res[:, idx] = self.discretizer.join_fit( target=idx, features=features, data=self.Xd ) + print(self.discretizer.y_join[:5]) upgraded = True - if upgraded: - kwargs = self.compute_kwargs(res, self.estimator.y_, kwargs) - return upgraded, res, kwargs + return upgraded, res + + def check_integrity(self, source, X): + print(f"Checking integrity of {source} data") + for i in range(X.shape[1]): + if not set(np.unique(X[:, i]).tolist()).issubset( + set(self.state_names_[self.features_[i]]) + ): + print( + "i", + i, + "features[i]", + self.features_[i], + "np.unique(X[:, i])", + np.unique(X[:, i]), + "np.array(state_names[features[i]])", + np.array(self.state_names_[self.features_[i]]), + ) + raise ValueError("Discretization error") From a5244f1c7f676ca8b67aa7ad4755adc76eaa9015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Sun, 12 Feb 2023 11:25:40 +0100 Subject: [PATCH 09/21] remove trace messages for first try --- bayesclass/clfs.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index b9cf8de..0126c36 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -475,7 +475,6 @@ class KDBNew(KDB): return self.estimator.fit(X, y, **kwargs) def predict(self, X): - self.plot() return self.estimator.predict(X) @@ -492,14 +491,14 @@ class Proposal: # Build the model super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) self.check_integrity("f", self.Xd) - # # Local discretization based on the model - # features = kwargs["features"] - # # assign indices to feature names - # self.idx_features_ = dict(list(zip(features, range(len(features))))) - # upgraded, self.Xd = self._local_discretization() - # if upgraded: - # kwargs = self.update_kwargs(y, kwargs) - # super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) + # Local discretization based on the model + features = kwargs["features"] + # assign indices to feature names + self.idx_features_ = dict(list(zip(features, range(len(features))))) + upgraded, self.Xd = self._local_discretization() + if upgraded: + kwargs = self.update_kwargs(y, kwargs) + super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) def predict(self, X): self.check_integrity("p", self.discretizer.transform(X)) @@ -534,14 +533,14 @@ class Proposal: """Discretize each feature with its fathers and the class""" res = self.Xd.copy() upgraded = False - print("-" * 80) + # print("-" * 80) for idx, feature in enumerate(self.estimator.feature_names_in_): fathers = self.estimator.dag_.get_parents(feature) if len(fathers) > 1: - print( - "Discretizing " + feature + " with " + str(fathers), - end=" ", - ) + # print( + # "Discretizing " + feature + " with " + str(fathers), + # end=" ", + # ) # First remove the class name as it will be added later fathers.remove(self.estimator.class_name_) # Get the fathers indices @@ -550,12 +549,12 @@ class Proposal: res[:, idx] = self.discretizer.join_fit( target=idx, features=features, data=self.Xd ) - print(self.discretizer.y_join[:5]) + # print(self.discretizer.y_join[:5]) upgraded = True return upgraded, res def check_integrity(self, source, X): - print(f"Checking integrity of {source} data") + # print(f"Checking integrity of {source} data") for i in range(X.shape[1]): if not set(np.unique(X[:, i]).tolist()).issubset( set(self.state_names_[self.features_[i]]) From 2ffc06b232d935013d0c6ced82ac4bf1af5032f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Mon, 13 Feb 2023 17:34:15 +0100 Subject: [PATCH 10/21] Update feature states setting for datasets --- bayesclass/clfs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 0126c36..7db719b 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -513,7 +513,7 @@ class Proposal: else self.estimator.default_feature_names(self.Xd.shape[1]) ) states = { - features[i]: np.unique(self.Xd[:, i]).tolist() + features[i]: self.discretizer.get_states_feature(i) for i in range(self.Xd.shape[1]) } class_name = ( From ea8c5b805e2761db80c068855f856bbef5d80823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Thu, 23 Mar 2023 14:13:01 +0100 Subject: [PATCH 11/21] Add KDBNew and TANNew tests --- bayesclass/__init__.py | 1 + bayesclass/clfs.py | 44 +++++- .../test_KDBNew/line_dashes_KDBNew.png | Bin 0 -> 51400 bytes .../test_TANNew/line_dashes_TANNew.png | Bin 0 -> 41803 bytes bayesclass/tests/test_KDB.py | 1 - bayesclass/tests/test_KDBNew.py | 127 ++++++++++++++++++ bayesclass/tests/test_TAN.py | 13 +- bayesclass/tests/test_TANNew.py | 121 +++++++++++++++++ pyproject.toml | 1 + 9 files changed, 298 insertions(+), 10 deletions(-) create mode 100644 bayesclass/tests/baseline_images/test_KDBNew/line_dashes_KDBNew.png create mode 100644 bayesclass/tests/baseline_images/test_TANNew/line_dashes_TANNew.png create mode 100644 bayesclass/tests/test_KDBNew.py create mode 100644 bayesclass/tests/test_TANNew.py diff --git a/bayesclass/__init__.py b/bayesclass/__init__.py index 0ef73dd..803f64a 100644 --- a/bayesclass/__init__.py +++ b/bayesclass/__init__.py @@ -17,4 +17,5 @@ __all__ = [ "KDB", "AODE", "KDBNew", + "AODENew", ] diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 7db719b..566fb76 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -460,6 +460,21 @@ class AODE(BayesBase, BaseEnsemble): class TANNew(TAN): + def __init__( + self, + show_progress=False, + random_state=None, + discretizer_depth=1e6, + discretizer_length=3, + discretizer_cuts=0, + ): + self.discretizer_depth = discretizer_depth + self.discretizer_length = discretizer_length + self.discretizer_cuts = discretizer_cuts + super().__init__( + show_progress=show_progress, random_state=random_state + ) + def fit(self, X, y, **kwargs): self.estimator = Proposal(self) return self.estimator.fit(X, y, **kwargs) @@ -470,6 +485,22 @@ class TANNew(TAN): class KDBNew(KDB): + def __init__( + self, + k=2, + show_progress=False, + random_state=None, + discretizer_depth=1e6, + discretizer_length=3, + discretizer_cuts=0, + ): + self.discretizer_depth = discretizer_depth + self.discretizer_length = discretizer_length + self.discretizer_cuts = discretizer_cuts + super().__init__( + k=k, show_progress=show_progress, random_state=random_state + ) + def fit(self, X, y, **kwargs): self.estimator = Proposal(self) return self.estimator.fit(X, y, **kwargs) @@ -478,14 +509,25 @@ class KDBNew(KDB): return self.estimator.predict(X) +class AODENew(AODE): + pass + + class Proposal: def __init__(self, estimator): self.estimator = estimator self.class_type = estimator.__class__ def fit(self, X, y, **kwargs): + # Check parameters + super(self.class_type, self.estimator)._check_params(X, y, kwargs) # Discretize train data - self.discretizer = FImdlp(n_jobs=1) + self.discretizer = FImdlp( + n_jobs=1, + max_depth=self.estimator.discretizer_depth, + min_length=self.estimator.discretizer_length, + max_cuts=self.estimator.discretizer_cuts, + ) self.Xd = self.discretizer.fit_transform(X, y) kwargs = self.update_kwargs(y, kwargs) # Build the model diff --git a/bayesclass/tests/baseline_images/test_KDBNew/line_dashes_KDBNew.png b/bayesclass/tests/baseline_images/test_KDBNew/line_dashes_KDBNew.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd33129c4904fce60a7c5a8ae037d4688ad68ae GIT binary patch literal 51400 zcmeFZi940;+CRRCGEa#@2uaA4kVK|LC>4=pCYk3UQzAp8D2gN+lrmQ`Pa#Q2h0IAv z#)ypH&t3c3`yGDA@%snfj|xkVqtY%|mL(NThYV zBoetH)q4C%l2?ce{%@~`x}nE$XB!W1b2n>}j=6`6gR_T&odvI#wVS)0v(s)d8L{1> zyk|W;T-@cw#U20s17gl@w&Klm<#TuwYL`Ps?j#bUIq^TTM@kuXB+~0Wnrg}?d~W|( zX?N!wE#_GbWTy65H?rRS9jiN&W-!f%q@m|E!jq{_{J)<_x$HhTb7OM3Z-KGHyK6{z zsjj}OxA%O`o&r`IlEjW{H1`ihvF^UcQB=}Q8NNUCktmDVLSW`Y>GT8r+jd@C8J`ch z(|&)fn1PS@l};|fUPAiwkHz~pABZ4+Ju>^hfB3&e_`jX-?^E!!RxCIo!imwOo%wPt zQ=}RbL%1u~72fzJ75zPiqBb3lGCtPS`J$?E0xx@k56I~DQXX%e0 zQ>P2DE!FVyrPEfDRMgZGzb!0mKHQu*?G`|L?HR*KqfMnlH<(PE44?9thMsiaD>S|N z3ga&(rS7m37AhLYxB8tg-qz?gpopVg>_W$@rsgpqtyA;n4ULNXVYzpw^z^!d^WU5^ z6ivtp6w}vteOY*MWn9O{aqq%VjL2(Q0b#%Gx=EG;hfnfQ zw0aKYTs!*3(D=-O7}9dG2IEmZJ=cL8Wn5P{S!hIr*sIl5#ns>S8FHVrT6*^_=yYY3 zU(d|+c`iqrvp1&V_loKzCcbq0P|mZF5hEq)e9X(E)4RFsw~vf)7Jrx`Be7kk+!~;Y zzdSWu-;5h1HaCZ5{~{60#N6uLDotNOq1vHI8ZWy@Y0n^=+;nzw>#Guqsl!4PI&CyF z#cFD^0mQu?DS7(zX@BjfZKsMC#R7%~1Ms%HOagqSe=&)Oh)@PN^6@Ro5NkQxbR{;H zImtMrBy;*0$GeJ9-s1l3b82Uus0UnL3hlv%CN3@PJc>mZ`7u6j?&rrrYH4W+zH{e} zcwpay;YQqm*0v8b>ajudUR#~}o|2O|j6dt?w@)?H=TrnIDtXox>cv-F6ouj&`lko$kLqtKD=T~SXcF<|mr-Vw^ZMy;`QUgDPaqeqUFZ;}g-veqv6 zNZoqN9;CqY^GhwQ01GwgfR0X+w^Co>qo+?pI~@)R-}qv%o3HrSpS4YXnv=tS`_oYa zqm|mp!33)hvW4m8MVrK$3wih+*>SiPapC20TRUF-$geuP6TTs=wH5p9f^jZ(k22r2%Bm`|V~<(i+U)+}wNHVYQGvU; z=(3@@o{Ni1u!lT-a?_>!d?_D=JMPWwmupERu|!&i@O6{DWvWuQLV2kkJ$~G9{)|o= zQ_Mk}@T(10cQb_@WH<#hRqX6WWrI$)o@H&YVkyqHT>VY^vN6*<&yb0pN406lte`8# z>{`S9G_`vqQuy)U7U}EPwyui3f6U4i68wJVXIGYoiN?YdY4pT< zA7cfM3!NS_d5J!yhJnv%@?Is(2TuENm6Vi7BscLaF9*KuDs+yykreA#rX?8fYih5| zbo9&_hUD@4muhNMEv+A?r<3F7&!0b^dn)TuR#sS#Q+W1RM^~4sG)EXNCp%lQy~Whn z`0|Y#n?{PS#Kh2d7r75#R$R}Q{^Sx4+(?L{gM*oq69bR@@Z7tUeIq}9P`I$LeEaq- zx2VW>!qwB$b2A5rluGTpcMNRo>|`Vz9i5K8KG_$PWWn`=RVz#L=4*55f$r`b-QC@J zp5{Dz#u`}B_wv9h$A%3X3{Rg{!wp%SVE!Cn(&D*Q_P!{a zUf<=jj`YaUp<3_jX2CtQPv*XAbbtRYoRE+ZofD3&-qOPKeQZo=X}bLUJOe43^gD3Z z<;$0Setv5z%JJ0Ep+BghK}N#&ji?_a1;2ZzTk11i?X!%MIMG)T`{2R$ACr@ulapR0 zl8TB>{&bbjRl9F!ncLbD1uA=&Qxyv70qg*CbF$*>no*B0Shkn$!wlcQe?NNcSloQa z@87=s{;%_+@y>&4lUZ52_+3h!0|K@dXWz@re1nsBmX(&4);D$|1zAi?3|3rCLnGXk zEWpEKwkd#OXlRI}Yv9Nb%a5WiaQ&rgxKfH1U%X-`H|u3C&dK3xWvTwX?IMQ{F64f8 zm`b?8AFn%T<~`hPNvZd?L_&P0>j5Tps&uNt`pZ@ZO|-VSaF?RfF7hcP-SUIB>l*6M zCfR6zjI;jTohrU-m${>3lh2)*8MhCgKB=(Qy2tK+o}W)1TW`5+^4dzuXXYz40|NtZ zWB#;jt%c;%tgMvtYi;uBts^Jr#+aB*wx1^3hPBA(N(qkNwL9a<*2;!3XPIP5(*0vQ z`TeOvg2NekIG$`(TAAIL-YWE|y}h-w)9&fH+ivnH3oDaBj88sB`6yiB30h{xa-KiW z84wVV+cl2TrF#7M@!qB9g@uEutD~uR?Kr%=y<6Mc=RflFjn)>V3mv*Im1~%Fumxvi zhjB%9y$~veD2w9blT2pfzZX6{v{F(2I@02EMY%7a<1p9j`^RrmE9_BBtxH|vu^6v) z|KX70znUa3uV_R@TV)cvxoU!gM{)wL=0|bu(hd?Rm09Zb`o| zO}UhKywicrxwlj@aPsHxqb4iH;%`U2isn;3vBcI-4=b&0sciUEP+qS1?AbFjZ*TT0 zGbWOv+_43R2rU5?)6yH!5hKFpBx1R?Z{IGobEmR=O5Ip{&h)Qw@1Gn zHyc;@BfdG~ReIgp;of8XPq9c>wHjTXRm|(p8F7(Yl(^nzczVv!alda#EqP+2_0uc& zk3BxJ{%Tv!x?uONkLYJB0hf9e^yv{ucTz3^OCmIEj6iI%l+;tWmJlD ztF=>|eW{AhLab7LG@@*@6w1L3Rw|-w7qiDwdje;7;(VZp$`XLd(J9N zo*^AxIKbEl%3_H%s5-^P#WP~3M1+M~y1JICh8J5dxZ5sq_O1nJYEs8F+-Fw2t-B*| zVPHdtgA59A&~kmya`u$#;i3%CK*vFB%|9!@i z($g1xFK#|K_FGvrWzj{VX2+GSlDBkPKJ+QpiSNJnHNaMBJ|mnXaHRRmw48^@T6+8M z7R&O7a^p(+BP` zmdDo4bgdMOOf$z(Q$Du(V&$pPX8yw8ctozzreKTlgY?$3y{QfP4zu5YAVhcV+LGF( z#&-dyax!p*ac@@5fD2Gu>+{-80D!bIN=mU|VU%(yx^i3$fI&i0WZWj&*xkbu%`ipQD2YEw-ha zJwKHu^rmS3w}G{_wc)-+NB^l&;c$Lz^B?0s>|zjtdmc+5fHBW%9A zcJiWZjYZ=}Nd3QF*R4%DIC9XBmQM#=JS|3>JY*4As(<3d0X^1NgRWLmTL$fI0bRPf z>}MyQW@lSCI?@|F*@UvPXU`s<{jy(;tqY9!9m@OIffrL;D2eWTBO#&MN^0A+L;WKo zuc>$*Ja|yo$yC|k%gxWvkGhVgdhHN}hK9zWj5a3q>2B61#C1K&$&n2S#i_Bk7x~=P z71I|R9le?UQ^xUBf5pC{n(^{icJ52xz6pLC9-dy9w)`~PrIg}kBXvu$vwJnm%gZZz+&x2Q4E*7m=2~x4C9dnrL%Tx{j@8}gQ)YS> z)3#sahSs(lT2&T#l>;ufyZoLP7oWRL`@W|q=GU)ZrF!{1eoiLsX+lwXWn+i^=ym&c za53=X#S+QO61n*a6Tn-(DE}>OzGtOZ#QG-9iYjeJv;||dg~M3Fe-;=QDylUNOfK8~O(Xp{XQ<52`6>XayHJ)Ws%2G|RR`8o0sZLFecy#n7<>iPG zmfL3{0!LG(oIBfsE%9KD9pOw);PtQG8MwbLM>%u&x zIcnd3X1nh5qad6vkiMjh!fPq<$PK?#me^{$g3bG7+0#l&IFH;>sG6RZWME{}Gw=%3 zAI?87rE9wMjGHfgESdmh33BwD*ABf}nDcm>!%KBlfO_lJtp__6j;>qYS=dFN(-=8; zv5c0Uw{L90jOT&VutxL10^6A!_E_%yArI};?U%jexO^6-w&B~B_CERfTaa&&jbJM6 z!J>@^W9t)72Mfk)@}IrE>dhg8$^>9*Y@Ez2qxgLP4^{k~;(e#4o2%3x?Hcdd< zLSKE^g?)adtWUvj-qOmbyk&Ully1h)Zo40N%S|AKt$U81Iu-T)J>!wt`=saF`F;GrU{6{_vsTp@PG5-CfGoO|`oIi)`WN_g&S}=5g%Z0VH~X zxNwdJD=A-P;`ZLqA|nC3TNx=*uaBcJN)Y#KyebqmayGN()ptSROnY(vj|287rXZ>d zUEgC0_JOgTvmlyldVc4RqTFlRcW%=;6?F18N^x*-MCa;7?~*Uu-{VtO6q7Z#2YiEV zdG3f~R!)_DBkstPvwwKnpXN-S-}zKB?7OrFL1KbGo(mIgBtW%j<5lb5$KKsqV9OV+ zk!`scMEzEIXHM`)@ylx|X@=Ib(mBe@v$-ml zhpa+>jE;1*P*3-FHoYzPYUoyrEIZ5dq|x}2{}#M*B#a8B-1R6HoeDu1i^#vy(iuY32L zscZ^qZSS z4Mo?Rw4;;_O#4LN-PSn6o~j$DUk2z56t<%)*I!W$H2Y`l5!a_T?v{B^9XqLVLcjJ& zt&vZY-3No$3*kWv8y;mwB_yy}S{Pbd@(T+K6BI==E_-e`DPlyBSlGq&Ne{QNT^^cq zcx54ZHfeo)14V3od|~l`SBdk7t-srIOfBu~sGmQ7{_^~M_H^F(BKCJZ{mLhm2RD>nd3W~UUdQ5oe83+a-C@APM{BG-y zA3w}2E!Ux9p|j(Q`Yiq0rKP1c<-9gtp-!jc@|_*&dPW1KJ5%n_Sy^l?==;=^Z;ZW76#XB2|zjvVTM_y5*~Ynx5KuW6mEkoLXfSS#kkQ_a$`Nrj*u( z*Iq3y%AY!Qiga5#z4`51UXGYAO3UGE!AtX#K_^!rFs(QZpCRWf);sq2#F>r=H9j#QW8fu&aH}{iSCY2Uj=SyX=xJ4Lr2}tZYR)B z#aL03&2GTeshOd}U)}Z^W*OXUvH?$BT=WaAF~_F!pZ+C@3*{m%H0yrbXz8vK11_5% zpP(U`6?ScFluAlUiq0Kyk&8M#J%=3yJs|JJi%TzF$N*THCSQ9FZ2*GLD+n+sHo19u z7g}5O&}c2ayx1z1XK2@N*bps>Wte2$Z3`!;8X@X?l8k7JjC#MMH)JxyD=L=c^~@Edv9&ckkYPl$FxN z#H3a%F=E63-5_0LTXNGKTFyu{auSdozCRdxbT7R!6TW{_yw(FIDvGOz1p0BmjEsza z#Fc9TE)n-|+GnbUQE7A42W&1E7p8QfFTZ~d9}-}J5K^3H`vSyQA1ibMh3DN_6~*x` zd@ji>&k)@v^U0GKL04s_>?XFmW5OIUd`wg%61Sp1Rc!t7uTkYDMn+re>g(}wc3dZX z49=h5r>6Jn!v|I@g1;h9I1>}|CZ-HC=GF(t^yf}@$nC%O*&=Uq+ZElKOF~g}oRlvL z3&R^scj*0ISq+(QTApn?!u~#V^*NzH(yccy=#-F=`PC^|0gxpL-ZfHvHtEt?=_J`0 zVYbWQi@4XQd8Ms|rn@a}h}9>{I_Ku*2ETcu6&)STI&@;*f|9BKtHaF$yo5?t(HHyv z{riyi18N>!F0^dS0UIHSU9O#}J_uPUd#vt}KB_D#KEH!Y&dNtfz|dZDi;JT^eKMGx zo$Y=jAw)%vE0vU#ypS5Sx7UJb5!S^JY>~^~8kO;^Jbo>XOrwwq1s(xcI}6bRozsx_OP*s(H9j zq1fy(lsn)3sP3$pndGEyCt1LnfPgY)nW#L+@Nymbl!FqR)j%PehgJ3U_45uFvp^n% zmdG2$myno%hHW;Ql;H?LY3bVix5F}KE4i%_Q048uULd1tEjHWNy7_4N&LU;}3vF4OS!)PEx+;z30zAQf-A8p`Lw{2Kz%)Tzv53lapti zoDQ0r_GR7nn9IWMTv(7(Nn^SL++5;4nf~I%iwn(PLNVxL0>Y5D!l3&D*yj3?9Jw{&N>U;Vx$9 zY74rHIS9mSl6KrvwKh7as(O(b2-WtQ$ipYRDZ2cuG}}00s)v83p@Ma6H?aq2tf{GC zQfF>XRSHiR8kw9N4nTL;*9=r%+`#yf&x@MqwbVvOQWa}EIyNgctErhr9?y*s zyOo(aTzyc1djrW(l#So&_Ns6cU(Nb}=S@vI_|){$(&f)Rw<Yda^5i_qMWJFj5&b+@8Q*DR^pVw;V3;Lj*b(Z>)InmH+rs3njUwgsqFjna-%?ccxuEb1X~WKVMARImftO#3J}bLgW2JhX%S?^4o(lhM@F1dhTT8*YA4 zOkXfwS%_6dj;rqVYpUi9A(qRv7TT}zSt@+j`h7(JjRD1GxlP(*a$UVdKH7DlgyJpc z=H~D_ckBkX%MUuN+jhDA3Z1~+nF^iY+kH!WLD+F7M-1NiFPQ> z9?8&4$#!yKlrcGpVuHT_sI!@y`yhH|-r@8dbTA2d`KaOMR6^N~O21oJn7A=NV&s!0 zDNSToe8X2tpq}Ux!j%11>nj8_QLLq39G7%x(ScM-bW-SgYpVg*(G*Gq7T3eh#12A< z1G*+!CpY&u30l75j|*F`W=A{7oX=KPxORv{`eUs~9qiMJdo`-$VY!uuhkr9&wN1f5 z>pcx7^}LSlt={LHoG#)1-@g5-z_uC9+P5Y&!fBUG+Ht+FZbhZLWvT}xSk=i$Kr{DF z4$huD6Wr>US5_7?I%@YipDwl8TV(NulLc-d^itfwo7#dzX;ipFl*SV-vVN3m?Vh-| zgXHsaT*`vUVVUQ04d3Q=IZVB&Fc~TCahhlW86uY1-icu9VV38%+lPdoOL}1 zbIz1i{~T`CJ9#oZEiH|6&uEmcj{-OL92LMbQ3h}hghfOyqb2Am_q^W3q^_4+UVdd* z{G=<_5x#2;RaWlR-&xI{fBvgKx)q7KX;S*hP**vHwGXLzYlr}G`P8p)KF*9nCojxr zjwS3?^ezF-H~Z{shTO3JS+MaS|x|cT6IOIO6bG}T>=*S&uH z{P`YHF|qXGVh-=g-j#=`CQvOJo-^{IYrzTj$@8T0*6078bV}?iLmX_gQ>Lm8-s`-- zzj0}vyeOc_esua{#+ct9+zse`kf>L_84>3dxK}F$7PZioahqWcqmARg)QUYm>vWz( z77Wg#t*cu-?o~56fA9YN`^2)FB-w90@N0g48n*P57}+zAIb|mC)eSx>k(Q3WWP8Y` zoVoWOP*<-Ft2ih*TFjuXH{&P6ca7?VJ|zi_EJdp}S9vx7f*NipB}7f^>oIYeEeCW# z%_%M_V^;$MFmk98sA9i(I_xiut=su6xYcn&yeEcF>`b~QE+dN~AC)Mwx9RxBV z>9ID4(Q_xLd*uC#MST8zijJOMvgIP#*QZuek*K54Wu6ocF}F5(?OKP!T($PQoyYa+ z^LzJlB<>0C(Wz+++j62qYGKfHWi|PQrCpLiOF5Ry)oIz0FoUQIJguxR*mQ-t;u}J7*%9dx zupfn@LIAehig}rPsM>{txlk0P3n{$y2Omh^4x(1}s51E&(bCOw?%X*=U)@76SeupB zqHo>Wg4(OXL_zSlk7L$Sw@U9aGlXB$dO#w1m23sx%gbx+&>C`)D<7`mPp9>G@z}@T z|F%x;?8ncaKl4(NKg`IO{@JWlGyKz)GC3l<%zo2>ggfGca`x&+jvv+=gAh{n{sZ?N zCDS^XzKRPsQC60R#Dl6}fuKs^4e~ohf%nqJ7B?imFZe6N36haylIii;<>kFpoX`!A zDe3YpdSzJZn~1S52P!!;w8%br{P;rKsG7v)R}kh=-<{_=Z1{>-#r6mPkHo|g#nsWa z45ADND=iN&9<+S+Ph#Oy`sBqu|Kt($>F9)*)LR#JtLsgfu8jrNe)+*qCEet?kba6O!By-<> z!|cpV8ot z;Mt{#Hk}(xCe^jy+#E7JO4uAlZ0tWusbLT=JI%a0#o1w-M;BK{j zZPE1LRVXEZS=ieLFTNCts#9MzU7caau^$|-ZRzNUfPluIqB}U=Re1L7Ss?@>PNrm! z8J;>-jk|No*toT=t)^0!{oAZy%d1xufxm~?vG3E%%gg_K>F4%&l+b|`f{JLojplB= zjDM857aCo1fAyQOJ@`RBw#x%pd6f82e7RbSs!yNTPU!D>p?6DL5ZIz)+za&r4E`nL z@iTXE*PzWHD4CQ*^J}{72&+15N`mr;o0eOVwk?wM^(E1jP$Y@2R8&-iCQolw&>2l_ z)YjGpE)9TFD+c}ji6Pl$@8Jva@i|)=HuRRA54Vz{M*89S@pxHZ)i!DLbM$S%rAL`G z$xZ74%}<^38&I#akmRb5pL+3Zo4-e}ngWAPTfd9^w#0;*#ophWTBn#lbT?@Bx*6?# z|5yMqDKZjwCvEHa-g%B&+8p&u=TQ+|4ofNIv$sx3elR`hc>lc=M6EBa5!2mbv7vKW zCd;X7KZB-Vns9M*R}Z-jOieKf#y3!Hh7*zWuxiK+HMnMMF0fU7xvp+~a6FG3Px9@J zF$Y}%NVNsmfkMEEd;k6z$T;@f%1V4}*SY8EPoL5)EiJ+7^))>SdJ6Oc3XUIyisGJg z9N`TVDino_7uRuLQTITaMnz(CXu8nU(hASAteS@&00A2BHY#$ES)efqIm4HEv*0j| zG$iDIkiwvFamxq@3hEotAd&FC5SKXPWo2Y#C1qvjt9HO^3+tP#Xi*(U$6=_^;}UD) zkJlUyA{mIBD)A#s@=`}nYw8BmG3Rq77n`0Zwmgd;KP|YirMorkdvV{lDUBUVL-J7N(AFv@K@v(I;_@ST_n;!H|Ggw0cQLlrxAEmb+t#%a&4tT1A^rHQRy?~{*f>~aqjM|)t-C)Wp1qf;JuZ4zvtTBoC<(#;U9IFr-fQO6dkHkDYhObMJs{5#Ey=g+M}A0F4uX!DtvUyB}j z@wu|3fG z<15~+2I7O>v2|o9GWv4z@+wFc2(T!_qJu{c^aRC=1nU906BoJVhRZh!l+=283QKSs z(YZ-Gx(Wj4OZt?VbjcGkGwb$lo8$yNf`l$3BO|eIpS{AWcg50Hi28v1)89Xekam!b ztWb-z}YxlbDDyS?)p3m!hK zTTuS)R)igo+CYIkY0N=AxF)~>iQ=Xf2#`Rw%*<42_Z+;kQZE)<@o}J4QuJGVQu=^p zsi8uVkK(@VBCGZVzm_t`j=VT^tI38cy^)FmRg90coqIR8v4NhWgJ;~~Msx9<%7Q71 z^S5n{5Q7M$m&kz2hYbxWa&<9hjRUZ7WQ1yMFld>PU*W#e&(hA_&A(UU7F%1dO|OBO zA6y{mK0Ft2_EbWX4PhsczOEG24_*+^Bwh7B^f|ozQikVOw;ehQ-Ok#D*RqjpUEX`9 zA~5FLH=EhHIoJ1_Hl+wf`OJpvK z1Fv4030w$L<6YoxiI-HJ4xbjtc=jqT_FK9Y{n*fV=GaWvfT>{HE!uCUhZVZ!r&qUX z7ySOYu~6G);|cwx{?rt11)DrWq)IQq1p4sd121=MkeAB4PCHXudy1L*Es58!`@c9y z@-;4aw>~^)FW2}phJwzwQ_6*LfN^*3)B$-#pAkuaLXc229l*g_D71iT@*u~Aw6}Md z{Pj|o{kzrj`}Zjttlm@cU;`*EPpv~q1GH6I9aK8wvp^zgXi|Hu+`sbT9rsIt-`$ql z3orIv-EJ#ZxiPYDQOd1TRBH6AZJ%kohoLA>`DP`0os86ilR0P1?d@rC=RspY^54~u z$!`?xHQlv$$u^^{QE}MP`)tLxcjI94xT$Z(0bSZkuY zXq_?>PUL0K6IcwouldqN22YbDZ)qd37U_EB)nf>i@rpFc!2p&h0SespsjIU)AQ1>f zxlII!y-B&^rI51!)>BV^pWw%~N>w|H@7f8+X>lbzy!RsSck-RCT@6AxnRQhY3_y-! zL-DS!kkgPU+1hD(#5!m#z~Y(&$!u`Q{ZNtR{WxkMesfRHO+mjKO_^frQ9Fs)^dBuW z8jT096T)+yv^OC}K^qvn9b14<>Yw{y4P(PsX9&6tJNE(IV2;50XN|J@w zT!6IW|LYrBtG=G8DPu-kvRs-O`yTyuSJ>B;Uy(eHCIJXj zUTSg*?{o;!_?14K&G>Eietz2}Pkgg&q>pseY~ z_UQ*WT^srZZhrjq>CD2Bgn zcFzD$&yR8uxrkDXkB{RT>oiAr)(4OrWBzp@c>`$Xtd8hAZ@+a)tRD->^ByyY+m4 zdlA>_km)KVe(Z0wu&iZxNAWpa4n#qsjiW#jHIi{<`{HOuDiNbtU0t~zyp1+3+!ek9Ql4EoP+t_<*E2x|bInN|+tlw~c>h&3_FSX?pU9vf8uPmn$ z5^5$~cvG~$^mKXN{?&G}eUJat3Sh3@cdzt}j17ne5i3k+2+B-gY^>@R(uH6X*Pt?x zh|nVV1;IJ~3}%;3q5jrt>X(2#-M zJ9>L%RvkB*c!O`wPxjTr005(3@J^11`hM#6ZBWvdp4O-!1~C;!yNc^sXRh5-RlD*o zbt=H^`{HlC5tSJurIILB)VV%;!V=!{ih#4EJqRBNWJ|EtmF6wI;6S_ zOUct4SE}asc6VJkVew`kb1y7HIQ4L|iQ`WgtB8MYexeD71^0ZRhG&(O*cgTw8?FE^ ze0kLPEw;$UnuRiJ#vzc=DtPnu{<~L49!AvU%%R!+L>{NO7$%jC zt!+%+)MV;Kbv2J$Pb)R!z3oN|WnI}r{#z<$_DW3Is|%U24h4%$2rNKE3o>5WP^h>^ zTDre)r6eevs2+$}AZ-RN2@;$y$~oy?tUvbbv2puc=}{Jj@Vxwd3oepSR64U3HbMR1 z03&@mtqby+s68lPKr-&fn0kEZ>FJRuhWAkkvd80W5>wsZ(zXSVjzXii_7HTLI&fNU%ZtQjWWC zk*Ka#SoxfW_unC%ZF+jX15G2Qd}*(kF`!}^OYi?e7Dswub!ABi)dh70x^=~(KX4ZX z(p80BF)+hPJJJN$E^jd|gtSa38g@z33kCbP!{gZKAE9VwZA}Sf{{SL2M=n1!ZW#Bn z^!Mlbm);B81s*V=_x89zx*-udl1#6YxvwvoiE5(vuh-#1({ctjJ0vYI_DGV)u>6nFC#4aQdh;_m)I{buJx@oW5nhUt!~9mxLg~3^vkr*yD%1A)wE=>@u{O^j30eJb*e0h())rtPQfNflvn1#N{C%4R}o_QL?futuO- zLDWt3^Vt!wb^X;RwvaFW?by1=an*`NMmSxCq8l7PZumch;M=@ep?L;449IPt6e`uMSWg>UEd(6?S<(74g~$K(!T;) zgHB?Y^~u;(V-Gx>tT;67KOXDGig&-_U+2HQHRG|p)c-e2V`HPNP3?@J1*xbQ@+9ar zt9sSz*RR9qjv-gaO!oByLW>EBCv#`M?c%fBnw_6%dSv%}u2TFG zUV=>Dh(or9w|Bd(#<(C0H7plURS;|td6Ov(&*u*iD+A_TUp+=e(c_$gu$6oH93~5o-}350ABaAww!63k52n2O^>ETj47cG;L6;qc$(%C zv;~{P;;^YnsG-9u)bk^4g~j7f;xJ?PdX5Ox)Yht>(APKj@p*aI))lI|>%Dca!{0VH z4`OeEXw*DVSQ`!ei9!W!&aLA24g|PL1LM$M&=^Tf6x*D~5(G4JI~`!`XBW4Xi(ak` z$;*>`d752mORN|-J|w@S@7{e8LR)HcJ?(HT z#Lp1kyDwg_RW?L@TuS>|dzl^MWhCAxi(cVK0nOV-j$CSM@IWSOa^8JY%t#!*_P{_* zIQp2+@`5D9ZJ;rt7@F{x`jt>%mIzl&1*RuEoUFKQj1P?-$V!hjrtPt(2|Rq?G%H)% zdaCVWiDTFn3Bg^%vkrF%1)}VHqDZV-qIR4B;jO{xAwsn1>WCT=oXlincZg@C&-a-j zxvnmE4sGP%{;`SPjqQYMUCLXQ2HXW|P7I;6wq8KVm8mX>8yg#F3$40d%g2wkoMdXVnsmI0 zZ=DJU|HU-FeidLuud&$mtxZ85<=Cvs2}0{^Eft(cTmb%aK_^n}@$Dn4`;WIg z%0+YtNA<6h@N(|rqX>LGWWBaU@gbc>Xo1qwuf}uLX7%WJDa~Y(UFRoEFqbnlWQ~9; zfq@v7x9?7Fs*9@M3H6RRm&9;}taIYg7^%)F>rb3vX+NBa=kDb zv~_d_urQaJhX)b7Sma%QmHhjUAE81~e=U?s+@Bp*n{L)x5KcO1UvEO=(2Pn$Z!b6U zAkp=y^xH8g%S3T0j<2(`6Z#%&eGrR@9sxno$MAu76nv{)JJe>C9aO|aklIEe11!Xj zr3yLv?9@mNqPniZLv|9He^h*h)ShBb4y_S4;4X6**mxfW()cCwjf+k3+Jek5sI?vt z{`Snw3}OAAq*{0A+CNzknu@;ELY;{0hcKom`d?xDlW=^7RU+F)Mcry;F?j+F_0{Lk z9B@j2WtuiU;=Dxm)#lA#+jC%G+xqqEqtmvjsdb0w3qT1*7F$J#wHnw6GEg+Q9*{|@ zSwSaMiEHgsw=q{F!2&4`-MiFpj;6AK6f&m2q7!U{N()62iz(SFm?wlSD* zD<0Z>AnGl!u8+^=bRi2AL*xT0DpHNLvn7#51Xm>lQ%3~2#jj(qf$xv;(e)Lk-w&_z zd2cFMa3W!Nk@`^_U>mDvBblOs_#1_C?k;o}?eW*vZiy!1>=97}gyJM?ufzBF*Fk2K?lv<+*s0u5D9ee z;%KGUGd8BpXuBo5?J#RC0S?tG1!qOR_4kv|1W<{fpF3EUt9zKpsx;V1M8Yim>xce) z;iMVoF{twWKN&eF%6%_mV-=%yMhXwZ9^_>@AfIxnZ&Jg~&MxmTUpl!ZsVD^K1sCaI z65cl%E}#jF5QS_36bG^EuqgViZdRd!%3sO&=(+Xq;lqX|ChCU|)B2r1UqnC6W=<*! zfPY39pl}MX=pR0Q+ynzun78*#X$Xo6_kKSj(UNf_6$vGQoYY_^MnG1OQqYS(kd=Kb z&rsBP@e`;Va^2iPUPKc(Sv+uDUmpk69OMqub${|9C~plwlc>%Tva;ciAMeC%Msk3) zM3hgMY5i4^Oz2vS+zP~M%E9#J=KM;S3n-cz&MEG)Tqpwh&!A9$*@6YOB zFby%P(la^JFHVcuh7#QuCJiB^{VAM6QGJ`V2-z4b92G@#C0US<;IhPB1fZ>t zE;MW@HyW&%Xu^o+51^!DdXuori_J>se3}q$ao?E#H+Iq^0VIoICXk)oy-;v}GU#?A z?+h#)Q;&kVz0s}rg)mSSn*R8>E^B`lz_+Lo;jveSEkn_(F3qp<~stSG! zR}>3!Uvk?M0+?C1(%b$ia2Ig7gN_iy#s9QLBxJ~4+?ZWC)KK&>VmHxKlIYE$z}y;6 z><&goRaSMvX#HDG5I1t7T7T944aR|nf12CbHJsI*oS68Qz$PqI(sKo#OR4_L6T;RM zaY%Cv)bj+XA=wEkK};*>aDF%TN5Eq!BOvYI5MW8at}~k)r{k3+CM}T{oRpSR_1I6XoyVD{R|00y z&8wTJD2Voi5`wZS+ud2Tf($CVOkp3`D?HF4H;9tlm6}44NbT5OFU2ScOz~Ky63@oL zX^HDhJs6Ongk9&m5{sh5RjuL?BN5zv02*sx1rGva01#nFbVAaWwJm0aq{c+Wo80t; zAnm($m3?T(8AtL5FPPmVm;6OHnd=bC92_0Dq`iV_kQE1^^~z6y;yOY=DJcOM!VW>y zTS7{z+VPfJJH^_A-lOO;D=RC=k3!x;OGUW*ONv?XQGhSNSM<)Rg@pz7l!(ABa995T zzSz7kh+0|X8J-d9?CuWD9>espZ<-q6dy8FSNwXrRC?s{%xgyD64%_$6{rc~!X`$s?@vf}@;cBQNP=k?rYTb~#;VawT zecQ$oO#`byxg?DuM%@3?=OCr_j#TW!eMgD%-L^lu>6>GZAGk6cB>F!Ptd5K}5ec=2S}L8N=e>9DhONnM5k-xx)^@%f?+)k4Oj-6@pcrKNQu$or<<~ zQ#Hwr77iP*JpTA^xiUL@cI4FLU`C_6zkf9R2|QLpBbM8>q;(7GCgy;AHv~Qe)6Fu5 zstwGwopks9eE|?N(MD{ood&qw7qPHrN7)2J0CnL#mUBTz&i~jtn?V*hF zPq^Kn-wM7n6gXDgu^BMkdi)T3E#21*aig?GhZGDoasVwD;rv0G&g}qOzG(s&z)Nl- zmm6*OQ@VaST(Z6|N@v8Q^WTvr6x^Q%yCMmKPF3lAetGvTI!u*5NVU;9nfPxO53>v| zNW=PfO3X){Jxc`@vQ})=fLWb6T?o;1HdyS7MMv}T00Vt} zGCbHrMEp8>A?HS|2(cstSDJ@w5Cy_+zAHq7s^EJu>=D&Md=wozStc~v4wng-0 z6;o5w-q5Gm*)x4qdKV;vk8=NSN6uw!jh-F;7^XH5x>Z!f)SCW}xDkGoD?q(&r@}my z2X;x!TDlh-K7C4H2C1AcI$9mn=8^pT*|W+~4-3?k<~#c@A}OvWpH6N;N@Fa>11J#J zhvW`4ja%gGvGIrFi-LlSz;~#I5MWlB$}jy>$`}zDC%YXQhesCufiC|rONY?7HnT5Y zC0n#c3?AdrA+p;ViA~D>u{%)90VOU+q2E)u*f1vL%9#<`MKA3>}~z^u11tkJ*I5sVcphMZNXr)wv&? zyK#o^;l2W($iBgbLrfLPNOX6(sF{QULs2x8CeE^y|H4d3x3yWY^Ql5ANr&5sebYBd zd@0DS_!@E{w?|kcgIn11y2kMk9z{IXfFSx46Ha)V0Tyae%a(Bvi#uq3dRF;wUHdom zdf_yVb^xcavVo$k?SR{&NTL0EPfHLk2??YyAx=`@DK$WIzYa2+kgsQ2wD|uRagZIh z=fhz_NZLxu9QnPbgjxN+b?xV`dRv74vH;7CedfO3m|kexMBGge`OEr>t?UTlUPO!< z2M$LHx#$fgJp`O{V#NoYL*xo{3(?`fbZa2=sfZI8LwtNZa;>0AeR)X6JRQBkEg zo_WZpuoL)}a6Cu{U``dab^rFhmYoipQNd@5ly>y>&8xN3U)9*dv2mLI<7q;O>g_2_ z2N=x7z#3R1QDc!3IE}#OJ~>I$p7;h5iHl(aF|LT@6Mp_s+$+5n4??i`M@%d)b&OP- z9mggr`7acnk$_GtD_R(3L6^Wfg9n2On5%9#*+TgA+y9LCOWisOH zAbBJAbnBx6I^n4XUU16+O7d9?jmbvy(E5A(s8t4n@V;vs< zBam*A?!nMhM-PlHU^vM#M(j?fLmi%egGvBv9sLinu)U#SBb?Lw_Lxwig`(pl7hs7{ zHV}7CPONbtjVQ*{Hq*gACC2Fnr&&t`(w#BE57!AZizX&pgX53l2`4`nH3`2~2g8RL zpG709A2jdVXmaxp2Mb2{^lywR`xSG*y7f%O5-6A$)&sgCI6TnRmMsHY8^}A6FG2tj zZ4U(`gSHhN?iM6MOaaG~E#UEIm=JdC!Q&?`J+!MEZ2pA`!rfc+&>4GS!(aa!%!!!y z#1qj_lh^E-4m!qNXZvAL)%seQ0-3XfM6s zA4a*=rl6DXR)7|FUvFU-*|n<{Ml-+yG$(Q_J7(ViY&{%vsZ+#2^;CJ8g0shP4z3Cy zL*FA;oIQx9i80YVNy*7Y<1yI}+5~6e-5w6u`sc|}KMk}j@@_I~5g)7-*){&HV#nfr zZNZDgXfF@XAmGTsH5TRo4(Isy4?v)aR)_d2Ar}FlUK*jjpD9eFagm*nS=|^w2KxHc z@AfhMk5mNh4i68LZ2=YOBO12 z0|QF%%81nEQK47Ya@oKB7_o%F+gh*I_Zn1dY_582j>EZe$PEIlvoj+~1y*0Cs4<^T znQ60@ljPqH#<4LUmOy1Csc@D#fEX~5{|_d^0A^JB)X~yOBzKtT)~Dg=8wx&^H9V1G zH$R@k{Ha~a)yr zyeE*Yq((df+vq=IBtCC*JP;DcT0#vZYK?9NCLWl3Xwb*;Y#3NQvb_lnR?!C_vE?F4 ziD)d8*%Hsg3Dz)HDE~F01^pOXuto?Fl{$sS30I9`htB~{-G#zW!Z*BKEbyLya4zq6c>mFD2#n}f z>%oj?v!OP?hP)IWu7|V;5K=bXdM4o{)ClMZ@Rfm8FzL=(a$iIP6GCs_njt^*&*+w> z8vDe<4Oba81>=WRG>Is_T*^E5v{z1r>_rxfY)KD^=h1a_buDx2daOTx;L%z5kTewJ z_<9<|$Zcb>)VtpOoLjdJ_3TdPe1%EdQIBsrxd@i{8W#egJBG3-Gr>L4jCa%FZnLVGWU(~lmis0kN|Hs#tfK$D$?JtoGna7A^ zh=f!^DpM#aLn%pyic*BMLLxF`C=r!i2&-L+GL>WwWk`}#L_!)!rZQ#x-|y0H59ho7 z`|3L9`_A6mT7JXxKF>WpbMX%*9)n71a(DgRijpaF>OaRhh=|dg73J_{6Im%+F!4!| z?mU34UJ)vUf0j0y+-8h(Z{Lzy3ab9N(#3ag`fpflh29fY3bpE2b6)L8b;7xS2}PO> z%{g8r;%mha_h$9}V!;16JJCvfntwu4qw>E)@RNNQ>u{anpu@LB`OHXp+&SnLrGEj+ z=uX0yFwG%RTObIe4dsFB&aGTR&3DIb2mXeR2mkv!7tbss`B0(dHiUjgfg`J+HvsiDL@~LI^-1umJ#{ zXaOC93i;6hMSl5yZBPB28yFZ!^ynUzLVr`pM5e0=6!7c;pnU?7+f!3T$js3RB{fOc z5}%n?w~MWLV(PAgU){jKU;scgz#8~4i6br1HeUee{?qK;cTtZ49X>+Ki^t6Z4)~gU z<%6=;ttEaWCI=^TsLKKf3Nsqx)DFQ={wX;6FN6*}4X_*umO{sAymoY>nm!M_ALO8d zQ7uRze{f7KK3xTM52lR$XS@NJAht25EzJk$tf?Fmradr2p|o9iAwwzg?P z7Rgqy?THLT&gg7fA@HLGt}t1lW5HuYk0%%#-N3r>`6)>DZmd|`gV;x5QPIH4PU8NH z4Zys17YEI(m2R)I^S9=^3x9FEnDh#GmaRcv;?^#;jgYRhlQZR)#lJ3?_x&fW<%r}# zLtw@a+$;&x6pE|0I?i;D-}AJOrtN#NytK`zICXUxB^m$G+pNSu{(z3rHP|+EtI+4( zjB4x4pR7Em8$#f_#ry_~K=N$=)Hb=NKaua)euTH=rCjvWq#ikCJoSSF3%2PYVeKlDS)D4N>yAa%EbAVwh4 z7t&9vq?D8|X#o&FLDy9IBQ{O_yzGUlk9OH>_8t$<+BiUN3qe4~e`KRLVZf;o2v zR0=NY#Jm9+(6o20GHgo>P>S8$JG-YYJW`FjyX%t>iE4s=f=NfYVh9zhd|#H&_bJ%= zvxa;YEN{%^Htcb`v?KX`ju?lMnnL0q={G*Rn|@faaM8Dp#K5zVEWM~V4|#vBudu!r z_Z3f-A|6}}&Cs_45(2tkT3WiS!Q$wM-YA}0xHJfoM0H>#<(BxF3%8nG#5aRKLr*D| zkrGP#Bloyb^q-<@iXTAOhh}zb)%Xk5)ms}fv$F$WJUV}Gr}?V~w6yH;d#68Ld~!H= z<4Bp*$>az3A!eV)mllVd9gbP=UdFRJi~MPHyJ}@Xs4*--?u?@#{M5m3fMg)IJp(B* ztOv(i=7kpH2W`in4(sYQw>(P$saYy(|{@Ya|;zoyjp<0qSU{=@VhqH%zH9<5yHmjs066!aFJ9j?pTBdWdzx~Gh0Sv{^ z({!v(8B{CrtK!ye3uXv%iAReG$QPhB;0FLABQI@#eB&a%GH5hy#+`Uu`O#BBa1SH> z=hgX@`&RsePVRHhOLvy5KQ4yrToGboERu`>I=+4g-}XCT(3r$yj*lg8fy zkd0ai_RY_4CfM)#x)y$QP0eeK{G0G$aevdyH&YMW1WsVer_;eFygKofENaSr;mHS5HGN;+55QL#Tls=G(VB_4hr^__7f^xnj*4 z*4&n<`m9jAHAR43;j{ZZ%>5beV^gA}fNP9IMNQesAzWPTdFcY1lzX1P|=WT%qoy~ zprCX>YDF>TtXWTQX3@*B-*)K!xe~AAkV=lQtJRf60~KCo$`Hpy2fvaZo4xgR_RBX% zaDJ{tuBm5t#zr-EMwV7KV69~0kl=naYq%@vJ|FQPhTB(WgprTOY%lI0T9oUBh3~wq z=w}5wg(qni8I<@T+2Tc;7jjlw6y5yo!YfQ%4;~`V)+A!%X#;jJE#|LO?LO7YGc#YL zMHHv>gyFa60AGn#EMW`hi4oG9AfR^o!)V=aD3I_jOAL@g-!5&B#`YtJ6tPmylXY=+ zZb!}~#XmYanvQb%xv%ZVt5kM~qxF*Q^u3;ymv-#jf1-0W5qLB-Z2#uoB?98Y>IuXZ z=r2)f5R|10?G7k>&52Vu@bH|6(;mU0izANm8g~BU7HAWJNB|OF;A(^{vw5<(D~o6G zh>hUj67-_2ZKnRNIqZty04M`=>(Vvd%SMP$Ial7H4U+P`yblQ=D);H3^ zrD@Xm$l9w$9=PVt&nZWJyzC||b;I^L9Taovm9eQX)5iF)> zWiah@n$`+~6_iY!{Q6^4(;4qG@D+z-&888%UeHi*@9dv8UCP1 z&WJDUi^PRHHhjNaCKW50u=#`j5KFcF_W&&^Y783myKg`r11rFIxL@~8_n*kONA=Mz!re19z8w^eGzQ|WAQ{q;<7~6#ev21GK* zeS*HHiu_p@6w-WC@Zyfi2i9A5?9kTgb~d@eThSuAySd}CJw@9fY~QVnp9Qj8UiOwQ zlg}T9Eb03a`=36V&aSTi&_~Kz^YECJ>R(52!5WITY6^|E!f!0BYkbHfC5X4OAh&1J z`AH<*_a~qGJ=!NqfBb z(NY%mb($6Li_c1Rcb~QXmi0of@nTDF1@gWjIT;xBn;8Y_sb_1u2uV7^nxUb$DE7jdptDZIK>mWZv`?C56PKKt&QL2xlB^HhW9_!hrSkZ4 zT4;B@Y55D*Qoj1a!4hFjzqAK@8n7(rV-m(32LafF(FZ)<-(`0x?8JA9$u!+QS~?o@ zaofVa-Z>N-t;EXbpEaUcKLtkC{@LJ_r#=twDsKp*>PgmZ)sGDsHH>vxDbjpwHVV(m z;6Z=f;s5%;MoIC&o2i+*jZAm$^k7Y7$ParsM>n?_DoQ|En~jVJ1GImRAO*4k$cM;; zg$ZN>64UqHz){wM&X67hdp3x7<4W=1^u(bv@G*v!|EwRqd*`lNS=i0)P<^SWnx|$B zFMRs4cE)i8)XcSRjM^fN%yYy}m)p;IDxdb^mB%~^p0o~rCUo~fGzk$+1Etu&Yc=i0 z8`q-KQTp^lTP@PC#9_h+vRz_?g?S>m>4qs!cm8?wr$hn;<-M&BcLxv|E=lQpI}#U% zuV3HRX8UbhX!w!~o1k#}C}!a0&7Ca4g7$jXt`?n%)``sKUc49aqFED*-)>>g_I`oXx9Um+J^W9W2fMi<4^OMgZS$urA}M>NemErt!|{SV z6yWQKiIipq|A(60UpB)O^LFy>V8Ow+-#nVWjnrvz`=dwM&aE}0o+j|zHqcPThbikZ ze9OfTmq?;f+ySr$&k2-L$O40iyrgRiFgRc|e<04_dx=~6_U-N;{b+Y`chj?%I^3EZ z-zY6zdKzIdhYqbMGcc?Uu~-TUsZdE4u8(uq&ZV`}Q$l6m^)2Vp*Fz0=`U^1sm4B4s z?FUmbAWw)+QPts$K$hE&cy38a$TnhnoL|6|Y%r6ARC#;`R4~$pQ4VWdpY?qKO^Wpt zA25KJS~X`pPWJm{-#8`SWMqq^bckyIlI+1i+9vEYmIEjjB?#yXq>0Gf0;ZMmm}`!t zq5qp}{>4ZUYxN@C z2xvR#Lcr|LX%SNC^)-g3>KCiJ{v=r8nRCbU{5~ac=HLiYD&dLu9|JqDT*Z3VRx;Q+sUv#m?S^PTpN&o0IIA<2W3wi5vG$ti2 zHI$K4uE!CI@OA=Pp!=8=#umP6L?TDV^+U~h zneb{O32@L0h35=1-;lJE+hRSGIk*ByKxxcDEvbQ6tqxDWi5dR;TxL6V5G8(E@qExs zb5C05TLQo_Fyo(#pA11ZIFOA1h;?il59j>K@*_kPUF2AptyPG1D=TO7tHxD-=f7ZV z#AD*(qFPp=?^0j11$`&*+kuCADqV(!yW{mYwwdaDZB*gFkYpxB8TBc4`myGE8hI?w zUB51clM0~);5&p0mp%uNW@iVsxaN;27-b%_BJe79Q{ylqF-0Oo_Lld0V3`Z%C*8{q z;4__0c3{c^kqItvAVh1DfiggR4hTR&B#F(}I#Ku(4<8k@IVR#a)~e1W{%1eQi2B#? zt7QN3buO~iv7O;BHV%CxcVuck+r5T!M4BJLnCYus6B!~7L$r!k$P zO5jxj%odR>>-S?KWb8-h!Clu_lW(N;Z}ZmW-MrALhW!=~LNZ(y0uUFP7NHj4F6WGb zs{{FiEDmwtauy$+?}RTJ^(6`{?k?>zZ;k}iFEut>o zlAqr5M2QyluloPO6WSxNLw~E|0dN0}puo8Z=5!gv*cQ)Cw5EdKqecZ3D&Uu=HDn&m zza$S96fy-0m@$Q#isVz#(gMeC6h!?d7E?{cebNqz{I6AlEh;q?ImD&YBTEV&EX2zJ zF>N8Q+E~|thgWjhx++MR5sXds^*nv=i_W58?Ta1K36Ow&`&Vv;&D-5!p=>f&wtOCT zh7?E28PgozP#}3y&hILY+<{x*pP@&ivKFhsyF+mR^6&Z% z4~2jvJ$C5>iuG*l5@L-J8~enpfZBnVrJ3MLOmpCMB)HNg+Z|9RR|MTbc!6AaS$(h` z)d}(Z$5KL55cEZ|!w^Q@Wn~!s{ee*HPP`ca^GOyg`Vi1nC1butHp?*(hMZ;~tBA05 zB>ehoYiEZYkG}dpS^Vg5PN}`BP9ycByXCFhOi@Oqhwdf4>V53%w;VcVud+4PA~>sd z{?434PQZ1iAGP)WjLNJCQcya`SHCqHbjbr#m@BXjg5v+z5wh~ZwlxdSOIr90<9|j? zgN_K|9n^4FZ*enz%x;0Gd;2%T$>P?>}X!$H?>o-;apkA!ws8^Y%RiO=iB`SrM;08TjoHzS)?d*jB+ zh&9%Q_wVy}b`t*|;Q;`zmKq`bAgo2|RE_jMoIB0vch*%_H6<|87MY zbIBKeV+cbbbexU+#Hb9`U0x0k?zVqLXr+BFZTk=NnEUxpTO<_0&9S$Wy6it$hdBG` zL4_fEuZR96_9iaG#fIC+2M~~a<=>JRxK@NnqM?ky9$(+}NV0^w(>P`^Z95%n{Id0W zxWRRLjrS-(btk-J=26j-SQ|3OldK)Il@Rzi?#s^+*1pyCUujJ1SKmq?IV4&E%|6+6 zfKw!+(F&T5TaU0`Nb*8eoPj`?-nmT39}!be&qh>V-~F|@sp%1LYbfDXXlOjm5NJI- z*1Y4W`t)01cO&pJe0MzIC6k;GC ziG{z^u}Fg@j`oVSmCk!ipoD;O@-MoQkwpMnZha8**ysT6o=%YEM;psRx9vZhp@rv4 zHHz0->bCjUJx!nk{>lLZgJ*epvEj?RBE?5zV6{dKLYC0E^XJ_K;<^aC`tVnP8@YuoFT+R+y=$S=X6jsGXG?;E5$+O7{GG#3v(F*j)gk)oDkn{BMuFEf_`tNuu@M_7r$Sf~CE3}+sQ^EZ|@^w}* zkorH`7OE6h1(09l7eWUb1bJ1EK-cG7PyLEU6FoEqYGHic?Ch5;qBOac&Zgp98%X*C zc%X_WpRpTscf*U58?vP;8=w zo0Hjde^qpI^MQR2wQ=G~5cW#}LKa12FJhG$-suPf1mvIrgidh9^v-B$h-453t3bVbBpRDuJ`2gs6KbO zfo6*Nb!YuiIXV5G`m5oLyXK_wMmw z_E?I3u@SSOZ|px}Lm0)wJ@tuP`uurfUBX>5oX!FhHgG};1&Ad| zCE3Q6xu~33z(_Uj2_yjL&z~oo&I&dhvFr-&!+IraurNYdSY?TI9-RfG?#CUqu(GkKsEJ*Um3rh|Rqe1w zlGhIOmxv1hK7LGB&^LF>k{BTs2oj(IraW@VogIlpQbJday*&P_4?`gV#hU(<$6A?a z7ojXbxrP=I5UcRl_SIYISNnv7JLr+ngdBh$gdM7_$ z1g0_V*%(J$u`h#(ePW>iS%uGDNp*+LnDzT=&SjE#6| z;Q|D$DCc2lPC--!Up8sGA$Wq;m`1g(qi;pQrW_Vg`Whe{kPHZZfUw3%tp4QRZJ3Le zj6Bq|E74OBgnH2;Vq!!~hyux01)0q6xh|XMUKPxH#8N}{tsqv~pGOrqQN&Cb0HLICzxiOYybKd4Mh)WBtE^npFmo9`UFcI0 zu2TjA8(Ivm&U~gYy$|n7PXR@tAkGDa7Nv_vRh=oItK|lUt2qo%TfrnU$i0&$35Vh* zq*=fx%7F_1<0n=+KrU;|L-t?=A?UTbWKkPdF@0JciUlad4lf(B0qqQZtQ~-*;OMM} z69><)g$CqdTMygFw_i0KTG4*DhIy}Fy^4>EdLoc*V)TE9paxE2Uw{ezm1bNo@Oju9x#~!ugXQvIi1p-4(PCy1JT` z%TI-}b=AhHK^g=}o&Z3`HA$zt*kG`9_?Pj7o_+~~3$7ckFX_FApbPU-uFK}#s&VV- zt10|rKKo*vv$b_4+deE&j$CB%7$8Q1?5}(90HHb|G3lY{!o)oTlv;ScB~xZE$?go&obnFaKi~oZ&!R%Ki~PtqTnV7K`C> zLw#D#T)&#gKGEy;Xpm=PHXa=k(JGEnSlytyNrprWU)Q8(|A}ik!9Xos;%(1nB$T2Z%VUI~%9R3qHIlejv*;9fZ0%S7@UEH~B zxl?F5A%$%rKLJR03mYAFNHQ>b|nG{vm+B8I>Xoz@4uG|0Z0_~TV}`$%b3M< zsLQ{)uLW?s6;>P2-EPY0>_I`}%mZ!=Ko?bx$_`YL6cIS`$N)$eRgCq0fnhkD_L2Tx z5?PEv6GU9Au0CF%8tOt4GGG(}DwGWW0R-=;9-+m&xbjfHLWqk@HR3M;IEw>Ja0M!e zxVY*Pdl|a<-*0dyo@OAK&*`4>Js~xgOJbzbp1P7i=b8H8v4Hh z*Y%385qf6EPns3FDz%==xJrXVG{x#R086}h{xN}EGQa9mdig~~$^3N)Ai|A8{vi1I zC80T#pn8L!oc(3@vZ3( zR1cC#^WEZCE`M#2pc!F_A&fS5NF&0r{P4t&1GiC}4u&#(j7Iwk)|G(*D+l26STB950LJPg zY&$fmV4EoZ^^ORIKuZ!V7mk93%$J0^gUZ79SuKI{V`{`0cc5B=CjsheL`jkKqQ*wg z^e=2YW`_{IB1x72LE8uodwV-rR406_1zbb=(!5I@xnreSwUyLa0+J$%YeOPTSUEKk zIKeVti!88pvUQ^RiJrN3v^2VB2O1_mcx7$C)wu$eq2;CUt!)v0w`hTEnRqQrs0PrRk*>E9n3O|6BJf8a3DBP#3v(JGRB4!k1 zyJ5b(VZ&=}3RSg8gy4`fAPqFU3C8mfYXw;K-Mc%%5!*~+j^^!|g%}qRY!46#)Gn8( zTlLI+i0>Abc^I4FMKPN8hgMikSeR(p8RP^DfWG6DO?^8C?L zK;jFG1n0EnRrd&Vyr9Q3$#OLC9u#=p@RKokAtwY+XJD!6haG+k155oerx4zlcp|04 zZk*Ax*s~-CLPBDrKo$n@R|~wCW<0Q}D+5g<&rj`v{m1%NUr&{Xd9PF@)lL0QFh@vv zazqK9o3xeZv{M?$az>E1_?gHUU-&?qs{f?(D0y%YtPPPij0MZ_;M}SjYnhs3370rd zYPc-dTpJQm7gznhb|LA)$eyflpsK0&!^|6#m)^_EBYsd+__2jj2E zyL~%s-hFGGFg==tBU)N|bP;${2^PGSHw9In9XJ+du}1@#1N2oy4nd41V73_5!qWXQ z7!Vc{lLpclcF(NeNNu%#OQFfJkrlPD%LXvNLl6L7TR4>uEy6>LzsQEa5Sr`Un(TAH zJ@7ZkmBL-r_x05{3GIzuQ`Nk^V3BpW?~}3yp!%ZM6QRhKUd%&g~F%zU< zq#6ut^I2N#nlkdi~hi1BgCk_rM;lIZ?|# z@#*tG!i?o5?4pH?wmv8|vPb_7G=iCTI@7fC_#!!Xgy zBEFoI63CfQ{Gp$!zn$(wVPNyr`TpE}RLYNG;z7YW$jji~gRcvL0cGg?wR(oT%7L(L zlHT^>9x`ZQMjG;7k8Tewnale^WXOY66;@S3*cF1@I|EoPAr8A?1H>^GI2o*Lz`Z`; z8C8gprsd`fGJG6U+Eo0p`;Lbej`-0wKdk>5$n~4ZmDSxen*jsl3LCSm;ySv2;A0(C zc5~0J?g%zc3B*K=q-E@WxSv@ncB=*$EONbwQ~)m~$;^W+&Zr1hHbca;n3(K`YZ3Dp zhTittg_7PWPCVNFiJm$TGoeJn1$^b(DeR^v{}hg>Hs4XPY2=UYPBX$Wh=&vyH#WcS zt*;Z#OEur|y3C;XB3M$K+g(%*WE6lwfs7bLRBlUc=FzzeA`D?bR`| z7{}nqKqkU$VXIu=Bh-l17=S@#E866dW&$}kFj7QH?`~>;Ff*Lo(2bZvc3@PP_Tlk- z$wiZdQ;A#`xi?C%%fQw0nX5w*!aZ|D7 z8oyG}`N0>S+e_52&1YW!Yzg1f$L|c^ELwZ!IJ{$cjnJv-1G)mpfYaIK-9rX!48XYS zGtrwn*4lr{v-j&hq$h-B(i8lkQpSG7iU`r>x&+U3# z#9oEI3SrvlR>?vN%+396!*471qMh+U^;c-%;W2K-fM7BNs>B;Pn% zp$5gL60!%Ewqhijf8MqnD+2SD31~xsalp2A?~2SYx6Q%#Xl$Rp%Zt@h`t!Ze2k5*2o{zGPLhn<#kvvlvH$Dh79KYGva}*aA!y*)0hxoFaV)chQ z=pkBgJs{aoqR_^b6k>}}S5ePs)l$?i*9fx^BW9}&z zsF1^$5wpiBA*A~Ky6fD<7G(!=TZ{_#(Hd}|5~d2lfy6x_EZiQXK;y!%-2UU|Y}c0~ zc1n^~cf6Z%6V}Gr`kYd57BAcJI<)WR<+@a()xz@!-n>fA&KHb3Eil=3Vd3)S?gvr?#H!>ugF5})rZxNc*Oep41W%SoGq0)?ecbIDiH zufCvABa5%{jyJG0sn_x2Ot+i5uxi&+Oh9N=07Rm5nC&rH9(lI;h5++_SL|Ex%4jhK zuLr2rpvImjXl_ru=jBPrGZLNMCgqwab!(T~k2eX&#OBJ?th{_+iP=q)4jtR&xMO(F zmix2=9qMp32v(W&0VX>1Z}-9AGR?^K}@l{WL$9Gf>q7l;SJ`ga%_SrvZjYNcdC_4&w-KQ zRU`762n2&)hU^E+F2-^ALP9*kASbiKJ@07nS>WPSY(dJlNkSzaRlIly!Po2jfAubFqwHG^zyZ7TH>R_%EB*R zz6}iSHdA?CcRekwCn2&f)*A!?XaY=wWDV0RCpLFi#DHZpQt;-W z>?B|ud24Zu<-oZv7jM5KU*C@`nUf(zq2zGX-a1*==zK?M|4Atd%J7kp+|Rucw~udC z{6nm*Jk8=*)TcYD*&~f5)2q)JNWrEtI5pa~A4d+_Nu1>rcLoGop!$ML9dR8>r`f)(j{mdi-S!vM0BH{B*?qEyX^aJS|*i$hN zL^8$=XySl#Egu&N-Aqa+dJ^S88n(3X4OcW{<6zeeZ;(_!jxX*MC@@nZv5;SXFfB-1&pUDAQbU5pj?B^ z9;rq~wW-{nQzxIQ?BzElYh>u(>?zb*!PQEMcO+lVEqELx7TWqlnKV zgfF?Av3LJ)t=fwh?tB!;=vS=m*f^Qu#z;{u5L4=~FB&ZyV&ebwW&bu0)i+u9vN$P@ zy@kOmO=N6jwh=8QZaCBxS-H6Yqatue6+=Nw9IC@io0XGuoW|pevs>Hc<(oq(tLkcN ziOsEfC~X}s8YIYbDCqB?>0tPHbAs5w{hrkz#+S(Aq4Md?@!#{ddSJk<^rSt`aqLiz zFvy}WeQG?9c^FoEFS=y`CjjLN{DLE4S#xhb+|)zT5WOdN@{C zDKxvBu6GP5?>3N6YX?3+Bwe7|(a>S!A#uF;W^k?p`*1w{xWf%r2*l?h_w7&ys1GKI zT&M4!)9Z=lMMx;e54v2~40Mpu&@-BcZAZA^fbp>>1rP*$7hp&s?t@wt%g8Xs;)I9X zU&yCOE*vU4yybX^oBLSnkH38J0^Q~rkgX){3^g*IUoZA4l5UYj09!ufX3tn%^{9(U z8cEK}fd1kMPEe)*S1`I_t@B!(nghd)wv1K1ju;1o){z+m%@(`T)t2VwffTJN*0;_( zm%Sa|r5d-DU5jM0tV!jL-A8ek;UxejTUno*B=6JKVKpm-%ry&LeVX@Jh2fSfXS4NsE7zr ze<0sx@@JhN(kY|sN-}^S5nU*S|Ki(EVzx+og|*@cQoslV{^bYRmPhggEm^5cot>TS zKy#vOt?N7!s>I(3Rn&dIYFj4Yd8TsarW!-4-bLbI@tP1qLEIG!Qd1AdB*P5CumAJU z@k3blX&CLsKfm+eU;V3}6L1B&*Pm9eq&cL1}qmlVjb5HG)3x zC+8lWT*!@3C~i#(|2NvgMi8nJxoaI%L~^F1Co3cUtcwqRdf3@hWuhdNpT0*aR&{X? zLU2e37S0|@S{#nJ+Dmc-#2l1#ZBsQNC+9=ZN$lqY@9b4 z18W$h@fEOH;L;ZD=bzu0x4bx4beBUjK=RKRF?S~H;*+_#q#2@53fvos-CzkiK#EcMw|*E zTc2d>c8I@YWkqgk?JVZfGc(r<*qFH{KJ#sF=B^`d>aC#$Wle2A*J$Upt#TP1v!0qv zH-t9B>qo~TgOp{C<}*LbQ%q(s(#d)#;&8+z0AT|g*4VqjM^RkI6OYOEY)FX~vz=Fy z5$ZmlnGt|5362F6bwpRN&MfIHxQp2~oy1OIqyo|pC~OFF2b6&sG|iYhnxBjh7PS40 zDd-$j2TG{Am$j;905hr-SI`D(7B;Icap zJk=W4>TX_{Gj|J}&};hk1}&$t4A{J<=-Y#B%>%(_5P z7gk>FhBT4`YAq~gL^eM-415wGcYLIZii*!j&!QB$@HcQBA;ZwG{s~o2_ouo&Jf;fHs z#47Q&URVMU@kmsEsi`k|h6z5XZ#L03aY_}gcp$&XXdA_$u z)M(wg6A|h@qc}P`N}y7L97r3&VRj%iWfc-CNeDhfVSMu%c#(Y(E9nn(7^vE#MBi0W zRxX0^ac1(_3Q`^q&xQo%zCU?-FFqg2GB=&X+5_zLaGT4q$7%-+u4hSHL;%kH{P*{o zcyJ=1sG)D2i+&Yl3;YoX)fwH%1pQcBpt%r+;ueyo4e^0wobHO*6AoZ^$#a&Nd%&Mg z=iW?zRa4sWo|EY;CkC3tpI$F1?|j zfYw2}VMWRrvbo;PEvodIrV-Yof;p*oeB4|g znDhaH7IAVOF50KJh~Q4JZh+VZd}>um0ekxHn;4tt7+KzyRCiV1Xsp zm~G3u%R2b)7O%A@lmVci&Ok>1nFfY@bnohm z&$2-whj{@1i72_GB-yCYuGEL->m@3C`};fV+B7$sX0?C5yY|bt(Voi=zUX`|#C*o1@Zt5g+6J##3cmh`4 z3=K_>288FohvnzzZmy>DjEV{Czr5t*jor8FN}NH2*x2jkXEMykyx=E<)sju5wY)C({T{=`xj^1GbFT{`Pa6h+u5*tI4lhuXStX>xzm~b8O zF|o8Q5w|X)_~N;U+Oh=Cqo1OSTm0wzc~O@x34pRfxat{)6M9s|J>&Q&rSo6Dd?B!u z@_s#sBaDC;5{F_RD%8*ocW*SFZn2y{ZMazt?MHTR?m*CNA!EO&h@h(`PynAnE^Ik$?^d!lH#F+oleqq&;y{i_O_GKp{z7c(R zLO1J|#sq~L5NC7gL2DE{WnnhmFgYxzT{vHc3S3N)7|@{hDsL@#a%I4iXHPB#n)O*N z4_6Ab=-r!{qt?;)ZRVV9yKcwQy@fgZ&Lg`Q<<2XU3%9&d@;{+g?3MlYTbQY&A+P_t zE3B?(c!7P7o=GPFAtXj$IBmp)9}0$?u}PsoGDdvV=+_{4gPemD>RVkPij!+(VygMK zw6X>3Vn(EZ^)@%nzr-b@XJLj)TlXc9&Y--w)OMjriGd_Yg5SjNK-8+Q4=aM}4&5Ap zoFk;h`hGZv4O9#gLYvR4<+1-_H24xApC&aBpBJ2?T0(UM#EI;)g&el(5z_y*B7h%|9hKWRWqw+Yc^<^9~yvAY{QB z-iVPbuXQ#rOtK+GC7YxGB+tEJ6(FH}@kMa`n>Wljh5^5!s*(M#bzkPfGy-ooam{gnZ>R3&-u%53G4{kdD(6V`ENE3O?ld)`{qO+1fW{ZIBMA_L0#AO} zpU}@B_dsI-6!@kiC8;r&k)>V~^NfPv+7-S=Sf_@~0kgFu-f@FIwrP>dfwn_g*{xgF z-ueF8qo$d$A1{dQb2_00z6@*x1WU59FwIN zZ2{n%oSHf^)=5v;PY!y14x=4}6-4<<4;hAm_rbR1Jg)o2ZjiG9^s-%L5L6TbFG>{9ILUJoU16l*RdvUUm|?^NIZ+eGI>D-h=>f)`VsDFcvz$`}BoEpKppaEIqF@1`rl(fJ z%FLIHRRnXYwiGx>cem;$Q znf+P2NXi^!dy%MG0Wa@@yT%GS649lI7K@1io=o$a6v-9B^P7Y2%z~>exvuwOyQIXl zTyJD#^lwYd)zzb#Df@F?0+SPtgVYW z#=?G(B~Wx40#Pe6nM`N9MBpx-n=B3Pp7_?W7)hu5vIL8BW|1!9N3O(QoW^PG&VAN=`NEGodb{ROl_2h6RWo%aa-oo4t zr7$**%*qM{hKI4xkHCP02Vob)D2j;=^Dg?%L(T8rJ=U5m*NSfvSmTNf95}yGP>A$! zO?NodnYj4%C+Yr|-KP1lvHrUzd=74zyM(?cI17^(#FYZWl3F4WAN;24W>|OZ$kAbQ zWsZVz8E>zse(MxE4amRH6B~P8}1vQ^O>}ukz@1|m4!?qcc z4vyg(wZ!(Kcp|(%v%c;myLgqTo)Q3A%&AWC7~Jjx$=J65XuN;kW)JQdCw~_v#C=D9&S#Ci*QqWft_U z@W&CgeurE9gcC0h&q?jjTTIz+opt1({{nxloxZM%j7iY;CM181NB%!#lN1V?Qn0Kh zzVD#<81gQ9lQDSv{Ad7tABaQMz5Hoa&lJ=tSPrM};PB~oVjC(huu;%rFmHKra?<6S z-1WgYJMM>B{Ujme3>1UwgO80_`*$W5(RX7&cSFR&v~}{_EbTSROM)O2^P9?;8NOH9 z@L6`>jfO*DVud3rR$cKq4j_GIxMW%gxBAp*L0f{b8eI25#1;u3EY4vES6&{o3oG#4 z1!GD!jyH?mBu$|#iMgGWsK@^#dSSZfYp@2tRN0s$-gvJdF_8T;)BW)6;|TD>x?jz; zau7>FDng;at)dyz%7tUgwfHA9&U&(aIj-cVC_EvMi4no!ks}-+fiW_T-DzAbNi!)I z=a$URgu@29Que2g+iqVJG{C%%oc&Bh!cm~DlGUv~F}iBc>i-H2;k_Y>7osryTpLF^ zowBmBgY%+%mWQG}gAz05eI!T#^4o&*M8zgcxA1sjK1RG@7@~UMWw40*Y@nz21d+{p zv9My`&M3-pZC(;HH`yNF6fbFWXJo8P7!5)4+fqN-vZ3(d%q5K;R5IA`LO2GDiNF&` zBEg9h3n0C9?adl9#V-lv7d%%7SN_DEvO|Z679Qscfr~LP;(8I$JRseG3Qyz#X`;^L z4?$xOg-+@1_to~23C*LwW z{^X8i?wP6E2LpT*0JK1Oigi;*;xlP-0Q>>qkT48@S@mSkj%23%%^S96LQ^|7Sh)!7)m$@v z$a0834F}r0!V`R;bg^U(Odw2+KK(y%qQGEkakhq~f;Tkf-is^F%FPRvMYg`^K8Gjw zt@E6>j~HHUnd5Pf$H7=MzuA2rU$N`=w^)|~*an0!CfZDNZIGlu5Q5gk4#JJLQxiu@ z6B)?u>htI35ree)*SR2^t-uH??H3%8%EFrqzuwEq&kvs&i=2TIK=1hRoROoJm&sSf zNddDwup%P3~xWtD^Y@`c7i^ZQwj{T5bbm0Pn2iUG=TODjlgPpT;dYpgXr z7zt4o#D*m41Y|1kz8o=rjJbt{^D`RHwoUbUrf72U@FbM<99X|{UX~Ls|VFmWYPQi7ixZj}Sx5pc-hb5DA0)O<%ov_eQO>ssR zv?R!Py0Gcbr26$D5xR8Q5eCWt15X$!mgEo63&^)g!Cvn}Xo{B`YF^wk#O`2uIY%rSuht}B=F&ye1M^hW)c%S3 zG>c08rKwuXv*s~^^`^gOOtV2YLq0(+Txj~sCOxV(4h!EVqV;IS8-~^cb4T%3d3sAXOg`JOZ3(|1o)W@2Bcs*V zt?CN$ih&#L_8vd08Qo;3oOI*fJobj`j`4{bVX-i?P5kS2&qb`hDK>KBw)O7srsmtF z*rP8W=N$m{+HdK+Jf&0`rH<~mx{PoJ`ZJ%$n%!VDnDunv+`#ojG3=!+?N?wQyTx(^UA zk;I&XhYFw78Cx`zl_kKK91nUi;7rg!e zmnle5^bZc6i}@Bskw}4MEOD}?px>3uZ^uxgbnV{TZ?amE04@+XM%ru&C`_D7kKv-q zf<^(myo-upN@n=zu@i_U7*hP^gRV0pu4BEferIu2QG#)Hx$Q6)DjJ;JicVHbC?tjV zm{AR2K#d>PS0?wKqr7Ce8^cxU=x>7LkqfPMQh`DCqRI&n^5Zb_-lm*wsAxNgW6v51tT1qIWUf1 zMen(;iK8RBe3B!u<8JLwoG3UNnkTy5^WZ^DzGV2RZ7uL-?3;m7}!Lwt~uRl zvu)yPCl~;?QI|gD5>$4W(R+{8JDT_Cpb$O!hb*a4hGh;W1!I+KU*JA~o9*y=K0LGl z^znrN&q1?@&jx#dF0%Py8+mGrd{|9<7mn{=D}lCJvDX?J;X{k8P8Rt)O3$Y_7S^AM zc-?5quRr0_8KL@W_0&Q^S_k*%n-%OHC!a1Ws`|4b^vni||JuOFq^gylZHnc_PI;)Q zW&ZSLpuP4-Q1>5OZU)quY~3m_xh}#$3Zzxia7keeB&q&;7R1-@8tYkwX9MafyjHTs z=|x3QOpB3uu^*KKnlL&w=K`rW=ncRv(A6|o7TNTNWv`8_+@7gKTH7tch{t{2g!T$2 zGw2;RH#hPU;0PpPTX*krP_TvlI{X;_A7Rqki!bby9esr>Csv?QM#;-5_zA1zZpLvW zVnWR8`E|F{1r~Uapg+cgiRTeUT=N~l@F(;=I!g;JnVBfT+BKr|FPW?n_Ej;v z|6hAo{txxOhextRw(K$y4$9JIAIGSu>m*B#IY?y*r_e|fF}9);DLUGZWJw{}4w5yJ zWXo|lCg~E+L8Os=8Jy?q-uuIS-TNmrulZqq;XCvBen0Qe`+2{g=XuY81d&gX=T{(~ zeCQe!9LWV6)&{dZf;s^ig0xGdB&)zQLkis1KtPr-N4ke<402gQzlR!0@DNiDiHzwM z{ueQ=kRm~Qa*P>2QNF3hWxQhuHrxn5&}{C7*%L&cno_mkM)TR*+oC6mo(fhC{%YvE zUbqHnR1sAg{aLm%1%38fpcuw0f*Fc%om10IFj%4DKymcZk&rc|RfL=TnA?0gyJ|0- z<}llvFy#lwpsdWuH{rS>znZEcO0Pt%F~u?iw}coTRz!{~Y0ytUkgyhNH|V}ttV?)a zzyyGDLv32PGwu zVL{^v)8xlb-SHPG>Wx_gPSE$kRxz7L7@NW7DC3>^7;G+}4__aw?AFFF<*90ItU6k)vUCbar9nUiaD6-*;u#2hp|rSrM_^R@8dw{MBDI|zZ*t8V7?9 zld^~viK2dw35IEzzkQr?ia2LyvbIvzrTJE}wI_ACG(^!Z?xv&c`isxgdN{KsZ6D97 zHG;6%Tla-!JT~1sIG3KMpS(D?IG?K4nrNvywq&qe6=E4}P!$(=Q4QvN6^@-} zIZIc}l;%X~%&~Y!yX7J#T0IlCui-)wS)T#jK>;Fpjy5&C3N^f50C?=o_5cfjHqbws z{`!4ct!XC|@J03V&&#zeHX!KWK!jOGO%k*6XkIA6MY=0r5h$0(5(FF4v7vw1MMNrA z66qe^v_$e32Z_E9eQMv9I4n;xGHRE|pH5*Y+&cH5Q-e8PDe}+fgvn$@ZS&Oor^g%P zX}l4B2F~M#d93VEVu06qQ&Z+KToT;>Hw-OOQCrh|G16aEBCRt*QYv>WbXsyMIJ8FC z3=GAH_dI6;1N8xF(7(M8uVA1%d?$+pLgWH!Kcs1jftS9eeu0DCiHx+N`tq{>P>({E zrdg=PAhP4I%($f#nu{o))4_7}U`r~cD!vNmY|^_VepyL*b6tx1*2gEQxlc4&2mMmY za=9ppqc#$fO@gJWK2U!b)}`rYDhzFC6g6%pi#{vUiJyLG_?D7L;w)T$Uav2^o|hO9 zh4k>{aSarQVYG`@2iNPX3rU!qVs%@C$D2+MA2r;byp_6Hu=*}lU#u-?K$tk2M==5& zdr#HQ|F@z@LJsK&Ac>c15(wC7LIV$eB#~atfqJ1yD`oK% z^-6u!>_DivuF%2ETzW*8Tf`Oj8HvkvFn0 zQpAWOQ_l=Dc?!OHW(Q+r(TE+50xj-P@fpG`%od%nBwawz-YylG@PhdRZVI%%)b>-ZXRH!}o~NdF`5B@Pos~r_!;@8AJZ86<^|Hzo!=^Jln=79I#AgdbtawKH$E=tN;`0 zA8Oa%_BceQ{rUNJkoQPWu&n|b)TK?d?Js7YfFTb389^CEy$Qu8gXz%4-)5KWe0_Wr z?^;6W1p~mHa|t9ZzvBPki<`Ewx~JD)yA)Eiuab zy4sqzh3 zLfX!Rgw01I;H+25qer|5#1D_|vo(|#F4FzOl@Ua~`A4zW(^1@=4@5Q29q`>pn63h^^Z0=fEn@cMz`kg)DP9>Q>cp7Y$8||%upU9qc;I^(g?C5 zNXwKKG?7k<@bcNX^Fc=?XcbPihI;OV=LX$?4>i@M4UZ0qiM7@D^>*UAU0_~qOE%tf z*W_Z|$Cxv{>(DlgZ5LN><}>wtlZ@j|n*z%`~a|QC3(0PY7yzjhDE(PZJ0_puQ{q z%GCoqo-`kP@Jg67B3+B!=d~<{Mo}1%84g>*Gnez;tkACf3&Wq~-i>OE!;68U zfX6_Tcnp#Z;jciYimY^KUXWGZ>b=pXFK0Pjyxqg`6&O`BC7rgOjc)&v_I;XHR4Pkf zy~um`UP3?U9(Ic5yODRb}BSWlx|*(c5jCVy{^Ozr%=E8JZwKC0Y}NAwsy73aY|zVByc#xO@?2SOD9 zI#mBqR>S*$XbX^*pj@ndd(?7aKUSk3O+^fZfp*80PeF`$NfKxE*AHJ8;p>yIx(ixX YL`Xgf^oXc!^CY}1%&p9F_qbg68|7jRYybcN literal 0 HcmV?d00001 diff --git a/bayesclass/tests/baseline_images/test_TANNew/line_dashes_TANNew.png b/bayesclass/tests/baseline_images/test_TANNew/line_dashes_TANNew.png new file mode 100644 index 0000000000000000000000000000000000000000..3f555994596929d4cb4d97e1c477d42fba9c1dca GIT binary patch literal 41803 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%0Az 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 literal 0 HcmV?d00001 diff --git a/bayesclass/tests/test_KDB.py b/bayesclass/tests/test_KDB.py index 41b977d..acda865 100644 --- a/bayesclass/tests/test_KDB.py +++ b/bayesclass/tests/test_KDB.py @@ -55,7 +55,6 @@ def test_KDB_nodes_edges(clf, data): def test_KDB_states(clf, data): assert clf.states_ == 0 - clf = KDB(k=3, random_state=17) clf.fit(*data) assert clf.states_ == 23 assert clf.depth_ == clf.states_ diff --git a/bayesclass/tests/test_KDBNew.py b/bayesclass/tests/test_KDBNew.py new file mode 100644 index 0000000..e8948ae --- /dev/null +++ b/bayesclass/tests/test_KDBNew.py @@ -0,0 +1,127 @@ +import pytest +import numpy as np +from sklearn.datasets import load_iris +from sklearn.preprocessing import KBinsDiscretizer +from matplotlib.testing.decorators import image_comparison +from matplotlib.testing.conftest import mpl_test_settings +from pgmpy.models import BayesianNetwork + + +from bayesclass.clfs import KDBNew +from .._version import __version__ + + +@pytest.fixture +def data(): + X, y = load_iris(return_X_y=True) + enc = KBinsDiscretizer(encode="ordinal") + return enc.fit_transform(X), y + + +@pytest.fixture +def clf(): + return KDBNew(k=3) + + +def test_KDBNew_default_hyperparameters(data, clf): + # Test default values of hyperparameters + assert not clf.show_progress + assert clf.random_state is None + assert clf.theta == 0.03 + clf = KDBNew(show_progress=True, random_state=17, k=3) + assert clf.show_progress + assert clf.random_state == 17 + assert clf.k == 3 + clf.fit(*data) + assert clf.class_name_ == "class" + assert clf.feature_names_in_ == [ + "feature_0", + "feature_1", + "feature_2", + "feature_3", + ] + + +def test_KDBNew_version(clf): + """Check KDBNew version.""" + assert __version__ == clf.version() + + +def test_KDBNew_nodes_edges(clf, data): + assert clf.nodes_edges() == (0, 0) + clf.fit(*data) + assert clf.nodes_leaves() == (5, 10) + + +def test_KDBNew_states(clf, data): + assert clf.states_ == 0 + clf.fit(*data) + assert clf.states_ == 23 + assert clf.depth_ == clf.states_ + + +def test_KDBNew_classifier(data, clf): + clf.fit(*data) + attribs = ["classes_", "X_", "y_", "feature_names_in_", "class_name_"] + for attr in attribs: + assert hasattr(clf, attr) + X = data[0] + y = data[1] + y_pred = clf.predict(X) + assert y_pred.shape == (X.shape[0],) + assert sum(y == y_pred) == 148 + + +@image_comparison( + baseline_images=["line_dashes_KDBNew"], + remove_text=True, + extensions=["png"], +) +def test_KDBNew_plot(data, clf): + # mpl_test_settings will automatically clean these internal side effects + mpl_test_settings + dataset = load_iris(as_frame=True) + clf.fit(*data, features=dataset["feature_names"]) + clf.plot("KDBNew Iris") + + +def test_KDBNew_wrong_num_features(data, clf): + with pytest.raises( + ValueError, + match="Number of features does not match the number of columns in X", + ): + clf.fit(*data, features=["feature_1", "feature_2"]) + + +def test_KDBNew_wrong_hyperparam(data, clf): + with pytest.raises(ValueError, match="Unexpected argument: wrong_param"): + clf.fit(*data, wrong_param="wrong_param") + + +def test_KDBNew_error_size_predict(data, clf): + X, y = data + clf.fit(X, y) + with pytest.raises(ValueError): + X_diff_size = np.ones((10, X.shape[1] + 1)) + clf.predict(X_diff_size) + + +def test_KDBNew_dont_do_cycles(): + clf = KDBNew(k=4) + dag = BayesianNetwork() + clf.feature_names_in_ = [ + "feature_0", + "feature_1", + "feature_2", + "feature_3", + ] + nodes = list(range(4)) + weights = np.ones((4, 4)) + for idx in range(1, 4): + dag.add_edge(clf.feature_names_in_[0], clf.feature_names_in_[idx]) + dag.add_edge(clf.feature_names_in_[1], clf.feature_names_in_[2]) + dag.add_edge(clf.feature_names_in_[1], clf.feature_names_in_[3]) + dag.add_edge(clf.feature_names_in_[2], clf.feature_names_in_[3]) + for idx in range(4): + clf._add_m_edges(dag, idx, nodes, weights) + assert len(dag.edges()) == 6 diff --git a/bayesclass/tests/test_TAN.py b/bayesclass/tests/test_TAN.py index ddba503..95ec46a 100644 --- a/bayesclass/tests/test_TAN.py +++ b/bayesclass/tests/test_TAN.py @@ -19,16 +19,16 @@ def data(): @pytest.fixture def clf(): - return TAN() + return TAN(random_state=17) def test_TAN_default_hyperparameters(data, clf): # Test default values of hyperparameters assert not clf.show_progress - assert clf.random_state is None - clf = TAN(show_progress=True, random_state=17) - assert clf.show_progress assert clf.random_state == 17 + clf = TAN(show_progress=True) + assert clf.show_progress + assert clf.random_state is None clf.fit(*data) assert clf.head_ == 0 assert clf.class_name_ == "class" @@ -47,21 +47,18 @@ def test_TAN_version(clf): def test_TAN_nodes_edges(clf, data): assert clf.nodes_edges() == (0, 0) - clf = TAN(random_state=17) clf.fit(*data, head="random") assert clf.nodes_leaves() == (5, 7) def test_TAN_states(clf, data): assert clf.states_ == 0 - clf = TAN(random_state=17) clf.fit(*data) assert clf.states_ == 23 assert clf.depth_ == clf.states_ -def test_TAN_random_head(data): - clf = TAN(random_state=17) +def test_TAN_random_head(clf, data): clf.fit(*data, head="random") assert clf.head_ == 3 diff --git a/bayesclass/tests/test_TANNew.py b/bayesclass/tests/test_TANNew.py new file mode 100644 index 0000000..2208f26 --- /dev/null +++ b/bayesclass/tests/test_TANNew.py @@ -0,0 +1,121 @@ +import pytest +import numpy as np +from sklearn.datasets import load_iris +from sklearn.preprocessing import KBinsDiscretizer +from matplotlib.testing.decorators import image_comparison +from matplotlib.testing.conftest import mpl_test_settings + + +from bayesclass.clfs import TANNew +from .._version import __version__ + + +@pytest.fixture +def data(): + X, y = load_iris(return_X_y=True) + enc = KBinsDiscretizer(encode="ordinal") + return enc.fit_transform(X), y + + +@pytest.fixture +def clf(): + return TANNew(random_state=17) + + +def test_TANNew_default_hyperparameters(data, clf): + # Test default values of hyperparameters + assert not clf.show_progress + assert clf.random_state == 17 + clf = TANNew(show_progress=True) + assert clf.show_progress + assert clf.random_state is None + clf.fit(*data) + assert clf.head_ == 0 + assert clf.class_name_ == "class" + assert clf.feature_names_in_ == [ + "feature_0", + "feature_1", + "feature_2", + "feature_3", + ] + + +def test_TANNew_version(clf): + """Check TANNew version.""" + assert __version__ == clf.version() + + +def test_TANNew_nodes_edges(clf, data): + assert clf.nodes_edges() == (0, 0) + clf.fit(*data, head="random") + assert clf.nodes_leaves() == (5, 7) + + +def test_TANNew_states(clf, data): + assert clf.states_ == 0 + clf.fit(*data) + assert clf.states_ == 22 + assert clf.depth_ == clf.states_ + + +def test_TANNew_random_head(clf, data): + clf.fit(*data, head="random") + assert clf.head_ == 3 + + +def test_TANNew_classifier(data, clf): + clf.fit(*data) + attribs = [ + "classes_", + "X_", + "y_", + "head_", + "feature_names_in_", + "class_name_", + ] + for attr in attribs: + assert hasattr(clf, attr) + X = data[0] + y = data[1] + y_pred = clf.predict(X) + assert y_pred.shape == (X.shape[0],) + assert sum(y == y_pred) == 145 + + +@image_comparison( + baseline_images=["line_dashes_TANNew"], + remove_text=True, + extensions=["png"], +) +def test_TANNew_plot(data, clf): + # mpl_test_settings will automatically clean these internal side effects + mpl_test_settings + dataset = load_iris(as_frame=True) + clf.fit(*data, features=dataset["feature_names"], head=0) + clf.plot("TANNew Iris head=0") + + +def test_TANNew_wrong_num_features(data, clf): + with pytest.raises( + ValueError, + match="Number of features does not match the number of columns in X", + ): + clf.fit(*data, features=["feature_1", "feature_2"]) + + +def test_TANNew_wrong_hyperparam(data, clf): + with pytest.raises(ValueError, match="Unexpected argument: wrong_param"): + clf.fit(*data, wrong_param="wrong_param") + + +def test_TANNew_head_out_of_range(data, clf): + with pytest.raises(ValueError, match="Head index out of range"): + clf.fit(*data, head=4) + + +def test_TANNew_error_size_predict(data, clf): + X, y = data + clf.fit(X, y) + with pytest.raises(ValueError): + X_diff_size = np.ones((10, X.shape[1] + 1)) + clf.predict(X_diff_size) diff --git a/pyproject.toml b/pyproject.toml index 9fa621d..b8c0021 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ dependencies = [ "pgmpy", "networkx", "matplotlib", + "fimdlp", ] requires-python = ">=3.8" classifiers = [ From 7b660977284036fafa53c5d44300418a010d91a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Thu, 23 Mar 2023 22:10:03 +0100 Subject: [PATCH 12/21] Add messages to check_integrity --- bayesclass/clfs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 566fb76..b6a83a1 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -532,7 +532,7 @@ class Proposal: kwargs = self.update_kwargs(y, kwargs) # Build the model super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) - self.check_integrity("f", self.Xd) + self.check_integrity("fit", self.Xd) # Local discretization based on the model features = kwargs["features"] # assign indices to feature names @@ -543,7 +543,7 @@ class Proposal: super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) def predict(self, X): - self.check_integrity("p", self.discretizer.transform(X)) + self.check_integrity("predict", self.discretizer.transform(X)) return super(self.class_type, self.estimator).predict( self.discretizer.transform(X) ) From ea251aca0578a573894335855df1887cf1499b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Thu, 23 Mar 2023 22:15:38 +0100 Subject: [PATCH 13/21] Begin AODE implementation --- bayesclass/clfs.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index b6a83a1..ca0baf0 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -510,7 +510,23 @@ class KDBNew(KDB): class AODENew(AODE): - pass + def fit(self, X, y, **kwargs): + self.estimator = Proposal(self) + return self.estimator.fit(X, y, **kwargs) + + def predict(self, X: np.ndarray) -> np.ndarray: + check_is_fitted(self, ["X_", "y_", "fitted_"]) + # Input validation + X = check_array(X) + n_samples = X.shape[0] + n_estimators = len(self.models_) + result = np.empty((n_samples, n_estimators)) + dataset = pd.DataFrame( + X, columns=self.feature_names_in_, dtype=np.int32 + ) + for index, model in enumerate(self.models_): + result[:, index] = model.predict(dataset).values.ravel() + return mode(result, axis=1, keepdims=False).mode.ravel() class Proposal: From 5a772b0bca6084240d8298a02acfdd8f4165387e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Wed, 29 Mar 2023 11:18:42 +0200 Subject: [PATCH 14/21] Begin AODENew with tests --- bayesclass/clfs.py | 65 ++++++++++++------- bayesclass/tests/test_AODE.py | 9 ++- bayesclass/tests/test_AODENew.py | 108 +++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+), 30 deletions(-) create mode 100644 bayesclass/tests/test_AODENew.py diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index ca0baf0..852f127 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -382,6 +382,18 @@ class KDB(BayesBase): self.dag_ = dag +def build_spode(features, class_name): + """Build SPODE estimators (Super Parent One Dependent Estimator)""" + class_edges = [(class_name, f) for f in features] + for idx in range(len(features)): + feature_edges = [ + (features[idx], f) for f in features if f != features[idx] + ] + feature_edges.extend(class_edges) + model = BayesianNetwork(feature_edges, show_progress=False) + yield model + + class AODE(BayesBase, BaseEnsemble): def __init__(self, show_progress=False, random_state=None): super().__init__( @@ -416,20 +428,9 @@ class AODE(BayesBase, BaseEnsemble): self.dag_ = None def _train(self, kwargs): - """Build SPODE estimators (Super Parent One Dependent Estimator)""" self.models_ = [] - class_edges = [(self.class_name_, f) for f in self.feature_names_in_] states = dict(state_names=kwargs.pop("state_names", [])) - for idx in range(self.n_features_in_): - feature_edges = [ - (self.feature_names_in_[idx], f) - for f in self.feature_names_in_ - if f != self.feature_names_in_[idx] - ] - feature_edges.extend(class_edges) - model = BayesianNetwork( - feature_edges, show_progress=self.show_progress - ) + for model in build_spode(self.feature_names_in_, self.class_name_): model.fit( self.dataset_, estimator=BayesianEstimator, @@ -510,24 +511,38 @@ class KDBNew(KDB): class AODENew(AODE): - def fit(self, X, y, **kwargs): - self.estimator = Proposal(self) - return self.estimator.fit(X, y, **kwargs) + def _train(self, kwargs): + self.estimators_ = [] + states = dict(state_names=kwargs.pop("state_names", [])) + kwargs["states"] = states + for model in build_spode(self.feature_names_in_, self.class_name_): + estimator = Proposal(model) + self.estimators_.append(estimator.fit(self.X_, self.y_, **kwargs)) + return self def predict(self, X: np.ndarray) -> np.ndarray: check_is_fitted(self, ["X_", "y_", "fitted_"]) # Input validation X = check_array(X) n_samples = X.shape[0] - n_estimators = len(self.models_) + n_estimators = len(self.estimators_) result = np.empty((n_samples, n_estimators)) - dataset = pd.DataFrame( - X, columns=self.feature_names_in_, dtype=np.int32 - ) - for index, model in enumerate(self.models_): - result[:, index] = model.predict(dataset).values.ravel() + for index, model in enumerate(self.estimators_): + result[:, index] = model.predict(X).values.ravel() return mode(result, axis=1, keepdims=False).mode.ravel() + @property + def states_(self): + if hasattr(self, "fitted_"): + return sum( + [ + len(item) + for model in self.models_ + for _, item in model.states.items() + ] + ) / len(self.models_) + return 0 + class Proposal: def __init__(self, estimator): @@ -557,12 +572,12 @@ class Proposal: if upgraded: kwargs = self.update_kwargs(y, kwargs) super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) + return self def predict(self, X): - self.check_integrity("predict", self.discretizer.transform(X)) - return super(self.class_type, self.estimator).predict( - self.discretizer.transform(X) - ) + Xd = self.discretizer.transform(X) + self.check_integrity("predict", Xd) + return super(self.class_type, self.estimator).predict(Xd) def update_kwargs(self, y, kwargs): features = ( diff --git a/bayesclass/tests/test_AODE.py b/bayesclass/tests/test_AODE.py index 6f5e9df..d7baf10 100644 --- a/bayesclass/tests/test_AODE.py +++ b/bayesclass/tests/test_AODE.py @@ -19,16 +19,16 @@ def data(): @pytest.fixture def clf(): - return AODE() + return AODE(random_state=17) def test_AODE_default_hyperparameters(data, clf): # Test default values of hyperparameters assert not clf.show_progress - assert clf.random_state is None - clf = AODE(show_progress=True, random_state=17) - assert clf.show_progress assert clf.random_state == 17 + clf = AODE(show_progress=True) + assert clf.show_progress + assert clf.random_state is None clf.fit(*data) assert clf.class_name_ == "class" assert clf.feature_names_in_ == [ @@ -63,7 +63,6 @@ def test_AODE_nodes_edges(clf, data): def test_AODE_states(clf, data): assert clf.states_ == 0 - clf = AODE(random_state=17) clf.fit(*data) assert clf.states_ == 23 assert clf.depth_ == clf.states_ diff --git a/bayesclass/tests/test_AODENew.py b/bayesclass/tests/test_AODENew.py new file mode 100644 index 0000000..9a7047b --- /dev/null +++ b/bayesclass/tests/test_AODENew.py @@ -0,0 +1,108 @@ +import pytest +import numpy as np +from sklearn.datasets import load_iris +from sklearn.preprocessing import KBinsDiscretizer +from matplotlib.testing.decorators import image_comparison +from matplotlib.testing.conftest import mpl_test_settings + + +from bayesclass.clfs import AODENew +from .._version import __version__ + + +@pytest.fixture +def data(): + X, y = load_iris(return_X_y=True) + enc = KBinsDiscretizer(encode="ordinal") + return enc.fit_transform(X), y + + +@pytest.fixture +def clf(): + return AODENew(random_state=17) + + +def test_AODENew_default_hyperparameters(data, clf): + # Test default values of hyperparameters + assert not clf.show_progress + assert clf.random_state == 17 + clf = AODENew(show_progress=True) + assert clf.show_progress + assert clf.random_state is None + clf.fit(*data) + assert clf.class_name_ == "class" + assert clf.feature_names_in_ == [ + "feature_0", + "feature_1", + "feature_2", + "feature_3", + ] + + +@image_comparison( + baseline_images=["line_dashes_AODE"], remove_text=True, extensions=["png"] +) +def test_AODENew_plot(data, clf): + # mpl_test_settings will automatically clean these internal side effects + mpl_test_settings + dataset = load_iris(as_frame=True) + clf.fit(*data, features=dataset["feature_names"]) + clf.plot("AODE Iris") + + +def test_AODENew_version(clf): + """Check AODE version.""" + assert __version__ == clf.version() + + +def test_AODENew_nodes_edges(clf, data): + assert clf.nodes_edges() == (0, 0) + clf.fit(*data) + assert clf.nodes_leaves() == (20, 28) + + +def test_AODENew_states(clf, data): + assert clf.states_ == 0 + clf.fit(*data) + assert clf.states_ == 23 + assert clf.depth_ == clf.states_ + + +def test_AODENew_classifier(data, clf): + clf.fit(*data) + attribs = [ + "classes_", + "X_", + "y_", + "feature_names_in_", + "class_name_", + "n_features_in_", + ] + for attr in attribs: + assert hasattr(clf, attr) + X = data[0] + y = data[1] + y_pred = clf.predict(X) + assert y_pred.shape == (X.shape[0],) + assert sum(y == y_pred) == 147 + + +def test_AODENew_wrong_num_features(data, clf): + with pytest.raises( + ValueError, + match="Number of features does not match the number of columns in X", + ): + clf.fit(*data, features=["feature_1", "feature_2"]) + + +def test_AODENew_wrong_hyperparam(data, clf): + with pytest.raises(ValueError, match="Unexpected argument: wrong_param"): + clf.fit(*data, wrong_param="wrong_param") + + +def test_AODENew_error_size_predict(data, clf): + X, y = data + clf.fit(X, y) + with pytest.raises(ValueError): + X_diff_size = np.ones((10, X.shape[1] + 1)) + clf.predict(X_diff_size) From 80b1ab3699c5a72da560495d17e6369c515cfbb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Wed, 29 Mar 2023 19:05:55 +0200 Subject: [PATCH 15/21] Refactor AODE --- bayesclass/clfs.py | 71 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 15 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 852f127..de78df6 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -382,7 +382,7 @@ class KDB(BayesBase): self.dag_ = dag -def build_spode(features, class_name): +def build_spodes(features, class_name): """Build SPODE estimators (Super Parent One Dependent Estimator)""" class_edges = [(class_name, f) for f in features] for idx in range(len(features)): @@ -394,15 +394,17 @@ def build_spode(features, class_name): yield model -class AODE(BayesBase, BaseEnsemble): +class AODE(ClassifierMixin, BaseEnsemble): def __init__(self, show_progress=False, random_state=None): - super().__init__( + self.base_model = BayesBase( show_progress=show_progress, random_state=random_state ) + self.show_progress = show_progress + self.random_state = random_state def _check_params(self, X, y, kwargs): expected_args = ["class_name", "features", "state_names"] - return self._check_params_fit(X, y, expected_args, kwargs) + return self.base_model._check_params_fit(X, y, expected_args, kwargs) def nodes_edges(self): nodes = 0 @@ -412,6 +414,30 @@ class AODE(BayesBase, BaseEnsemble): edges = sum([len(x.edges()) for x in self.models_]) return nodes, edges + def version(self): + return self.base_model.version() + + def fit(self, X, y, **kwargs): + X_, y_ = self._check_params(X, y, kwargs) + self.class_name_ = self.base_model.class_name_ + self.feature_names_in_ = self.base_model.feature_names_in_ + self.classes_ = self.base_model.classes_ + self.n_features_in_ = self.base_model.n_features_in_ + # Store the information needed to build the model + self.X_ = X_ + self.y_ = y_ + self.dataset_ = pd.DataFrame( + self.X_, columns=self.feature_names_in_, dtype=np.int32 + ) + self.dataset_[self.class_name_] = self.y_ + # Train the model + self._train(kwargs) + self.fitted_ = True + # To keep compatiblity with the benchmark platform + self.nodes_leaves = self.nodes_edges + # Return the classifier + return self + @property def states_(self): if hasattr(self, "fitted_"): @@ -424,13 +450,14 @@ class AODE(BayesBase, BaseEnsemble): ) / len(self.models_) return 0 - def _build(self): - self.dag_ = None + @property + def depth_(self): + return self.states_ def _train(self, kwargs): self.models_ = [] states = dict(state_names=kwargs.pop("state_names", [])) - for model in build_spode(self.feature_names_in_, self.class_name_): + for model in build_spodes(self.feature_names_in_, self.class_name_): model.fit( self.dataset_, estimator=BayesianEstimator, @@ -442,8 +469,8 @@ class AODE(BayesBase, BaseEnsemble): def plot(self, title=""): warnings.simplefilter("ignore", UserWarning) for idx, model in enumerate(self.models_): - self.model_ = model - super().plot(title=f"{idx} {title}") + self.base_model.model_ = model + self.base_model.plot(title=f"{idx} {title}") def predict(self, X: np.ndarray) -> np.ndarray: check_is_fitted(self, ["X_", "y_", "fitted_"]) @@ -481,7 +508,6 @@ class TANNew(TAN): return self.estimator.fit(X, y, **kwargs) def predict(self, X): - self.plot() return self.estimator.predict(X) @@ -510,13 +536,28 @@ class KDBNew(KDB): return self.estimator.predict(X) -class AODENew(AODE): +class SpodeNew(BayesBase): + """This class implements a classifier for the SPODE algorithm similar to TANNew and KDBNew""" + + def __init__(self, random_state, show_progress, structure): + super().__init__( + random_state=random_state, show_progress=show_progress + ) + self.structure = structure + + +class AODENew: + def __init__(self, show_progress=False, random_state=None): + self.show_progress = show_progress + self.random_state = random_state + def _train(self, kwargs): self.estimators_ = [] states = dict(state_names=kwargs.pop("state_names", [])) kwargs["states"] = states - for model in build_spode(self.feature_names_in_, self.class_name_): - estimator = Proposal(model) + for spode in build_spodes(self.feature_names_in_, self.class_name_): + model = SpodeNew(self.random_state, self.show_progress, spode) + estimator = Proposal(spode) self.estimators_.append(estimator.fit(self.X_, self.y_, **kwargs)) return self @@ -551,7 +592,8 @@ class Proposal: def fit(self, X, y, **kwargs): # Check parameters - super(self.class_type, self.estimator)._check_params(X, y, kwargs) + self.estimator._check_params(X, y, kwargs) + # Discretize train data self.discretizer = FImdlp( n_jobs=1, @@ -563,7 +605,6 @@ class Proposal: kwargs = self.update_kwargs(y, kwargs) # Build the model super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) - self.check_integrity("fit", self.Xd) # Local discretization based on the model features = kwargs["features"] # assign indices to feature names From 3af05c9511032ae7b43d6184a53270fa845ec587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Thu, 30 Mar 2023 12:20:56 +0200 Subject: [PATCH 16/21] First AODENew implementation working --- bayesclass/clfs.py | 81 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 17 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index de78df6..8fb028a 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -539,37 +539,68 @@ class KDBNew(KDB): class SpodeNew(BayesBase): """This class implements a classifier for the SPODE algorithm similar to TANNew and KDBNew""" - def __init__(self, random_state, show_progress, structure): + def __init__( + self, + random_state, + show_progress, + discretizer_depth=1e6, + discretizer_length=3, + discretizer_cuts=0, + ): super().__init__( random_state=random_state, show_progress=show_progress ) - self.structure = structure + self.discretizer_depth = discretizer_depth + self.discretizer_length = discretizer_length + self.discretizer_cuts = discretizer_cuts + + def _check_params(self, X, y, kwargs): + expected_args = ["class_name", "features", "state_names"] + return self._check_params_fit(X, y, expected_args, kwargs) + + def _build(self): + ... -class AODENew: - def __init__(self, show_progress=False, random_state=None): - self.show_progress = show_progress - self.random_state = random_state +class AODENew(AODE): + def __init__( + self, + random_state=None, + show_progress=False, + discretizer_depth=1e6, + discretizer_length=3, + discretizer_cuts=0, + ): + self.discretizer_depth = discretizer_depth + self.discretizer_length = discretizer_length + self.discretizer_cuts = discretizer_cuts + super().__init__( + show_progress=show_progress, random_state=random_state + ) def _train(self, kwargs): - self.estimators_ = [] - states = dict(state_names=kwargs.pop("state_names", [])) - kwargs["states"] = states - for spode in build_spodes(self.feature_names_in_, self.class_name_): - model = SpodeNew(self.random_state, self.show_progress, spode) + self.models_ = [] + for model in build_spodes(self.feature_names_in_, self.class_name_): + spode = SpodeNew( + random_state=self.random_state, + show_progress=self.show_progress, + discretizer_cuts=self.discretizer_cuts, + discretizer_depth=self.discretizer_depth, + discretizer_length=self.discretizer_length, + ) + spode.dag_ = model estimator = Proposal(spode) - self.estimators_.append(estimator.fit(self.X_, self.y_, **kwargs)) - return self + self.models_.append(estimator.fit(self.X_, self.y_, **kwargs)) def predict(self, X: np.ndarray) -> np.ndarray: check_is_fitted(self, ["X_", "y_", "fitted_"]) # Input validation X = check_array(X) n_samples = X.shape[0] - n_estimators = len(self.estimators_) + n_estimators = len(self.models_) result = np.empty((n_samples, n_estimators)) - for index, model in enumerate(self.estimators_): - result[:, index] = model.predict(X).values.ravel() + for index, model in enumerate(self.models_): + result[:, index] = model.predict(X) return mode(result, axis=1, keepdims=False).mode.ravel() @property @@ -584,6 +615,18 @@ class AODENew: ) / len(self.models_) return 0 + @property + def depth_(self): + return self.states_ + + def nodes_edges(self): + nodes = 0 + edges = 0 + if hasattr(self, "fitted_"): + nodes = sum([len(x.estimator.dag_) for x in self.models_]) + edges = sum([len(x.estimator.dag_.edges()) for x in self.models_]) + return nodes, edges + class Proposal: def __init__(self, estimator): @@ -593,7 +636,6 @@ class Proposal: def fit(self, X, y, **kwargs): # Check parameters self.estimator._check_params(X, y, kwargs) - # Discretize train data self.discretizer = FImdlp( n_jobs=1, @@ -613,9 +655,14 @@ class Proposal: if upgraded: kwargs = self.update_kwargs(y, kwargs) super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) + self.fitted_ = True return self def predict(self, X): + # Check is fit had been called + check_is_fitted(self, ["fitted_"]) + # Input validation + X = check_array(X) Xd = self.discretizer.transform(X) self.check_integrity("predict", Xd) return super(self.class_type, self.estimator).predict(Xd) From c9afafbf606a2c900129228a3867ca6608b4e6cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Thu, 30 Mar 2023 21:03:42 +0200 Subject: [PATCH 17/21] Fix AODENew tests --- bayesclass/clfs.py | 26 ++++++++---------- .../line_dashes_AODENew-expected.png | Bin 0 -> 56050 bytes .../test_AODENew/line_dashes_AODENew.png | Bin 0 -> 56050 bytes bayesclass/tests/test_AODENew.py | 6 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 bayesclass/tests/baseline_images/test_AODENew/line_dashes_AODENew-expected.png create mode 100644 bayesclass/tests/baseline_images/test_AODENew/line_dashes_AODENew.png diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 8fb028a..e1983eb 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -607,25 +607,23 @@ class AODENew(AODE): def states_(self): if hasattr(self, "fitted_"): return sum( - [ - len(item) - for model in self.models_ - for _, item in model.states.items() - ] + [model.estimator.states_ for model in self.models_] ) / len(self.models_) return 0 - @property - def depth_(self): - return self.states_ - def nodes_edges(self): - nodes = 0 - edges = 0 + nodes = [0] + edges = [0] if hasattr(self, "fitted_"): - nodes = sum([len(x.estimator.dag_) for x in self.models_]) - edges = sum([len(x.estimator.dag_.edges()) for x in self.models_]) - return nodes, edges + nodes, edges = zip( + *[model.estimator.nodes_edges() for model in self.models_] + ) + return sum(nodes), sum(edges) + + def plot(self, title=""): + warnings.simplefilter("ignore", UserWarning) + for idx, model in enumerate(self.models_): + model.estimator.plot(title=f"{idx} {title}") class Proposal: diff --git a/bayesclass/tests/baseline_images/test_AODENew/line_dashes_AODENew-expected.png b/bayesclass/tests/baseline_images/test_AODENew/line_dashes_AODENew-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..054b92fa9fd8bd7392fa10bdb7e6cbfecc99962b GIT binary patch literal 56050 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 Nq4_(~0@&MC}+Zn7eBD0V;)*-ZbK1m){%a>mb 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 ZVjz2^@ZHJm$|XYhT4};$BpLk@_#d9+ydMAn literal 0 HcmV?d00001 diff --git a/bayesclass/tests/baseline_images/test_AODENew/line_dashes_AODENew.png b/bayesclass/tests/baseline_images/test_AODENew/line_dashes_AODENew.png new file mode 100644 index 0000000000000000000000000000000000000000..054b92fa9fd8bd7392fa10bdb7e6cbfecc99962b GIT binary patch literal 56050 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 Nq4_(~0@&MC}+Zn7eBD0V;)*-ZbK1m){%a>mb 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 ZVjz2^@ZHJm$|XYhT4};$BpLk@_#d9+ydMAn literal 0 HcmV?d00001 diff --git a/bayesclass/tests/test_AODENew.py b/bayesclass/tests/test_AODENew.py index 9a7047b..a843326 100644 --- a/bayesclass/tests/test_AODENew.py +++ b/bayesclass/tests/test_AODENew.py @@ -40,7 +40,9 @@ def test_AODENew_default_hyperparameters(data, clf): @image_comparison( - baseline_images=["line_dashes_AODE"], remove_text=True, extensions=["png"] + baseline_images=["line_dashes_AODENew"], + remove_text=True, + extensions=["png"], ) def test_AODENew_plot(data, clf): # mpl_test_settings will automatically clean these internal side effects @@ -64,7 +66,7 @@ def test_AODENew_nodes_edges(clf, data): def test_AODENew_states(clf, data): assert clf.states_ == 0 clf.fit(*data) - assert clf.states_ == 23 + assert clf.states_ == 22.75 assert clf.depth_ == clf.states_ From c6390d9da9ee901b636a2cd9ad5b3b9d1f67f9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Thu, 30 Mar 2023 23:23:23 +0200 Subject: [PATCH 18/21] Comment out the integrity check in Proposal --- bayesclass/clfs.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index e1983eb..8fc73ed 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -650,6 +650,7 @@ class Proposal: # assign indices to feature names self.idx_features_ = dict(list(zip(features, range(len(features))))) upgraded, self.Xd = self._local_discretization() + # self.check_integrity("fit", self.Xd) if upgraded: kwargs = self.update_kwargs(y, kwargs) super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) @@ -662,7 +663,7 @@ class Proposal: # Input validation X = check_array(X) Xd = self.discretizer.transform(X) - self.check_integrity("predict", Xd) + # self.check_integrity("predict", Xd) return super(self.class_type, self.estimator).predict(Xd) def update_kwargs(self, y, kwargs): @@ -712,20 +713,20 @@ class Proposal: upgraded = True return upgraded, res - def check_integrity(self, source, X): - # print(f"Checking integrity of {source} data") - for i in range(X.shape[1]): - if not set(np.unique(X[:, i]).tolist()).issubset( - set(self.state_names_[self.features_[i]]) - ): - print( - "i", - i, - "features[i]", - self.features_[i], - "np.unique(X[:, i])", - np.unique(X[:, i]), - "np.array(state_names[features[i]])", - np.array(self.state_names_[self.features_[i]]), - ) - raise ValueError("Discretization error") + # def check_integrity(self, source, X): + # # print(f"Checking integrity of {source} data") + # for i in range(X.shape[1]): + # if not set(np.unique(X[:, i]).tolist()).issubset( + # set(self.state_names_[self.features_[i]]) + # ): + # print( + # "i", + # i, + # "features[i]", + # self.features_[i], + # "np.unique(X[:, i])", + # np.unique(X[:, i]), + # "np.array(state_names[features[i]])", + # np.array(self.state_names_[self.features_[i]]), + # ) + # raise ValueError("Discretization error") From 9843f5f8db2f26254241ea66bc907ed5cf5f5579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Fri, 7 Apr 2023 16:22:40 +0200 Subject: [PATCH 19/21] Refactor AODE & AODENew --- bayesclass/clfs.py | 246 ++++++++++++++++--------------- bayesclass/tests/test_AODE.py | 10 +- bayesclass/tests/test_AODENew.py | 12 +- bayesclass/tests/test_common.py | 17 ++- 4 files changed, 159 insertions(+), 126 deletions(-) diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 8fc73ed..166a2d3 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -3,7 +3,7 @@ import warnings import numpy as np import pandas as pd from scipy.stats import mode -from sklearn.base import ClassifierMixin, BaseEstimator +from sklearn.base import clone, ClassifierMixin, BaseEstimator from sklearn.ensemble import BaseEnsemble from sklearn.utils.validation import check_X_y, check_array, check_is_fitted from sklearn.utils.multiclass import unique_labels @@ -16,6 +16,10 @@ from fimdlp.mdlp import FImdlp from ._version import __version__ +def default_feature_names(num_features): + return [f"feature_{i}" for i in range(num_features)] + + class BayesBase(BaseEstimator, ClassifierMixin): def __init__(self, random_state, show_progress): self.random_state = random_state @@ -39,10 +43,6 @@ class BayesBase(BaseEstimator, ClassifierMixin): return len(self.dag_), len(self.dag_.edges()) return 0, 0 - @staticmethod - def default_feature_names(num_features): - return [f"feature_{i}" for i in range(num_features)] - @staticmethod def default_class_name(): return "class" @@ -57,7 +57,7 @@ class BayesBase(BaseEstimator, ClassifierMixin): self.n_classes_ = self.classes_.shape[0] # Default values self.class_name_ = self.default_class_name() - self.features_ = self.default_feature_names(X.shape[1]) + self.features_ = default_feature_names(X.shape[1]) for key, value in kwargs.items(): if key in expected_args: setattr(self, f"{key}_", value) @@ -139,6 +139,9 @@ class BayesBase(BaseEstimator, ClassifierMixin): # Return the classifier return self + def _build(self): + ... + def _train(self, kwargs): self.model_ = BayesianNetwork( self.dag_.edges(), show_progress=self.show_progress @@ -394,97 +397,97 @@ def build_spodes(features, class_name): yield model -class AODE(ClassifierMixin, BaseEnsemble): - def __init__(self, show_progress=False, random_state=None): - self.base_model = BayesBase( - show_progress=show_progress, random_state=random_state - ) - self.show_progress = show_progress - self.random_state = random_state - +class SPODE(BayesBase): def _check_params(self, X, y, kwargs): expected_args = ["class_name", "features", "state_names"] - return self.base_model._check_params_fit(X, y, expected_args, kwargs) + return self._check_params_fit(X, y, expected_args, kwargs) - def nodes_edges(self): - nodes = 0 - edges = 0 - if hasattr(self, "fitted_"): - nodes = sum([len(x) for x in self.models_]) - edges = sum([len(x.edges()) for x in self.models_]) - return nodes, edges - def version(self): - return self.base_model.version() +class AODE(ClassifierMixin, BaseEnsemble): + def __init__( + self, + show_progress=False, + random_state=None, + estimator=None, + ): + self.show_progress = show_progress + self.random_state = random_state + super().__init__(estimator=estimator) + + def _validate_estimator(self) -> None: + """Check the estimator and set the estimator_ attribute.""" + super()._validate_estimator( + default=SPODE( + random_state=self.random_state, + show_progress=self.show_progress, + ) + ) def fit(self, X, y, **kwargs): - X_, y_ = self._check_params(X, y, kwargs) - self.class_name_ = self.base_model.class_name_ - self.feature_names_in_ = self.base_model.feature_names_in_ - self.classes_ = self.base_model.classes_ - self.n_features_in_ = self.base_model.n_features_in_ - # Store the information needed to build the model - self.X_ = X_ - self.y_ = y_ - self.dataset_ = pd.DataFrame( - self.X_, columns=self.feature_names_in_, dtype=np.int32 + self.n_features_in_ = X.shape[1] + self.feature_names_in_ = kwargs.get( + "features", default_feature_names(self.n_features_in_) ) - self.dataset_[self.class_name_] = self.y_ - # Train the model + self.class_name_ = kwargs.get("class_name", "class") + # build estimator + self._validate_estimator() + self.X_ = X + self.y_ = y + self.estimators_ = [] self._train(kwargs) - self.fitted_ = True # To keep compatiblity with the benchmark platform + self.fitted_ = True self.nodes_leaves = self.nodes_edges - # Return the classifier return self + def _train(self, kwargs): + for dag in build_spodes(self.feature_names_in_, self.class_name_): + estimator = clone(self.estimator_) + estimator.dag_ = estimator.model_ = dag + estimator.fit(self.X_, self.y_, **kwargs) + self.estimators_.append(estimator) + + def predict(self, X: np.ndarray) -> np.ndarray: + n_samples = X.shape[0] + n_estimators = len(self.estimators_) + result = np.empty((n_samples, n_estimators)) + for index, estimator in enumerate(self.estimators_): + result[:, index] = estimator.predict(X) + return mode(result, axis=1, keepdims=False).mode.ravel() + + def version(self): + if hasattr(self, "fitted_"): + return self.estimator_.version() + return SPODE(None, False).version() + @property def states_(self): if hasattr(self, "fitted_"): return sum( [ len(item) - for model in self.models_ - for _, item in model.states.items() + for model in self.estimators_ + for _, item in model.model_.states.items() ] - ) / len(self.models_) + ) / len(self.estimators_) return 0 @property def depth_(self): return self.states_ - def _train(self, kwargs): - self.models_ = [] - states = dict(state_names=kwargs.pop("state_names", [])) - for model in build_spodes(self.feature_names_in_, self.class_name_): - model.fit( - self.dataset_, - estimator=BayesianEstimator, - prior_type="K2", - **states, - ) - self.models_.append(model) + def nodes_edges(self): + nodes = 0 + edges = 0 + if hasattr(self, "fitted_"): + nodes = sum([len(x.dag_) for x in self.estimators_]) + edges = sum([len(x.dag_.edges()) for x in self.estimators_]) + return nodes, edges def plot(self, title=""): warnings.simplefilter("ignore", UserWarning) - for idx, model in enumerate(self.models_): - self.base_model.model_ = model - self.base_model.plot(title=f"{idx} {title}") - - def predict(self, X: np.ndarray) -> np.ndarray: - check_is_fitted(self, ["X_", "y_", "fitted_"]) - # Input validation - X = check_array(X) - n_samples = X.shape[0] - n_estimators = len(self.models_) - result = np.empty((n_samples, n_estimators)) - dataset = pd.DataFrame( - X, columns=self.feature_names_in_, dtype=np.int32 - ) - for index, model in enumerate(self.models_): - result[:, index] = model.predict(dataset).values.ravel() - return mode(result, axis=1, keepdims=False).mode.ravel() + for idx, model in enumerate(self.estimators_): + model.plot(title=f"{idx} {title}") class TANNew(TAN): @@ -504,11 +507,12 @@ class TANNew(TAN): ) def fit(self, X, y, **kwargs): - self.estimator = Proposal(self) - return self.estimator.fit(X, y, **kwargs) + self.estimator_ = Proposal(self) + self.estimator_.fit(X, y, **kwargs) + return self def predict(self, X): - return self.estimator.predict(X) + return self.estimator_.predict(X) class KDBNew(KDB): @@ -529,15 +533,17 @@ class KDBNew(KDB): ) def fit(self, X, y, **kwargs): - self.estimator = Proposal(self) - return self.estimator.fit(X, y, **kwargs) + self.estimator_ = Proposal(self) + self.estimator_.fit(X, y, **kwargs) + return self def predict(self, X): - return self.estimator.predict(X) + return self.estimator_.predict(X) -class SpodeNew(BayesBase): - """This class implements a classifier for the SPODE algorithm similar to TANNew and KDBNew""" +class SPODENew(SPODE): + """This class implements a classifier for the SPODE algorithm similar to + TANNew and KDBNew""" def __init__( self, @@ -554,13 +560,6 @@ class SpodeNew(BayesBase): self.discretizer_length = discretizer_length self.discretizer_cuts = discretizer_cuts - def _check_params(self, X, y, kwargs): - expected_args = ["class_name", "features", "state_names"] - return self._check_params_fit(X, y, expected_args, kwargs) - - def _build(self): - ... - class AODENew(AODE): def __init__( @@ -575,31 +574,32 @@ class AODENew(AODE): self.discretizer_length = discretizer_length self.discretizer_cuts = discretizer_cuts super().__init__( - show_progress=show_progress, random_state=random_state + random_state=random_state, + show_progress=show_progress, + estimator=Proposal( + SPODENew( + random_state=random_state, + show_progress=show_progress, + discretizer_depth=discretizer_depth, + discretizer_length=discretizer_length, + discretizer_cuts=discretizer_cuts, + ) + ), ) def _train(self, kwargs): - self.models_ = [] - for model in build_spodes(self.feature_names_in_, self.class_name_): - spode = SpodeNew( - random_state=self.random_state, - show_progress=self.show_progress, - discretizer_cuts=self.discretizer_cuts, - discretizer_depth=self.discretizer_depth, - discretizer_length=self.discretizer_length, - ) - spode.dag_ = model - estimator = Proposal(spode) - self.models_.append(estimator.fit(self.X_, self.y_, **kwargs)) + for dag in build_spodes(self.feature_names_in_, self.class_name_): + proposal = clone(self.estimator_) + proposal.estimator.dag_ = proposal.estimator.model_ = dag + self.estimators_.append(proposal.fit(self.X_, self.y_, **kwargs)) + self.n_estimators_ = len(self.estimators_) def predict(self, X: np.ndarray) -> np.ndarray: check_is_fitted(self, ["X_", "y_", "fitted_"]) # Input validation X = check_array(X) - n_samples = X.shape[0] - n_estimators = len(self.models_) - result = np.empty((n_samples, n_estimators)) - for index, model in enumerate(self.models_): + result = np.empty((X.shape[0], self.n_estimators_)) + for index, model in enumerate(self.estimators_): result[:, index] = model.predict(X) return mode(result, axis=1, keepdims=False).mode.ravel() @@ -607,26 +607,40 @@ class AODENew(AODE): def states_(self): if hasattr(self, "fitted_"): return sum( - [model.estimator.states_ for model in self.models_] - ) / len(self.models_) + [ + len(item) + for model in self.estimators_ + for _, item in model.estimator.model_.states.items() + ] + ) / len(self.estimators_) return 0 + @property + def depth_(self): + return self.states_ + def nodes_edges(self): - nodes = [0] - edges = [0] + nodes = 0 + edges = 0 if hasattr(self, "fitted_"): - nodes, edges = zip( - *[model.estimator.nodes_edges() for model in self.models_] + nodes = sum([len(x.estimator.dag_) for x in self.estimators_]) + edges = sum( + [len(x.estimator.dag_.edges()) for x in self.estimators_] ) - return sum(nodes), sum(edges) + return nodes, edges def plot(self, title=""): warnings.simplefilter("ignore", UserWarning) - for idx, model in enumerate(self.models_): + for idx, model in enumerate(self.estimators_): model.estimator.plot(title=f"{idx} {title}") + def version(self): + if hasattr(self, "fitted_"): + return self.estimator_.estimator.version() + return SPODENew(None, False).version() -class Proposal: + +class Proposal(BaseEstimator): def __init__(self, estimator): self.estimator = estimator self.class_type = estimator.__class__ @@ -635,13 +649,13 @@ class Proposal: # Check parameters self.estimator._check_params(X, y, kwargs) # Discretize train data - self.discretizer = FImdlp( + self.discretizer_ = FImdlp( n_jobs=1, max_depth=self.estimator.discretizer_depth, min_length=self.estimator.discretizer_length, max_cuts=self.estimator.discretizer_cuts, ) - self.Xd = self.discretizer.fit_transform(X, y) + self.Xd = self.discretizer_.fit_transform(X, y) kwargs = self.update_kwargs(y, kwargs) # Build the model super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) @@ -662,7 +676,7 @@ class Proposal: check_is_fitted(self, ["fitted_"]) # Input validation X = check_array(X) - Xd = self.discretizer.transform(X) + Xd = self.discretizer_.transform(X) # self.check_integrity("predict", Xd) return super(self.class_type, self.estimator).predict(Xd) @@ -670,10 +684,10 @@ class Proposal: features = ( kwargs["features"] if "features" in kwargs - else self.estimator.default_feature_names(self.Xd.shape[1]) + else default_feature_names(self.Xd.shape[1]) ) states = { - features[i]: self.discretizer.get_states_feature(i) + features[i]: self.discretizer_.get_states_feature(i) for i in range(self.Xd.shape[1]) } class_name = ( @@ -706,7 +720,7 @@ class Proposal: # Get the fathers indices features = [self.idx_features_[f] for f in fathers] # Update the discretization of the feature - res[:, idx] = self.discretizer.join_fit( + res[:, idx] = self.discretizer_.join_fit( target=idx, features=features, data=self.Xd ) # print(self.discretizer.y_join[:5]) diff --git a/bayesclass/tests/test_AODE.py b/bayesclass/tests/test_AODE.py index d7baf10..ff79665 100644 --- a/bayesclass/tests/test_AODE.py +++ b/bayesclass/tests/test_AODE.py @@ -50,9 +50,12 @@ def test_AODE_plot(data, clf): clf.plot("AODE Iris") -def test_AODE_version(clf): +def test_AODE_version(clf, data): """Check AODE version.""" assert __version__ == clf.version() + dataset = load_iris(as_frame=True) + clf.fit(*data, features=dataset["feature_names"]) + assert __version__ == clf.version() def test_AODE_nodes_edges(clf, data): @@ -71,12 +74,11 @@ def test_AODE_states(clf, data): def test_AODE_classifier(data, clf): clf.fit(*data) attribs = [ - "classes_", - "X_", - "y_", "feature_names_in_", "class_name_", "n_features_in_", + "X_", + "y_", ] for attr in attribs: assert hasattr(clf, attr) diff --git a/bayesclass/tests/test_AODENew.py b/bayesclass/tests/test_AODENew.py index a843326..7da4414 100644 --- a/bayesclass/tests/test_AODENew.py +++ b/bayesclass/tests/test_AODENew.py @@ -52,8 +52,11 @@ def test_AODENew_plot(data, clf): clf.plot("AODE Iris") -def test_AODENew_version(clf): - """Check AODE version.""" +def test_AODENew_version(clf, data): + """Check AODENew version.""" + assert __version__ == clf.version() + dataset = load_iris(as_frame=True) + clf.fit(*data, features=dataset["feature_names"]) assert __version__ == clf.version() @@ -73,12 +76,11 @@ def test_AODENew_states(clf, data): def test_AODENew_classifier(data, clf): clf.fit(*data) attribs = [ - "classes_", - "X_", - "y_", "feature_names_in_", "class_name_", "n_features_in_", + "X_", + "y_", ] for attr in attribs: assert hasattr(clf, attr) diff --git a/bayesclass/tests/test_common.py b/bayesclass/tests/test_common.py index d111d58..59cb953 100644 --- a/bayesclass/tests/test_common.py +++ b/bayesclass/tests/test_common.py @@ -1,8 +1,23 @@ import pytest +import numpy as np from sklearn.utils.estimator_checks import check_estimator -from bayesclass.clfs import TAN, KDB, AODE +from bayesclass.clfs import BayesBase, TAN, KDB, AODE + + +def test_more_tags(): + expected = { + "requires_positive_X": True, + "requires_positive_y": True, + "preserve_dtype": [np.int32, np.int64], + "requires_y": True, + } + clf = BayesBase(None, True) + computed = clf._more_tags() + for key, value in expected.items(): + assert key in computed + assert computed[key] == value # @pytest.mark.parametrize("estimators", [TAN(), KDB(k=2), AODE()]) From 74cd8a6aa2add471e138eae5eb752816820181cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Sat, 8 Apr 2023 11:44:25 +0200 Subject: [PATCH 20/21] Add local discretization tests --- bayesclass/tests/test_AODENew.py | 22 ++++++++++++++++++++++ bayesclass/tests/test_KDBNew.py | 15 +++++++++++++++ bayesclass/tests/test_TANNew.py | 9 +++++++++ 3 files changed, 46 insertions(+) diff --git a/bayesclass/tests/test_AODENew.py b/bayesclass/tests/test_AODENew.py index 7da4414..72a73cb 100644 --- a/bayesclass/tests/test_AODENew.py +++ b/bayesclass/tests/test_AODENew.py @@ -91,6 +91,28 @@ def test_AODENew_classifier(data, clf): assert sum(y == y_pred) == 147 +def test_AODENew_local_discretization(clf, data): + expected_data = [ + [-1, [0, -1], [0, -1], [0, -1]], + [[1, -1], -1, [1, -1], [1, -1]], + [[2, -1], [2, -1], -1, [2, -1]], + [[3, -1], [3, -1], [3, -1], -1], + ] + clf.fit(*data) + for idx, estimator in enumerate(clf.estimators_): + expected = expected_data[idx] + for feature in range(4): + computed = estimator.discretizer_.target_[feature] + if type(computed) == list: + for j, k in zip(expected[feature], computed): + assert j == k + else: + assert ( + expected[feature] + == estimator.discretizer_.target_[feature] + ) + + def test_AODENew_wrong_num_features(data, clf): with pytest.raises( ValueError, diff --git a/bayesclass/tests/test_KDBNew.py b/bayesclass/tests/test_KDBNew.py index e8948ae..b14d731 100644 --- a/bayesclass/tests/test_KDBNew.py +++ b/bayesclass/tests/test_KDBNew.py @@ -72,6 +72,21 @@ def test_KDBNew_classifier(data, clf): assert sum(y == y_pred) == 148 +def test_KDBNew_local_discretization(clf, data): + expected = [[1, -1], -1, [0, 1, 3, -1], [1, 0, -1]] + clf.fit(*data) + for feature in range(4): + computed = clf.estimator_.discretizer_.target_[feature] + if type(computed) == list: + for j, k in zip(expected[feature], computed): + assert j == k + else: + assert ( + expected[feature] + == clf.estimator_.discretizer_.target_[feature] + ) + + @image_comparison( baseline_images=["line_dashes_KDBNew"], remove_text=True, diff --git a/bayesclass/tests/test_TANNew.py b/bayesclass/tests/test_TANNew.py index 2208f26..406222e 100644 --- a/bayesclass/tests/test_TANNew.py +++ b/bayesclass/tests/test_TANNew.py @@ -63,6 +63,15 @@ def test_TANNew_random_head(clf, data): assert clf.head_ == 3 +def test_TANNew_local_discretization(clf, data): + expected = [-1, [0, -1], [0, -1], [1, -1]] + clf.fit(*data) + for feature in range(4): + assert ( + expected[feature] == clf.estimator_.discretizer_.target_[feature] + ) + + def test_TANNew_classifier(data, clf): clf.fit(*data) attribs = [ From f9b35f61f029492bb6a3beb2066949df215362c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Thu, 20 Apr 2023 01:20:33 +0200 Subject: [PATCH 21/21] Use ancest-order to process local discretization Fix local discretization Refactor tests Unifiy iris dataset from sklearn with iris.arff --- bayesclass/clfs.py | 69 +++++++++++------- bayesclass/test.py | 19 +++++ .../test_KDB/line_dashes_KDB.png | Bin 51400 -> 49872 bytes .../test_KDBNew/line_dashes_KDBNew.png | Bin 51400 -> 49872 bytes .../test_TANNew/line_dashes_TANNew.png | Bin 41803 -> 45222 bytes bayesclass/tests/conftest.py | 38 ++++++++++ bayesclass/tests/test_AODE.py | 54 ++++++-------- bayesclass/tests/test_AODENew.py | 25 ++----- bayesclass/tests/test_KDB.py | 51 ++++++------- bayesclass/tests/test_KDBNew.py | 23 ++---- bayesclass/tests/test_TAN.py | 58 ++++++--------- bayesclass/tests/test_TANNew.py | 18 +---- 12 files changed, 186 insertions(+), 169 deletions(-) create mode 100644 bayesclass/test.py create mode 100644 bayesclass/tests/conftest.py diff --git a/bayesclass/clfs.py b/bayesclass/clfs.py index 166a2d3..5868027 100644 --- a/bayesclass/clfs.py +++ b/bayesclass/clfs.py @@ -47,6 +47,12 @@ class BayesBase(BaseEstimator, ClassifierMixin): def default_class_name(): return "class" + def build_dataset(self): + self.dataset_ = pd.DataFrame( + self.X_, columns=self.feature_names_in_, dtype=np.int32 + ) + self.dataset_[self.class_name_] = self.y_ + def _check_params_fit(self, X, y, expected_args, kwargs): """Check the common parameters passed to fit""" # Check that X and y have correct shape @@ -64,6 +70,10 @@ class BayesBase(BaseEstimator, ClassifierMixin): else: raise ValueError(f"Unexpected argument: {key}") self.feature_names_in_ = self.features_ + # used for local discretization + self.indexed_features_ = { + feature: i for i, feature in enumerate(self.features_) + } if self.random_state is not None: random.seed(self.random_state) if len(self.feature_names_in_) != X.shape[1]: @@ -125,10 +135,7 @@ class BayesBase(BaseEstimator, ClassifierMixin): # Store the information needed to build the model self.X_ = X_ self.y_ = y_ - self.dataset_ = pd.DataFrame( - self.X_, columns=self.feature_names_in_, dtype=np.int32 - ) - self.dataset_[self.class_name_] = self.y_ + self.build_dataset() # Build the DAG self._build() # Train the model @@ -660,14 +667,8 @@ class Proposal(BaseEstimator): # Build the model super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) # Local discretization based on the model - features = kwargs["features"] - # assign indices to feature names - self.idx_features_ = dict(list(zip(features, range(len(features))))) - upgraded, self.Xd = self._local_discretization() + self._local_discretization() # self.check_integrity("fit", self.Xd) - if upgraded: - kwargs = self.update_kwargs(y, kwargs) - super(self.class_type, self.estimator).fit(self.Xd, y, **kwargs) self.fitted_ = True return self @@ -705,27 +706,45 @@ class Proposal(BaseEstimator): def _local_discretization(self): """Discretize each feature with its fathers and the class""" - res = self.Xd.copy() - upgraded = False - # print("-" * 80) - for idx, feature in enumerate(self.estimator.feature_names_in_): + upgrade = False + # order of local discretization is important. no good 0, 1, 2... + ancestral_order = list(nx.topological_sort(self.estimator.dag_)) + for feature in ancestral_order: + if feature == self.estimator.class_name_: + continue + idx = self.estimator.indexed_features_[feature] fathers = self.estimator.dag_.get_parents(feature) if len(fathers) > 1: - # print( - # "Discretizing " + feature + " with " + str(fathers), - # end=" ", - # ) # First remove the class name as it will be added later fathers.remove(self.estimator.class_name_) # Get the fathers indices - features = [self.idx_features_[f] for f in fathers] + features = [ + self.estimator.indexed_features_[f] for f in fathers + ] # Update the discretization of the feature - res[:, idx] = self.discretizer_.join_fit( - target=idx, features=features, data=self.Xd + self.Xd[:, idx] = self.discretizer_.join_fit( + # each feature has to use previous discretization data=res + target=idx, + features=features, + data=self.Xd, ) - # print(self.discretizer.y_join[:5]) - upgraded = True - return upgraded, res + upgrade = True + if upgrade: + # Update the dataset + self.estimator.X_ = self.Xd + self.estimator.build_dataset() + self.state_names_ = { + key: self.discretizer_.get_states_feature(value) + for key, value in self.estimator.indexed_features_.items() + } + states = {"state_names": self.state_names_} + # Update the model + self.estimator.model_.fit( + self.estimator.dataset_, + estimator=BayesianEstimator, + prior_type="K2", + **states, + ) # def check_integrity(self, source, X): # # print(f"Checking integrity of {source} data") diff --git a/bayesclass/test.py b/bayesclass/test.py new file mode 100644 index 0000000..fd983d6 --- /dev/null +++ b/bayesclass/test.py @@ -0,0 +1,19 @@ +from bayesclass.clfs import AODENew, TANNew, KDBNew, AODE +from benchmark.datasets import Datasets +import os + +os.chdir("../discretizbench") +dt = Datasets() +clfan = AODENew() +clftn = TANNew() +clfkn = KDBNew() +# clfa = AODE() +X, y = dt.load("iris") +# clfa.fit(X, y) +clfan.fit(X, y) +clftn.fit(X, y) +clfkn.fit(X, y) + + +self.discretizer_.target_ +self.estimator.indexed_features_ diff --git a/bayesclass/tests/baseline_images/test_KDB/line_dashes_KDB.png b/bayesclass/tests/baseline_images/test_KDB/line_dashes_KDB.png index 45f293b9ba4c65ec5575d96b2713a801e1f08a6a..376c3dea66574fc8269ebd7cbfcadf5028e2f704 100644 GIT binary patch literal 49872 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

      nD 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

      nD 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 YL`Xgf^oXc!^CY}1%&p9F_qbg68|7jRYybcN diff --git a/bayesclass/tests/baseline_images/test_TANNew/line_dashes_TANNew.png b/bayesclass/tests/baseline_images/test_TANNew/line_dashes_TANNew.png index 3f555994596929d4cb4d97e1c477d42fba9c1dca..b9fe3b0f4b2fff5e045771309ac622b9eb0717b6 100644 GIT binary patch literal 45222 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%0A7n{m2tkqX)e5Ui*J#%`cRtvm-uC-jO{ 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 WWSGsCP%9|-W1weDP1o5I_`d*ac>0k5 literal 41803 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%0Az zUAiQUskNPtds1ykse7vIa`7CfX(zY0k!yg9PrnH-#?V$LTqQ!gvZtJdUJDZ$3K}wH zfB*iK$9^XP5iW~OH3{iSDQ#cA_{-hUJ#RafS$;!K??Eh=EWgvphTOu!i)ZXdI5|1H zr{?H1){0(R87sLCiCmm62;a7FP}#*N9tp5B{mWzl9-_eKhXDUiDNchJid;A*h#VAz z@MFuK%L{#mJxI3Uz5}1Yyuq!-$=af3B`?6}dZF^&@olzHbusCQ49flcl0D}dYG#=N zH8EcT2!=4rm!ZE=N4(nZjpdb(auPI`D$!@DH3MA%38tfDcv3wSn~ zOxDxN@0+wfj_4@!;o&VIwN4>b37qYF7NY4oHy*6b?IFR{2ff!ih7>NXw#;p3K_Fl_=B2qa%v#l%} zr5ed9gjtE$jEqdlgerVI{M5lEHB7EjT`(yaQ(w($4m9(R$+*+H9)nBSd4+}HfXGKZ z;?1?S8IY@oQcmz!$j--#uz>`NihR{}+e1+qA0LOS_6n0+uex)*{SrTfATfv~B2^#` z2`-=gwBe^4Okh8^zHo>Wu#6)j{f^Zl9^*)czDEp(fUPf1S}(1}SRaC`VlSq+_KDfM zT-x3<=B~2VG120>snPw87cWZu-^xvzHtn!EP$6NhTSAWWA3L^;^E)-Y;=)`=br-{Vs1MP!FE@g#hJ(#hae7?Acj791g9I^zxZY zW6#*}r_O+NsV`retqK=I(Za68tn|RN9oTL;BAN(y;lCXhV3;WH+*vz)Ij{Ap`rjI{ zG?%K?T;87{d=k0kojV^Jyxo@gVY$GocV8~%b$ucA>vBGW^2!ap2O4M&hgXU9#zod= z-&>j=Z@``U^5u($y?xIErKkU|Lm@Z4dG4xS4A?#2%{h=T2gzi_I}_>x;d>*|v9zf6 z+?!XyLiSz8ppli&3!g8@_|8u-;sG(c5(ga|hDs)saZeweafE>LrmZELiz65h72sY~ zckQWSlIU9TnYxw(&n#%o?FjTUboOuMKlN~%Xq}_yy+*aL+u>_iLbX0R;NTNZAjG+jTF>@tlmNByiBuC1S3JD>Ekc6a?kWN7n4hKd?RB2n(|+qbWK)|=39 zZE{ZozXWyNB4|BNOmqYEVf(a8JDc|SRK@G4so9y!VnR=dopO#0@zrqnfvuh&^22E) z2lP3hVi6tD(+x3|NjBBT*D%!76xnPNW8Q(S+c9j|IADDIIDK?~@2(KYermeNSRTGn zV5%dZEtUb}ff3>wqzte#@AF=BE1A=<^~tbwKfAusSo;DZA*`exX0#e~Mws;luZ@VY z&O!abvMn$_h3MGmP%V$XaAhd5P;+?p^W<*UmBA&F`jPdfZ<8Bb+Drd7%g(P;4&m-} z%+DSiUTYi^xcZ4?^9N@)x0Ja&0Kcc7ztB!CwAZ_3l%eBaX)yEby_tshfPR|x=vb=7 z!3-{J-)PlgpEk@cx4iz$95uY`1o*X`U0pKj>eUfaH=(po2Lk*Xj^|$oRHYd1cc7CG zf?xq2-dU^EAi1rGWjd1eTBlD*d1bo~4Ri#HgKldxj{zcr%_UCo1YyFrb6VrYVGPE! z9mbx%ACM^gDOvu#j>|Uat?{N846Uy>{V-N~{%QO?`|}UxLdKHjhDkMCa{=cII7A}7 zj~2C;XfzAfFXe2Tp3W;jx!%yAD}Mvqi>F)WPQmlRueD7aqVCz(=Y+n&Bo9~^kT#hG zm5{xA6%pXx0=`r<*Hff`ksQ7-diQ507HFA3gi*8nC6a&?2ym+KXJ)$F@Z`|g-9T>< z)*uq2Cord&X!Yj+N`=~dZZc+m@@+9JE}!U)zIQh~{U^V3X~Oiq-ec544NGO`9xq;{&- ztT9S*e5CX!O%OX$$JSff+NRptRhIVNv(2Xe;AIxC;^45)>}+MCc+g*effxpK8N{GbyF zh(*iFF>Q&~R?|D-nO6F=adVj<-`k;Al0e*>1*27#z_+Yw)AA!8wVGaY2V{!iY#6qy z{ms(A3-!;vH2}U_2}inpD3!;vz|gMyO;&Pp@?VKRaTGRjgu1gU(HXd^F7=dvU7x3{ zmeyJzS%ic3tt4<$QPv^2FF=-t(irVEtRw3Ni9tkDQ)+WYN(v+38+bpVKS5_nikgyB z5C(?wST@wv#S)_Ns!N>rL0vm`@1Xj8b4^XWu%v(SNjL})2y`2vx1Hu1&vj2sA!zVhD=zjdp5 zqD^Z1rJrSE5g;+H!#gL(#NLpRwi?x0TU#52et1rhJqi`{k6*(2{GUof)k)aFsAHYJ zr}AElIXF)z8hLI_kV2hE5{GReI1Cz<4CXdAZ$o*Gu>_XXhE`>`S;?z&R%GQD_6RdS zp*1$Xo}bE97aE)UB%%V_Zh8}1&OO)HGPeR}4;rAD-W_on z#S+`(j7fQ|QugiR&Xwvm(YC(%qF$p8Xh=ki*Gh3rPVWH0{#2$%&1s_unvMUtDj6n* zlMbR=ltiYVH*qu{Vq$1@Y%ez1yJcN~3H0V25y^oS=}hbGd8uq8cgwb(Q8x)dFNFC3 z(s6A=gYoBFF2#@G@h-OSAngPR1;rpL9os%vc6b}cWniL(HBS$cT5M8j- zI_dC5b(fLO1?Hw0_gTH3o-S?sLnK_P*&b=%5R4^Dv$${h^V`v_q zfl7EJ96tiHb-afR;Up0ek(TZdad-$rucPLEu>ac?E+D`L#(^+-xS8T=-&VLC=7+m6 zwXE0z&*Y_-{@9+q^sE;hcST(*9QL+2+WXMC^rX!R)SeTv%S&%*v0rVo&qP82Rv0bd zjbX?HY22@YlcS4Ei(btZ^0O-1-%Un-5lsFMUCWMw>QdniD!fx~gj0_lIPk@v#_N%F zC#F*ac3YjS(6tbL5!B7k!O!|g2Xg~C5tV-|xOR4&)dVFxp0-O!JEFy6fI&hTKfmF> zEEzmT6(8Z78tNK9E{B^_bkJy2eP(th6aM|jk3={NjKf8_+64$Qnc^5_ltR#f4g)lh zl`ADoFrR=+Gn5}&`TgyWAJS#o0>`cw*Kb9M_}9z=;~9xYjDoQg&OD)b0u3NSNI7O* zRIb2-2wH<9R@b4LaGV%2A97_!yOBNhWyB6ijRqpv5&*eSE|cj!%At;F2N)r=LP!KU zJ~2(1oA#a`sIuJ8yYeDTxklfNH38Gf6qCBVYUPFc2A4Mf+3Geh&g4Yo7R(r=LAK=Q zCoIm?)Ii|$P}gh=C8Nu4-@h-$Y>#LG(Ncn4i;>wq33oqW`!hpHdmjB=2*~7v{;X#x zbS7d_i;}kcwal7z)-$m`C4$xV2TI&}Kwkjje((u#ve^l*#fzj-0y>R?6gd?= z8>Z!`axY>c57-qa5VLAxD}7Ze`1#9^k;~u?Mw?jH_3{Kd)_=^wWMTIgB(+3B0FN*C z{jX~%Zwlc6n^vT)~`pI9Dt$Dg5%sGG-NOh1N4k?9NbpGh?rD> zWZUU@*0vR#wn2h28M$sBw6R$Qa3xHu?n~J#A9N?bEyThXEW~sqI~B;|z`*w+dSo<0 zzo&+-uCBk(mJKKzp|*hR3cSg`f;Y3Vkur2a#IyojRxHlOaTx1OjC;?DYYGUShS>$+ z6aW{}Mkj}Io}T$H+wb}GqD4ULdnfO2D)v^C%RRD2o{-dkTX=w62UHtuw%Ypolnx~Z zdOCDv%;=6uwXd$e5@kHRd;CG?*~vVI86PT#xAOy1Gfe&YTi-C(KNdRR7gTo!(%&Q7 zLSxdlge!0TDqixod+)97r7TjqmkZLD&JT@y2cd!TW6oDMpxcsv24W_dpa5?sAhGF* zAD!@&dk2Q`MNHJ7NtTVTHbL`)42I-Lq zkz~2#li~v^dYNA6(r8s?87^tXokzB>J|bT%y_YfD=+B6{zvx_cV&HY*^#L00K8WKd zen-8%m=paL<6`KrcH7pi^mb$J#2N@AemIoPa6nLTKQ>lIqH_RFSTJzH8<|Qe4dq@2 z!w;+hs=q5>SHd*~dWj2LFKY5Jq-ig@Y;>jK1S4i#_)4vFHkmbWFrh^o>5_|msW-36; z7B7f!ui@=1M2`bm@UO?9@wYKFh|6z{XX}i?kt3KEo&!Fz!JecgaA)E@j7cColHi6! zxERsV(F?C|0ya3{d=M5MWC189k~`edJAH))n<9P^@R|Oer5U%WgqM&#!h?T-GW0D-G1}VNfLt#j ziP%b(M|EyFwU{Tr7#3Ras3<9s$6yvg7vhSo`ECE={-RzC3<(LrvvUNh&O$qnvM@Or z3ua*cwuY?E(h!F5DI^1@$gi|HZgFsZvP(Zs5>zJ!?x5>bp8)wt~ zEkIK^+JLkNu`BfH3qD%G%^;y9CMBsG8C}Oz#3ppx6sF^G?q%nMh7>howC8FEI_yBM?JEylei-x}|y%F;c<1 zL=HR!p(W&4#OX;w7bPvuECU4%<{l3gPcD3bB}8t7eF3!@4DK$r3@m(F<`3XN;cP7f z`?a<8Bw?svbvBc~4;BkCc>~Cb<1Q*HT1Eml^IM<-=sRJ_eeG=Jz4IT}R_}*Lp2Y57 zWDepn4{`zg3U1(auJ-3(A_BU$iMjbQZD9AYqVzTsC za4?YZ*3a2ze{)os=^K~>*q{9h60Mz`S4q+EA_N>4ltIvPBD54Qsa^pH!EG_fzXaU} zfC51bhCU?HIG!b}RBR4J(?f?2q1PcRFN2FF+_(`#$q{Vm*#n0*?8Sw@-$7;+&|8zB z_VOhmo#MT_*^&2t6K4>K4}01t|1eR6z)3YR1OF_%N#Z;O$$<^0=8INTUxU z4sPP&gvA2uD>&heoI|}s)&{o}z-b>=lH`S$S+V)Kxc^&xGz5|!(KsFESrvdW72?oW zvM!aC?X_&%`E1_#)nmL{nvL3&&;b#maUHK03+2ggu!5kf|DG zK{D!LB&v_l0M&zWMI=kM0w)4=-QT53Z|`>$ z4)5}CRRAttPzfT`KTSFrtW%pHJ;kP~$9;NOEXj?Bmn)j4?v0{^mtKnz%z#d2j~rh$?H zx=Hf+i2H130cv3cduXMfdrYnZCQY&wyC|^%dv+BvKO%jBel4jj-9B#m61L=v$X6yW zaVX&-P6!W=9z7yU?sgv|3PI0202GAq<+i=>Xw}V?--E)Bw;xb zFx!4JBQaseIVbh3;|e?>$9Ob9zr8CLc-9r<#L|H8fNBE>br8o#l!|YVHV6vadfafaQ@t{k*24t$d=+MrKunmpVcaq$a`tadWL@uD^ zp4cdH;sVjCr@^>}uhk*IS|IHosJhficXGAZN}5=jcB*Qbp02JBe+65#qMQ!l4uYkO zQ9Lphq{9oO!`;{-?->7scohi4D;!~Vb_F@Ue@*mZWLezhxF8E+FsS5?djykG!gU7L zL;~v(Zo*INWP*Wu3ECx~(hFr!^`f^hfjI#T+y{FAs0f+J4vdqU>0K=0KwwMYq#$Oq z$P@F!>RpKOaZ!(diOg^n0L~+@ZL%iqFEJM-r6G1F&I@_^T*RRIz-b{?67f)(n}7+6 z8kcOaEbeI4HqeqVu2F#ZCkY{4*E(;SjPpPzhJ+7$3DU&@97ND=Y;xPea-|jEW8B3-!E6mqIkJZiU3P168E6KM80F8tlC}i}24PR50!4g;%oZlk z;e?2~37{N7@z6t_J9iEfqtgr9_p6NYCGy{jisff3*TaGU$_kYEZMB=@#1)ciV!@il zQbL|ZsG@7+%gN_n3#1A!4zE0tJ^h%s9+&8(P6bv>RHSpNe;rb2#CCJG+M~*N7dJm#m3|qmIa4h zTyn)+@ecWdxB5^;>6cK3qH}Q=z1(>Zm^Ah&;opG#iz5LV9&ZJ5Gu9VeFL(t8KpZq@ zv@K51O^EKh$66RspiCg&N{6vM`YcexUO}mc(2S~(_b3stynSm2sXoeG`06f13?6nB zI6`R4AYGmmV$GY98Sz0A7mJ1qUO5*ge{O^354*vw3UU^7O0ZKVCEle=m&mG(m&G%3 zVzfw#Ohh;xsjKX_(en@*1HwH{1R7sbpU8-T4~TdH@h-8$%+Xsoa{Dg*Tq>fn^V;h= z=C~z%Y)r+du~>sZ#tuHq@@0|K{LDU(KCn$43>iINLCr@>7){MLW)55Pg>eboGnM~u zuDN?}v(Oxn`C;Zlg7Yu=lq=)DY8Q<2F!|Soh!{vP{E;T7L$0Rx$^60c|9C;%{mXH@ zN49evv0*!;D96d_2q&U*=^1d_UJI__Xa#4SC3|=KrYIVY6a}qW(`E$7o`dqd7>sK{~ z*auZD_;OI#3f(EIQ_z$tsuc=P~TtRZ4mwc63OgvveEaNYh(QvUz_*wb^ zXH}D3DRL*Y-Usy_)%rhQQP=+Z7X_}i@5C1~SC_}jX8XxC0T7cz_4J!23JRysm!66# zLU${U@p=u1-IS+BVLA=Xx*Ac?V`QYuYv~K#Vltg+Jtl<~rBi`D@@f`%7o_*P#A$-# zie`@NLsggdEH7Uoxu90N(Yp>R1T5E!ZJ&wWI!T&l|d3Kgc|;f8GYW z-~sw0Xm#KnGgkZ(K$067e?K55xl)o8fuW0T~qy{rY1jb$FZR7R3d9tD!MFJDL~J`D6co zTEvNh+l%jfmx4kTp%W1rxi9Y7Gf`3=aM@+hlWWy}-^5oxJhUy&^kUA#RjafAgw51} zhM(R(Me2H;5XUe^ExE!Saa^bxN4YO!62RTA=BTvbiYD0 zWQ1)2gaq^wIW4Wa9FCrRQY`M@&wyTJ_iie1n}|#>ZzSQV{Wk3Y4ASSkP+#%K>Hj7M zK_3~Pn;Y@|hg_JJ@k{`4-l2%183s6^h(Vm--N%Du4%yMm&yjtkE!QS@`b{~-JBK^6 zmK#6Scuv6jhR}Y^Q?&gr}nqiFk|0VP%Q}c*!nZ1W&-1H;;HYoO`B-YGknFW7*D`{MqD?I=`RYdN^LM`yCCZU2D3?ErB8B zrV6{uck=s5C4R-P#$Zo%44q;3O5I0yqR{0b zY+=u#fB-ECz%8aCz-uEaoccIyV%3h&8o%3#{<1FK^E#F@Bw+Cq0JPV$cdaUyqnDXK z5v`ED5qq)O#HYmVX^fWbZnJ~VI80sDba6MADx2+#n)KDF|0;1nR_JGsm)!{_SeZLB zT{X=iCdcpZtR<5AjD28)V~p|g^V91YG!67hsee4r%1X`k22&eZmupo3hFWlzfbf9O zzs~A^`4D*yIeuk;9Puhe$%w=_x;q(zDvTn~?PG5n>$wS{-JO{^h*l3%J`6x{5h07j z;*Ql>2-Tc-Wv?8-p- z*qWYdkr5rrC$!k}QK9}~s#Zt{zT|_^Y^k~7aD$Hfv5ewe8GO3+{o>a}S2j_*1GhdJ ztC%iqd0!|aHrw+wWwviuudOW|)qPj5^>4wKr?}C5z|a{C$NNAj;7n%nc8pHulb*YDzQ!fo)Eb{7wG}FDY@HhfL4VAD@aVur#Z1NS#njFT8 z%1WL2=aA~bWgk>qU4F)|R&`wbG1kmt#5nR@RYLK2HHV<0yDCAF` zIU~P<16=~dz_V7DC(w04LszF23;`l4U=u7U2xy*M+bZ^wPkhRfpuM^{V8 z{U31PYLNqIgMj3rP5*_gbgEXZz>R|Xe-abU|9PWe@d6dgN*=~|yW8kcN0Vy>hZ6Jt zeXU>yjSEaQwD90<0Tx}Hd}IY1YtRp?o`}jn)w4LiiWhX-?q)stg5|d4y5Le6do8Ax z(pS~jFlX~_xpTzC%|p{#R;r;|+~QPb7CH+f(0ve?sXxL9F=0jekP zSHiNw5TAF=RIm0UNXKlVL58cnwQU3gCY>BQ#N777Qo&jwpTD_rCskxOe zPsEf@j*kKyMW;jAwTrd}I+bNT`eS2U>2^dQ0K7oaA&VdOQFV;4wzVY}5&?Du(rWOE zD^C27h=fGiT>Fg5<2YUnDgBa1K)s3F zZpWwe_Fis}pe2HFASVm9;Je-qgM%}@ZN@B+;mtysaC@aB_0l58X!16kcEOTOLOsxE zZ0|K)QdwZ(+jeSmM`*=W_MJee(cNO|;v~C{*($!k%GGt_{QOvd>W=h-?}sM@3q>w$ z@n?Ho#(2)QhWT!qLjSR=CZF<tNvEDnF z;yAUxTl;#6k7w!Rdy$ssqwAgRGxY@`avneCG>_j|FVf@S-C* z7JSjVp@J-7l>-r_JsO-Fw6{lp{2A%nI9$weF1KJbeeOqkdE%*|)s@aoR!+X%MUpd? z)Sl&ske2m~jOu|sJ$d%*A?m5ou`#8_iAKoo?Qq=+?_@W_ z_z5VL+z5+z{#;`z{(T`olqc~K}T3u^3TQ?JFX39=GQ{+58n@KI_N39qUywy} zBEs;x8h47aSc2xM(>hR3z3Uk+8Yteua;>b@u59=6_UsdB{4ccK8{Sr@fA9XOZ`@`# zGc}nMy399jSJr2%pBFqgt>2uuqo8o^Td|PJnY|l#@$>WEQMT~%GDJ#lm`9ZOijlB<8Rl;LJ4e=}t#FI?j+MhqORHH;Qi!(YuSf`^9+q+`( zCtS*7ZfB=l9MRuiEEc*!=`I; zmh*+rC-f=;H|?^@pv@>5#Tfgk->m7;OxFB}rvc9(WGF`f%2<_J0qyG?QUXOS8Oqz^ zmA7Z7UCoJ)KU8jdJmI)vo!A7U!4$R%Fi3&#xvNl=U~iPS+jpgAyhxdzq@$*9(u7oC1Bw|z zvL@dSmZesa`sdr;uE0wcq3F%t|!B7Nguk)hF0e^+)YgW(0{sHY-}uW!tRNDQssC>&#-M%*A4E|g%8$iRE`oa z%PD{Fi6yf&QnR5L_O*|?)zN5a@rQ#`F!!l{DjHF-V-2Hqlh!BJtxrF6-4GTF0s*jA z%-mWvsfA79SrbNp7Om&A&uxC`3}6FBt+((z(}p*jBvDW&mR-mA^YW|v@Q!$Hlz~q{BE{_7 zcu~vP5JJfarYH=TU**o_KT(g&bPcQM817TlFG=f}_z`LQiH=V4zAir>d+^T4_uV+7 z;@zBAjb}$QytOPXQxOe)!^r*X!7N|4BUGVlpl74JMNrN z3Vug&ay@v@FM6AcSai2J7kF{j?@-sT?M@t5M8yRr5&&RT|t0<>Oa*JkF zAbt?@oO%LH7Zi8OHJVV>znC4CT*4?e@X~@_wDVdJPtjqt@(r`Q7 zef7KBeU5zeeMMJz+qf$Av-xHzr^J&z7xs&%t<#ZTv}ks~^Ipq91JZ3gW=gZO1Kv84 zF&Qc@Ejx0X3U`HtDJA4bhrlon3uf?9;pS9*yngjL$76x@bkFs9V}+f zKi{T6YdQ1v5X=u_4+pb%bymmcJNL0hr&DZ8Rn|)5NSunmofGlQVFR6EQYN$O93>;P z%+9NNv*kUvzWucc9?FIV&MIK1U`3}psh`5^!G|$Bc1n|kSBZ55Y>Lgz%oH%*2odfU zd&*9OzVM68BL1w;TgXGfo~Q$8bSL97^IjDVY~tG9-bZfk?kxrGOw{|gW_J@mcglPG zWs#F2HDBuDmUUZWzV3EHNwnX|&ho-Nqa4dRkKxYl!z}?R+Nrmi3;EVCI>mC|QN{r{ z8iL!epQ>f8-zQI5?N-r%F)1#dtdIdNjkV|vjWcP*C4 zh4eZX*f5obO$E<`<>NVO^xUFc-V==k{=;cHAu{t5PhnD>euretF?_+iB&QTrm7z*G zt^vgE=C-c=JoB`QmUr|r$Hn3gX4zdI6OJ-2roS5%MUH2VWkcr;Uol@<8R(YrJGcv9 z!VMj$Pque$mYCKco6pU}Nb#zVc7E~Q={|Mn%kJeWD$P29g%9SZrZbponHSdx<@$zb z@@*^L&8_&#P zMZGixq#YZU*Kej_!+t4Ykc2arCZbkxE0SngtWByCHMu{`Pj(A_4#$)l<5v^QZXD|` zd#2nylq-$W_-dVwm%6DAyvwtw5gN5{*1J=3AX=(9F*5V^)|+JlkDeXSO0Co5{k)vJ z%Q1hQ60DYJ)oFI3%DL;lE@Je(gc+_D|2n6(w?T)_Uv9Hza;ID;eRuv)+;TmLik;D7hN^K zizit-GVvRAUP{kj*X#SH<9CubTD74r%ryJ69xv=mbK>=J`+2O|RgPz( zBY2nWk{%CnkWu}n6wS}>^JBVOyaC?9*D&%$;(c&5LLeFNZS_%ls)Fqym4#qv?(D36 zEYZkfmxfxb)e+SUHlv~_)d(x+$iGvPl@j>lZ%6RSPZ}`g_<3|oxhQ~PKM-YiJ^1Vf z1;btCX1q6re>|{Su?=dei_$)7mkya*SSST^NY!VaE_EDD*}r*i>~irs>1!o%cq-wQ z9UE1beN_{?L1!9jeix!jrG(@7(mTqXV0*aTY=ouBp zOH{EeX6dy=FlsUjTf@kpxGC1u@}@iYs+*M^mV?(W((q5*Gn8^X`2l9*Il!0Q6y1O9 zUVH=deidcqhpDMYG4gfHr?-2!Qo70!pU03_aeF9A=Me7T(roLy;w~GjA7S&@w7f_| zWocOGrd4`zCMWt`ZOO6iSA9s1ju=StY1R_$^ zE0#2u+vN6i*QFv%x#3O^`@E=hgFO3lVy633u@FdCD7_&e{WXuJJ^Al&_7Ah2^?;C@g4N0(PggZ(t}_0=LLWOme?Umj6DE}TA;_~Qe$_LeG& z@LI~z3x_HUuadfBnSXIqb?H4lW8((Qtk9yQ8x|y@LdOP)dGwjY1+sJ)COUT4?l63Q z;ijq%HOT(u9-T9UI;31t*_DoFL@jHhGRng$|Ey?3)J0vOwqR#7t4*8|FI(+_$`mM~ay_`Wx)C zd;t%9XuMbfc`^F8+lzNwko0MRniwj<5N`is^*{GSX8gIB{>mzkFbwPQJjn(`=_6wE z<^G|1cDP(2hliisF!i%SuxIYWBC0uBdDLR990T^z=&~FO*{RTNG&Vp z9ye={JjinNcEhMAdh&!$wU?WMbY2C zj#Jxi-y|Dwazn@iw4uAgz+?I&gH>FMFMLgKX?VFQaGlZo)9yi8G4y44P$QV)MT?%7 z1-(A8W-ZlAN59mE)Q@+R6VnsHph^8zv#epPs|y38P~gkhp5om?D6zpHCg%t?95$V9 zV}}Sp@VjHH!v#Vp;Y6%*rmK4fp~}@gO_iuaxUYGs6aievGpd%95=3S7GG$0E-FxTgNiu$eM{@n z$!_~~Zgn~(rKALFgy4mbSk=QwI}}?LTi9tWgpLh4g0xb~%DfA$RA*J)#P?xW638_9 zx&j4XsDTv{AF-HP!hZNM)w_cnU(y)^ z46E9ekL0$Ze;0_TNC38m6nV6TgJRlAzm%%Ln&+#9C~pt1Xy>+OV{T+6WfAxdv8KT| zGx*U;A)q>}Ve;SQKA^Dp1|k!!&|L=w10LuBQOaZso`q+ufk132L#1qX;8dySI z5XU=8%)-rv>yIFCqjupg?{l{ObDMUB`v1(x|m`570oP zJAqXr=}s(ZUnr_x+@MdD5|RM^g*2VtCWH97?g-#Q7#U#AxD{astIrGH#~?i~Vyg@A zF%Eew?NB|6{=3d!O=H!nkoidIq@YmS+}unW;8=Xnsu2Jt&y8$pnggdYb#=ba{cJyq zkKQ<(yDkr=HrH;nd>iSi`8nyq%E8fq8N)*o`Tn%Uy5K}&q+#qi8V=ZkYy*F?4cJ(5 zuu(H0bo#-ATkxav-E;a}{qKEA)7buWz&;Kg*AanT*lu9UAv3?^d8nPb(9`mT zmeeC%>W(X~DFrukjC`JvTw z^6f{5nS7}HH$DLj3RQ6)%?9^!_WZkn{JF%rs7F&WqHZK~89L+^@7aVeHo0&Y$7t^C z`tn887(3l!YV5|z4ZyaX_HX-a^>m%m)A|rAzYw#O6BuL@CiiLD@2O&ryHiIt zQEclL<8s*~BrbHTrhAiRV>y2}B#4(d9f#^C5!7a0j){4+^9hgl+)RYBF`j?iHFx?#IlnHMkS>xpNB~l z-k+aqnX7Q`xI$5^!MN&5C0&=leuawizq$|&bnUD`@7jiX8{Ovz+m7YW+ACf@#FZl! zp2R%B7pKbaeVM z5tKyYP2Jq|&^G0C%nOG-qxA=Swct#5WM|Z#A5k{E>5*_;J;9)Pf+Nu8Jkq8Un?!8V zK0&8RdmH1rGK%WPGJmB2H;dVSzj~eRz;So<4-K1XZbRRE-xV!ph^fro6$bOn@fW2) ze?k&c{tyd(KJKb*-g7XH$3ajCo{G4dQUT7ggG^X-QSKS9B7A|(Y8l*apNAv?=B7@< z@tfQX^cSsZxltd2I5w4>Qg4}Gqx0fhePm3>_o2x(0Z-qJ-ir=9o_XJ3d;IZa&iLau zO+y)3K#?y4i~b2nVZfyoc$DnLfj!KjI^fahRWP?a1|tnyYB2{aC*RK*>m} z;Wo^@i*8k(8R>riNOo>M)wXE%R&poxm>F+?!d3SwuT0eNRT|6@@noe^*5^maZ~ZMr z88D{-KFg=`uv=Lt_qkWmPvGKGPiZzfNA(Ll=6u*xBd+;A*N!kkozz`|sg%B6yR&;( zg_%Vw*9OMaghCBJb@e?l8ur#XV?!aSJ97qCnwx8hHl|?h&UWSK6`Z18&K;uYsOJ$2 z{SgYkD!2}V=+-_yy*6#i@xYjTpKBiTl^Z)V1u+XY3;?|Rdgf7zmPXf`yNw0;T8*pN zua8A(>z8JfjH2Ny60+rAH=I*?EJ`v-jhjzVuQI`D^xKZf*|}qLQDDvZW21k%i5@4F zd56w&r>NfK=~3yy+0y8rd5?_d52kturz*J`)>&xjH<_l*e-!()ercImQ`yGK?fn%P z&aGd{$HJIgm|7s*yPIWsgORwah(K_IU`$I!ot*5^3YnukS&Jy=56ztn6m_@QY~qHn zvwYNtahLK&zG#D*c=ywK`bNhyZvgNLYZyT7VmUPVLzgc`>b^$dY!0Q)w>I2BzZxj5 z#D-~g%Zj5R!WODHv|I(W?KNRo=vApZ^}MoSqqhemrM|aGE2vLrdVMI$*|bM<6ruR# z;lDEt^)BSN+AAfwP1kyQoE|srZ+9rX8{IrM!&R!9l0E$_t1Ilex^oo?XYV?h^3yvZJmTu=WtZqjOdE?%27&<+ScgUUf(ud&vt_loN1ScQ zh9J-RXf~!KIKnCDc1n)bH^|4O=^5&UaTi{gQM3JVR;#R|dFspPam7j=4m6(?ZKLnn z#~$jIHR#d#$L|VxAS;=4cJ+9>o#^)=w|2+8@Jchy{mTzTvjg<+d!<8BgL#-5QN6mD zRNFK^PwwY3+^e+h&JP9atM9kFK7Zj-)ZaOzCz`CSa^~X>`KHD?&u_I)JH!kHCNIm} zG1Kz(FzPau?MVo+5>8IbJ}Pmx@@R;GK(2>Z(eh$7$p{S7)eufjoM@PAc0ewtg=Wwp zTYOR;=3*M6r#Q{gaza)+D=)F$rmV{ud(6f%b6U84)G7QLLtdd#p7()kqXK>>&lPHF zCK%kJwccpx2`$d^Y-@g~`NW7X`S=d3-g_zbhWUw_2C?(s-tc&PQ9gymEBUFHhXdud zGA{AR`rOB1Ra6j;QC3CY+~DeMz;P#ME;371c7+W@n1raN@A!HiDZTfC3Po9-U;HOE zSdC$g-X+Ox+P7E>!^H5sfblWHuz)+J z=d85KHw#me)PdUb4D=l7o9HMZCh{`n0?U~mmT0;52s!M;PSy@gjk|bp&M$otHFy#+ z{3TDILi{yDc1?^DCJml$u`KJzLaDOD*;TFj+>&jUvUm@wkL2=cG6{HY`yYt??OtcE2XxZ=z837K zzGefPnw{$rtUD#xHTkAcqGcJ_29-Sh$t6Y~IlNo~UtLB*wla&?kDw@~zrX;UZMT)` zb}|y9d8^M!+cmUs#Z*{Km0!u9C4c=WX5a;L?09zMee|L$`=52#@;`)BG&0PR!cRoi zOtx9)Zw$;FrlVA@l8EMnh((}>PnQoXg++IZy2)Bc9|l`ba_ThZu^5Qy8Qs>w!hLF& z!RJ*c-*=6C-#%2e@I0xjxf2u4cZcz*Q*uJ#p^GNEOi9Dh8T6w7~d*JR4QS`O3x`Cd1^emjh24zi!1|V#Ysw&Y;@CFMhIC6lJmzZwJ3B$m>#+t{*-cMZMhn y`+I-@;n(Bk*aiRhTd@THcbRVe|KAdS&oAlk-pQ<;mX}L*m!iC?T)M2urT+y$m|0x_ diff --git a/bayesclass/tests/conftest.py b/bayesclass/tests/conftest.py new file mode 100644 index 0000000..6447b12 --- /dev/null +++ b/bayesclass/tests/conftest.py @@ -0,0 +1,38 @@ +import pytest +from sklearn.datasets import load_iris +from fimdlp.mdlp import FImdlp + + +@pytest.fixture +def iris(): + dataset = load_iris() + X = dataset["data"] + y = dataset["target"] + features = dataset["feature_names"] + # To make iris dataset has the same values as our iris.arff dataset + patch = {(34, 3): (0.2, 0.1), (37, 1): (3.6, 3.1), (37, 2): (1.4, 1.5)} + for key, value in patch.items(): + X[key] = value[1] + return X, y, features + + +@pytest.fixture +def data(iris): + return iris[0], iris[1] + + +@pytest.fixture +def features(iris): + return iris[2] + + +@pytest.fixture +def class_name(): + return "class" + + +@pytest.fixture +def data_disc(data): + clf = FImdlp() + X, y = data + return clf.fit_transform(X, y), y diff --git a/bayesclass/tests/test_AODE.py b/bayesclass/tests/test_AODE.py index ff79665..bc1e954 100644 --- a/bayesclass/tests/test_AODE.py +++ b/bayesclass/tests/test_AODE.py @@ -1,6 +1,5 @@ import pytest import numpy as np -from sklearn.datasets import load_iris from sklearn.preprocessing import KBinsDiscretizer from matplotlib.testing.decorators import image_comparison from matplotlib.testing.conftest import mpl_test_settings @@ -10,26 +9,19 @@ from bayesclass.clfs import AODE from .._version import __version__ -@pytest.fixture -def data(): - X, y = load_iris(return_X_y=True) - enc = KBinsDiscretizer(encode="ordinal") - return enc.fit_transform(X), y - - @pytest.fixture def clf(): return AODE(random_state=17) -def test_AODE_default_hyperparameters(data, clf): +def test_AODE_default_hyperparameters(data_disc, clf): # Test default values of hyperparameters assert not clf.show_progress assert clf.random_state == 17 clf = AODE(show_progress=True) assert clf.show_progress assert clf.random_state is None - clf.fit(*data) + clf.fit(*data_disc) assert clf.class_name_ == "class" assert clf.feature_names_in_ == [ "feature_0", @@ -42,37 +34,35 @@ def test_AODE_default_hyperparameters(data, clf): @image_comparison( baseline_images=["line_dashes_AODE"], remove_text=True, extensions=["png"] ) -def test_AODE_plot(data, clf): +def test_AODE_plot(data_disc, features, clf): # mpl_test_settings will automatically clean these internal side effects mpl_test_settings - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"]) + clf.fit(*data_disc, features=features) clf.plot("AODE Iris") -def test_AODE_version(clf, data): +def test_AODE_version(clf, features, data_disc): """Check AODE version.""" assert __version__ == clf.version() - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"]) + clf.fit(*data_disc, features=features) assert __version__ == clf.version() -def test_AODE_nodes_edges(clf, data): +def test_AODE_nodes_edges(clf, data_disc): assert clf.nodes_edges() == (0, 0) - clf.fit(*data) + clf.fit(*data_disc) assert clf.nodes_leaves() == (20, 28) -def test_AODE_states(clf, data): +def test_AODE_states(clf, data_disc): assert clf.states_ == 0 - clf.fit(*data) - assert clf.states_ == 23 + clf.fit(*data_disc) + assert clf.states_ == 19 assert clf.depth_ == clf.states_ -def test_AODE_classifier(data, clf): - clf.fit(*data) +def test_AODE_classifier(data_disc, clf): + clf.fit(*data_disc) attribs = [ "feature_names_in_", "class_name_", @@ -82,28 +72,28 @@ def test_AODE_classifier(data, clf): ] for attr in attribs: assert hasattr(clf, attr) - X = data[0] - y = data[1] + X = data_disc[0] + y = data_disc[1] y_pred = clf.predict(X) assert y_pred.shape == (X.shape[0],) - assert sum(y == y_pred) == 147 + assert sum(y == y_pred) == 146 -def test_AODE_wrong_num_features(data, clf): +def test_AODE_wrong_num_features(data_disc, clf): with pytest.raises( ValueError, match="Number of features does not match the number of columns in X", ): - clf.fit(*data, features=["feature_1", "feature_2"]) + clf.fit(*data_disc, features=["feature_1", "feature_2"]) -def test_AODE_wrong_hyperparam(data, clf): +def test_AODE_wrong_hyperparam(data_disc, clf): with pytest.raises(ValueError, match="Unexpected argument: wrong_param"): - clf.fit(*data, wrong_param="wrong_param") + clf.fit(*data_disc, wrong_param="wrong_param") -def test_AODE_error_size_predict(data, clf): - X, y = data +def test_AODE_error_size_predict(data_disc, clf): + X, y = data_disc clf.fit(X, y) with pytest.raises(ValueError): X_diff_size = np.ones((10, X.shape[1] + 1)) diff --git a/bayesclass/tests/test_AODENew.py b/bayesclass/tests/test_AODENew.py index 72a73cb..11ee782 100644 --- a/bayesclass/tests/test_AODENew.py +++ b/bayesclass/tests/test_AODENew.py @@ -1,7 +1,5 @@ import pytest import numpy as np -from sklearn.datasets import load_iris -from sklearn.preprocessing import KBinsDiscretizer from matplotlib.testing.decorators import image_comparison from matplotlib.testing.conftest import mpl_test_settings @@ -10,13 +8,6 @@ from bayesclass.clfs import AODENew from .._version import __version__ -@pytest.fixture -def data(): - X, y = load_iris(return_X_y=True) - enc = KBinsDiscretizer(encode="ordinal") - return enc.fit_transform(X), y - - @pytest.fixture def clf(): return AODENew(random_state=17) @@ -44,19 +35,17 @@ def test_AODENew_default_hyperparameters(data, clf): remove_text=True, extensions=["png"], ) -def test_AODENew_plot(data, clf): +def test_AODENew_plot(data, features, clf): # mpl_test_settings will automatically clean these internal side effects mpl_test_settings - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"]) + clf.fit(*data, features=features) clf.plot("AODE Iris") def test_AODENew_version(clf, data): """Check AODENew version.""" assert __version__ == clf.version() - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"]) + clf.fit(*data) assert __version__ == clf.version() @@ -69,7 +58,7 @@ def test_AODENew_nodes_edges(clf, data): def test_AODENew_states(clf, data): assert clf.states_ == 0 clf.fit(*data) - assert clf.states_ == 22.75 + assert clf.states_ == 17.75 assert clf.depth_ == clf.states_ @@ -88,17 +77,17 @@ def test_AODENew_classifier(data, clf): y = data[1] y_pred = clf.predict(X) assert y_pred.shape == (X.shape[0],) - assert sum(y == y_pred) == 147 + assert sum(y == y_pred) == 146 -def test_AODENew_local_discretization(clf, data): +def test_AODENew_local_discretization(clf, data_disc): expected_data = [ [-1, [0, -1], [0, -1], [0, -1]], [[1, -1], -1, [1, -1], [1, -1]], [[2, -1], [2, -1], -1, [2, -1]], [[3, -1], [3, -1], [3, -1], -1], ] - clf.fit(*data) + clf.fit(*data_disc) for idx, estimator in enumerate(clf.estimators_): expected = expected_data[idx] for feature in range(4): diff --git a/bayesclass/tests/test_KDB.py b/bayesclass/tests/test_KDB.py index acda865..aa35751 100644 --- a/bayesclass/tests/test_KDB.py +++ b/bayesclass/tests/test_KDB.py @@ -1,6 +1,5 @@ import pytest import numpy as np -from sklearn.datasets import load_iris from sklearn.preprocessing import KBinsDiscretizer from matplotlib.testing.decorators import image_comparison from matplotlib.testing.conftest import mpl_test_settings @@ -11,19 +10,12 @@ from bayesclass.clfs import KDB from .._version import __version__ -@pytest.fixture -def data(): - X, y = load_iris(return_X_y=True) - enc = KBinsDiscretizer(encode="ordinal") - return enc.fit_transform(X), y - - @pytest.fixture def clf(): return KDB(k=3) -def test_KDB_default_hyperparameters(data, clf): +def test_KDB_default_hyperparameters(data_disc, clf): # Test default values of hyperparameters assert not clf.show_progress assert clf.random_state is None @@ -32,7 +24,7 @@ def test_KDB_default_hyperparameters(data, clf): assert clf.show_progress assert clf.random_state == 17 assert clf.k == 3 - clf.fit(*data) + clf.fit(*data_disc) assert clf.class_name_ == "class" assert clf.feature_names_in_ == [ "feature_0", @@ -47,57 +39,56 @@ def test_KDB_version(clf): assert __version__ == clf.version() -def test_KDB_nodes_edges(clf, data): +def test_KDB_nodes_edges(clf, data_disc): assert clf.nodes_edges() == (0, 0) - clf.fit(*data) - assert clf.nodes_leaves() == (5, 10) + clf.fit(*data_disc) + assert clf.nodes_leaves() == (5, 9) -def test_KDB_states(clf, data): +def test_KDB_states(clf, data_disc): assert clf.states_ == 0 - clf.fit(*data) - assert clf.states_ == 23 + clf.fit(*data_disc) + assert clf.states_ == 19 assert clf.depth_ == clf.states_ -def test_KDB_classifier(data, clf): - clf.fit(*data) +def test_KDB_classifier(data_disc, clf): + clf.fit(*data_disc) attribs = ["classes_", "X_", "y_", "feature_names_in_", "class_name_"] for attr in attribs: assert hasattr(clf, attr) - X = data[0] - y = data[1] + X = data_disc[0] + y = data_disc[1] y_pred = clf.predict(X) assert y_pred.shape == (X.shape[0],) - assert sum(y == y_pred) == 148 + assert sum(y == y_pred) == 146 @image_comparison( baseline_images=["line_dashes_KDB"], remove_text=True, extensions=["png"] ) -def test_KDB_plot(data, clf): +def test_KDB_plot(data_disc, features, clf): # mpl_test_settings will automatically clean these internal side effects mpl_test_settings - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"]) + clf.fit(*data_disc, features=features) clf.plot("KDB Iris") -def test_KDB_wrong_num_features(data, clf): +def test_KDB_wrong_num_features(data_disc, clf): with pytest.raises( ValueError, match="Number of features does not match the number of columns in X", ): - clf.fit(*data, features=["feature_1", "feature_2"]) + clf.fit(*data_disc, features=["feature_1", "feature_2"]) -def test_KDB_wrong_hyperparam(data, clf): +def test_KDB_wrong_hyperparam(data_disc, clf): with pytest.raises(ValueError, match="Unexpected argument: wrong_param"): - clf.fit(*data, wrong_param="wrong_param") + clf.fit(*data_disc, wrong_param="wrong_param") -def test_KDB_error_size_predict(data, clf): - X, y = data +def test_KDB_error_size_predict(data_disc, clf): + X, y = data_disc clf.fit(X, y) with pytest.raises(ValueError): X_diff_size = np.ones((10, X.shape[1] + 1)) diff --git a/bayesclass/tests/test_KDBNew.py b/bayesclass/tests/test_KDBNew.py index b14d731..36de4da 100644 --- a/bayesclass/tests/test_KDBNew.py +++ b/bayesclass/tests/test_KDBNew.py @@ -1,7 +1,5 @@ import pytest import numpy as np -from sklearn.datasets import load_iris -from sklearn.preprocessing import KBinsDiscretizer from matplotlib.testing.decorators import image_comparison from matplotlib.testing.conftest import mpl_test_settings from pgmpy.models import BayesianNetwork @@ -11,13 +9,6 @@ from bayesclass.clfs import KDBNew from .._version import __version__ -@pytest.fixture -def data(): - X, y = load_iris(return_X_y=True) - enc = KBinsDiscretizer(encode="ordinal") - return enc.fit_transform(X), y - - @pytest.fixture def clf(): return KDBNew(k=3) @@ -50,13 +41,13 @@ def test_KDBNew_version(clf): def test_KDBNew_nodes_edges(clf, data): assert clf.nodes_edges() == (0, 0) clf.fit(*data) - assert clf.nodes_leaves() == (5, 10) + assert clf.nodes_leaves() == (5, 9) def test_KDBNew_states(clf, data): assert clf.states_ == 0 clf.fit(*data) - assert clf.states_ == 23 + assert clf.states_ == 22 assert clf.depth_ == clf.states_ @@ -69,14 +60,15 @@ def test_KDBNew_classifier(data, clf): y = data[1] y_pred = clf.predict(X) assert y_pred.shape == (X.shape[0],) - assert sum(y == y_pred) == 148 + assert sum(y == y_pred) == 145 def test_KDBNew_local_discretization(clf, data): - expected = [[1, -1], -1, [0, 1, 3, -1], [1, 0, -1]] + expected = [[1, -1], -1, [0, 1, 3, -1], [1, -1]] clf.fit(*data) for feature in range(4): computed = clf.estimator_.discretizer_.target_[feature] + print("computed:", computed) if type(computed) == list: for j, k in zip(expected[feature], computed): assert j == k @@ -92,11 +84,10 @@ def test_KDBNew_local_discretization(clf, data): remove_text=True, extensions=["png"], ) -def test_KDBNew_plot(data, clf): +def test_KDBNew_plot(data, features, class_name, clf): # mpl_test_settings will automatically clean these internal side effects mpl_test_settings - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"]) + clf.fit(*data, features=features, class_name=class_name) clf.plot("KDBNew Iris") diff --git a/bayesclass/tests/test_TAN.py b/bayesclass/tests/test_TAN.py index 95ec46a..8f10461 100644 --- a/bayesclass/tests/test_TAN.py +++ b/bayesclass/tests/test_TAN.py @@ -1,7 +1,5 @@ import pytest import numpy as np -from sklearn.datasets import load_iris -from sklearn.preprocessing import KBinsDiscretizer from matplotlib.testing.decorators import image_comparison from matplotlib.testing.conftest import mpl_test_settings @@ -10,26 +8,19 @@ from bayesclass.clfs import TAN from .._version import __version__ -@pytest.fixture -def data(): - X, y = load_iris(return_X_y=True) - enc = KBinsDiscretizer(encode="ordinal") - return enc.fit_transform(X), y - - @pytest.fixture def clf(): return TAN(random_state=17) -def test_TAN_default_hyperparameters(data, clf): +def test_TAN_default_hyperparameters(data_disc, clf): # Test default values of hyperparameters assert not clf.show_progress assert clf.random_state == 17 clf = TAN(show_progress=True) assert clf.show_progress assert clf.random_state is None - clf.fit(*data) + clf.fit(*data_disc) assert clf.head_ == 0 assert clf.class_name_ == "class" assert clf.feature_names_in_ == [ @@ -45,26 +36,26 @@ def test_TAN_version(clf): assert __version__ == clf.version() -def test_TAN_nodes_edges(clf, data): +def test_TAN_nodes_edges(clf, data_disc): assert clf.nodes_edges() == (0, 0) - clf.fit(*data, head="random") + clf.fit(*data_disc, head="random") assert clf.nodes_leaves() == (5, 7) -def test_TAN_states(clf, data): +def test_TAN_states(clf, data_disc): assert clf.states_ == 0 - clf.fit(*data) - assert clf.states_ == 23 + clf.fit(*data_disc) + assert clf.states_ == 19 assert clf.depth_ == clf.states_ -def test_TAN_random_head(clf, data): - clf.fit(*data, head="random") +def test_TAN_random_head(clf, data_disc): + clf.fit(*data_disc, head="random") assert clf.head_ == 3 -def test_TAN_classifier(data, clf): - clf.fit(*data) +def test_TAN_classifier(data_disc, clf): + clf.fit(*data_disc) attribs = [ "classes_", "X_", @@ -75,44 +66,43 @@ def test_TAN_classifier(data, clf): ] for attr in attribs: assert hasattr(clf, attr) - X = data[0] - y = data[1] + X = data_disc[0] + y = data_disc[1] y_pred = clf.predict(X) assert y_pred.shape == (X.shape[0],) - assert sum(y == y_pred) == 147 + assert sum(y == y_pred) == 146 @image_comparison( baseline_images=["line_dashes_TAN"], remove_text=True, extensions=["png"] ) -def test_TAN_plot(data, clf): +def test_TAN_plot(data_disc, features, clf): # mpl_test_settings will automatically clean these internal side effects mpl_test_settings - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"], head=0) + clf.fit(*data_disc, features=features, head=0) clf.plot("TAN Iris head=0") -def test_TAN_wrong_num_features(data, clf): +def test_TAN_wrong_num_features(data_disc, clf): with pytest.raises( ValueError, match="Number of features does not match the number of columns in X", ): - clf.fit(*data, features=["feature_1", "feature_2"]) + clf.fit(*data_disc, features=["feature_1", "feature_2"]) -def test_TAN_wrong_hyperparam(data, clf): +def test_TAN_wrong_hyperparam(data_disc, clf): with pytest.raises(ValueError, match="Unexpected argument: wrong_param"): - clf.fit(*data, wrong_param="wrong_param") + clf.fit(*data_disc, wrong_param="wrong_param") -def test_TAN_head_out_of_range(data, clf): +def test_TAN_head_out_of_range(data_disc, clf): with pytest.raises(ValueError, match="Head index out of range"): - clf.fit(*data, head=4) + clf.fit(*data_disc, head=4) -def test_TAN_error_size_predict(data, clf): - X, y = data +def test_TAN_error_size_predict(data_disc, clf): + X, y = data_disc clf.fit(X, y) with pytest.raises(ValueError): X_diff_size = np.ones((10, X.shape[1] + 1)) diff --git a/bayesclass/tests/test_TANNew.py b/bayesclass/tests/test_TANNew.py index 406222e..506330d 100644 --- a/bayesclass/tests/test_TANNew.py +++ b/bayesclass/tests/test_TANNew.py @@ -1,7 +1,5 @@ import pytest import numpy as np -from sklearn.datasets import load_iris -from sklearn.preprocessing import KBinsDiscretizer from matplotlib.testing.decorators import image_comparison from matplotlib.testing.conftest import mpl_test_settings @@ -10,13 +8,6 @@ from bayesclass.clfs import TANNew from .._version import __version__ -@pytest.fixture -def data(): - X, y = load_iris(return_X_y=True) - enc = KBinsDiscretizer(encode="ordinal") - return enc.fit_transform(X), y - - @pytest.fixture def clf(): return TANNew(random_state=17) @@ -54,7 +45,7 @@ def test_TANNew_nodes_edges(clf, data): def test_TANNew_states(clf, data): assert clf.states_ == 0 clf.fit(*data) - assert clf.states_ == 22 + assert clf.states_ == 18 assert clf.depth_ == clf.states_ @@ -88,7 +79,7 @@ def test_TANNew_classifier(data, clf): y = data[1] y_pred = clf.predict(X) assert y_pred.shape == (X.shape[0],) - assert sum(y == y_pred) == 145 + assert sum(y == y_pred) == 146 @image_comparison( @@ -96,11 +87,10 @@ def test_TANNew_classifier(data, clf): remove_text=True, extensions=["png"], ) -def test_TANNew_plot(data, clf): +def test_TANNew_plot(data, features, clf): # mpl_test_settings will automatically clean these internal side effects mpl_test_settings - dataset = load_iris(as_frame=True) - clf.fit(*data, features=dataset["feature_names"], head=0) + clf.fit(*data, features=features, head=0) clf.plot("TANNew Iris head=0")

      }{7oUu?#v*(a{wmx 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