diff --git a/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py b/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py index 67cb73960fe5f701831eea863e8784cd54b0e084..8aa89473358401a8ec20846bf76ba500fc872511 100644 --- a/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py +++ b/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py @@ -125,9 +125,9 @@ def initConstants(args, X, classificationIndices, labelsNames, name, directory): learningRate = float(len(classificationIndices[0])) / (len(classificationIndices[0]) + len(classificationIndices[1])) labelsString = "-".join(labelsNames) CL_type_string = CL_type - - outputFileName = directory + CL_type_string + "/" + feat + "/" + "Results-" + CL_type_string + "-" + labelsString + \ - '-learnRate' + str(learningRate) + '-' + name + "-" + feat + "-" + timestr = time.strftime("%Y_%m_%d-%H:%M:%S") + outputFileName = directory + CL_type_string + "/" + feat + "/" + timestr + "-Results-" + CL_type_string + "-" + labelsString + \ + '-learnRate_{0:.2f}'.format(learningRate) + '-' + name + "-" + feat + "-" if not os.path.exists(os.path.dirname(outputFileName)): try: os.makedirs(os.path.dirname(outputFileName)) diff --git a/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py b/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py index 02bb0ec78811f421f0420011e2708f22165c37e2..bf929a2fce7fbf6458047066b4e5f7fd11cc1bf5 100644 --- a/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py +++ b/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py @@ -40,12 +40,12 @@ def initConstants(kwargs, classificationIndices, metrics, name, nbCores, KFolds, def saveResults(LABELS_DICTIONARY, stringAnalysis, views, classifierModule, classificationKWARGS, directory, learningRate, name, imagesAnalysis): labelsSet = set(LABELS_DICTIONARY.values()) logging.info(stringAnalysis) - featureString = "-".join(views) + viewsString = "-".join(views) labelsString = "-".join(labelsSet) - timestr = time.strftime("%Y%m%d-%H%M%S") + timestr = time.strftime("%Y_%m_%d-%H:%M:%S") CL_type_string = classifierModule.genName(classificationKWARGS) - outputFileName = directory + "/" + CL_type_string + "/" + timestr + "Results-" + CL_type_string + "-" + featureString + '-' + labelsString + \ - '-learnRate' + str(learningRate) + '-' + name + outputFileName = directory + "/" + CL_type_string + "/" + timestr + "-Results-" + CL_type_string + "-" + viewsString + '-' + labelsString + \ + '-learnRate_{0:.2f}'.format(learningRate) + '-' + name if not os.path.exists(os.path.dirname(outputFileName)): try: os.makedirs(os.path.dirname(outputFileName)) diff --git a/Code/MonoMultiViewClassifiers/Multiview/analyzeResults.py b/Code/MonoMultiViewClassifiers/Multiview/analyzeResults.py index 48c91ff57e2a846dfb149c1e6699e217c0f17ab8..887e6da3dc8f3d9bde2561e88ccc88ce91b5761a 100644 --- a/Code/MonoMultiViewClassifiers/Multiview/analyzeResults.py +++ b/Code/MonoMultiViewClassifiers/Multiview/analyzeResults.py @@ -77,6 +77,6 @@ def execute(classifier, trainLabels, metricsScores = getMetricsScores(metrics, trainLabels, testLabels, validationIndices, learningIndices, labels) stringAnalysis += printMetricScore(metricsScores, metrics) - stringAnalysis += "\n\n" + classifier.getSpecificAnalysis(classificationKWARGS) + stringAnalysis += "\n\n Interpretation : \n\n" + classifier.getSpecificAnalysis(classificationKWARGS) imagesAnalysis = {} return stringAnalysis, imagesAnalysis, metricsScores \ No newline at end of file diff --git a/Code/MonoMultiViewClassifiers/MultiviewClassifiers/FatSCMLateFusion/FatSCMLateFusionModule.py b/Code/MonoMultiViewClassifiers/MultiviewClassifiers/FatSCMLateFusion/FatSCMLateFusionModule.py index 6037b54b7b0a6823e5942d6f37b8299bf7a18952..8bdf0060ba3c9c7e1c7b8c2cf562b6487ea021ad 100644 --- a/Code/MonoMultiViewClassifiers/MultiviewClassifiers/FatSCMLateFusion/FatSCMLateFusionModule.py +++ b/Code/MonoMultiViewClassifiers/MultiviewClassifiers/FatSCMLateFusion/FatSCMLateFusionModule.py @@ -87,7 +87,7 @@ class FatSCMLateFusionClass: return "p : "+str(self.p)+", max_aributes : "+str(self.max_attributes)+", model : "+self.model def getSpecificAnalysis(self, classificationKWARGS): - stringAnalysis = '' + stringAnalysis = 'Rules used : ' + str(self.SCMClassifier.clf.model_) return stringAnalysis diff --git a/Code/MonoMultiViewClassifiers/ResultAnalysis.py b/Code/MonoMultiViewClassifiers/ResultAnalysis.py index 45d935f9cde8948e140cfb7d60d6035c1d9b8182..30cbe64323a31995977bf40d40a8902ab7587d1a 100644 --- a/Code/MonoMultiViewClassifiers/ResultAnalysis.py +++ b/Code/MonoMultiViewClassifiers/ResultAnalysis.py @@ -126,7 +126,7 @@ def publishMetricsGraphs(metricsScores, directory, databaseName, labelsNames): testScores = metricScores["testScores"] names = metricScores["classifiersNames"] nbResults = len(testScores) - fileName = directory + databaseName +"-"+"vs".join(labelsNames)+ "-" + metricName + ".png" + fileName = directory + time.strftime("%Y%m%d-%H%M%S") + databaseName +"-"+"_vs_".join(labelsNames)+ "-" + metricName + ".png" plotMetricOneIter(trainScores, testScores, names, nbResults, metricName, fileName) logging.debug("Done:\t Biclass score graph generation for " + metricName) @@ -167,20 +167,20 @@ def publishExampleErrors(exampleErrors, directory, databaseName, labelsNames, mi borderaxespad=0, ncol=3) fig.tight_layout() - fig.savefig(directory + databaseName +"-"+"vs".join(labelsNames)+ "-error_analysis.png", bbox_inches="tight") + fig.savefig(directory + time.strftime("%Y%m%d-%H%M%S") + databaseName +"-"+"_vs_".join(labelsNames)+ "-error_analysis.png", bbox_inches="tight") plt.close() logging.debug("Done:\t Biclass Label analysis figure generation") logging.debug("Start:\t Biclass Error by example figure generation") errorOnExamples = -1*np.sum(data, axis=1)/nbIter+nbClassifiers - np.savetxt(directory + "-clf_errors_doubled.csv", data, delimiter=",") - np.savetxt(directory + "-example_errors.csv", temp_data, delimiter=",") + np.savetxt(directory + "clf_errors_doubled.csv", data, delimiter=",") + np.savetxt(directory + "example_errors.csv", temp_data, delimiter=",") fig, ax = plt.subplots() x = np.arange(nbExamples) plt.bar(x, errorOnExamples) plt.ylim([0,nbClassifiers]) plt.title("Number of classifiers that failed to classify each example") - fig.savefig(directory + databaseName +"-"+"vs".join(labelsNames)+ "-example_errors.png") + fig.savefig(directory + time.strftime("%Y%m%d-%H%M%S") + databaseName +"-"+"_vs_".join(labelsNames)+ "-example_errors.png") plt.close() logging.debug("Done:\t Biclass Error by example figure generation") @@ -326,20 +326,20 @@ def publishMulticlassExmapleErrors(multiclassResults, directories, databaseName, green_patch = mpatches.Patch(color='green', label='Classifier succeded') plt.legend(handles=[red_patch, green_patch], bbox_to_anchor=(0,1.02,1,0.2), loc="lower left",mode="expand", borderaxespad=0, ncol=2) fig.tight_layout() - fig.savefig(directory + time.strftime("%Y%m%d-%H%M%S") + "-" + databaseName +"-error_analysis.png", bbox_inches="tight") + fig.savefig(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-" + databaseName +"-error_analysis.png", bbox_inches="tight") plt.close() logging.debug("Done:\t Label analysis figure generation") logging.debug("Start:\t Error by example figure generation") errorOnExamples = -1*np.sum(data, axis=1)/nbIter+nbClassifiers - np.savetxt(directory + time.strftime("%Y%m%d-%H%M%S") + "-clf_errors_doubled.csv", data, delimiter=",") - np.savetxt(directory + time.strftime("%Y%m%d-%H%M%S") + "-example_errors.csv", temp_data, delimiter=",") + np.savetxt(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-clf_errors_doubled.csv", data, delimiter=",") + np.savetxt(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-example_errors.csv", temp_data, delimiter=",") fig, ax = plt.subplots() x = np.arange(nbExamples) plt.bar(x, errorOnExamples) plt.ylim([0,nbClassifiers]) plt.title("Number of classifiers that failed to classify each example") - fig.savefig(directory + time.strftime("%Y%m%d-%H%M%S") + "-" + databaseName +"-example_errors.png") + fig.savefig(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-" + databaseName +"-example_errors.png") plt.close() logging.debug("Done:\t Error by example figure generation") @@ -451,7 +451,7 @@ def publishIterBiclassMetricsScores(iterResults, directory, labelsDictionary, cl ax.set_xticks(np.arange(nbResults) + barWidth) ax.set_xticklabels(names, rotation="vertical") f.tight_layout() - f.savefig(currentDirectory + time.strftime("%Y%m%d-%H%M%S") + "-" + dataBaseName + "-Mean_on_" + f.savefig(currentDirectory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-" + dataBaseName + "-Mean_on_" + str(statsIter) + "_iter-" + metricName + ".png") plt.close() @@ -491,7 +491,7 @@ def publishIterBiclassExampleErrors(iterResults, directory, labelsDictionary, cl cbar = fig.colorbar(cax, ticks=[-100*statsIter/2, 0, statsIter]) cbar.ax.set_yticklabels(['Unseen', 'Always Wrong', 'Always Right']) fig.tight_layout() - fig.savefig(currentDirectory + time.strftime("%Y%m%d-%H%M%S") + "-error_analysis.png") + fig.savefig(currentDirectory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-error_analysis.png") plt.close() logging.debug("Done:\t Global label analysis figure generation") @@ -542,7 +542,7 @@ def publishIterMulticlassMetricsScores(iterMulticlassResults, classifiersNames, ax.set_xticks(np.arange(nbResults) + barWidth) ax.set_xticklabels(names, rotation="vertical") f.tight_layout() - f.savefig(directory + time.strftime("%Y%m%d-%H%M%S") + "-" + dataBaseName + "-Mean_on_" + f.savefig(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-" + dataBaseName + "-Mean_on_" + str(statsIter) + "_iter-" + metricName + ".png") plt.close() @@ -570,14 +570,14 @@ def publishIterMulticlassExampleErrors(iterMulticlassResults, directory, classif logging.debug("Start:\t Global error by example figure generation") errorOnExamples = -1 * np.sum(data, axis=1) + (nbClassifiers*statsIter) - np.savetxt(directory + time.strftime("%Y%m%d-%H%M%S") + "-clf_errors.csv", data, delimiter=",") - np.savetxt(directory + time.strftime("%Y%m%d-%H%M%S") + "-example_errors.csv", errorOnExamples, delimiter=",") + np.savetxt(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-clf_errors.csv", data, delimiter=",") + np.savetxt(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-example_errors.csv", errorOnExamples, delimiter=",") fig, ax = plt.subplots() x = np.arange(nbExamples) plt.bar(x, errorOnExamples) plt.ylim([0,nbClassifiers*statsIter]) plt.title("Number of classifiers that failed to classify each example") - fig.savefig(directory + time.strftime("%Y%m%d-%H%M%S") + "-example_errors.png") + fig.savefig(directory + time.strftime("%Y_%m_%d-%H:%M:%S") + "-example_errors.png") plt.close() logging.debug("Done:\t Global error by example figure generation") diff --git a/Code/MonoMultiViewClassifiers/utils/Interpret.py b/Code/MonoMultiViewClassifiers/utils/Interpret.py index 03bf3c7d38ce7cb1a60da8ad1af4d36ba7817bce..dc816ac35d50a330fdaf5835106f3da814470a4d 100644 --- a/Code/MonoMultiViewClassifiers/utils/Interpret.py +++ b/Code/MonoMultiViewClassifiers/utils/Interpret.py @@ -21,12 +21,12 @@ def getFeatureImportance(classifier, directory, interpretString=""): ax.yaxis.set_major_formatter(formatter) plt.bar(x, featureImportancesSorted) plt.title("Importance depending on feature") - fig.savefig(directory + "-feature_importances.png") + fig.savefig(directory + "feature_importances.png") plt.close() featuresImportancesDict = dict((featureIndex, featureImportance) for featureIndex, featureImportance in enumerate(featureImportances) if featureImportance != 0) - with open(directory+'-feature_importances.pickle', 'wb') as handle: + with open(directory+'feature_importances.pickle', 'wb') as handle: pickle.dump(featuresImportancesDict, handle) interpretString += "Feature importances : \n" for featureIndex, featureImportance in zip(featureIndicesSorted, featureImportancesSorted):