From 95cf6d73e5fcd57a7e6ada5359738d2fe6771625 Mon Sep 17 00:00:00 2001
From: Baptiste Bauvin <baptiste.bauvin.1@ulaval.ca>
Date: Thu, 25 Jan 2018 21:32:31 +0100
Subject: [PATCH] Corrected an early fusion issue due tothe dictionnary usage
 in monoview classifiers

---
 .../MonoviewClassifiers/Adaboost.py                         | 4 ++--
 .../MonoviewClassifiers/DecisionTree.py                     | 5 +++--
 Code/MonoMultiViewClassifiers/MonoviewClassifiers/KNN.py    | 6 ++++--
 .../MonoviewClassifiers/RandomForest.py                     | 5 +++--
 Code/MonoMultiViewClassifiers/MonoviewClassifiers/SCM.py    | 4 +++-
 Code/MonoMultiViewClassifiers/MonoviewClassifiers/SGD.py    | 5 +++--
 .../MonoviewClassifiers/SVMLinear.py                        | 2 +-
 .../MonoMultiViewClassifiers/MonoviewClassifiers/SVMPoly.py | 2 +-
 Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMRBF.py | 2 +-
 .../Fusion/Methods/EarlyFusionPackage/WeightedLinear.py     | 2 +-
 .../MultiviewClassifiers/Fusion/Methods/LateFusion.py       | 4 ++--
 11 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/Adaboost.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/Adaboost.py
index 73e2235e..7caafade 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/Adaboost.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/Adaboost.py
@@ -35,8 +35,8 @@ def paramsToSet(nIter, randomState):
     """Used for weighted linear early fusion to generate random search sets"""
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.randint(1, 15),
-                          DecisionTreeClassifier()])
+        paramsSet.append({"n_estimators": randomState.randint(1, 15),
+                          "base_estimator": DecisionTreeClassifier()})
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/DecisionTree.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/DecisionTree.py
index fe82b333..16512372 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/DecisionTree.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/DecisionTree.py
@@ -29,8 +29,9 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.randint(1, 300), randomState.choice(["gini", "entropy"]),
-                          randomState.choice(["best", "random"])])
+        paramsSet.append({"max_depth": randomState.randint(1, 300),
+                          "criterion": randomState.choice(["gini", "entropy"]),
+                          "splitter": randomState.choice(["best", "random"])})
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/KNN.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/KNN.py
index 2c784da6..d242580e 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/KNN.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/KNN.py
@@ -29,8 +29,10 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.randint(1, 20), randomState.choice(["uniform", "distance"]),
-                          randomState.choice(["auto", "ball_tree", "kd_tree", "brute"]), randomState.choice([1, 2])])
+        paramsSet.append({"n_neighbors": randomState.randint(1, 20),
+                          "weights": randomState.choice(["uniform", "distance"]),
+                          "algorithm": randomState.choice(["auto", "ball_tree", "kd_tree", "brute"]),
+                          "p": randomState.choice([1, 2])})
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/RandomForest.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/RandomForest.py
index f0955df8..2130acfb 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/RandomForest.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/RandomForest.py
@@ -30,8 +30,9 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.randint(1, 300), randomState.randint(1, 300),
-                          randomState.choice(["gini", "entropy"])])
+        paramsSet.append({"n_estimators": randomState.randint(1, 300),
+                          "max_depth": randomState.randint(1, 300),
+                          "criterion": randomState.choice(["gini", "entropy"])})
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SCM.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SCM.py
index bebfc0e5..28c09a13 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SCM.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SCM.py
@@ -63,7 +63,9 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.choice(["conjunction", "disjunction"]), randomState.randint(1, 15), randomState.random_sample()])
+        paramsSet.append({"model_type": randomState.choice(["conjunction", "disjunction"]),
+                          "max_rules": randomState.randint(1, 15),
+                          "p": randomState.random_sample()})
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SGD.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SGD.py
index 27d8c2df..c2082775 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SGD.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SGD.py
@@ -28,8 +28,9 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.choice(['log', 'modified_huber']),
-                          randomState.choice(["l1", "l2", "elasticnet"]), randomState.random_sample()])
+        paramsSet.append({"loss": randomState.choice(['log', 'modified_huber']),
+                          "penalty": randomState.choice(["l1", "l2", "elasticnet"]),
+                          "alpha": randomState.random_sample()})
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMLinear.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMLinear.py
index 9b354513..2517f5eb 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMLinear.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMLinear.py
@@ -26,7 +26,7 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.randint(1, 10000), ])
+        paramsSet.append({"C": randomState.randint(1, 10000), })
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMPoly.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMPoly.py
index 93abfc03..5c6aff00 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMPoly.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMPoly.py
@@ -26,7 +26,7 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.randint(1, 10000), randomState.randint(1, 30)])
+        paramsSet.append({"C": randomState.randint(1, 10000), "degree": randomState.randint(1, 30)})
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMRBF.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMRBF.py
index 85cca143..df99dc47 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMRBF.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/SVMRBF.py
@@ -26,7 +26,7 @@ def fit(DATASET, CLASS_LABELS, randomState, NB_CORES=1, **kwargs):
 def paramsToSet(nIter, randomState):
     paramsSet = []
     for _ in range(nIter):
-        paramsSet.append([randomState.randint(1, 10000), ])
+        paramsSet.append({"C": randomState.randint(1, 10000), })
     return paramsSet
 
 
diff --git a/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/EarlyFusionPackage/WeightedLinear.py b/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/EarlyFusionPackage/WeightedLinear.py
index c5f72cae..16fba3f0 100644
--- a/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/EarlyFusionPackage/WeightedLinear.py
+++ b/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/EarlyFusionPackage/WeightedLinear.py
@@ -87,7 +87,7 @@ class WeightedLinear(EarlyFusionClassifier):
 
     def setParams(self, paramsSet):
         self.weights = paramsSet[0]
-        self.monoviewClassifiersConfig = dict((str(index), param) for index, param in enumerate(paramsSet[1]))
+        self.monoviewClassifiersConfig = paramsSet[1]
 
     def predict_hdf5(self, DATASET, usedIndices=None, viewsIndices=None):
         if type(viewsIndices) == type(None):
diff --git a/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py b/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py
index ff6d3ea3..1ba4023f 100644
--- a/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py
+++ b/Code/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py
@@ -54,11 +54,11 @@ def intersect(allClassifersNames, directory, viewsIndices, resultsMonoview, clas
         if resultMonoview[1][0] in classifiersNames[resultMonoview[0]]:
             classifierIndex = classifiersNames.index(resultMonoview[1][0])
             wrongSets[resultMonoview[0]][classifierIndex] = np.where(
-                trainLabels + resultMonoview[1][3][classificationIndices[0]] == 1)
+                trainLabels + resultMonoview[1][3][classificationIndices[0]] == 1)[0]
         else:
             classifiersNames[resultMonoview[0]].append(resultMonoview[1][0])
             wrongSets[resultMonoview[0]].append(
-                np.where(trainLabels + resultMonoview[1][3][classificationIndices[0]] == 1))
+                np.where(trainLabels + resultMonoview[1][3][classificationIndices[0]] == 1)[0])
 
     combinations = itertools.combinations_with_replacement(range(len(classifiersNames[0])), nbViews)
     bestLen = length
-- 
GitLab