泊松分布是如何分布的?它似乎更像一个公式

机器算法验证 泊松分布 麻木的
2022-03-22 19:46:36

我刚刚看了这个视频:https ://www.youtube.com/watch?v=Fk02TW6reiA

它显示了一个公式来计算以下问题的答案:

  • 商店中每 3 分钟预计有 2 位顾客
  • 因此,预计每 9 分钟有 6 位顾客
  • 9 分钟内商店里有 4 个或更少的可能性有多大?
  • 答案是:P(0;6)+...+P(4;6) 大约是 0.28

这是有道理的,并且描述得很好。但是,numpy 基本上将泊松分布视为随机数生成器: http: //docs.scipy.org/doc/numpy/reference/generated/numpy.random.poisson.html

我们可以将 lambda 指定为 5 以及需要多少个数字(第二个参数)并获得一个大整数列表:

>>> import numpy as np
>>> s = np.random.poisson(5, 10000)
>>> s
array([2, 4, 4, ..., 3, 4, 3])
>>> len(s)
10000

这似乎是两种完全不同的东西。您如何从使用泊松公式计算时间范围内特定数量事件的可能性,到看似随机整数的列表?

3个回答

公式 是泊松分布的概率质量函数如视频中所述,该公式可用于计算假设分布下给定值的概率。相关的累积分布函数可用于生成服从分布的随机数:f F

  1. 使用 CDF 将区间划分为子区间: ,(0,1)(0,F(x1))(F(x1),F(x2))etc...
  2. 在区间上生成随机数并查看它们属于哪个 bin。(0,1)

教程中的更多内容,通过使用 R 的泊松示例。泊松 PMF 和 CDF 在scipy中可用。

您链接到的函数一个随机数生成器。它不返回泊松分布,而是从泊松分布中返回随机数。

也就是说,它完全符合其名称的含义 - 为您提供随机泊松变量,而不是分布。

泊松概率函数的形式为 而分布函数为P(X=x)=eλλxx!,0,1,2,
P(Xx)=i=0xeλλii!,0,1,2,

在此处输入图像描述

有多种方法可以从这个分布中生成随机数,它们(几乎总是)从上的均匀分布随机数源开始(名义上是连续的,但实际上最多限于数字由计算机上的特定实现表示)。[0,1)

scipy 函数将使用其中一种方法;哪一个可以通过检查代码来辨别(你会比我更好地找到它)。但是,如果我正在查看 numpy 使用的正确的底层 C 代码(source here),那么它使用两种不同的算法,具体取决于 Poisson 参数:

long rk_poisson(rk_state *state, double lam)
{
    if (lam >= 10)
    {
        return rk_poisson_ptrs(state, lam);
    }
    else if (lam == 0)
    {
        return 0;
    }
    else
    {
        return rk_poisson_mult(state, lam);
    }
}

这两个函数 (rk_poisson_ptrsrk_poisson_mult) 的代码在同一个文件中,就在引用代码的上方。

我通常使用 R,所以我的回答是基于快速的网络搜索。看起来 numpy 支持从泊松分布生成随机样本,并且没有用于计算您所引用的泊松公式描述的概率质量函数 (PMF) 的函数。从分布中生成随机样本可能非常有用,但正如您指出的那样,与计算 PMF 不同,后者是解决“客户”问题所需要做的。

似乎您应该查看scipy,它似乎支持为包括 Poisson 在内的各种发行版生成 PMF。