我已经实现了一个简单的代码隐马尔可夫模型,通过and学习,它运行良好。我使用了fit()方法,即hmmlearn.fit来根据我的数据学习hmm参数。如果我有更多的数据,并希望更新以前的模型,而不需要培训/从零开始拟合,我能做什么?换句话说,如何根据我目前所知道的来初始化一个新的模型,并继续使用新的观察/样本来适应我的数据更好的模型?
发布于 2020-10-02 15:53:02
在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数组。
https://stackoverflow.com/questions/64023173
复制相似问题