Example #1
0
        /// <summary>
        /// Applies the specified inputs.
        /// </summary>
        /// <param name="inputs">The inputs.</param>
        /// <param name="featureSet">The feature set.</param>
        /// <param name="priors">The priors.</param>
        /// <param name="results">The results.</param>
        /// <param name="mode">The mode.</param>
        /// <param name="showFactorGraph">if set to <c>true</c> [show factor graph].</param>
        public void Apply(Inputs inputs, FeatureSet featureSet, CommunityPriors priors, ref Results results, InputMode mode, bool showFactorGraph = false)
        {
            this.Engine.ShowFactorGraph = showFactorGraph;

            if (mode.HasFlag(InputMode.Validation))
            {
                this.SetObservedValues(new[] { inputs.Validation.Instances }, featureSet, InputMode.Validation, priors);
                results.Validation = new Results.ResultsSet {
                    IsRepliedTo = this.Engine.Infer <Bernoulli[][]>(this.RepliedTo)[0]
                };
            }

            if (mode.HasFlag(InputMode.Testing))
            {
                this.SetObservedValues(new[] { inputs.Test.Instances }, featureSet, InputMode.Testing, priors);
                results.Test = new Results.ResultsSet {
                    IsRepliedTo = this.Engine.Infer <Bernoulli[][]>(this.RepliedTo)[0]
                };
            }

            this.Engine.ShowFactorGraph = this.ShowFactorGraph;
        }
Example #2
0
 /// <summary>
 /// Sets the observed values.
 /// </summary>
 /// <param name="instances">The instances.</param>
 /// <param name="featureSet">The feature set.</param>
 /// <param name="mode">The mode.</param>
 /// <param name="communityPriors">The community priors.</param>
 public abstract void SetObservedValues(IList <IList <Inputs.Instance> > instances, FeatureSet featureSet, InputMode mode, CommunityPriors communityPriors);
Example #3
0
        /// <summary>
        /// Sets the observed values.
        /// </summary>
        /// <param name="instances">The instances.</param>
        /// <param name="featureSet">The feature set.</param>
        /// <param name="mode">The mode.</param>
        /// <param name="communityPriors">The community priors.</param>
        /// <exception cref="System.InvalidOperationException">Data is null</exception>
        public override void SetObservedValues(IList <IList <Inputs.Instance> > instances, FeatureSet featureSet, InputMode mode, CommunityPriors communityPriors)
        {
            // This is for personalisation training and testing
            if (instances == null)
            {
                throw new InvalidOperationException("Data is null");
            }

            this.NumberOfPeople.ObservedValue   = instances.Count;
            this.NumberOfMessages.ObservedValue = instances.Select(ia => ia.Count).ToArray();

            this.NumberOfFeatures.ObservedValue = mode == InputMode.CommunityTraining
                                                      ? featureSet.SharedFeatureVectorLength
                                                      : featureSet.FeatureVectorLength;

            this.NoiseVariance.ObservedValue = communityPriors.NoiseVariance;

            if (mode == InputMode.CommunityTraining || mode == InputMode.Training)
            {
                this.RepliedTo.ObservedValue = instances.Select(inner => inner.Select(ia => ia.Label).ToArray()).ToArray();
            }

            this.WeightMeanPriors.ObservedValue      = DistributionArrayHelpers.Copy(communityPriors.WeightMeans.Values);
            this.WeightPrecisionPriors.ObservedValue = DistributionArrayHelpers.Copy(communityPriors.WeightPrecisions.Values);

            // If this is community training, we only want shared features
            Func <KeyValuePair <FeatureBucket, double>, bool> predicate =
                fbv => mode != InputMode.CommunityTraining || fbv.Key.Feature.IsShared;

            this.FeatureIndices.ObservedValue =
                instances.Select(
                    inner =>
                    inner.Select(
                        ia => ia.FeatureValues.Where(predicate).Select(fbv => featureSet.FeatureBuckets.IndexOf(fbv.Key)).ToArray())
                    .ToArray()).ToArray();

            this.FeatureValue.ObservedValue =
                instances.Select(
                    inner => inner.Select(ia => ia.FeatureValues.Where(predicate).Select(fbv => fbv.Value).ToArray()).ToArray()).ToArray();

            this.FeatureCounts.ObservedValue =
                this.FeatureValue.ObservedValue.Select(inner => inner.Select(ia => ia.Length).ToArray()).ToArray();
        }