我有一个粒子位置随时间变化的时间序列,我想使用这些数据估计两个 HMM 的模型参数(一个用于 x 轴,另一个用于 y 轴)。我正在使用 hmmlearn 库,但是,我不清楚应该如何进行。在教程中,它指出这是使用该库的第三种方式,但是,当我使用如下代码时:
remodel = hmm.GaussianHMM(n_components=3, covariance_type="full", n_iter=100)
remodel.fit(X)
Z2 = remodel.predict(X)
X 是 x 轴值的列表,它返回
ValueError: Expected 2D array, got 1D array instead
我应该在数据中添加什么才能将其转换为 2D?
最佳答案
买者自负:我对 HMM 和这个库的理解是基于几分钟的谷歌搜索和维基百科。也就是说:
要训练 HMM 模型,您需要大量观察样本,每个样本都是一个特征向量。例如,在 Wikipedia example爱丽丝根据鲍勃每天所做的事情预测鲍勃家的天气,爱丽丝获得了许多样本(鲍勃每天告诉她的内容),每个样本都有一个特征(鲍勃当天报告的事件)。鲍勃完全有可能为爱丽丝提供某一天的多个特征(例如,他做了什么,以及他的衣服是什么)。
为了学习/拟合 HMM 模型,您应该需要一系列样本,每个样本都是一个特征向量。这就是为什么 fit
函数需要二维输入。来自 the docs ,X
预计为“类似数组,形状(n_samples, n_features)
”。在您的情况下,粒子的位置是唯一的特征,每个观察结果都是一个样本。因此,您的输入应该是形状为 n_samples, 1
的类似数组(单列)。现在,它的形状可能是 1, n_samples
(单行,默认执行诸如 np.array([1, 2, 3])
之类的操作)。所以只需 reshape :
remodel.fit(X.reshape(-1, 1))
关于python - 隐马尔可夫模型 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51577149/