Exemplo n.º 1
0
        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));
        }
Exemplo n.º 4
0
        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));
        }