隐马尔可夫模型结果(解码)每次都改变
Hidden Markov Model result(decoding )changes everytime
我使用 HMM 来预测人类的行为。隐藏状态是 Rest walk eat,观察分别是 inside、outside 和 snack。
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])
我想知道的是如何为每个 运行 获得恒定值或如何最终确定模型。提前感谢您的回答。
隐马尔可夫模型 (HMM) 是随机的 - 它们使用 random-number 生成器来帮助做出决策。所以如果你多次 运行 代码,每次执行都会不同,因为幕后使用的随机数不同。
如果您想让每个 运行 使用相同的随机数序列,您需要设置随机数“种子”。查看 hmm
文档以了解如何设置种子。将其设置为固定值将确保每次执行都使用相同的随机数序列,并且每个 运行.
的结果应该相同
最终确定模型的问题超出了本网站的范围。从本质上讲,您必须了解 HMM、它们的工作原理、它们所做的假设以及您的 use-case 如何符合(或不符合!)这些假设。然后你用你最好的判断结合严谨的testing/training来确定最终的参数化。
我使用 HMM 来预测人类的行为。隐藏状态是 Rest walk eat,观察分别是 inside、outside 和 snack。
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])
我想知道的是如何为每个 运行 获得恒定值或如何最终确定模型。提前感谢您的回答。
隐马尔可夫模型 (HMM) 是随机的 - 它们使用 random-number 生成器来帮助做出决策。所以如果你多次 运行 代码,每次执行都会不同,因为幕后使用的随机数不同。
如果您想让每个 运行 使用相同的随机数序列,您需要设置随机数“种子”。查看 hmm
文档以了解如何设置种子。将其设置为固定值将确保每次执行都使用相同的随机数序列,并且每个 运行.
最终确定模型的问题超出了本网站的范围。从本质上讲,您必须了解 HMM、它们的工作原理、它们所做的假设以及您的 use-case 如何符合(或不符合!)这些假设。然后你用你最好的判断结合严谨的testing/training来确定最终的参数化。