使用此代码:
X = numpy.array(range(0,5))
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000)
model.fit([X])
我得到了
tuple index out of range
self.n_features = obs[0].shape[1]
那么你应该准确传递.fit()的是什么?元组中隐藏的状态和排放?如果是这样的话?文档不太有用。
我注意到它喜欢传递元组,因为这不会出错:
X = numpy.column_stack([range(0,5),range(0,5)])
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000)
model.fit([X])
编辑:
让我澄清一点,the documentation表示数组的正常性必须是:
类似阵列的观察序列列表(形状(n_i,n_features))。
这几乎表明你为每个样本传递一个元组,以二进制形式表示存在哪些观察结果。但是their example表示不是:
# pack diff and volume for training
X = np.column_stack([diff, volume])
因此混乱
答案 0 :(得分:1)
看起来GaussianHMM函数仅用于多元发射HMM问题,因此需要具有> 1个发射矢量。当文件提到'n_features'时,它们并不是指排放可以表达自己的方式,而是指正交发射矢量的数量。
因此,“特征”(正交发射矢量)不应与“符号”相混淆,按照sklearn的说法(可能与我所知道的所有人共享的更大的hmm社区),请参考实际的唯一值系统能够发射。
对于单变量发射矢量问题,请使用MultinomialHMM。
希望澄清任何想要使用这些东西而不成为世界上最重要的HMM权威的人:)
答案 1 :(得分:1)
我意识到这是一个旧线程,但示例代码中的问题仍然存在。我相信这个示例现在位于this link并且仍然会出现同样的错误:
tuple index out of range
self.n_features = obs[0].shape[1]
令人讨厌的代码行是:
model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit(X)
应该是:
model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit([X])