public override void Execute(object parameter) { string[] parameters = ((object[])parameter).Select(p => p.ToString()).ToArray(); MetropolisHastings metropolisHastings = new MetropolisHastings() { WalksCount = int.Parse(parameters[0]), Ns = int.Parse(parameters[1]), C = double.Parse(parameters[2]), S_0 = double.Parse(parameters[3]), MinK = Math.Pow(10.0, -15) * double.Parse(parameters[4]), MaxK = Math.Pow(10.0, -15) * double.Parse(parameters[5]), MinKappa = (1.0 / 3600.0) * double.Parse(parameters[6]), MaxKappa = (1.0 / 3600.0) * double.Parse(parameters[7]), MinKsi = double.Parse(parameters[8]), MaxKsi = double.Parse(parameters[9]), MinP0 = Math.Pow(10.0, 6) * double.Parse(parameters[10]), MaxP0 = Math.Pow(10.0, 6) * double.Parse(parameters[11]), IncludedK = bool.Parse(parameters[12]), IncludedKappa = bool.Parse(parameters[13]), IncludedKsi = bool.Parse(parameters[14]), IncludedP0 = bool.Parse(parameters[15]), StepK = Math.Pow(10.0, -15) * double.Parse(parameters[16]), StepKappa = (1.0 / 3600.0) * double.Parse(parameters[17]), StepKsi = double.Parse(parameters[18]), StepP0 = Math.Pow(10.0, 6) * double.Parse(parameters[19]), Mode = mhvm.Mode, SelectLogic = SelectLogic.AcceptAll, MoveLogic = MoveLogic.Cyclic, }; mhvm.MetropolisHastings = metropolisHastings; }
public void Metropolis_ConditionalDice() { var dice = Dice.ConditionalDie(2); var mh = MetropolisHastings.MHPrior(dice, 1000); var samples = mh.SampleNParallel(100); var sumDist = from outer in samples from inner in outer select(double) inner; Debug.WriteLine(Histogram.Unweighted(sumDist)); }
public void Metropolis_BayesPointMachine() { var posterior = BpmUpdate(BpmPrior, BpmObserved); var samples = Samples(MetropolisHastings.MHPrior(posterior, 100) .SampleNParallel(10000) .SelectMany(d => d) .Select(d => ItemProb(d, Prob(1)))); var approxPosterior = CategoricalF(samples.Normalize()); Debug.WriteLine(BpmPredict(approxPosterior, Person1)); Debug.WriteLine(BpmPredict(approxPosterior, Person2)); Debug.WriteLine(BpmPredict(approxPosterior, Person3)); }
public void WriteMHInfo(MetropolisHastings mh, List <AcceptedValueMH> acceptedValues) { var dir = Path.Combine(root, string.Format(dailyFolderFormat, DateTime.Now)); CheckCreated(dir); var expFolderName = string.Format(experimentFolderFormatGuid, DateTime.Now, Guid.NewGuid()); //var expFolderName = string.Format(experimentFolderFormat, DateTime.Now, // Calculs.Converter.ConvertBack(mh.MinK,Calculs.ValueType.K) , Calculs.Converter.ConvertBack(mh.MaxK, Calculs.ValueType.K), mh.StepK, mh.IncludedK, // Calculs.Converter.ConvertBack(mh.MinKappa, Calculs.ValueType.Kappa), Calculs.Converter.ConvertBack(mh.MaxKappa, Calculs.ValueType.Kappa), mh.StepKappa, mh.IncludedKappa, // mh.MinKsi, mh.MaxKsi, mh.StepKsi, mh.IncludedKsi, // Calculs.Converter.ConvertBack(mh.MinP0, Calculs.ValueType.P), Calculs.Converter.ConvertBack(mh.MaxP0, Calculs.ValueType.P), mh.StepP0, mh.IncludedP0, // mh.WalksCount, mh.S_0, mh.Mode, mh.SelectLogic, mh.MoveLogic); var expFolderDir = Path.Combine(dir, expFolderName); CheckCreated(expFolderDir); WrapAndWriteJson <MetropolisHastings>(mh.GetNormalized(), expFolderDir, mhParamsNameAndExt); var result = acceptedValues.SingleOrDefault(x => x.Fmin == acceptedValues.Select(x => x.Fmin).Min()).GetNormalized(); result.AcceptedCount = acceptedValues.Last().AcceptedCount; WrapAndWriteJson <AcceptedValueMH>(result, expFolderDir, mhAcceptedNameAndExt); if (mh.IncludedK) { WriteValues(acceptedValues.Select(a => a.K).ToList(), Math.Pow(10.0, 15), expFolderDir, KValsNameAndExt); } if (mh.IncludedKappa) { WriteValues(acceptedValues.Select(a => a.Kappa).ToList(), 3600.0, expFolderDir, KappaValsNameAndExt); } if (mh.IncludedKsi) { WriteValues(acceptedValues.Select(a => a.Ksi).ToList(), 1, expFolderDir, KsiValsNameAndExt); } if (mh.IncludedP0) { WriteValues(acceptedValues.Select(a => a.P0).ToList(), Math.Pow(10.0, -6), expFolderDir, P0ValsNameAndExt); } WriteValues(acceptedValues.Select(a => a.Fmin).ToList(), 1, expFolderDir, FminValsNameAndExt); }
public void Metropolis_LinReg() { // Define a prior with heavy tails var prior = from a in Normal(0, 100) from b in Normal(0, 100) select new Param(a, b); var linReg = LinearRegression.CreateLinearRegression(prior, LinearRegression.BeachSandData); var mh = MetropolisHastings.MHPrior(linReg, 1000); var samples = mh.SampleNParallel(100); var paramA = from outer in samples from inner in outer select inner.a; var paramB = from outer in samples from inner in outer select inner.b; Debug.WriteLine(Histogram.Unweighted(paramA)); Debug.WriteLine(Histogram.Unweighted(paramB)); }