Пример #1
0
 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);
 }
Пример #2
0
        /// <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");
        }
Пример #3
0
        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");
            }
        }
Пример #4
0
 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);
 }