protected static HiddenMarkovModelStateCreationType GetModelCreationType(IModelCreationParameters <TDistribution> parameters) { if (parameters.NumberOfStates.HasValue && !parameters.Delta.HasValue && parameters.Emissions == null) { if (parameters.NumberOfComponents.HasValue) { return(HiddenMarkovModelStateCreationType.NumberOfStatesAndNumberOfComponents); } return(HiddenMarkovModelStateCreationType.NumberOfStates); } if (parameters.NumberOfStates.HasValue && parameters.Delta.HasValue && parameters.Emissions == null) { if (parameters.NumberOfComponents.HasValue) { return(HiddenMarkovModelStateCreationType.NumberOfStatesAndDeltaAndNumberOfComponents); } return(HiddenMarkovModelStateCreationType.NumberOfStatesAndDelta); } if (parameters.NumberOfStates.HasValue && parameters.Emissions != null) { return(HiddenMarkovModelStateCreationType.NumberOfStatesAndEmissions); } if (parameters.NumberOfStates.HasValue && parameters.Delta.HasValue && parameters.Emissions != null) { return(HiddenMarkovModelStateCreationType.NumberOfStatesAndDeltaAndEmissions); } return(HiddenMarkovModelStateCreationType.PiAndTpmAndEmissions); }
/// <summary> /// /// </summary> /// <typeparam name="TDistribution"></typeparam> /// <param name="parameters"></param> /// <returns></returns> public static IHiddenMarkovModel <TDistribution> GetState <TDistribution>(IModelCreationParameters <TDistribution> parameters) where TDistribution : IDistribution { if (typeof(TDistribution).Name == "Mixture`1") { switch (typeof(TDistribution).GetGenericArguments()[0].FullName) { case "HmmDotNet.Statistics.Distributions.IMultivariateDistribution": return((IHiddenMarkovModel <TDistribution>) new HiddenMarkovModel <Mixture <IMultivariateDistribution> >((IModelCreationParameters <Mixture <IMultivariateDistribution> >)parameters)); case "HmmDotNet.Statistics.Distributions.Multivariate.NormalDistribution": return((IHiddenMarkovModel <TDistribution>) new HiddenMarkovModel <Mixture <Statistics.Distributions.Multivariate.NormalDistribution> >((IModelCreationParameters <Mixture <Statistics.Distributions.Multivariate.NormalDistribution> >)parameters)); } } else { switch (typeof(TDistribution).FullName) { case "HmmDotNet.Statistics.Distributions.IMultivariateDistribution": return((IHiddenMarkovModel <TDistribution>) new HiddenMarkovModel <IMultivariateDistribution>((IModelCreationParameters <IMultivariateDistribution>)parameters)); case "HmmDotNet.Statistics.Distributions.Univariate.DiscreteDistribution": return((IHiddenMarkovModel <TDistribution>) new HiddenMarkovModel <DiscreteDistribution>((IModelCreationParameters <DiscreteDistribution>)parameters)); case "HmmDotNet.Statistics.Distributions.Multivariate.NormalDistribution": return((IHiddenMarkovModel <TDistribution>) new HiddenMarkovModel <Statistics.Distributions.Multivariate.NormalDistribution>((IModelCreationParameters <Statistics.Distributions.Multivariate.NormalDistribution>)parameters)); case "HmmDotNet.Statistics.Distributions.Univariate.NormalDistribution": return((IHiddenMarkovModel <TDistribution>) new HiddenMarkovModel <Statistics.Distributions.Univariate.NormalDistribution>((IModelCreationParameters <Statistics.Distributions.Univariate.NormalDistribution>)parameters)); } } throw new InvalidOperationException("Type passed for parameter T is not supported with any implemented Hidden Markov Model"); }
public HiddenMarkovModel(IModelCreationParameters <TDistribution> parameters) { switch (GetModelCreationType(parameters)) { case HiddenMarkovModelStateCreationType.NumberOfStates: Create(parameters.NumberOfStates.Value); break; case HiddenMarkovModelStateCreationType.NumberOfStatesAndDelta: Create(parameters.NumberOfStates.Value, parameters.Delta.Value); break; case HiddenMarkovModelStateCreationType.NumberOfStatesAndDeltaAndEmissions: Create(parameters.NumberOfStates.Value, parameters.Delta.Value, parameters.Emissions); break; case HiddenMarkovModelStateCreationType.NumberOfStatesAndEmissions: Create(parameters.NumberOfStates.Value, parameters.Emissions); break; case HiddenMarkovModelStateCreationType.PiAndTpmAndEmissions: Create(parameters.Pi, parameters.TransitionProbabilityMatrix, parameters.Emissions); break; case HiddenMarkovModelStateCreationType.NumberOfStatesAndNumberOfComponents: CreateMixture(parameters.NumberOfStates.Value, parameters.NumberOfComponents.Value); break; case HiddenMarkovModelStateCreationType.NumberOfStatesAndDeltaAndNumberOfComponents: CreateMixture(parameters.NumberOfStates.Value, parameters.NumberOfComponents.Value, parameters.Delta.Value); break; default: throw new InvalidOperationException("Combination of parameters passed is not supported by any Create method"); } }
public HiddenMarkovModel(IModelCreationParameters <DiscreteDistribution> parameters) : base(parameters) { }
public HiddenMarkovModelGaussianDistribution(IModelCreationParameters <NormalDistribution> parameters) : base(parameters) { }
public HiddenMarkovModelMultivariateGaussianDistribution(IModelCreationParameters <IMultivariateDistribution> parameters) : base(parameters) { _initialize = (GetModelCreationType(parameters) == HiddenMarkovModelStateCreationType.NumberOfStates || GetModelCreationType(parameters) == HiddenMarkovModelStateCreationType.NumberOfStatesAndDelta); }
public HiddenMarkovModelWeightedMixtureDistribution(IModelCreationParameters <Mixture <IMultivariateDistribution> > parameters) : base(parameters) { _initialize = (GetModelCreationType(parameters) == HiddenMarkovModelStateCreationType.NumberOfStatesAndNumberOfComponents || GetModelCreationType(parameters) == HiddenMarkovModelStateCreationType.NumberOfStatesAndDeltaAndNumberOfComponents); }