# Training Hidden Markov Models using Mathematica

I have created a Hidden Markov Process with an initial probability vector, emission and transmission matrices.

hmm = HiddenMarkovProcess[Table[1/21, {i, 1, 21}], tm, em]


popup question: What sort of an object is my hmm now? Its Head[] gives HiddenMarkovProcess. And in the documentation I have seen many functions like LogLikelihood[] that take as a parameter a process or proc. I'm not sure I understand what "type" proc is. Is it atomic structure in Mathematica like String and such?

Anyway, I now have a large annotated data that I want my HMM to classify them into 2 classes. Having the list of annotated emission strings, basically I want to minimize the log-likelihood function using gradient descent or the Baum-Welch E-M algorithm. I saw a high-level function called EstimatedProcess to which I can give a process and say estimate by Baum-Welch. Will this update my transmission and emission matrices?
Also can I pass the functions like LogLikelihood to the function Minimize and just then use the option GradientDescent or anything of the sort?

Note: I don't want to use the Classify function since I want to have my custom made HMM.