Changeset 11742 for branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.Bandits/Models/GaussianModel.cs
- Timestamp:
- 01/09/15 14:57:28 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.Bandits/Models/GaussianModel.cs
r11732 r11742 7 7 // 2) unknown mean and unknown variance 8 8 public class GaussianModel : IModel { 9 9 10 private OnlineMeanAndVarianceEstimator estimator = new OnlineMeanAndVarianceEstimator(); 10 11 … … 82 83 } 83 84 85 84 86 // sample from the posterior marginal for mu (expected value) equ. 91 85 87 // p(µ|D) = T2αn (µ| µn, βn/(αnκn)) 86 88 87 // sample from Tk distribution : http://stats.stackexchange.com/a/7027088 89 var t2alpha = alglib.invstudenttdistribution((int)(2 * posteriorAlpha), random.NextDouble()); 89 90 … … 91 92 return theta; 92 93 93 //return alglib.invnormaldistribution(random.NextDouble()) * + theta; 94 //return alglib.invstudenttdistribution((int)(2 * posteriorAlpha), 0.99) * (posteriorBeta*posteriorK + posteriorBeta) / (posteriorAlpha*posteriorK) + posteriorMean; 94 95 /* 96 * value function : 0.99-quantile 97 // sample posterior mean and posterior variance independently 98 var sampledPrec = Rand.GammaRand(random, posteriorAlpha) * posteriorBeta; 99 var t2alpha = alglib.invstudenttdistribution((int)(2 * posteriorAlpha), random.NextDouble()); 100 var sampledMean = t2alpha * posteriorBeta / (posteriorAlpha * posteriorK) + posteriorMean; 101 102 return alglib.invnormaldistribution(0.99) / Math.Sqrt(sampledPrec) + sampledMean; 103 */ 95 104 } 96 105 … … 114 123 return new GaussianModel(meanPriorMu, meanPriorVariance, precisionPriorAlpha, precisionPriorBeta); 115 124 } 125 126 public override string ToString() { 127 if (knownVariance) { 128 var posteriorMeanVariance = 1.0 / (estimator.N / rewardVariance + 1.0 / meanPriorVariance); 129 var posteriorMeanMean = posteriorMeanVariance * (meanPriorMu / meanPriorVariance + estimator.Sum / rewardVariance); 130 return string.Format("Gaussian(mu, var=0.1), mu ~ Gaussian(mu'={0:F3}, var'={1:F3})", posteriorMeanMean, posteriorMeanVariance); 131 } else { 132 var posteriorMean = (priorK * meanPriorMu + estimator.Sum) / (priorK + estimator.N); 133 var posteriorK = priorK + estimator.N; 134 var posteriorAlpha = precisionPriorAlpha + estimator.N / 2.0; 135 double posteriorBeta; 136 if (estimator.N > 0) { 137 posteriorBeta = precisionPriorBeta + 0.5 * estimator.N * estimator.Variance + priorK * estimator.N * Math.Pow(estimator.Avg - meanPriorMu, 2) / (2.0 * (priorK + estimator.N)); 138 } else { 139 posteriorBeta = precisionPriorBeta; 140 } 141 var nu = (int)(2 * posteriorAlpha); 142 var meanVariance = posteriorBeta / (posteriorAlpha * posteriorK) * (nu / (double)(nu - 2)); 143 return string.Format("Gaussian(mu, var), mu ~ T{0}(mu'={1:F3}, var'={2:F3}), 1.0/var ~ Gamma(mu={3:F3}, var={4:F3})", 144 nu, posteriorMean, meanVariance, 145 posteriorAlpha / posteriorBeta, posteriorAlpha / (posteriorBeta * posteriorBeta)); 146 } 147 } 116 148 } 117 149 }
Note: See TracChangeset
for help on using the changeset viewer.