1

我有一个粒子位置随时间变化的时间序列,我想使用这些数据估计两个 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?

4

2 回答 2

0

警告购买者:我对 HMM 和这个库的理解是基于几分钟的谷歌搜索和维基百科。那说:

要训​​练 HMM 模型,您需要许多观察样本,每个样本都是特征向量。例如,在爱丽丝根据鲍勃每天所做的事情预测鲍勃家的天气的维基百科示例中,爱丽丝获得了许多样本(鲍勃每天告诉她的内容),每个样本都有一个特征(鲍勃当天报告的活动) )。Bob 完全有可能在某一天为 Alice 提供多个功能(例如,他做了什么,他的衣服是什么)。

那么,要学习/拟合 HMM 模型,您应该需要一系列样本,每个样本都是一个特征向量。这就是fit函数需要二维输入的原因。从docs来看,X预计将是“类似数组的形状(n_samples, n_features)”。在您的情况下,粒子的位置是唯一的特征,每个观察都是一个样本。所以你的输入应该是一个类似数组的形状n_samples, 1(单列)。现在,它可能是形状1, n_samples(单行,默认来自做类似的事情np.array([1, 2, 3]))。所以只需重塑:

remodel.fit(X.reshape(-1, 1))
于 2018-07-29T05:47:22.983 回答
0

对我来说,该reshape方法不起作用。我改用numpy的np.column_stack。我建议您X = np.column_stack([X[:]])在拟合模型之前插入,它应该可以解决。

于 2020-08-14T13:02:39.527 回答