2013-12-16 2 views
3

Я работаю с GaussianHMM scikit-learn и получаю следующий ValueError, когда пытаюсь подгонять его к некоторым наблюдениям. вот код, который демонстрирует ошибку: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

Если я делаю arr таким, что он не является квадратной матрицей, я все равно получаю ту же ошибку, даже если я заключу его в скобки ... т.е. если arr является матрицей ([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]). Есть идеи? Благодаря! –

ответ

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 
+0

Ссылка мертва. См. Обновление здесь. http://scikit-learn.org/0.14/auto_examples/applications/plot_hmm_stock_analysis.html – lifelogger

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) - no longer supported от sklearn.

+0

, так что я не понимаю, это то, что представлено в каждом столбце, если у нас должно быть столько столбцов, сколько возможностей эмиссии? Почему мы не можем просто пройти одномерную последовательность выбросов? – Brooks

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