Функция predict
предсказывает наиболее вероятную последовательность состояний с учетом входных данных.Это не то, что вам нужно в отношении вашей проблемы, а о классификации между двумя классами.
Вам может понадобиться метод predict_proba
(см. Документацию здесь ), который дастВы - вероятность по состоянию.
Однако имейте в виду, что вы не можете точно знать, как HMM научился различать два класса.Это означает, что, за исключением случаев, когда вы несколько оценили / инициализировали первые параметры Гаусса из обучающих выборок, принадлежащих к классу 1, и другие гауссовские из выборок, принадлежащих к классу 2, вы не можете знать, связал ли HMM каждое из своих состояний сучебный класс.Два класса также можно было бы выучить так, чтобы последовательность, используемая между состояниями, делала их разными.Например, класс 1 дает шаблон состояний S1-S2-S1-S2-S1-S2 ..., а класс 2 - шаблон S1-S1-S2-S2-S1-S1 -... Давайте вспомним, что HMMхорошо для временных рядов.Задайте себе вопрос: если одно распределение Гаусса может полностью представлять один класс, то зачем использовать скрытые модели Маркова?
Для (бинарной) классификации более надежный подход заключается в обучении двух HMM, один из выборок первого класса, а другой из образцов второго класса.После обучения каждая тестовая последовательность оценивается по обеим моделям методом score
(см. Документацию здесь ).Это вернет логарифмическую вероятность последовательности, которую вы передаете в качестве входных данных относительно модели, которую вы вызываете.Затем тестовый образец классифицируется в классе модели, возвращающей результат с наибольшим правдоподобием.
Что интересно при таком подходе, так это то, что в случае, когда обе модели дают результат с низким правдоподобием, вы также можете пометить тестовую последовательностькак часть ни одного из двух классов интересов.Это также обобщает до нескольких десятков классов.