0

我已经通过 hmmlearn 为隐马尔可夫模型实现了一个简单的代码,它运行良好。我使用 fit() 方法,即 hmmlearn.fit 根据我的数据来学习 hmm 参数。如果我有更多数据并且想更新以前拟合的模型而不从头开始训练/拟合,我该怎么办?换句话说,我怎样才能根据我目前所知道的来初始化一个新模型,并继续使用新的观察/样本来为我的数据拟合一个更好的模型

4

1 回答 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 回答