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