/// <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); }
/// <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; }
/// <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); } } }