我正在使用scikit-learn的GaussianHMM,当我尝试将其与某些观察结果相符时,我得到以下ValueError。这是演示错误的代码:
>>> from sklearn.hmm import GaussianHMM
>>> arr = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> arr
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> gmm = GaussianHMM ()
>>> gmm.fit (arr)
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/function_base.py:2005: RuntimeWarning: invalid value encountered in divide
return (dot(X, X.T.conj()) / fact).squeeze()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/sklearn/hmm.py", line 427, in fit
framelogprob = self._compute_log_likelihood(seq)
File "/Library/Python/2.7/site-packages/sklearn/hmm.py", line 737, in _compute_log_likelihood
obs, self._means_, self._covars_, self._covariance_type)
File "/Library/Python/2.7/site-packages/sklearn/mixture/gmm.py", line 58, in log_multivariate_normal_density
X, means, covars)
File "/Library/Python/2.7/site-packages/sklearn/mixture/gmm.py", line 564, in _log_multivariate_normal_density_diag
+ np.dot(X ** 2, (1.0 / covars).T))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/matrixlib/defmatrix.py", line 343, in __pow__
return matrix_power(self, other)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/matrixlib/defmatrix.py", line 160, in matrix_power
raise ValueError("input must be a square array")
ValueError: input must be a square array
>>>
我该如何解决这个问题?似乎我给它有效的输入。谢谢!
答案 0 :(得分:3)
您必须符合列表,请参阅official examples:
>>> gmm.fit([arr])
GaussianHMM(algorithm='viterbi', covariance_type='diag', covars_prior=0.01,
covars_weight=1,
init_params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
means_prior=None, means_weight=0, n_components=1, n_iter=10,
params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
random_state=None, startprob=None, startprob_prior=1.0, thresh=0.01,
transmat=None, transmat_prior=1.0)
>>> gmm.n_features
3
>>> gmm.n_components
1
答案 1 :(得分:3)
根据the docs,gmm.fit(obs)
期望obs
成为类似于数组的对象的列表:
obs : list
List of array-like observation sequences (shape (n_i, n_features)).
因此,请尝试:
import numpy as np
from sklearn.hmm import GaussianHMM
arr = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
gmm = GaussianHMM()
print(gmm.fit([arr]))
隐藏的马尔可夫模型(HMM)是sklearn的no longer supported。