我有一个粒子随时间的位置的时间序列,我想用这个数据估计两个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?
1 回答
注意事项:我对HMM和这个lib的理解是基于几分钟的谷歌搜索和维基百科 . 那说:
要训练HMM模型,您需要一些观察样本,每个样本都是一个特征向量 . 例如,在Alice的Wikipedia example中预测当天Bob报告的活动天气 . ) Bob完全有可能在给定的一天给Alice带来多个功能(例如,他做了什么,以及他的装备是什么) .
那么,要学习/拟合HMM模型,您需要一系列样本,每个样本都是一个特征向量 . 这就是
fit
函数需要二维输入的原因 . 从the docs开始,X
预计将是“类似于数组,形状(n_samples, n_features)
” . 在您的情况下,粒子的位置是唯一的特征,每个观察都是一个样本 . 所以你的输入应该是一个类似于数组n_samples, 1
(单列)的数组 . 现在,它可能是形状1, n_samples
(单行,默认情况下做np.array([1, 2, 3])
) . 所以只需重塑: