def __init__(self, inFolder, filename, algo,pca, whiten, outFolder='../resultData/nucleus',n_iteration =10, **kwargs): ''' pca : None pour pas de PCA, nombre de composantes principales a garder sinon dans kwargs je mets les parametres de la methode de clustering n'oublions pas qu'il n'y a que 3,000 elements dans le training set donc tout va bien :)) ''' assert algo in methods, 'Given algorithm is not implemented' #assert sorted(params[algo]) == sorted(kwargs.keys()), 'Parameters for given algorithm are not given' self.file=os.path.join(inFolder, filename) self.algo = algo self.iterations= n_iteration self.outFolder = outFolder self.outFile = outFile.format(self.algo) self.parameters = kwargs self.pca = pca self.whiten= whiten try: self.k = self.parameters["n_clusters"] except KeyError: self.k = self.parameters["n_components"]
def plotMoy(outFolder='../resultData/nucleus', show=False): f=p.figure(figsize=(24,17)) for i, algo in enumerate(["gaussianmixture", 'mini-batchk-means', 'kernelk-means','spectralclustering']): file_=open(os.path.join(outFolder, outFile.format(algo)), 'r') resultDict = pickle.load(file_); file_.close() perClass = []; perCluster = [] for parameter_set in resultDict: currLperClass=[] currLperCluster = [] for morphoClass in resultDict[parameter_set]: currLperClass.append(np.mean(resultDict[parameter_set][morphoClass][0])) currLperCluster.append(np.mean(resultDict[parameter_set][morphoClass][1])) perClass.append(currLperClass) perCluster.append(currLperCluster) ax=f.add_subplot(2,2,i) for k in range(len(perClass)): ax.errorbar(np.mean(perCluster[k]), np.mean(perClass[k]), xerr = np.std(perCluster[k]), yerr=np.std(perClass[k]), fmt = markers[methods.index(algo)], label = '{}'.format(algo)) ax.grid(True) ax.set_xlim(0,1) ax.set_ylim(0,1) ax.set_title("Algorithm {}, on average on all morphological classes".format(algo)) ax.set_xlabel("Nb of class elements in cluster/cluster size") ax.set_ylabel("Nb of class elements in cluster/class size") if show: p.show() else: p.savefig(os.path.join(outFolder, 'figure_MOY.png'.format(algo))) f=p.figure(figsize=(24,17)) for i, algo in enumerate(["gaussianmixture", 'mini-batchk-means', 'kernelk-means','spectralclustering']): file_=open(os.path.join(outFolder, outFile.format(algo)), 'r') resultDict = pickle.load(file_); file_.close() perClass = []; perCluster = [] for parameter_set in resultDict: currLperClass=[] currLperCluster = [] for morphoClass in resultDict[parameter_set]: currLperClass.append(np.mean(resultDict[parameter_set][morphoClass][2])) currLperCluster.append(np.mean(resultDict[parameter_set][morphoClass][3])) perClass.append(currLperClass) perCluster.append(currLperCluster) ax=f.add_subplot(2,2,i) for k in range(len(perClass)): ax.errorbar(np.mean(perCluster[k]), np.mean(perClass[k]), xerr = np.std(perCluster[k]), yerr=np.std(perClass[k]), fmt = markers[methods.index(algo)], label = '{}'.format(algo)) ax.grid(True) ax.set_xlim(0,1) ax.set_ylim(0,1) ax.set_title("Algorithm {}, on average on all morphological classes".format(algo)) ax.set_xlabel("Cluster entropy") ax.set_ylabel("Class entropy") if show: p.show() else: p.savefig(os.path.join(outFolder, 'figure_ENT_MOY.png'.format(algo)))