diff --git a/multiview_platform/MonoMultiViewClassifiers/ExecClassif.py b/multiview_platform/MonoMultiViewClassifiers/ExecClassif.py index 6519874e25f81d98d4aaa9cc9534b5b8d28ef623..ca34a476f67201173e31b0f76eba6739d8a950f9 100644 --- a/multiview_platform/MonoMultiViewClassifiers/ExecClassif.py +++ b/multiview_platform/MonoMultiViewClassifiers/ExecClassif.py @@ -67,16 +67,16 @@ def initBenchmark(args): return benchmark -def genViewsDictionnary(DATASET): +def genViewsDictionnary(DATASET, views): datasetsNames = DATASET.keys() viewsDictionary = {} for datasetName in datasetsNames: if datasetName[:4]=="View": viewName = DATASET.get(datasetName).attrs["name"] - if type(viewName)!=bytes: + if type(viewName)==bytes: + viewName = viewName.decode("utf-8") + if viewName in views: viewsDictionary[viewName] = int(datasetName[4:]) - else: - viewsDictionary[viewName.decode("utf-8")] = int(datasetName[4:]) return viewsDictionary @@ -120,6 +120,7 @@ def initMultiviewArguments(args, benchmark, views, viewsIndices, argumentDiction for multiviewAlgoName in benchmark["Multiview"]: multiviewPackage = getattr(MultiviewClassifiers, multiviewAlgoName) mutliviewModule = getattr(multiviewPackage, multiviewAlgoName+"Module") + multiviewArguments += mutliviewModule.getArgs(args, benchmark, views, viewsIndices, randomState, directory, resultsMonoview, classificationIndices) argumentDictionaries["Multiview"] = multiviewArguments @@ -179,7 +180,6 @@ def execOneBenchmark(coreIndex=-1, LABELS_DICTIONARY=None, directory=None, class resultsMonoview, labelsNames = benchmarkInit(directory, classificationIndices, labels, LABELS_DICTIONARY, kFolds) - logging.debug("Start:\t Monoview benchmark") resultsMonoview += [ExecMonoview_multicore(directory, args.name, labelsNames, classificationIndices, kFolds, coreIndex, args.type, args.pathF, randomState, labels, @@ -261,12 +261,12 @@ def execOneBenchmarkMonoCore(DATASET=None, LABELS_DICTIONARY=None, directory=Non logging.debug("Start:\t Monoview benchmark") for arguments in argumentDictionaries["Monoview"]: kwargs = arguments["args"] - views = [DATASET.get("View" + str(viewIndex)).attrs["name"] - if type(DATASET.get("View" + str(viewIndex)).attrs["name"])!=bytes - else DATASET.get("View" + str(viewIndex)).attrs["name"].decode("utf-8") - for viewIndex in range(DATASET.get("Metadata").attrs["nbView"])] - neededViewIndex = views.index(kwargs["feat"]) - X = DATASET.get("View" + str(neededViewIndex)) + #views = [DATASET.get("View" + str(viewIndex)).attrs["name"] + # if type(DATASET.get("View" + str(viewIndex)).attrs["name"])!=bytes + # else DATASET.get("View" + str(viewIndex)).attrs["name"].decode("utf-8") + # for viewIndex in range(DATASET.get("Metadata").attrs["nbView"])] + #neededViewIndex = views.index(kwargs["feat"]) + X = DATASET.get(kwargs["feat"]) Y = labels resultsMonoview += [ExecMonoview(directory, X, Y, args.name, labelsNames, classificationIndices, kFolds, 1, args.type, args.pathF, randomState, @@ -275,6 +275,7 @@ def execOneBenchmarkMonoCore(DATASET=None, LABELS_DICTIONARY=None, directory=Non logging.debug("Done:\t Monoview benchmark") logging.debug("Start:\t Multiview arguments initialization") + argumentDictionaries = initMultiviewArguments(args, benchmark, views, viewsIndices, argumentDictionaries, randomState, directory, resultsMonoview, classificationIndices) logging.debug("Done:\t Multiview arguments initialization") @@ -361,14 +362,13 @@ def execClassif(arguments): # if not views: # raise ValueError("Empty views list, modify selected views to match dataset " + args.views) - viewsDictionary = genViewsDictionnary(DATASET) - nbViews = DATASET.get("Metadata").attrs["nbView"] - views = [DATASET.get("View"+str(viewIndex)).attrs["name"] - if type(DATASET.get("View"+str(viewIndex)).attrs["name"])!=bytes - else DATASET.get("View"+str(viewIndex)).attrs["name"].decode("utf-8") - for viewIndex in range(nbViews)] + # nbViews = DATASET.get("Metadata").attrs["nbView"] + + views, viewsIndices, allViews = execution.initViews(DATASET, args) + viewsDictionary = genViewsDictionnary(DATASET, views) + nbViews = len(views) NB_CLASS = DATASET.get("Metadata").attrs["nbClass"] metrics = [metric.split(":") for metric in args.CL_metrics] @@ -397,7 +397,7 @@ def execClassif(arguments): labelsCombinations, indicesMulticlass, hyperParamSearch, args, kFolds, statsIterRandomStates, metrics, - argumentDictionaries, benchmark, nbViews, views) + argumentDictionaries, benchmark, nbViews, views, viewsIndices) nbMulticlass = len(labelsCombinations) diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/FatLateFusion/FatLateFusionModule.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/FatLateFusion/FatLateFusionModule.py index 57c8fa3636eda4a0e3e7de3229add48ed8f6cff4..e2b886c16b9d8f1e69684f928dd07328490cab76 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/FatLateFusion/FatLateFusionModule.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/FatLateFusion/FatLateFusionModule.py @@ -20,7 +20,7 @@ def getArgs(args, benchmark, views, viewsIndices, randomState, directory, result else: monoviewDecisions = np.array([genMulticlassMonoviewDecision(monoviewResult, classificationIndices) for monoviewResult in resultsMonoview]) arguments = {"CL_type": "FatLateFusion", - "views": ["all"], + "views": views, "NB_VIEW": len(resultsMonoview), "viewsIndices": range(len(resultsMonoview)), "NB_CLASS": len(args.CL_classes), @@ -38,7 +38,7 @@ def genParamsSets(classificationKWARGS, randomState, nIter=1): """Used to generate parameters sets for the random hyper parameters optimization function""" nbMonoviewClassifiers = len(classificationKWARGS["monoviewDecisions"]) weights = [randomState.random_sample(nbMonoviewClassifiers) for _ in range(nIter)] - nomralizedWeights = [[weightVector/np.sum(weightVector)] for weightVector in weights] + nomralizedWeights = [[weightVector/np.sum(weightVector)] for weightVector in weights] return nomralizedWeights diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py index 71f4a80a246c91c4918f6c0089300d1ef47f0e05..15372bf5e5967a3ace229e529a4be65417f4b16b 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusion.py @@ -51,13 +51,13 @@ def intersect(allClassifersNames, directory, viewsIndices, resultsMonoview, clas trainLabels = np.genfromtxt(directory + "train_labels.csv", delimiter=",").astype(np.int16) length = len(trainLabels) for resultMonoview in resultsMonoview: - if resultMonoview[1][0] in classifiersNames[resultMonoview[0]]: + if resultMonoview[1][0] in classifiersNames[viewsIndices.index(resultMonoview[0])]: classifierIndex = classifiersNames.index(resultMonoview[1][0]) wrongSets[resultMonoview[0]][classifierIndex] = np.where( trainLabels + resultMonoview[1][3][classificationIndices[0]] == 1)[0] else: - classifiersNames[resultMonoview[0]].append(resultMonoview[1][0]) - wrongSets[resultMonoview[0]].append( + classifiersNames[viewsIndices.index(resultMonoview[0])].append(resultMonoview[1][0]) + wrongSets[viewsIndices.index(resultMonoview[0])].append( np.where(trainLabels + resultMonoview[1][3][classificationIndices[0]] == 1)[0]) combinations = itertools.combinations_with_replacement(range(len(classifiersNames[0])), nbViews) @@ -106,12 +106,12 @@ def getClassifiers(selectionMethodName, allClassifiersNames, directory, viewsInd return classifiersNames -def getConfig(classifiersNames, resultsMonoview): +def getConfig(classifiersNames, resultsMonoview, viewsIndices): classifiersConfigs = [0 for _ in range(len(classifiersNames))] - for viewIndex, classifierName in enumerate(classifiersNames): + for classifierIndex, classifierName in enumerate(classifiersNames): for resultMonoview in resultsMonoview: - if resultMonoview[0] == viewIndex and resultMonoview[1][0] == classifierName: - classifiersConfigs[viewIndex] = resultMonoview[1][4] + if resultMonoview[0] == viewsIndices[classifierIndex] and resultMonoview[1][0] == classifierName: + classifiersConfigs[classifierIndex] = resultMonoview[1][4] return classifiersConfigs @@ -135,7 +135,6 @@ class LateFusionClassifier(object): viewsIndices = np.arange(DATASET.get("Metadata").attrs["nbView"]) if trainIndices is None: trainIndices = range(DATASET.get("Metadata").attrs["datasetLength"]) - self.monoviewClassifiers = Parallel(n_jobs=self.nbCores)( delayed(fitMonoviewClassifier)(self.monoviewClassifiersNames[index], getV(DATASET, viewIndex, trainIndices), diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/BayesianInference.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/BayesianInference.py index a040afb2af2bef4b1c87710519e1c1894fff18df..1eade801dd230db22d39f6016fcffad8addfacce 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/BayesianInference.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/BayesianInference.py @@ -35,7 +35,7 @@ def getArgs(benchmark, args, views, viewsIndices, directory, resultsMonoview, cl for monoviewClassifierModule, classifierConfig in zip(monoviewClassifierModules, args.FU_L_cl_config)] else: - classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview) + classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview, viewsIndices) arguments = {"CL_type": "Fusion", "views": views, "NB_VIEW": len(views), @@ -57,7 +57,6 @@ class BayesianInference(LateFusionClassifier): LateFusionClassifier.__init__(self, randomState, kwargs['classifiersNames'], kwargs['classifiersConfigs'], kwargs["monoviewSelection"], NB_CORES=NB_CORES) - if kwargs['fusionMethodConfig'][0] is None or kwargs['fusionMethodConfig'] == ['']: self.weights = np.array([1.0 for _ in kwargs['classifiersNames']]) else: diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/MajorityVoting.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/MajorityVoting.py index 6b0b06926b8305f95734cb1e72e513442475b026..33b5c2fb1f1c76d74b41f1f141c53119a9a9c270 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/MajorityVoting.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/MajorityVoting.py @@ -35,7 +35,7 @@ def getArgs(benchmark, args, views, viewsIndices, directory, resultsMonoview, cl for monoviewClassifierModule, classifierConfig in zip(monoviewClassifierModules, args.FU_L_cl_config)] else: - classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview) + classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview, viewsIndices) arguments = {"CL_type": "Fusion", "views": views, "NB_VIEW": len(views), diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SCMForLinear.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SCMForLinear.py index 623e58ac05ed063d3a47147073474e1ed40ed86e..8e70b8f30b96a1d699b3ee01f42eb7f7f4556851 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SCMForLinear.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SCMForLinear.py @@ -73,7 +73,7 @@ def getArgs(benchmark, args, views, viewsIndices, directory, resultsMonoview, cl for monoviewClassifierModule, classifierConfig in zip(monoviewClassifierModules, args.FU_L_cl_config)] else: - classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview) + classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview, viewsIndices) arguments = {"CL_type": "Fusion", "views": views, "NB_VIEW": len(views), @@ -188,4 +188,4 @@ class SCMForLinear(LateFusionClassifier): monoviewClassifiersNames): monoviewClassifierModule = getattr(MonoviewClassifiers, monoviewClassifierName) configString += monoviewClassifierModule.getConfig(monoviewClassifierConfig) - return configString \ No newline at end of file + return configString diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SVMForLinear.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SVMForLinear.py index e574d7547cf3c9a35fd83fdc0d401a63a8d71321..ce24271704664a96f3c4009a4073f496d601115a 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SVMForLinear.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/SVMForLinear.py @@ -33,7 +33,7 @@ def getArgs(benchmark, args, views, viewsIndices, directory, resultsMonoview, cl for monoviewClassifierModule, classifierConfig in zip(monoviewClassifierModules, args.FU_L_cl_config)] else: - classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview) + classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview, viewsIndices) arguments = {"CL_type": "Fusion", "views": views, "NB_VIEW": len(views), diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/WeightedLinear.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/WeightedLinear.py index 44783efd4fd4698b45c22079e2722f81523511c4..db86de2e95ac25b0c80c6e0d6bea991967f0c5b8 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/WeightedLinear.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/Fusion/Methods/LateFusionPackage/WeightedLinear.py @@ -35,7 +35,7 @@ def getArgs(benchmark, args, views, viewsIndices, directory, resultsMonoview, cl for monoviewClassifierModule, classifierConfig in zip(monoviewClassifierModules, args.FU_L_cl_config)] else: - classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview) + classifiersConfigs = getConfig(args.FU_L_cl_names, resultsMonoview, viewsIndices) arguments = {"CL_type": "Fusion", "views": views, "NB_VIEW": len(views), diff --git a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/diversity_utils.py b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/diversity_utils.py index c02a6f8b0bcc8bf0cdefc062a8b8114a64709d40..a7ddc7e77f5d7070cb403e949d0d7c9ff5d3b47c 100644 --- a/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/diversity_utils.py +++ b/multiview_platform/MonoMultiViewClassifiers/MultiviewClassifiers/diversity_utils.py @@ -238,4 +238,3 @@ class DiversityFusionClass: def getSpecificAnalysis(self, classificationKWARGS): stringAnalysis = "Classifiers used for each view : " + ', '.join(self.classifiersNames) return stringAnalysis - diff --git a/multiview_platform/MonoMultiViewClassifiers/utils/execution.py b/multiview_platform/MonoMultiViewClassifiers/utils/execution.py index ad9573678ed7fe6ee8bedcefc449481fc79c793a..18770b47e4b74b991a2678e073e5d353f836fc62 100644 --- a/multiview_platform/MonoMultiViewClassifiers/utils/execution.py +++ b/multiview_platform/MonoMultiViewClassifiers/utils/execution.py @@ -327,13 +327,15 @@ def initViews(DATASET, args): if type(viewName) == bytes: viewName = viewName.decode("utf-8") if viewName in allowedViews: + viewIndex = int(viewName[4:]) views.append(viewName) - viewsIndices.append(viewsIndices) - print(views) - quit() + viewsIndices.append(viewIndex) return views, viewsIndices, allViews else: - views = [str(DATASET.get("View" + str(viewIndex)).attrs["name"]) for viewIndex in range(NB_VIEW)] + views = [str(DATASET.get("View" + str(viewIndex)).attrs["name"]) + if type(DATASET.get("View" + str(viewIndex)).attrs["name"])!=bytes + else DATASET.get("View" + str(viewIndex)).attrs["name"].decode("utf-8") + for viewIndex in range(NB_VIEW)] viewsIndices = np.arange(NB_VIEW) allViews = views return views, viewsIndices, allViews @@ -351,7 +353,7 @@ def genDirecortiesNames(directory, statsIter): def genArgumentDictionaries(labelsDictionary, directories, multiclassLabels, labelsCombinations, indicesMulticlass, hyperParamSearch, args, - kFolds, statsIterRandomStates, metrics, argumentDictionaries, benchmark, nbViews, views): + kFolds, statsIterRandomStates, metrics, argumentDictionaries, benchmark, nbViews, views, viewsIndices): benchmarkArgumentDictionaries = [] for combinationIndex, labelsCombination in enumerate(labelsCombinations): for iterIndex, iterRandomState in enumerate(statsIterRandomStates): @@ -373,7 +375,7 @@ def genArgumentDictionaries(labelsDictionary, directories, multiclassLabels, lab "argumentDictionaries": argumentDictionaries, "benchmark": benchmark, "views": views, - "viewsIndices": range(nbViews), + "viewsIndices": viewsIndices, "flag": [iterIndex, labelsCombination]} benchmarkArgumentDictionaries.append(benchmarkArgumentDictionary) return benchmarkArgumentDictionaries