隐马尔可夫模型结果(解码)每次都会改变

我使用 HMM 来预测人类的行为。隐藏状态分别是“休息、步行、吃饭”和“观察”,分别是“室内”、“室外”和“零食”。


hState = ['Rset', 'Walk', 'Eat']

Obs =  ['Inside 1', 'Outside 2', 'Snack 3']

order = [1, 2, 1, 2, 3 ,2, 2, 3, 1, 2 ,2, 2, 1, 2]

no = 3

sProb = np.array([0.1, 0.8, 0.1])

tProb = np.array([[0.2, 0.2, 0.6], 

                     [0.1, 0.8, 0.1], 

                     [0.6, 0.1, 0.3]])

eProb = np.array([[0.7, 0.2, 0.1],  

                    [0.1, 0.6, 0.3],

                    [0.2, 0.3, 0.5]])

h = hmm.MultinomialHMM(3, "full", sProb, tProb)

h.emissionprob_ = eProb

oreder1 = np.array([order]).T

result= hmm.GaussianHMM(n_components=no).fit(oreder1)

result.predict(oreder1)

但每当我再次运行代码时,结果就会改变。结果序列正确,但隐藏状态id发生变化 第一次运行的结果


array([2, 1, 2, 1, 0, 1, 1, 0, 2, 1, 1, 1, 2, 1])

第二次运行的结果


array([0, 1, 0, 1, 2, 1, 1, 2, 0, 1, 1, 1, 0, 1])

我想知道的是如何获得每次运行的恒定值或如何最终确定模型。感谢您提前的答复。


忽然笑
浏览 149回答 1
1回答

慕标5832272

隐马尔可夫模型 (HMM) 是随机的 - 它们使用随机数生成器来帮助做出决策。因此,如果多次运行代码,每次执行都会不同,因为幕后使用的随机数不同。如果您想让每次运行都使用相同的随机数序列,则需要设置随机数“种子”。查看hmm文档以了解如何设置种子。将其设置为固定值将确保每次执行都使用相同的随机数序列,并且每次运行都会产生相同的结果。最终确定模型的问题远远超出了本网站的范围。本质上,您必须了解 HMM、它们如何工作、它们做出什么假设,以及您的用例如何符合(或不符合!)这些假设。然后,您使用最佳判断结合严格的测试/培训来确定最终的参数化。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python