public static Gaussian DAverageConditional([SkipIfUniform] GammaPower exp, [Proper] Gaussian d) { double scale = 1 / exp.Power; Gaussian forward = GaussianProductOp.ProductAverageConditional(scale, d); Gaussian message = DAverageConditional(Gamma.FromNatural(exp.Shape - exp.Power, exp.Rate), forward); Gaussian backward = GaussianProductOp.BAverageConditional(message, scale); return(backward); }
/// <summary>Computations that depend on the observed value of y and biasPrior and xValueCount and xValues and wPrior and xIndices</summary> public void Changed_y_biasPrior_xValueCount_xValues_wPrior_xIndices() { if (this.Changed_y_biasPrior_xValueCount_xValues_wPrior_xIndices_iterationsDone == 1) { return; } this.vdouble13_use_B = IsPositiveOp.XAverageConditional(this.Y, this.vdouble13_F); this.vdouble11_B = GaussianFromMeanAndVarianceOp.MeanAverageConditional(this.vdouble13_use_B, 1); this.bias_use_B = DoublePlusOp.BAverageConditional(this.vdouble11_B, this.score_F); this.bias_marginal_F = VariableOp.MarginalAverageConditional <Gaussian>(this.bias_use_B, this.BiasPrior, this.bias_marginal_F); this.score_B = DoublePlusOp.AAverageConditional(this.vdouble11_B, this.BiasPrior); this.product_B = FastSumOp.ArrayAverageConditional <DistributionStructArray <Gaussian, double> >(this.score_B, this.score_F, this.product_F, this.product_B); for (int userFeature = 0; userFeature < this.XValueCount; userFeature++) { this.wSparse_use_B[userFeature] = GaussianProductOp.BAverageConditional(this.product_B[userFeature], this.XValues[userFeature]); } this.wSparse_marginal_F = DerivedVariableOp.MarginalAverageConditional <DistributionStructArray <Gaussian, double> >(this.wSparse_use_B, this.wSparse_F, this.wSparse_marginal_F); this.Changed_y_biasPrior_xValueCount_xValues_wPrior_xIndices_iterationsDone = 1; }
/// <summary>Computations that depend on the observed value of numberOfIterationsDecreased and WeightPriors and FeatureIndexes and InstanceCount and InstanceFeatureCounts and FeatureValues and Labels and WeightConstraints</summary> /// <param name="numberOfIterations">The number of times to iterate each loop</param> private void Changed_numberOfIterationsDecreased_WeightPriors_FeatureIndexes_InstanceCount_InstanceFeatureCounts_7(int numberOfIterations) { if (this.Changed_numberOfIterationsDecreased_WeightPriors_FeatureIndexes_InstanceCount_InstanceFeatureCounts_7_iterationsDone == numberOfIterations) { return; } for (int iteration = this.Changed_numberOfIterationsDecreased_WeightPriors_FeatureIndexes_InstanceCount_InstanceFeatureCounts_7_iterationsDone; iteration < numberOfIterations; iteration++) { // Message to 'Weights_uses' from Replicate factor this.Weights_uses_B_toDef = ReplicateOp_Divide.ToDef <DistributionStructArray <Gaussian, double> >(this.Weights_uses_B, this.Weights_uses_B_toDef); // Message to 'Weights_uses' from Replicate factor this.Weights_uses_F_marginal = ReplicateOp_Divide.Marginal <DistributionStructArray <Gaussian, double> >(this.Weights_uses_B_toDef, this.weightPriors, this.Weights_uses_F_marginal); // Message to 'Weights_uses' from Replicate factor this.Weights_uses_F[1] = ReplicateOp_Divide.UsesAverageConditional <DistributionStructArray <Gaussian, double> >(this.Weights_uses_B[1], this.Weights_uses_F_marginal, 1, this.Weights_uses_F[1]); // Message to 'Weights_FeatureIndexes' from JaggedSubarray factor this.Weights_uses_F_1__marginal = JaggedSubarrayOp <double> .Marginal <DistributionStructArray <Gaussian, double>, Gaussian, object, DistributionStructArray <Gaussian, double> >(this.Weights_uses_F[1], this.IndexedWeights_B, this.featureIndexes, this.Weights_uses_F_1__marginal); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { // Message to 'Weights_FeatureIndexes' from JaggedSubarray factor this.Weights_FeatureIndexes_F[InstanceRange] = JaggedSubarrayOp <double> .ItemsAverageConditional <DistributionStructArray <Gaussian, double>, Gaussian, DistributionStructArray <Gaussian, double> >(this.IndexedWeights_B[InstanceRange], this.Weights_uses_F[1], this.Weights_uses_F_1__marginal, this.featureIndexes, InstanceRange, this.Weights_FeatureIndexes_F[InstanceRange]); for (int InstanceFeatureRanges = 0; InstanceFeatureRanges < this.instanceFeatureCounts[InstanceRange]; InstanceFeatureRanges++) { // Message to 'FeatureScores' from Product factor this.FeatureScores_F[InstanceRange][InstanceFeatureRanges] = GaussianProductOp.ProductAverageConditional(this.featureValues[InstanceRange][InstanceFeatureRanges], this.Weights_FeatureIndexes_F[InstanceRange][InstanceFeatureRanges]); } // Message to 'Score' from Sum factor this.Score_F[InstanceRange] = FastSumOp.SumAverageConditional(this.FeatureScores_F[InstanceRange]); // Message to 'NoisyScore' from GaussianFromMeanAndVariance factor this.NoisyScore_F[InstanceRange] = GaussianFromMeanAndVarianceOp.SampleAverageConditional(this.Score_F[InstanceRange], 1.0); // Message to 'NoisyScore_use' from IsPositive factor this.NoisyScore_use_B[InstanceRange] = IsPositiveOp_Proper.XAverageConditional(Bernoulli.PointMass(this.labels[InstanceRange]), this.NoisyScore_F[InstanceRange]); // Message to 'Score' from GaussianFromMeanAndVariance factor this.Score_B[InstanceRange] = GaussianFromMeanAndVarianceOp.MeanAverageConditional(this.NoisyScore_use_B[InstanceRange], 1.0); // Message to 'FeatureScores' from Sum factor this.FeatureScores_B[InstanceRange] = FastSumOp.ArrayAverageConditional <DistributionStructArray <Gaussian, double> >(this.Score_B[InstanceRange], this.Score_F[InstanceRange], this.FeatureScores_F[InstanceRange], this.FeatureScores_B[InstanceRange]); for (int InstanceFeatureRanges = 0; InstanceFeatureRanges < this.instanceFeatureCounts[InstanceRange]; InstanceFeatureRanges++) { // Message to 'IndexedWeights' from Product factor this.IndexedWeights_B[InstanceRange][InstanceFeatureRanges] = GaussianProductOp.BAverageConditional(this.FeatureScores_B[InstanceRange][InstanceFeatureRanges], this.featureValues[InstanceRange][InstanceFeatureRanges]); } this.Weights_uses_F_1__marginal = JaggedSubarrayOp <double> .MarginalIncrement <DistributionStructArray <Gaussian, double>, Gaussian, DistributionStructArray <Gaussian, double> >(this.Weights_uses_F_1__marginal, this.Weights_FeatureIndexes_F[InstanceRange], this.IndexedWeights_B[InstanceRange], this.featureIndexes, InstanceRange); } // Message to 'Weights_uses' from JaggedSubarray factor this.Weights_uses_B[1] = JaggedSubarrayOp <double> .ArrayAverageConditional <Gaussian, DistributionStructArray <Gaussian, double>, DistributionStructArray <Gaussian, double> >(this.IndexedWeights_B, this.featureIndexes, this.Weights_uses_B[1]); this.OnProgressChanged(new ProgressChangedEventArgs(iteration)); } // Message to 'Weights_uses' from Replicate factor this.Weights_uses_B_toDef = ReplicateOp_Divide.ToDef <DistributionStructArray <Gaussian, double> >(this.Weights_uses_B, this.Weights_uses_B_toDef); // Message to 'Weights_marginal' from Variable factor this.Weights_marginal_F = VariableOp.MarginalAverageConditional <DistributionStructArray <Gaussian, double> >(this.Weights_uses_B_toDef, this.weightPriors, this.Weights_marginal_F); this.Changed_numberOfIterationsDecreased_WeightPriors_FeatureIndexes_InstanceCount_InstanceFeatureCounts_7_iterationsDone = numberOfIterations; }
/// <summary>Computations that depend on the observed value of t7</summary> private void Changed_t7() { if (this.Changed_t7_isDone) { return; } this.t7_marginal = Gaussian.Uniform(); this.t7_marginal = Distribution.SetPoint <Gaussian, double>(this.t7_marginal, this.T7); Gaussian t1_F = default(Gaussian); this.t1_marginal_F = Gaussian.Uniform(); Gaussian t1_use_B = Gaussian.Uniform(); // Message to 't1' from GaussianFromMeanAndVariance factor t1_F = GaussianFromMeanAndVarianceOp.SampleAverageConditional(1.0, 1.0); Gaussian[] t1_uses_F; Gaussian[] t1_uses_B; // Create array for 't1_uses' Forwards messages. t1_uses_F = new Gaussian[2]; // Create array for 't1_uses' Backwards messages. t1_uses_B = new Gaussian[2]; t1_uses_B[1] = Gaussian.Uniform(); t1_uses_B[0] = Gaussian.Uniform(); t1_uses_F[1] = Gaussian.Uniform(); t1_uses_F[0] = Gaussian.Uniform(); Gaussian t2_F = default(Gaussian); // Message to 't2' from GaussianFromMeanAndVariance factor t2_F = GaussianFromMeanAndVarianceOp.SampleAverageConditional(10.0, 1.0); Gaussian[] t2_uses_B; // Create array for 't2_uses' Backwards messages. t2_uses_B = new Gaussian[2]; t2_uses_B[1] = Gaussian.Uniform(); Gaussian[] t2_uses_F; // Create array for 't2_uses' Forwards messages. t2_uses_F = new Gaussian[2]; t2_uses_F[0] = Gaussian.Uniform(); // Message to 't2_uses' from Replicate factor t2_uses_F[0] = ReplicateOp_NoDivide.UsesAverageConditional <Gaussian>(t2_uses_B, t2_F, 0, t2_uses_F[0]); // Message to 't1_uses' from Replicate factor t1_uses_F[0] = ReplicateOp_NoDivide.UsesAverageConditional <Gaussian>(t1_uses_B, t1_F, 0, t1_uses_F[0]); Gaussian vdouble6_F = default(Gaussian); // Message to 'vdouble6' from Plus factor vdouble6_F = DoublePlusOp.SumAverageConditional(t1_uses_F[0], t2_uses_F[0]); Gaussian t4_F = default(Gaussian); // Message to 't4' from GaussianFromMeanAndVariance factor t4_F = GaussianFromMeanAndVarianceOp.SampleAverageConditional(2.0, 1.0); Gaussian[] t4_uses_B; // Create array for 't4_uses' Backwards messages. t4_uses_B = new Gaussian[2]; t4_uses_B[0] = Gaussian.Uniform(); Gaussian[] t4_uses_F; // Create array for 't4_uses' Forwards messages. t4_uses_F = new Gaussian[2]; t4_uses_F[1] = Gaussian.Uniform(); // Message to 't4_uses' from Replicate factor t4_uses_F[1] = ReplicateOp_NoDivide.UsesAverageConditional <Gaussian>(t4_uses_B, t4_F, 1, t4_uses_F[1]); Gaussian vdouble6_use_B = default(Gaussian); // Message to 'vdouble6_use' from Product factor vdouble6_use_B = GaussianProductOp.AAverageConditional(this.T7, vdouble6_F, t4_uses_F[1]); // Message to 't1_uses' from Plus factor t1_uses_B[0] = DoublePlusOp.AAverageConditional(vdouble6_use_B, t2_uses_F[0]); // Message to 't1_use' from Replicate factor t1_use_B = ReplicateOp_NoDivide.DefAverageConditional <Gaussian>(t1_uses_B, t1_use_B); // Message to 't1_marginal' from Variable factor this.t1_marginal_F = VariableOp.MarginalAverageConditional <Gaussian>(t1_use_B, t1_F, this.t1_marginal_F); // Message to 't1_uses' from Replicate factor t1_uses_F[1] = ReplicateOp_NoDivide.UsesAverageConditional <Gaussian>(t1_uses_B, t1_F, 1, t1_uses_F[1]); this.t2_marginal_F = Gaussian.Uniform(); Gaussian t2_use_B = Gaussian.Uniform(); t2_uses_B[0] = Gaussian.Uniform(); t2_uses_F[1] = Gaussian.Uniform(); // Message to 't2_uses' from Plus factor t2_uses_B[0] = DoublePlusOp.BAverageConditional(vdouble6_use_B, t1_uses_F[0]); // Message to 't2_use' from Replicate factor t2_use_B = ReplicateOp_NoDivide.DefAverageConditional <Gaussian>(t2_uses_B, t2_use_B); // Message to 't2_marginal' from Variable factor this.t2_marginal_F = VariableOp.MarginalAverageConditional <Gaussian>(t2_use_B, t2_F, this.t2_marginal_F); // Message to 't2_uses' from Replicate factor t2_uses_F[1] = ReplicateOp_NoDivide.UsesAverageConditional <Gaussian>(t2_uses_B, t2_F, 1, t2_uses_F[1]); this.vdouble6_marginal_F = Gaussian.Uniform(); // Message to 'vdouble6_marginal' from DerivedVariable factor this.vdouble6_marginal_F = DerivedVariableOp.MarginalAverageConditional <Gaussian>(vdouble6_use_B, vdouble6_F, this.vdouble6_marginal_F); this.t4_marginal_F = Gaussian.Uniform(); Gaussian t4_use_B = Gaussian.Uniform(); t4_uses_B[1] = Gaussian.Uniform(); t4_uses_F[0] = Gaussian.Uniform(); // Message to 't4_uses' from Product factor t4_uses_B[1] = GaussianProductOp.BAverageConditional(this.T7, vdouble6_F, t4_uses_F[1]); // Message to 't4_use' from Replicate factor t4_use_B = ReplicateOp_NoDivide.DefAverageConditional <Gaussian>(t4_uses_B, t4_use_B); // Message to 't4_marginal' from Variable factor this.t4_marginal_F = VariableOp.MarginalAverageConditional <Gaussian>(t4_use_B, t4_F, this.t4_marginal_F); // Message to 't4_uses' from Replicate factor t4_uses_F[0] = ReplicateOp_NoDivide.UsesAverageConditional <Gaussian>(t4_uses_B, t4_F, 0, t4_uses_F[0]); Gaussian vdouble10_F = default(Gaussian); this.vdouble10_marginal_F = Gaussian.Uniform(); Gaussian vdouble10_use_B = Gaussian.Uniform(); // Message to 'vdouble10' from Plus factor vdouble10_F = DoublePlusOp.SumAverageConditional(t1_uses_F[1], t2_uses_F[1]); // Message to 'vdouble10_marginal' from DerivedVariable factor this.vdouble10_marginal_F = DerivedVariableOp.MarginalAverageConditional <Gaussian>(vdouble10_use_B, vdouble10_F, this.vdouble10_marginal_F); Gaussian t5_F = default(Gaussian); this.t5_marginal_F = Gaussian.Uniform(); Gaussian t5_use_B = Gaussian.Uniform(); // Message to 't5' from Product factor t5_F = GaussianProductOp.ProductAverageConditional(t5_use_B, vdouble10_F, t4_uses_F[0]); // Message to 't5_marginal' from DerivedVariable factor this.t5_marginal_F = DerivedVariableOp.MarginalAverageConditional <Gaussian>(t5_use_B, t5_F, this.t5_marginal_F); this.Changed_t7_isDone = true; }