class_docstr: Algorithms for learning HMM parameters from training data. These include
  both supervised learning (MLE) and unsupervised learning (Baum-Welch).
  
  Creates an HMM trainer to induce an HMM with the given states and
  output symbol alphabet. A supervised and unsupervised training
  method may be used. If either of the states or symbols are not given,
  these may be derived from supervised training.
  
  :param states:  the set of state labels
  :type states:   sequence of any
  :param symbols: the set of observation symbols
  :type symbols:  sequence of any
code: def __init__(self, states=None, symbols=None):
      self._states = states if states else []
      self._symbols = symbols if symbols else []
  
imports: import itertools
  import re
  from nltk.metrics import accuracy
  from nltk.probability import ConditionalFreqDist, ConditionalProbDist, DictionaryConditionalProbDist, DictionaryProbDist, FreqDist, LidstoneProbDist, MLEProbDist, MutableProbDist, RandomProbDist
  from nltk.tag.api import TaggerI
  from nltk.util import LazyMap, unique_list
label_desc: Use image node_id 1 to create a new HiddenMarkovModelTrainer object  with example: obj = HiddenMarkovModelTrainer(states, symbols)