我已经通过 hmmlearn 为隐马尔可夫模型实现了一个简单的代码,它运行良好。我使用 fit() 方法,即 hmmlearn.fit 根据我的数据来学习 hmm 参数。如果我有更多数据并且想更新以前拟合的模型而不从头开始训练/拟合,我该怎么办?换句话说,我怎样才能根据我目前所知道的来初始化一个新模型,并继续使用新的观察/样本来为我的数据拟合一个更好的模型
问问题
359 次
1 回答
0
hmmlearn
您可能已经注意到,一旦您使用 进行训练,hmmlearn.fit
模型参数就会更新:
import numpy as np
import pickle
from hmmlearn import hmm
np.random.seed(42)
# initialize model
model = hmm.GaussianHMM(n_components=3, covariance_type="full")
model.startprob_ = np.array([0.33, 0.33, 0.34])
model.transmat_ = np.array([[0.1, 0.2, 0.7],
[0.3, 0.5, 0.2],
[0.5, 0.1, 0.4]])
model.means_ = np.array([[1.0, 1.0], [2.0, 1.0], [3.0, 1.0]])
model.covars_ = np.tile(np.identity(2), (3, 1, 1))
# generate "fake" training data
emissions1, states1 = model.sample(100)
print("Transition matrix before training: \n", model.transmat_)
# train
model.fit(emissions1)
print("Transition matrix after training: \n", model.transmat_)
# save model
with open("modelname.pkl", "wb") as f: pickle.dump(model, f)
#################################
>>> Transition matrix before training:
[[0.1 0.2 0.7]
[0.3 0.5 0.2]
[0.5 0.1 0.4]]
>>> Transition matrix after training:
[[0.19065325 0.50905216 0.30029459]
[0.41888047 0.39276483 0.18835471]
[0.44558543 0.13767827 0.4167363 ]]
这意味着如果你有一个新的训练数据(即emissions2
),你可以使用相同的更新模型来训练新的发射序列。可以选择通过酸洗保存整个模型(如上图),也可以保存转换矩阵、发射矩阵等的numpy数组。
于 2020-10-02T15:53:02.120 回答