2015-06-11 25 views
6

Với mã này:Confused về X trong GaussianHMM.fit ([X])

X = numpy.array(range(0,5)) 
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000) 
model.fit([X]) 

tôi nhận được

tuple index out of range 
self.n_features = obs[0].shape[1] 

Vì vậy, những gì bạn có nghĩa vụ để vượt qua .fit() chính xác? Các trạng thái ẩn và phát thải trong một bộ tuple? Nếu vậy theo thứ tự nào? Tài liệu ít hữu ích hơn.

tôi nhận thấy nó thích được thông qua các bộ như thế này không đưa ra một lỗi:

X = numpy.column_stack([range(0,5),range(0,5)]) 
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000) 
model.fit([X]) 

Edit:

Hãy để tôi làm rõ một chút, the documentation chỉ ra rằng ordinality của mảng phải là:

List of array-like observation sequences (shape (n_i, n_features)).

Điều này gần như sẽ chỉ ra rằng bạn chuyển một bộ tuple cho mỗi mẫu biểu thị theo kiểu nhị phân có quan sát. Tuy nhiên their example chỉ ra điều ngược lại:

# pack diff and volume for training 
X = np.column_stack([diff, volume]) 

vì sự nhầm lẫn

+0

Tôi không quá quen thuộc với thư viện đó, nhưng có vẻ như bạn cần phải vượt qua mô hình Markov nhiều thông tin hơn, như xác suất bắt đầu, ma trận chuyển đổi, v.v. Bạn đã xem [ví dụ tại đây] của họ chưa (http://scikit-learn.org/stable/modules) /hmm.html)? – CoryKramer

+0

[Đây là một câu hỏi tương tự] (https://stackoverflow.com/questions/20619734/scikit-learn-gaussianhmm-valueerror-input-must-be-a-square-array) bằng cách này. – CoryKramer

+1

@CoreyKramer Có tôi đã thấy ví dụ của họ, đọc tài liệu của họ, và thậm chí đọc bài viết mà thảo luận về một thực tế rằng bạn phải vượt qua một mảng mảng/ma trận numpy, không phải những gì mỗi ordinality mảng chỉ ra. – Brooks

Trả lời

1

Nó sẽ xuất hiện chức năng GaussianHMM là cho các vấn đề đa biến khí thải chỉ HMM, do đó yêu cầu phải có> 1 vectơ khí thải. Khi tài liệu đề cập đến 'n_features', chúng không đề cập đến số lượng cách phát thải có thể thể hiện bản thân nhưng số lượng các vectơ phát xạ trực giao.

Do đó, "tính năng" (vectơ phát xạ trực giao) không bị nhầm lẫn với "ký hiệu", trong ngữ cảnh của sklearn (có khả năng được chia sẻ với cộng đồng hmm lớn hơn cho tất cả những gì tôi biết), hãy tham khảo giá trị hệ thống có khả năng phát ra.

Đối với các vấn đề vector phát xạ đơn biến, hãy sử dụng MultinomialHMM.

Hy vọng rằng sẽ làm rõ cho bất kỳ ai khác muốn sử dụng công cụ này mà không trở nên thẩm quyền hàng đầu thế giới trên HMMs :)

0

Tôi nhận ra đây là một chủ đề cũ nhưng vấn đề trong các mã ví dụ là vẫn còn đó. Tôi tin rằng ví dụ hiện tại là this link và vẫn đưa ra các lỗi tương tự:

tuple index out of range 
self.n_features = obs[0].shape[1] 

Dòng vi phạm của mã là: model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit(X)

nào nên là: model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit([X])

Các vấn đề liên quan