2016-12-23 2 views
0

У меня проблема с машинным обучением, которую я пытаюсь решить. Я использую гауссовский HMM (от hmmlearn) с 5 состояниями, моделируя экстремальные отрицательные, отрицательные, нейтральные, положительные и экстремальные положительные в последовательности. Я создал модель в сущности нижеСкрытая марковская модель, сходящаяся к одному состоянию с использованием hmmlearn

https://gist.github.com/stevenwong/cb539efb3f5a84c8d721378940fa6c4c

import numpy as np 
import pandas as pd 
from hmmlearn.hmm import GaussianHMM 

x = pd.read_csv('data.csv') 
x = np.atleast_2d(x.values) 

h = GaussianHMM(n_components=5, n_iter=10, verbose=True, covariance_type="full") 
h = h.fit(x) 
y = h.predict(x) 

Проблема в том, что большинство из предполагаемых состояний сходится к середине, даже когда я явно вижу, что есть пики положительных значений и пики отрицательных значений, но все они сосредоточены вместе. Любая идея, как я могу получить его, чтобы лучше соответствовать данным?

enter image description here

РЕДАКТИРОВАТЬ 1:

Здесь матрица перехода. Я считаю, что, как он прочитал в hmmlearn находится через ряд (то есть строка [0] означает Prob о переходе к себе, состояние 1, 2, 3 ...)

In [3]: h.transmat_ 
Out[3]: 
array([[ 0.19077231, 0.11117929, 0.24660208, 0.20051377, 0.25093255], 
     [ 0.12289066, 0.17658589, 0.24874935, 0.24655888, 0.20521522], 
     [ 0.15713787, 0.13912972, 0.25004413, 0.22287976, 0.23080852], 
     [ 0.14199694, 0.15423031, 0.25024992, 0.2332739 , 0.22024893], 
     [ 0.93, 0.12500688, 0.24880728, 0.21205912, 0.2409158 ]]) 

Если установить все Probs перехода до 0,2, это выглядит так (если я усредняю ​​по состоянию, то разделение хуже).

enter image description here

ответ

1

Судя по всему, вашей модели узнала большую дисперсию для состояния 2. GMM является порождающей моделью тренировалась с макс критериев правдоподобия, так что в каком-то смысле, вы получили оптимальное прилегание к данным. Я вижу, что он дает значимые прогнозы в крайних случаях, поэтому, если вы хотите, чтобы он относил больше наблюдений к классам, отличным от 2, я бы попробовал следующее:

  1. Предварительная обработка данных. Попробуйте использовать значения журнала для ввода, чтобы сделать разницу между ними более резкими.
  2. Посмотрите на свою матрицу перехода, возможно, проблемы перехода из состояния 2 слишком низки. Попробуйте установить все вероятности равными и посмотреть, что произойдет.
+1

Незначительный nitpick: рассматриваемая модель является гауссовой HMM, а не гауссовой смесью модели aka GMM. –

+0

Спасибо. Это то, что я уже сделал с данными: 1) исходные данные имеют видимые циклы, но очень шумные, поэтому я использовал фильтр kalman для его сглаживания, параметры были выбраны с использованием алгоритма EM; 2) данные, которые вы видите выше, - это разница в журналах исходного временного ряда. Я отредактировал сообщение выше, следуя вашим предложениям. Хорошее Рождество – swmfg

+0

Если вы поделились кодом визуализации состояний, я мог бы сыграть с ним и, возможно, предложить что-то полезное. Теперь я могу только сказать, что 10 итераций выглядят немного слишком мало. Кроме того, всего 157 образцов данных ... –

Смежные вопросы