public static void CreateModelFromFrames(string readPath, string writePath) { SequenceList seq = Utils.FramesToSequenceList(Utils.LoadListListFrame(readPath)); HiddenMarkovModel <MultivariateNormalDistribution> hmm; MultivariateNormalDistribution mnd = new MultivariateNormalDistribution(seq.GetArray()[0][0].Length); hmm = new HiddenMarkovModel <MultivariateNormalDistribution>(new Forward(5), mnd); var teacher = new BaumWelchLearning <MultivariateNormalDistribution>(hmm); teacher.Tolerance = 0.0001; teacher.Iterations = 0; teacher.FittingOptions = new NormalOptions() { Diagonal = true, // only diagonal covariance matrices Regularization = 1e-5 // avoid non-positive definite errors }; double logLikelihood = teacher.Run(seq.GetArray()); Debug.Log(readPath + " - " + seq.sequences.Count + " - " + logLikelihood); hmm.Save(writePath); }
/*public static void SaveSequenceList(SequenceList seqList, string path) * { * Stream writeStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None); * seqList.Save(writeStream); * writeStream.Close(); * } * * public static SequenceList LoadSequenceList(string path) * { * Stream readStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); * SequenceList seqList = SequenceList.Load(readStream); * readStream.Close(); * return seqList; * }*/ public static HiddenMarkovModel <MultivariateNormalDistribution> CreateModelFromFrames(List <List <Frame> > frames) { SequenceList sequences = Utils.FramesToSequenceList(frames); HiddenMarkovModel <MultivariateNormalDistribution> hmm; MultivariateNormalDistribution mnd = new MultivariateNormalDistribution(sequences.GetDimensions()); hmm = new HiddenMarkovModel <MultivariateNormalDistribution>(new Forward(5), mnd); var teacher = new BaumWelchLearning <MultivariateNormalDistribution>(hmm); teacher.Tolerance = 0.0001; teacher.Iterations = 0; teacher.FittingOptions = new NormalOptions() { Diagonal = true, // only diagonal covariance matrices Regularization = 1e-5 // avoid non-positive definite errors }; teacher.Run(sequences.GetArray()); return(hmm); }