Python 在记录概率时消除值错误

Python 在记录概率时消除值错误,python,probability,logarithm,Python,Probability,Logarithm,我想找到最大可能路径,并尝试关联日志概率,以消除乘以步骤序列时的下溢错误 在计算最大可能路径时,我迭代地只保留最佳路径,并从头到尾删除其他路径(考虑我在这里绘制的图像)。在第一步之后(我不必删除任何,因为从初始状态到第一状态只有一条路径),我只保留到该状态的最佳路径,并且该状态将有达到该状态的概率 在步骤3(我在这里没有显示)中,该分数将与其他状态转移概率相乘,算法将在第三步选择到每个状态的最佳路径。但是,正如您所看到的,由于与节点(用*标记)关联的分数为-3.0,因此在尝试计算其日志值时将抛出

我想找到最大可能路径,并尝试关联日志概率,以消除乘以步骤序列时的下溢错误

在计算最大可能路径时,我迭代地只保留最佳路径,并从头到尾删除其他路径(考虑我在这里绘制的图像)。在第一步之后(我不必删除任何,因为从初始状态到第一状态只有一条路径),我只保留到该状态的最佳路径,并且该状态将有达到该状态的概率


在步骤3(我在这里没有显示)中,该分数将与其他状态转移概率相乘,算法将在第三步选择到每个状态的最佳路径。但是,正如您所看到的,由于与节点(用*标记)关联的分数为-3.0,因此在尝试计算其日志值时将抛出ValueError。有没有办法摆脱这个

另外,我已经完成了实现,不想展示它,因为它非常大,很难解释。错误就在下面一行,这里的best\u incoming\u weight=-3.0

    probability = math.log2(best_incoming_weight) + math.log2(current_incoming_weights)

你计算了概率的对数。它必须为负或零,因为0和1之间的任何数字的对数都是非正的。要将获得的结果转换为传统概率,您需要计算
2**probability
,其中
probability
如上所示。

请查看并从。“演示如何解决此编码问题?”与堆栈溢出无关。您必须诚实地尝试解决方案,然后询问有关实现的具体问题。堆栈溢出不是为了取代现有的教程或文档,也不是为您完成研究、设计或编码工作的一种方式。@Steve我已经使用python完成了实现。因为代码很长,所以很难显示代码,所以我试图画出并解释出现错误的原因。谢谢你让我要求进行投票表决。像你这样的人真的很有帮助!“但是,正如您所看到的,由于与节点(标有*)相关的分数是-3.0”,我不明白。什么逻辑告诉您结果应该是-3.0?我看不太清楚你的笔迹,但看起来你有“log0.3+log0.4=-3.0”(显然是以2为底的对数;我得到-3.05左右,但不管怎样)。如果你已经在添加对数的结果(为了避免乘法),那么你就不需要再取对数了。从我能理解的角度来看,你有一个数学问题,而不是编程问题。请试一试。@hEShaN-我取消了我的否决票,因为即使这个问题不属于这里,但你告诉我你有代码,只是觉得不值得展示它改变了我的观点。我想如果你一开始就这么说的话,我会有不同的看法,尽管也许我应该从你的提问中得到答案。我喜欢这里的讨论…也许你确实得到了一些帮助。无论如何,你现在有两张赞成票!谢谢我想我明白我在这里做错了什么!基本上,在下一步使用它之前,我应该将它转换回概率