def fitWithAlreadySaved(self, saveModel = True, folder = "data/dataForMeta/"): print("reading already saved features in "+folder) metaFeatures = np.loadtxt(folder + "MetaFeatures_K"+str(self.K)+"_Kp"+str(self.Kp)+".csv", delimiter=",") metaResponse = np.loadtxt(folder + "MetaResponse_K"+str(self.K)+"_Kp"+str(self.Kp)+".csv", delimiter = "\n") print("We are fitting already computed features in "+folder) print("shape of the feature matrix: " + str(metaFeatures.shape)) self.fitMetaCls(metaFeatures,metaResponse) print("done!") if saveModel: Helpers.shraniModel(self.metaCls, "data/dataForMeta/metaModels/"+self.metaCls.name+"/"+self.metaCls.name+".p")
def findParameters(folder = "data/dataForMeta/ostanek/"): """ V funkciji zaganjamo algoritem MetaDES na diskretnem naboru parametrov. Za vsako iteracijo shranimo zgrajen model, shranimo rezultat po decilih in shranimo izrisan graf, ki nam zraven rezultata algoritma MetaDes izrise se rezultat vseh algoritmov, ki so bili uporabljeni v ensemblu MetaDES. :return: """ XMeta, YMeta, XSel, YSel, XTest, YTest = readForMeta2(folder = folder) nb = GaussianNB()#meta classifier for metaDes nb.name="Bayes" rf = RandomForestClassifier(n_estimators=1000, n_jobs=2) rf.name="rf" elm = GenELMClassifier(hidden_layer = RandomLayer(n_hidden = 400, activation_func = 'multiquadric', alpha=1)) elm.name="elm" lr = LogisticRegression() lr.name= "lr" metaClassifiers = [lr, elm] hCs = [1.0, 0.5] nrNeigh = [305]#, 1000, 3000] modes = ["weighted"] metrics = ["l2", "chebyshev"]#BallTree.valid_metrics metaClsModes = ["combined"] normalizeMetaFeatures = [True, False] competenceTressholds = [0.4,0.5,0.6] # metaDes = MetaDES(0.8,1000, 50, lr, competenceTresshold=0.5, mode="weightedAll") YCaMeta = readClsResponse("Meta", folder=folder) #we read all classifications for meta dataset YCaSel = readClsResponse("Sel", folder = folder) YCaTest = readClsResponse("Test", folder = folder) nrOfTrials = 0 print("we are testing for %d neighbours" %nrNeigh[0]) allTrials = len(nrNeigh)*len(hCs)*len(modes)*len(metrics)*len(metaClassifiers)*len(metaClsModes)*len(normalizeMetaFeatures) print("We will have %d trials" %allTrials) for nrN in nrNeigh: for hC in hCs: for mode in modes: for metric in metrics: try: metaDes = MetaDES(hC,nrN, nrN, lr, competenceTresshold=0.5, mode=mode, metric=metric) print("calculating meta features...") metaDes.fit(XMeta, YMeta, YCaMeta, folder = folder) for cls in metaClassifiers: for metaClsMode in metaClsModes: for normalizeMetaFeat in normalizeMetaFeatures: metaDes.metaClsMode = metaClsMode metaDes.metaCls = cls metaDes.normalizeMetaFeat = normalizeMetaFeat name = "metaDes_hC"+str(metaDes.hC)+\ "_K"+str(metaDes.K)+\ "_Kp"+str(metaDes.Kp)+\ "_mode"+metaDes.mode+\ "_competence"+str(metaDes.competenceTresshold)+\ "_cls"+metaDes.metaCls.name+\ "_metric"+metaDes.metric+\ "_metaClsMode"+metaDes.metaClsMode+\ "_normMetaFeat" + str(metaDes.normalizeMetaFeat) nrOfTrials += 1 print("Fitting %d/%d trial" %(nrOfTrials,allTrials)) metaDes.fitWithAlreadySaved(saveModel = False, folder = folder) #if we already computed features responseTest = metaDes.predict_proba(XTest, YCaTest, XSel, YSel, YCaSel)[:,1] plotClassifiersAndSaveResult(YTest,YCaTest, responseTest, name, folder=folder) #we save figure and save results Helpers.shraniModel(metaDes,folder+"models/"+name+"/") #we save fitted model except Exception as e: allTrials -= 1 with open(folder+"error.log", "a") as fw: fw.write("We were executing "+name+"\n") fw.write(str(traceback.format_exc())+"\n\n\n***************************************") print(str(e))