'Returns the state sequence of the optimal (most probable) path through
the HMM. Uses the Viterbi algorithm to calculate this part by dynamic
programming.
:return: the state sequence
:rtype: sequence of any
:param unlabeled_sequence: the sequence of unlabeled symbols
:type unlabeled_sequence: list'

def best_path(self, unlabeled_sequence):

    unlabeled_sequence = self._transform(unlabeled_sequence)
    return self._best_path(unlabeled_sequence)
