我在实现HMM模型时遇到了麻烦。我从一个pandas数据框开始,其中我想使用两列来预测隐藏状态。我正在使用hmmlearn包。
我正在遵循hmmlearn"使用多个序列"的说明;https://hmmlearn.readthedocs.io/en/latest/tutorial.html多个序列
我遵循下面的代码,但设置X1和X2作为我的列
X1 = [[0.5], [1.0], [-1.0], [0.42], [0.24]]
X2 = [[2.4], [4.2], [0.5], [-0.24], [0.24]]
X = np.concatenate([X1, X2])
lengths = [len(X1), len(X2)]
hmm.GaussianHMM(n_components=3).fit(X, lengths)
predictions=model.predict(X)
问题是,当我试图预测状态而不是组合序列来创建1个预测时,我得到了每个观测值的预测。在这个例子中,我想要5个观察值,但我得到了10个。是否有一种方法可以将数据框架的特征作为独立变量合并以获得1个组合预测?
目前你给模型两个样本序列,每个序列有5个观测值,只有一个特征-所以总共有10个观测值。你想要的是一个有5个观测值的单一序列,有两个特征。
应该是这样的:
X = [[0.5, 2.4], [1.0, 4.2], [-1.0, 0.5], [0.42, -0.24], [0.24, 0.25]]
lengths = [len(X)]
model = hmm.GaussianHMM(n_components=3).fit(X, lengths)
predictions = model.predict(X)
那么你只有五个预测。
如果您想像在示例中那样使用X1
和X2
来构建X
变量,则可以使用zip
:
X = [[x1[0], x2[0]] for x1, x2 in zip(X1, X2)]