Beispiel #1
0
def functionFromMarginalsTo_t_Distribution(eta,N,gamma,k,l):
    statsDistFactory = sdf.statsDistributionFactory(gamma)
    statsDistFactory.set_eta(eta)
    statsDistFactory.set_N(N)
    uniformMarginals = [1.0/k,1.0/l]
    statsDistFactory.CalculateAndSetScaleRatioRobustToGammaExceedingEta(uniformMarginals)

    return statsDistFactory.GaussianCenteredAtMinOftGammaPlusOrEtafromMarginalsScaledFromScaleRatio
Beispiel #2
0
def functionFromMarginalsTo_t_Distribution(eta, N, gamma, k, l):
    statsDistFactory = sdf.statsDistributionFactory(gamma)
    statsDistFactory.set_eta(eta)
    statsDistFactory.set_N(N)
    uniformMarginals = [1.0 / k, 1.0 / l]
    statsDistFactory.CalculateAndSetScaleRatioRobustToGammaExceedingEta(
        uniformMarginals)

    return statsDistFactory.GaussianCenteredAtMinOftGammaPlusOrEtafromMarginalsScaledFromScaleRatio
 def _testIntegratetoFlatFile(self):        
     #load in benchmark data
     benchmarks = genfromtxt('cdf_for_valsets_of_variables_of_size2and2', delimiter=',', skip_header=4)
     benchmarks_without_stepsize = benchmarks[:,1:]
     lineInBenchMarkFileList = [0, 9]
     
     #prepare the csv file
     f=open('/home/eliot/Documents/sontag/benchmarkcomparisons/N@100_N@[email protected]', 'wt')
     writer = csv.writer(f)
     for lineInBenchMarkFile in lineInBenchMarkFileList:
         benchmark_N = (lineInBenchMarkFile+1)*benchMarkInterval_N
         benchmarksForThisN = benchmarks_without_stepsize[lineInBenchMarkFile]
         stepSizeInBenchmarks = benchmarks[0,0]
         numStepsInBenchmarks = len(benchmarks[0])
         logging.info("Read in %s lines of benchmarks with stepsize=%s and %s steps"%(len(benchmarks_without_stepsize), stepSizeInBenchmarks, numStepsInBenchmarks))
         
         #constants common to all of the runs
         k, l = 2,2
         eta = 0.01
         
         N = benchmark_N
         maxIterations = 10000
         dictionaryFromNameOfMethodToResults = {}
         
         #build the inputs to IntegrateWithStoppingCriterion
         #the integrand, namely probability-of-emission calculator from p-eta, which is common to ALL methods
         probabilityCalculatorAssociatedToEta = epc.emissionProbabilityCalculator(eta, k, l, N)
         
         for gammaNumber in range(numStepsInBenchmarks-1): 
             gamma = (gammaNumber+1)*stepSizeInBenchmarks
             benchMarkBeta = benchmarksForThisN[gammaNumber]
             probabilityCalculatorAssociatedToEta.setGamma(gamma)
             functionProbabilityOfEmissionByP_eta_Robbins = probabilityCalculatorAssociatedToEta.RobbinsEstimateOfEmissionProbabilityTimesCharFunctionOfTauMinusGamma
             
             #the probability distribution used to choose marginals distribution, also common to ALL methods (except for completely-uniform, if implemented)
             Gaussianscale = it.ChernoffRadius(CentralProbability, N)
             normalDistLocUniformScaleDepOnChernoff = stats.norm(loc=0.5,scale=Gaussianscale)
             
             
             #e.g. 5, .95 means "seeking 95 percent certainty answer is within 5 percent of truth , typically also common to all runs
             accuracy_percent = 10
             probability_accuracy_achieved = 0.95
             
             #the method for picking the parameter-distribution based on the marginals, specific to this run
             #
             statsDistFactory = sdf.statsDistributionFactory(gamma)
             dictionaryFromNameOfMethodToMethod = {}
             dictionaryFromNameOfMethodToMethod['GaussianScaleAdaptiveTo_l_gamma']=statsDistFactory.GaussianCenteredAttGammaPlusfromMarginals
             #dictionaryFromNameOfMethodToMethod['GaussianScaleAdaptiveTo_N']=statsDistFactory.GaussianCenteredAttGammaPlusfromMarginalsScaledFromScaleRatio
             
            
             #functionFromMarginalsTo_t_Distribution = statsDistFactory.GaussianCenteredAttGammaPlusfromMarginals
             
             uniformMarginals = [1.0/k, 1.0/l]
             
             for nameOfMethod in dictionaryFromNameOfMethodToMethod.keys():
                 if dictionaryFromNameOfMethodToResults.has_key( nameOfMethod):
                     resultsDictionary = dictionaryFromNameOfMethodToResults[nameOfMethod]
                 else:
                     resultsDictionary = {}
                 statsDistFactory.set_eta(eta)
                 statsDistFactory.set_N(N)
                 statsDistFactory.CalculateAndSetScaleRatio(uniformMarginals)
                 #functionFromMarginalsTo_t_Distribution = statsDistFactory.GaussianCenteredAttGammaPlusfromMarginalsScaledFromScaleRatio
                 functionFromMarginalsTo_t_Distribution = dictionaryFromNameOfMethodToMethod[nameOfMethod]
                  
                 #start the calculation proper
                 with Timer.Timer() as t:
                     iteration_values, rho_hat_values = iwsc.IntegrateWithStoppingCriterion(k,l,
                                            functionProbabilityOfEmissionByP_eta_Robbins, 
                                            normalDistLocUniformScaleDepOnChernoff, functionFromMarginalsTo_t_Distribution,  #!!!MAIN THING TO CHANGE!!!
                                            maxIterations, 100, 100, #frequencyOfRecodingreslt, frequencyOfApplicationOfStoppingCriterion 
                                            accuracy_percent, probability_accuracy_achieved)
                     
                 logging.info("Time elapsed is %.03f sec." % t.interval)
                 logging.info("Iteration_values for the method %s for eta=%s, gamma=%s, N=%s, accpercent=%s, prob_achieved=%s"%(nameOfMethod, eta,gamma,N,accuracy_percent, probability_accuracy_achieved))
                 logging.info(iteration_values)
                 logging.info("rho_hat_values for the method %s for eta=%s, gamma=%s, N=%s, accpercent=%s, prob_achieved=%s"%(nameOfMethod, eta,gamma,N,accuracy_percent, probability_accuracy_achieved))
                 logging.info( rho_hat_values)
                 betaResult = rho_hat_values[-1]*N**3
                 if resultsDictionary.has_key('time'):
                     resultsDictionary['time'].append(t.interval)
                 else:
                     resultsDictionary['time'] = [t.interval]
                     
                 if resultsDictionary.has_key('CalculatedResult'):
                     resultsDictionary['CalculatedResult'].append(betaResult)
                 else:
                     resultsDictionary['CalculatedResult'] = [betaResult]
                 
                 if resultsDictionary.has_key('BenchmarkBeta'):
                     resultsDictionary['BenchmarkBeta'].append(benchMarkBeta)
                 else:
                     resultsDictionary['BenchmarkBeta'] = [benchMarkBeta]
                     
                     
                 dictionaryFromNameOfMethodToResults[nameOfMethod] = resultsDictionary
                 fileNameForPickleDump = "/home/eliot/Documents/sontag/benchmarkcomparisons/testRun" + str(N)
                 pickle.dump( dictionaryFromNameOfMethodToResults, open( fileNameForPickleDump, "wb" ) )
         
         #write to the CSV file
         N_header = 'N=%s'%(N)
         writer.writerow( [N_header])
         for resultsDictionary in dictionaryFromNameOfMethodToResults.values():
             for key in resultsDictionary.keys():
                 print key
                 print resultsDictionary[key]
                 rowList = resultsDictionary[key]
                 rowList.insert(0,key)
                 print rowList
                 writer.writerow(rowList)
     f.close()
Beispiel #4
0
 def setUp(self):
     gamma, eta, N = 0.01, 0.1, 30
     self.statsDistFact = sdf.statsDistributionFactory(gamma)
     self.statsDistFact.set_eta(eta)
     self.statsDistFact.set_N(N)
 def setUp(self):
     gamma, eta, N = 0.01, 0.1, 30
     self.statsDistFact = sdf.statsDistributionFactory(gamma)
     self.statsDistFact.set_eta(eta)
     self.statsDistFact.set_N(N)