binomial是从从二项分布中抽取样本。
这里尝试通过numpy.random.binomial从二项分布中抽取样本。
所用示例参考和修改自网络资料。
1 binomial定义
1.1 binomial公式定义
二项分布的概率质量函数 (PMF) 为
其中n是试验次数, p是成功概率, N是成功次数。
1.2 binomial适用场景
假设,p = 总体比例估计值,n = 样本数量,示例如下。
例如,一个包含 15 人的样本显示有 4 人是左撇子,11 人是右撇子。那么 p = 4/15 = 27%。
在使用随机样本估计总体比例估计值的标准误差时,一般情况会选择使用正态分布。
然而,如果当p*n <= 5,即总体比例估计值过小,这种情况下应该使用二项分布。
比如在上述例子中
p = 4/15 = 27%。0.27*15 = 4 < 5
因此在这种情况下应使用二项分布。
https://numpy.net.cn/doc/stable/reference/random/generated/numpy.random.binomial.html
2 binomial示例
这里通过python程序示例binomial的抽样估计过程。
2.1 分布中抽样
通过np.random.binomial,从分布中抽取样本。
假设每次抽样命中概率为p=0.5,重复n次估计,一共进行1000次抽样。
示例程序如下
n, p = 10, 0.5 # number of trials, probability of each trial
s = np.random.binomial(n, p, 1000)
result of flipping a coin 10 times, tested 1000 times.
2.2 抽样应用解析
这里给定一个真实的例子,描述如下。
一家公司钻探了 9 口探井,每口井的成功概率估计为 0.1。
所有九口井都失败了,这种情况发生的概率是多少?
计算程序如下所示
sum(np.random.binomial(9, 0.1, 20000) == 0)/20000.
# answer = 0.38885, or 38%.
这里详细分步分析计算过程。
1)进行 20,000 次模型试验,示例如下
每次模型试验独立重复9次,单次命中概率0.1
整体进行20000次模型试验
np.random.binomial(9, 0.1, 20000)
输出如下
array([0, 1, ..., 4])
2)产生零个阳性结果,即九口井都失败了的次数
np.random.binomial(9, 0.1, 20000) == 0
输出
输出示例如下,由于是重新运行,所以数值和1)中输出的数值会不一致。
array([False, False, ..., False])
3)计算产生零个阳性结果的次数
sum(np.random.binomial(9, 0.1, 20000)==0)
输出如下,具体过程为
如果本次试验产生了0个阳性样本,则+1记录,然后继续检查统计下次试验。
np.int64(7735)
4)计算0阳性样本发生的概率
sum(np.random.binomial(9, 0.1, 20000) == 0)/20000.
输出如下,即为9次打井试验中0阳性发生的概率。
np.float64(0.38625)
reference
numpy.random.binomial
https://numpy.net.cn/doc/stable/reference/random/generated/numpy.random.binomial.html
如何用python模拟pass@k过程