Как инициализировать HMM с диагональной ковариацией в hmmlearn? - PullRequest
0 голосов
/ 08 октября 2019
startprob = np.array([1.0, 0.0, 0.0, 0.0])
# The transition matrix
transmat = np.array([[0.5, 0.5, 0.        , 0.        ],
       [0.        , 0.7, 0.3, 0.        ],
       [0.        , 0.        , 0.7, 0.3],
       [0.        , 0.        , 0.        , 1.        ]])
# The means of each component
means = np.array([[0.0],
                  [2.0],
                  [4.0],
                  [6.0]])
# The covariance of each component
covars = .5 * np.tile(np.identity(1), (4, 1, 1))

# Build an HMM instance and set parameters
model = hmm.GaussianHMM(n_components=4, covariance_type="diag")

# Instead of fitting it from the data, we directly set the estimated
# parameters, the means and covariance of the components
model.startprob_ = startprob
model.transmat_ = transmat
model.means_ = means
model.covars_ = covars

Я не понимаю, почему я получаю сообщение об ошибке, когда я устанавливаю тип ковариации «diag», когда мои ковариации составляют матрицы 1 на 1. Это прекрасно работает, когда я использую «full» для ковариационного типа, но мне нужно, чтобы этот набор был «diag». Как я могу исправить мой термин «ковары», чтобы это работало?

# Generate samples

X, Z = model.sample(1000)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-97d2e44fed38> in <module>
      1 # Generate samples
----> 2 X, Z = model.sample(1000)

~/miniconda3/envs/ykp/lib/python3.7/site-packages/hmmlearn/base.py in sample(self, n_samples, random_state)
    376         """
    377         check_is_fitted(self, "startprob_")
--> 378         self._check()
    379 
    380         if random_state is None:

~/miniconda3/envs/ykp/lib/python3.7/site-packages/hmmlearn/hmm.py in _check(self)
    179 
    180         _utils._validate_covars(self._covars_, self.covariance_type,
--> 181                                 self.n_components)
    182 
    183     def _init(self, X, lengths=None):

~/miniconda3/envs/ykp/lib/python3.7/site-packages/hmmlearn/_utils.py in _validate_covars(covars, covariance_type, n_components)
     22     elif covariance_type == 'diag':
     23         if len(covars.shape) != 2:
---> 24             raise ValueError("'diag' covars must have shape "
     25                              "(n_components, n_dim)")
     26         elif np.any(covars <= 0):

ValueError: 'diag' covars must have shape (n_components, n_dim)
...