【问题标题】:What is the difference between the parameters and the shape of a Numpy Binomial Distribution?Numpy 二项分布的参数和形状有什么区别?
【发布时间】:2018-09-09 02:57:05
【问题描述】:

我正在做一个项目,在 Python 中做一些 Bayseian Statistics,并且正在使用 Numpy Random Binomial 函数。然而,在输入关键字参数/参数时,我对这背后的一些基本理论感到有些困惑。我的设置如下:

trial = np.random.binomial(n, .10, 1)

(其中 n = 1000)

问题:假设你掷一枚有偏见的硬币(p = .10)。

问题: 1000 次以 0.10 的概率投掷一次或 1 次以 0.10 的概率投掷 1000 次之间有区别吗?哪个更可取?一个比另一个计算效率高吗?

即。如果有的话,它们之间的区别是什么:

np.random.binomial(1000, .10, 1)

np.random.binomial(1, .10, 1000)

或者,换一种说法,分布参数和形状之间有什么区别?

我已阅读找到的 Numpy Binomial Docs here

如果有人能解释这背后的理论或基本直觉,那将非常有帮助!

【问题讨论】:

    标签: python numpy random


    【解决方案1】:

    考虑这个例子

    In [51]: for i in range(10): print (np.random.binomial(10, 0.3))
    2
    3
    5
    2
    4
    2
    5
    3
    1
    2
    

    等于说:如果 p=0.3,并且 n=10;意思是有偏差的硬币是有偏差的(得到正面的机会为 0.3),试验次数为 10,10 次中有多少次我会得到正面?当然,它不会一直都是 3,(事实上,你甚至可能在 10 次投掷中出现 10 次正面,尽管概率非常小),正如这里通过循环运行 10 次所展示的那样。

    但是在 numpy 中,我们通常不会在循环中运行东西。如果我们想生成 10 个这样的数字,我们可以为调用提供一个额外的 size 参数

    In [53]: np.random.binomial(10, 0.3, size=10)
    Out[53]: array([3, 5, 4, 1, 2, 3, 2, 3, 3, 4])
    

    【讨论】:

    • np.random.binomial(n=1, p=0.10, size=1000) 中,是的,它是一个由0 和1 组成的1000 个元素的数组,但这是由于n=1。由于只有 1 次投掷,因此必须为 1 或 0。在 np.random.binomial(n=1000, p=.10, size=1) 中,结果是一个包含 1 个元素的数组:尝试 1000 计时器和成功次数。
    • 谢谢,现在这更有意义了。
    【解决方案2】:

    当单个随机试验的结果是概率为 p 的“成功”时,我们称其为参数为 p 的伯努利试验,也称为伯努利 (p)。如果我们用相同的 p 运行 n 次独立的伯努利试验,二项分布评估获得特定数量的“成功”的概率。我们称其为参数为 n 和 p 的二项式分布,也就是二项式 (n, p)。按照惯例,Bernoulli 成功编码为 1,失败编码为 0。因此,Bernoulli(p) 和 binomial(1, p) 是一回事。

    如果我们从二项式 (n, p) 生成值,则结果是在实现 n 次试验中观察到的成功次数。因此,成功的次数是 n 个伯努利结果的总和。

    现在到 NumPy。调用 np.random.binomial(1000, .10, 1) 会生成 n = 1000 且 p = 0.1 的二项式的一种实现。使用np.random.binomial(1, .10, 1000) 生成 1000 个 n = 1 和 p = 0.1 的二项式实现,即 1000 个伯努利 (0.1)。这些是一回事,但如果您使用sum(np.random.binomial(1, .10, 1000)) 对伯努利值求和,则结果将具有与np.random.binomial(1000, .10, 1) 相同的分布。

    其中一个比另一个更好吗?虽然从分布的角度来看它们是可以互换的,但 more efficient computational methods to generate binomials 不仅仅是生成 n 个 Bernoullis 并将它们相加。假设 NumPy 的实现者有能力,你可能最好使用np.random.binomial(1000, .10, 1)

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多