![]() |
1
3
您可以使用随机数生成器来选择您要走的路径。您必须保存每个状态(实际上是n个前一项的历史记录)和该状态的概率。然后你选择一个随机数,并根据它来决定你下一个过渡到什么状态。 在您的示例中,有一个n为1的马尔可夫链,您将有一个类似这样的链结构:
如果您当前的状态是hello,那么您下一个可能的状态是world。还有新子…生成一个介于0和1之间的随机数并选择World。如果小于0.666666,则选择多莉。 对于n=2马尔可夫链,您可以通过该输入获得几乎确定性的行为:
|
![]() |
2
0
两个评论: 1)要从随机过程中生成样本,无论某个选择是否很有可能(>50%),而其他选择的可能性较小,只需要一个加权的“硬币翻转”:在[0,1]上均匀生成一个随机实数,并以相同的固定顺序考虑各种可能性,保持目前的概率总和。一旦金额超过随机选择的数字,选择该选项。如果你的选择有非标准化的(不是1的总和)概率,你首先需要计算概率的总和,然后将它们全部除以s,或者在[0,s]上选择你的随机数。 2)为了防止从少量样本训练数据(与参数数量相比)估算模型时过度拟合,请在模型参数上使用贝叶斯先验。对于一个非常酷的例子,模型参数的数量(历史大小)没有预先固定为任何有限的数字,请参见 Infinite HMM .如果您不使用贝叶斯方法,那么您将需要为您所拥有的训练数据量适当地选择历史长度,和/或实现一些特殊的平滑(例如订单2和订单1模型之间的线性插值)。 |