def gen(self, args): genFeats = featureManager.loadJson(config.getGenInFeatFilename(args)) genFeat = genFeats[0] scoreName = genFeat['name'] scoreFeats = genFeat['scoreFeats'] #wrap genFeats in [] to match data structure in train lines = self.formatLineDirect([genFeat]) #logging.printDebug(lines) allLines = map(lambda l: "0 " + l, lines) #logging.printDebug(allLines) #TODO: collect filenames SVMGenInputFilename = self.getGenInputFilename(args) with open(SVMGenInputFilename, 'w') as f: f.writelines(map(lambda x:x+"\n", allLines)) for featName in config.perfFeatsList: cmd = [self.genBinPath] cmd.append(SVMGenInputFilename) singleModelFilename= self.getSingleModelFilename(args, featName) cmd.append(singleModelFilename) perfFeatFilename= self.getGenOutputFilename(args, featName) cmd.append(perfFeatFilename) #logging.printDebug(" ".join(cmd)) subprocess.call(" ".join(cmd), shell=True) #TODO: read all perfFeatFilename, transform to dict and return perfFeats = {} for featName in config.perfFeatsList: #TODO: put all filename definition in one place #perfFeatFilename= self.getGenOutputFilename(args, featName) with open(perfFeatFilename, 'r') as f: lines = f.readlines() #dequantize q = quantizer.getQuantizerObj(self.getQuantizeFilename(args, featName)) realVals= q.dequantize(lines) #feat = map(float, lines) perfFeats[featName]=realVals #logging.printDebug(perfFeats) return featureManager.formatFeatFile(scoreName, {}, perfFeats)
def gen(self, args): genFeats = featureManager.loadJson(config.getGenInFeatFilename(args)) genFeat = genFeats[0] scoreName = genFeat['name'] scoreFeats = genFeat['scoreFeats'] #wrap genFeats in [] to match data structure in train lines = self.formatLineDirect([genFeat]) #logging.printDebug(lines) allLines = map(lambda l: "0 " + l, lines) #logging.printDebug(allLines) #TODO: collect filenames SVMGenInputFilename = self.getGenInputFilename(args) with open(SVMGenInputFilename, 'w') as f: f.writelines(map(lambda x: x + "\n", allLines)) for featName in config.perfFeatsList: cmd = [self.genBinPath] cmd.append(SVMGenInputFilename) singleModelFilename = self.getSingleModelFilename(args, featName) cmd.append(singleModelFilename) perfFeatFilename = self.getGenOutputFilename(args, featName) cmd.append(perfFeatFilename) #logging.printDebug(" ".join(cmd)) subprocess.call(" ".join(cmd), shell=True) #TODO: read all perfFeatFilename, transform to dict and return perfFeats = {} for featName in config.perfFeatsList: #TODO: put all filename definition in one place #perfFeatFilename= self.getGenOutputFilename(args, featName) with open(perfFeatFilename, 'r') as f: lines = f.readlines() #dequantize q = quantizer.getQuantizerObj( self.getQuantizeFilename(args, featName)) realVals = q.dequantize(lines) #feat = map(float, lines) perfFeats[featName] = realVals #logging.printDebug(perfFeats) return featureManager.formatFeatFile(scoreName, {}, perfFeats)
def train(self, args): #ex filenames: # trainFeat.json -> [quantizer] -> <perfFeatName>.train.dat # | | # +-> <perfFeatName>.quant | # +-------------------------------------------------------+ # +-> [svm^hmm] -> <perfFeatName>.model.bin trainFeats = featureManager.loadJson( config.getTrainInFeatFilename(args)) perfFeats = collectPerfFeats(trainFeats) #logging.printDebug(perfFeats) #for each perfFeature, a svmFeatFilename (quantized feat for svm^hmm) #and singleModelFilename (model file for svm^hmm) will be saved #scoreFeatLines = self.formatLine(scoreFeats) scoreFeatLines = self.formatLineDirect(trainFeats) for pkey, pval in perfFeats.items(): allLines = [("# " + pkey)] #TODO:quantize pval q = quantizer.getQuantizerObj(self.getQuantizeFilename(args, pkey)) quantizedVal = q.quantize(pval) lines = zip(map(str, quantizedVal), scoreFeatLines) #logging.printDebug(lines) allLines = map(lambda l: " ".join(l), lines) #logging.printDebug(allLines) svmFeatFilename = self.getTrainInputFilename(args, pkey) with open(svmFeatFilename, 'w') as f: f.writelines(map(lambda x: x + "\n", allLines)) cmd = [self.trainBinPath] if (config.svmhmm_c != None): cmd.append("-c " + str(config.svmhmm_c)) else: cmd.append("-c 0.01") cmd.append(svmFeatFilename) singleModelFilename = self.getSingleModelFilename(args, pkey) cmd.append(singleModelFilename) #logging.printDebug(" ".join(cmd)) subprocess.call(" ".join(cmd), shell=True)
def train(self, args): #ex filenames: # trainFeat.json -> [quantizer] -> <perfFeatName>.train.dat # | | # +-> <perfFeatName>.quant | # +-------------------------------------------------------+ # +-> [svm^hmm] -> <perfFeatName>.model.bin trainFeats = featureManager.loadJson(config.getTrainInFeatFilename(args)) perfFeats = collectPerfFeats(trainFeats) #logging.printDebug(perfFeats) #for each perfFeature, a svmFeatFilename (quantized feat for svm^hmm) #and singleModelFilename (model file for svm^hmm) will be saved #scoreFeatLines = self.formatLine(scoreFeats) scoreFeatLines = self.formatLineDirect(trainFeats) for pkey, pval in perfFeats.items(): allLines = [("# " + pkey)] #TODO:quantize pval q = quantizer.getQuantizerObj(self.getQuantizeFilename(args, pkey)) quantizedVal = q.quantize(pval) lines = zip(map(str, quantizedVal), scoreFeatLines) #logging.printDebug(lines) allLines = map(lambda l:" ".join(l), lines) #logging.printDebug(allLines) svmFeatFilename = self.getTrainInputFilename(args, pkey) with open(svmFeatFilename, 'w') as f: f.writelines(map(lambda x:x+"\n", allLines)) cmd = [self.trainBinPath] if (config.svmhmm_c != None): cmd.append("-c " + str(config.svmhmm_c)) else: cmd.append("-c 0.01") cmd.append(svmFeatFilename) singleModelFilename = self.getSingleModelFilename(args,pkey) cmd.append(singleModelFilename) #logging.printDebug(" ".join(cmd)) subprocess.call(" ".join(cmd), shell=True)