diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py index 143988785ae0ba35d42763d7c43d338c12d472e5..e0d532dc0a563ed2050e90560f236bc78d8f6bab 100644 --- a/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py +++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py @@ -161,7 +161,7 @@ def getHPs(classifierModule, hyperParamSearch, nIter, CL_type, X_train, y_train, outputFileName, classifierModule, KFolds=KFolds, nbCores=nbCores, metric=metrics[0], nIter=nIter) - logging.debug("Done:\t " + hyperParamSearch + "RandomSearch best settings") + logging.debug("Done:\t " + hyperParamSearch + " best settings") else: clKWARGS = kwargs[CL_type + "KWARGS"] return clKWARGS, testFoldsPreds diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py index dd7c33faa797818b226c20f62b3dd71832ba823a..30a342c3a0e1fd4f73e937b7782a612d7c38ddb0 100644 --- a/multiview_platform/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py +++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py @@ -1,5 +1,6 @@ from sklearn.model_selection import RandomizedSearchCV import numpy as np +from scipy.stats import uniform, randint from .. import Metrics from ..utils import HyperParameterSearch @@ -50,6 +51,29 @@ def genTestFoldsPreds(X_train, y_train, KFolds, estimator): testFoldsPreds = np.array([testFoldPreds[:minFoldLength] for testFoldPreds in testFoldsPreds]) return testFoldsPreds + +class CustomRandint: + def __init__(self, low=0, high=0, multiplier="e-"): + self.randint = randint(low, high) + self.multiplier = multiplier + + def rvs(self, random_state=None): + randinteger = self.randint.rvs(random_state=random_state) + if self.multiplier == "e-": + return 10 ** -randinteger + + +class CustomUniform: + def __init__(self, loc=0, state=1, multiplier="e-"): + self.uniform = uniform(loc, state) + self.multiplier = multiplier + + def rvs(self, random_state=None): + unif = self.uniform.rvs(random_state=random_state) + if self.multiplier == 'e-': + return 10 ** -unif + + # def isUseful(labelSupports, index, CLASS_LABELS, labelDict): # if labelSupports[labelDict[CLASS_LABELS[index]]] != 0: # labelSupports[labelDict[CLASS_LABELS[index]]] -= 1 diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py index b53ab51773c36fc32e835b1f662a12b73967687b..0d1ecb15ef01c801f883c7af4feae1bac8b8ab9b 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py +++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py @@ -19,9 +19,11 @@ from sklearn.base import BaseEstimator, ClassifierMixin from sklearn.pipeline import Pipeline from sklearn.model_selection import RandomizedSearchCV from sklearn.tree import DecisionTreeClassifier -from scipy.stats import randint +from scipy.stats import randint, uniform import numpy as np +from ..Monoview.MonoviewUtils import CustomUniform, CustomRandint + class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin): @@ -293,6 +295,10 @@ class CQBoost(CqBoostClassifier): return interpretString + + + + def canProbas(): return False @@ -311,7 +317,7 @@ def paramsToSet(nIter, randomState): """Used for weighted linear early fusion to generate random search sets""" paramsSet = [] for _ in range(nIter): - paramsSet.append({"mu": randomState.uniform(1e-02, 10**(-0.5)), + paramsSet.append({"mu": 10**-randomState.uniform(0.5, 1.5), "epsilon": 10**-randomState.randint(1, 15), "n_max_iterations": None}) return paramsSet @@ -331,8 +337,8 @@ def genPipeline(): def genParamsDict(randomState): - return {"classifier__mu": [0.001, 0.002], - "classifier__epsilon": [1e-08, 2e-08], + return {"classifier__mu": CustomUniform(loc=.5, state=2, multiplier='e-'), + "classifier__epsilon": CustomRandint(low=1, high=15, multiplier='e-'), "classifier__n_max_iterations": [None]} diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv2.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv2.py index 0039a4f4754cf3194bd07a33f2e83ab9b9337f86..839cd7c60ad96730c6a2857513d3f871a7316a68 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv2.py +++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv2.py @@ -7,21 +7,23 @@ from collections import defaultdict, OrderedDict import pandas as pd import sys from functools import partial -import numpy as np -from scipy.spatial import distance from sklearn.base import BaseEstimator, ClassifierMixin, TransformerMixin from sklearn.utils.validation import check_is_fitted from sklearn.preprocessing import LabelEncoder -from sklearn.tree import DecisionTreeClassifier -from sklearn.metrics.pairwise import rbf_kernel, linear_kernel -import numpy as np from sklearn.base import BaseEstimator, ClassifierMixin from sklearn.pipeline import Pipeline -from sklearn.model_selection import RandomizedSearchCV -from sklearn.tree import DecisionTreeClassifier -from scipy.stats import randint import numpy as np +# import numpy as np +# from scipy.spatial import distance +# from sklearn.tree import DecisionTreeClassifier +# from sklearn.metrics.pairwise import rbf_kernel, linear_kernel +# from sklearn.model_selection import RandomizedSearchCV +# from sklearn.tree import DecisionTreeClassifier +# from scipy.stats import randint + + +from ..Monoview.MonoviewUtils import CustomRandint, CustomUniform class ColumnGenerationClassifierv2(BaseEstimator, ClassifierMixin): def __init__(self, epsilon=1e-06, n_max_iterations=None, estimators_generator=None, dual_constraint_rhs=0, save_iteration_as_hyperparameter_each=None): @@ -350,8 +352,8 @@ def genPipeline(): def genParamsDict(randomState): - return {"classifier__mu": [0.001, 0.002], - "classifier__epsilon": [1e-08, 2e-08], + return {"classifier__mu": CustomUniform(loc=.5, state=2, multiplier='e-'), + "classifier__epsilon": CustomRandint(low=1, high=15, multiplier='e-'), "classifier__n_max_iterations": [None]}