/// <summary> /// Priors from posteriors with possible missing features (e.g. for community training). /// </summary> /// <param name="posteriors">The posteriors.</param> /// <param name="featureSet">The feature set.</param> /// <param name="point">The point.</param> /// <param name="thresholdAndNoiseVariance">The threshold and noise variance.</param> /// <param name="userNames">The user names.</param> /// <returns>The <see cref="CommunityPriors" />.</returns> internal static CommunityPriors FromPosteriors( CommunityPosteriors posteriors, FeatureSet featureSet, double point, double thresholdAndNoiseVariance, IList <string> userNames) { return(new CommunityPriors { WeightMeans = featureSet.FeatureBuckets.ToDictionary( ia => ia, ia => posteriors.WeightMeans.ContainsKey(ia) ? posteriors.WeightMeans[ia] : Gaussian.FromMeanAndVariance(0.0, 1.0)), WeightPrecisions = featureSet.FeatureBuckets.ToDictionary( ia => ia, ia => posteriors.WeightPrecisions.ContainsKey(ia) ? posteriors.WeightPrecisions[ia] : Gamma.PointMass(point)), Thresholds = userNames.ToDictionary( ia => ia, ia => posteriors.Thresholds != null && posteriors.Thresholds.ContainsKey(ia) ? posteriors.Thresholds[ia] : Gaussian.FromMeanAndVariance(0.0, thresholdAndNoiseVariance)), NoiseVariance = thresholdAndNoiseVariance, }); }
/// <summary> /// Priors from the community posteriors, using the means of the weight mean and weight precision posteriors. /// </summary> /// <param name="posteriors">The posteriors.</param> /// <param name="featureSet">The feature set.</param> /// <param name="thresholdAndNoiseVariance">The threshold and noise variance.</param> /// <returns>The <see cref="Priors" /></returns> internal static Priors FromCommunityPosteriors(CommunityPosteriors posteriors, FeatureSet featureSet, double thresholdAndNoiseVariance) { return(new Priors { Weights = featureSet.FeatureBuckets.ToDictionary( ia => ia, ia => posteriors.WeightMeans.ContainsKey(ia) && posteriors.WeightPrecisions.ContainsKey(ia) ? Gaussian.FromMeanAndPrecision( posteriors.WeightMeans[ia].GetMean(), posteriors.WeightPrecisions[ia].GetMean()) : Gaussian.FromMeanAndVariance(0.0, thresholdAndNoiseVariance)), Threshold = Gaussian.FromMeanAndVariance(0.0, thresholdAndNoiseVariance), NoiseVariance = thresholdAndNoiseVariance }); }