BaumWelchLearning Class |
Namespace: Accord.Statistics.Models.Markov.Learning
public class BaumWelchLearning : BaseBaumWelchLearningOptions<HiddenMarkovModel, GeneralDiscreteDistribution, int, GeneralDiscreteOptions>
The BaumWelchLearning type exposes the following members.
Name | Description | |
---|---|---|
BaumWelchLearning |
Creates a new instance of the Baum-Welch learning algorithm.
| |
BaumWelchLearning(HiddenMarkovModel) |
Creates a new instance of the Baum-Welch learning algorithm.
|
Name | Description | |
---|---|---|
Convergence |
Gets or sets convergence parameters.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
CurrentIteration |
Gets or sets the number of performed iterations.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
Emissions |
Gets or sets the function that initializes the emission
distributions in the hidden Markov Models.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
FittingOptions |
Gets or sets the distribution fitting options
to use when estimating distribution densities
during learning.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
HasConverged |
Gets or sets whether the algorithm has converged.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
Iterations | Obsolete.
Please use MaxIterations instead.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
LogGamma |
Gets the Gamma matrix of log probabilities created during
the last iteration of the Baum-Welch learning algorithm.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
LogKsi |
Gets the Ksi matrix of log probabilities created during
the last iteration of the Baum-Welch learning algorithm.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
LogLikelihood |
Gets the log-likelihood of the model at the last iteration.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
LogWeights |
Gets the sample weights in the last iteration of the
Baum-Welch learning algorithm.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
MaxIterations |
Gets or sets the maximum number of iterations
performed by the learning algorithm.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
Model |
Gets or sets the model being trained.
(Inherited from BaseHiddenMarkovModelLearningTModel, TObservation.) | |
NumberOfStates |
Gets or sets the number of states to be used when this
learning algorithm needs to create new models.
(Inherited from BaseHiddenMarkovModelLearningTModel, TObservation.) | |
NumberOfSymbols |
Gets or sets the number of symbols that should be used whenever
this learning algorithm needs to create a new model. This property
must be set before learning.
| |
Observations |
Gets all observations as a single vector.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
ParallelOptions |
Gets or sets the parallelization options for this algorithm.
(Inherited from ParallelLearningBase.) | |
Token |
Gets or sets a cancellation token that can be used
to cancel the algorithm while it is running.
(Inherited from ParallelLearningBase.) | |
Tolerance |
Gets or sets the maximum change in the average log-likelihood
after an iteration of the algorithm used to detect convergence.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
Topology |
Gets or sets the state transition topology to be used when this learning
algorithm needs to create new models. Default is Forward.
(Inherited from BaseHiddenMarkovModelLearningTModel, TObservation.) |
Name | Description | |
---|---|---|
ComputeForwardBackward |
Computes the forward and backward probabilities matrices
for a given observation referenced by its index in the
input training data.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
ComputeKsi |
Computes the ksi matrix of probabilities for a given observation
referenced by its index in the input training data.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
Create |
Creates an instance of the model to be learned. Inheritors of this abstract
class must define this method so new models can be created from the training data.
(Overrides BaseHiddenMarkovModelLearningTModel, TObservationCreate(TObservation).) | |
Equals | Determines whether the specified object is equal to the current object. (Inherited from Object.) | |
Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) | |
Fit |
Fits one emission distribution. This method can be override in a
base class in order to implement special fitting options.
(Inherited from BaseBaumWelchLearningOptionsTModel, TDistribution, TObservation, TOptions.) | |
FromMixtureModel(HiddenMarkovModelMixtureNormalDistribution, NormalOptions) |
Creates a Baum-Welch with default configurations for
hidden Markov models with normal mixture densities.
| |
FromMixtureModel(HiddenMarkovModelMultivariateMixtureMultivariateNormalDistribution, NormalOptions) |
Creates a Baum-Welch with default configurations for
hidden Markov models with normal mixture densities.
| |
GetHashCode | Serves as the default hash function. (Inherited from Object.) | |
GetType | Gets the Type of the current instance. (Inherited from Object.) | |
Learn |
Learns a model that can map the given inputs to the desired outputs.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) | |
MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) | |
Run(Int32) | Obsolete.
Obsolete.
| |
Run(Int32) | Obsolete.
Obsolete.
| |
ToString | Returns a string that represents the current object. (Inherited from Object.) | |
UpdateEmissions |
Updates the emission probability matrix.
(Inherited from BaseBaumWelchLearningTModel, TDistribution, TObservation, TOptions.) |
Name | Description | |
---|---|---|
HasMethod |
Checks whether an object implements a method with the given name.
(Defined by ExtensionMethods.) | |
IsEqual |
Compares two objects for equality, performing an elementwise
comparison if the elements are vectors or matrices.
(Defined by Matrix.) | |
To(Type) | Overloaded.
Converts an object into another type, irrespective of whether
the conversion can be done at compile time or not. This can be
used to convert generic types to numeric types during runtime.
(Defined by ExtensionMethods.) | |
ToT | Overloaded.
Converts an object into another type, irrespective of whether
the conversion can be done at compile time or not. This can be
used to convert generic types to numeric types during runtime.
(Defined by ExtensionMethods.) |
The Baum-Welch algorithm is an unsupervised algorithm used to learn a single hidden Markov model object from a set of observation sequences. It works by using a variant of the Expectation-Maximization algorithm to search a set of model parameters (i.e. the matrix of transition probabilities A, the matrix of emission probabilities B, and the initial probability vector π) that would result in a model having a high likelihood of being able to generate a set of training sequences given to this algorithm.
For increased accuracy, this class performs all computations using log-probabilities.
For a more thorough explanation on hidden Markov models with practical examples on gesture recognition, please see Sequence Classifiers in C#, Part I: Hidden Markov Models [1].
[1]: http://www.codeproject.com/Articles/541428/Sequence-Classifiers-in-Csharp-Part-I-Hidden-Marko
// We will create a Hidden Markov Model to detect // whether a given sequence starts with a zero. int[][] sequences = new int[][] { new int[] { 0,1,1,1,1,0,1,1,1,1 }, new int[] { 0,1,1,1,0,1,1,1,1,1 }, new int[] { 0,1,1,1,1,1,1,1,1,1 }, new int[] { 0,1,1,1,1,1 }, new int[] { 0,1,1,1,1,1,1 }, new int[] { 0,1,1,1,1,1,1,1,1,1 }, new int[] { 0,1,1,1,1,1,1,1,1,1 }, }; // Create the learning algorithm var teacher = new BaumWelchLearning() { Topology = new Ergodic(3), // Create a new Hidden Markov Model with 3 states for NumberOfSymbols = 2, // an output alphabet of two characters (zero and one) Tolerance = 0.0001, // train until log-likelihood changes less than 0.0001 Iterations = 0 // and use as many iterations as needed }; // Estimate the model var hmm = teacher.Learn(sequences); // Now we can calculate the probability that the given // sequences originated from the model. We can compute // those probabilities using the Viterbi algorithm: double vl1; hmm.Decode(new int[] { 0, 1 }, out vl1); // -0.69317855 double vl2; hmm.Decode(new int[] { 0, 1, 1, 1 }, out vl2); // -2.16644878 // Sequences which do not start with zero have much lesser probability. double vl3; hmm.Decode(new int[] { 1, 1 }, out vl3); // -11.3580034 double vl4; hmm.Decode(new int[] { 1, 0, 0, 0 }, out vl4); // -38.6759130 // Sequences which contains few errors have higher probability // than the ones which do not start with zero. This shows some // of the temporal elasticity and error tolerance of the HMMs. double vl5; hmm.Decode(new int[] { 0, 1, 0, 1, 1, 1, 1, 1, 1 }, out vl5); // -8.22665 double vl6; hmm.Decode(new int[] { 0, 1, 1, 1, 1, 1, 1, 0, 1 }, out vl6); // -8.22665 // Additionally, we can also compute the probability // of those sequences using the forward algorithm: double fl1 = hmm.LogLikelihood(new int[] { 0, 1 }); // -0.000031369 double fl2 = hmm.LogLikelihood(new int[] { 0, 1, 1, 1 }); // -0.087005121 // Sequences which do not start with zero have much lesser probability. double fl3 = hmm.LogLikelihood(new int[] { 1, 1 }); // -10.66485629 double fl4 = hmm.LogLikelihood(new int[] { 1, 0, 0, 0 }); // -36.61788687 // Sequences which contains few errors have higher probability // than the ones which do not start with zero. This shows some // of the temporal elasticity and error tolerance of the HMMs. double fl5 = hmm.LogLikelihood(new int[] { 0, 1, 0, 1, 1, 1, 1, 1, 1 }); // -3.3744416 double fl6 = hmm.LogLikelihood(new int[] { 0, 1, 1, 1, 1, 1, 1, 0, 1 }); // -3.3744416