泊松分布实现中的溢出错误

Overflow error in poisson distribution implementation

我正在尝试在我的代码中将泊松分布实现为 lambda 函数:

likelihood = lambda lamb: lamb**S / math.factorial(S) * numpy.exp(-lamb)

S 的值为 124。现在编译器 returns 在我定义函数的行中出现以下错误:

OverflowError: (34, 'Numer ical result out of range')

我在实现那个 lambda 函数时做错了什么?

您可能希望在对数尺度上工作;即对数似然。这在统计数据中很常见,因为可能性通常很小,而且浮点数只能低至 ~1e-300。

我认为这个函数看起来像:

import numpy as np
from scipy.special import loggamma

def log_likelihood(lamb, S):
  return np.log(lamb) * S - loggamma(S + 1) - lamb