コード例 #1
0
 /// <summary>
 /// Learns the parameters for the given system.
 /// </summary>
 /// <param name="initial">The initial.</param>
 /// <param name="transition">The transition.</param>
 /// <param name="emission">The emission.</param>
 /// <param name="trainingSet">The training set.</param>
 public void Learn([NotNull] InitialStateMatrix initial, [NotNull] TransitionMatrix transition,
                   [NotNull] EmissionMatrix emission,
                   [NotNull] IList <IList <LabeledObservation> > trainingSet)
 {
     Learn(initial, trainingSet);
     Learn(transition, trainingSet);
     Learn(emission, trainingSet);
 }
コード例 #2
0
ファイル: HiddenMarkovModel.cs プロジェクト: zhonghai66/hmm
 /// <summary>
 /// Initializes a new instance of the <see cref="HiddenMarkovModel" /> class.
 /// </summary>
 /// <param name="states">The states.</param>
 /// <param name="inital">The inital state matrix.</param>
 /// <param name="transition">The transmission matrix.</param>
 /// <param name="emission">The emission matrix.</param>
 public HiddenMarkovModel(
     [NotNull] ReadOnlyCollection <IState> states,
     [NotNull] InitialStateMatrix inital,
     [NotNull] TransitionMatrix transition,
     [NotNull] EmissionMatrix emission)
 {
     _states     = states;
     _inital     = inital;
     _transition = transition;
     _emission   = emission;
 }
コード例 #3
0
        /// <summary>
        /// Learns the emission probabilities from the specified training set.
        /// </summary>
        /// <param name="emission">The emission.</param>
        /// <param name="trainingSet">The training set.</param>
        private void Learn([NotNull] EmissionMatrix emission, [NotNull] IEnumerable <IList <LabeledObservation> > trainingSet)
        {
            var observationsGroupedByState = trainingSet
                                             .SelectMany(set => set)
                                             .GroupBy(set => set.State);

            foreach (var example in observationsGroupedByState)
            {
                var state      = example.Key;
                var examples   = example.GroupBy(e => e.Observation).ToList();
                var totalCount = examples.Sum(e => e.Count());

                foreach (var group in examples)
                {
                    var observation = group.Key;
                    var count       = group.Count();
                    var probability = (double)count / totalCount;

                    emission.SetEmission(state, observation, probability);
                }
            }
        }