我正在一个项目中使用Python做一些贝叶斯统计,并且正在使用Numpy Random Binomial函数。但是,在输入关键字参数/参数时,我对此背后的一些基本理论感到困惑。我的设置如下:
trial = np.random.binomial(n, .10, 1)
(其中n = 1000)
问题::假设您掷出偏向硬币(p = .10)。
问题:1000次以0.1概率进行一次掷球或1次.10可能进行1000次掷球之间有区别吗?哪个更好?一个计算效率比另一个计算效率高吗?
即。什么是两者之间的区别?
np.random.binomial(1000, .10, 1)
和
np.random.binomial(1, .10, 1000)
或者用不同的方式表述,分布的参数和形状之间有什么区别?
我已阅读here
中找到的Numpy二项式文档如果有人可以解释其背后的理论或基本直觉,那将真的很有帮助!
答案 0 :(得分:0)
考虑这个例子
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])
答案 1 :(得分:0)
当单个随机试验的结果是概率为p的“成功”时,我们称参数为p的伯努利试验也称为伯努利(p)。如果我们使用相同的p进行n个独立的伯努利试验,则二项分布评估获得一定数量“成功”的概率。我们称参数为n和p的二项式分布,又称二项式(n,p)。按照惯例,伯努利的成功编码为1,失败编码为0。因此,伯努利(p)和二项式(1,p)是同一件事。
如果我们从二项式(n,p)生成值,则结果是对n次试验实现中观察到的成功次数的计数。因此,成功次数是n个伯努利结果的总和。
现在到NumPy。调用np.random.binomial(1000, .10, 1)
会生成n = 1000和p = 0.1的二项式的一种实现。使用np.random.binomial(1, .10, 1000)
生成n = 1和p = 0.1的二项式的1000个实现,即1000个Bernoulli(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)
可能会更好。