我有一个粒子随时间变化的位置时间序列,我想使用这些数据估计两个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?
发布于 2018-07-29 13:47:23
注意:我对HMM和这个库的理解是基于几分钟的谷歌搜索和维基百科。这就是说:
要训练HMM模型,您需要许多观察样本,每个样本都是一个特征向量。例如,在爱丽丝的Wikipedia example中,根据鲍勃每天所做的事情预测鲍勃家里的天气,爱丽丝得到了许多样本(鲍勃每天告诉她的),每个样本都有一个特征(鲍勃当天报告的活动)。Bob完全有可能在给定的一天内为Alice提供多种功能(例如,他做了什么,他的服装是什么)。
因此,要学习/拟合HMM模型,您应该需要一系列样本,每个样本都是一个特征向量。这就是fit函数需要二维输入的原因。在the docs中,预计X将是“类似数组的形状(n_samples, n_features)”。在您的例子中,粒子的位置是唯一的特征,每个观察值都是一个样本。因此,您的输入应该是一个类似数组的形状n_samples, 1 (单列)。现在,它大概是shape 1, n_samples (单行,执行类似np.array([1, 2, 3])的操作的默认值)。所以只要重塑一下:
remodel.fit(X.reshape(-1, 1))发布于 2020-08-14 21:02:40
对我来说,reshape方法不起作用。我用的是numpy的np.column_stack。我建议你在拟合模型之前插入X = np.column_stack([X[:]]),它应该能解决问题。
https://stackoverflow.com/questions/51577149
复制相似问题