From 58c556523c0b195bbe340a7f73e8fc8aa85a808b Mon Sep 17 00:00:00 2001 From: Baptiste Bauvin <baptiste.bauvin@lis-lab.fr> Date: Tue, 2 Apr 2019 15:29:52 -0400 Subject: [PATCH] Trees were different for each algo --- .../Monoview/Additions/BoostUtils.py | 8 ++++++-- .../Monoview/Additions/CGDescUtils.py | 2 +- .../Monoview/Additions/CQBoostUtils.py | 5 +++-- .../Monoview/Additions/PregenUtils.py | 2 +- .../MonoviewClassifiers/MinCQGraalpyTree.py | 3 +-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py index d63dd748..c9841ab0 100644 --- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py +++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py @@ -191,13 +191,16 @@ class ClassifiersGenerator(BaseEstimator, TransformerMixin): class TreeClassifiersGenerator(ClassifiersGenerator): - def __init__(self, random_state, max_depth=2, self_complemented=True, criterion="gini", splitter="best", n_trees=100, distribution_type="uniform", low=0, high=10, attributes_ratio=0.6, examples_ratio=0.95): + def __init__(self, random_state=42, max_depth=2, self_complemented=True, criterion="gini", splitter="best", n_trees=100, distribution_type="uniform", low=0, high=10, attributes_ratio=0.6, examples_ratio=0.95): super(TreeClassifiersGenerator, self).__init__(self_complemented) self.max_depth=max_depth self.criterion=criterion self.splitter=splitter self.n_trees=n_trees - self.random_state=random_state + if type(random_state) is int: + self.random_state = np.random.RandomState(random_state) + else: + self.random_state=random_state self.distribution_type = distribution_type self.low = low self.high = high @@ -208,6 +211,7 @@ class TreeClassifiersGenerator(ClassifiersGenerator): estimators_ = [] self.attribute_indices = [self.sub_sample_attributes(X) for _ in range(self.n_trees)] self.example_indices = [self.sub_sample_examples(X) for _ in range(self.n_trees)] + print(self.example_indices) for i in range(self.n_trees): estimators_.append(DecisionTreeClassifier(criterion=self.criterion, splitter=self.splitter, max_depth=self.max_depth).fit(X[:, self.attribute_indices[i]][self.example_indices[i], :], y[self.example_indices[i]])) self.estimators_ = np.asarray(estimators_) diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py index 9aff7ca3..becea218 100644 --- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py +++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py @@ -333,7 +333,7 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost): n_stumps_per_attribute=self.n_stumps, self_complemented=self.self_complemented) if self.estimators_generator is "Trees": - self.estimators_generator = TreeClassifiersGenerator(self.random_state, n_trees=self.n_stumps, max_depth=self.max_depth, + self.estimators_generator = TreeClassifiersGenerator(n_trees=self.n_stumps, max_depth=self.max_depth, self_complemented=self.self_complemented) self.estimators_generator.fit(X, y) self.classification_matrix = self._binary_classification_matrix(X) diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py index 13c270ca..bf367423 100644 --- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py +++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py @@ -26,7 +26,6 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost): self.random_state = random_state def fit(self, X, y): - start = time.time() if scipy.sparse.issparse(X): X = np.array(X.todense()) @@ -35,8 +34,9 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost): if self.estimators_generator is "Stumps": self.estimators_generator = StumpsClassifiersGenerator(n_stumps_per_attribute=self.n_stumps, self_complemented=True) elif self.estimators_generator is "Trees": - self.estimators_generator = TreeClassifiersGenerator( self.random_state, max_depth=self.max_depth, n_trees=self.n_stumps, self_complemented=True) + self.estimators_generator = TreeClassifiersGenerator(max_depth=self.max_depth, n_trees=self.n_stumps, self_complemented=True) + print(self.max_depth, self.n_stumps) self.estimators_generator.fit(X, y) self.classification_matrix = self._binary_classification_matrix(X) self.c_bounds = [] @@ -63,6 +63,7 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost): w= None self.collected_weight_vectors_ = {} self.collected_dual_constraint_violations_ = {} + start = time.time() for k in range(min(n, self.n_max_iterations if self.n_max_iterations is not None else np.inf)): # Find worst weak hypothesis given alpha. diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py index 7bcf4281..92a603e8 100644 --- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py +++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py @@ -13,7 +13,7 @@ class PregenClassifier(BaseBoost): n_stumps_per_attribute=self.n_stumps, self_complemented=self.self_complemented) elif generator is "Trees": - self.estimators_generator = TreeClassifiersGenerator(self.random_state, n_trees=self.n_stumps, max_depth=self.max_depth) + self.estimators_generator = TreeClassifiersGenerator(n_trees=self.n_stumps, max_depth=self.max_depth) self.estimators_generator.fit(X, neg_y) else: neg_y=None diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/MinCQGraalpyTree.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/MinCQGraalpyTree.py index 4376f73b..d5907d69 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/MinCQGraalpyTree.py +++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/MinCQGraalpyTree.py @@ -10,8 +10,7 @@ class MinCQGraalpyTree(RegularizedBinaryMinCqClassifier, BaseMonoviewClassifier) def __init__(self, random_state=None, mu=0.01, self_complemented=True, n_stumps_per_attribute=1, max_depth=2, **kwargs): super(MinCQGraalpyTree, self).__init__(mu=mu, - estimators_generator=TreeClassifiersGenerator(random_state=random_state, - n_trees=n_stumps_per_attribute, + estimators_generator=TreeClassifiersGenerator(n_trees=n_stumps_per_attribute, max_depth=max_depth, self_complemented=self_complemented), ) -- GitLab