python 二项式分布学习

numpy 是用于数据科学计算的基础模块,其中的random模块能够非常方便的生成各种随机数据用于数据计算,本次重点记录验证概率用途的二项分布生成函数 binomial。

官网和很多帖子都详细描述了二项式分布的定义和参数解释,在这里不再单独做学术性解释了,直接做实例演示:

参数基本结构:1个试验样本,预期结果发生概率50%,试验100次:比如抛硬币

print('生成随机数为:',np.random.binomial(1, 0.5, 100))

生成随机数为: [0 1 0 0 0 1 1 0 0 0 0 0 1 1 1 0 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1 1 0 1 0 0 1 0 0 1 0 1 0 1 1 1 1]

衍生出场景用法:当实验样本为独立样本,互相之间不影响概率的情况下,重新定义概率,进行多组实验:假定有5台试验设备,每台设备每小时发生故障的概率是10%,连续运行10小时,5台设备都完好的比例是多少?

print('生成随机数为:',np.random.binomial(5, 0.9, [5,10]))
生成随机数为: [[3 5 5 3 4 5 4 4 4 5]
 [5 4 5 5 5 4 4 5 4 3]
 [4 4 4 5 5 4 4 4 5 4]
 [5 5 5 3 4 5 5 5 5 4]
 [3 5 5 4 5 5 5 3 5 4]]

试验5组试验数据,观察数据分布,5代表5个样本都发生90%概率期望值,即全部完好状态

计算概率结果:

print (sum(np.random.binomial(5, 0.9, 10) == 5) / 10)

输出:0.6、0.7、0.6、0.5

增大试验次数至1000小时

print (sum(np.random.binomial(5, 0.9, 1000) == 5) / 1000)

多次输出结果:0.59、0.58、0.583、0.621

增大试验次数100000小时

print (sum(np.random.binomial(5, 0.9, 100000) == 5) / 100000)

多次输出结果:0.59025、0.59201、0.59158、0.58859

理论上同时完好概率应为0.9*0.9*0.9*0.9*0.9=0.59049,证明随着样本数据量上升,输出结果趋于理论实际。

反向使用,即可获得故障情况概率,取最优情况进行资源利用测算即可实现场景应用

print ('每小时内5台设备同时故障情况:',sum(np.random.binomial(5, 0.1, 100000) == 5) / 100000)
print ('每小时内4台设备同时故障情况:',sum(np.random.binomial(5, 0.1, 100000) == 4) / 100000)
print ('每小时内3台设备同时故障情况:',sum(np.random.binomial(5, 0.1, 100000) == 3) / 100000)
print ('每小时内2台设备同时故障情况:',sum(np.random.binomial(5, 0.1, 100000) == 2) / 100000)
print ('每小时内1台设备同时故障情况:',sum(np.random.binomial(5, 0.1, 100000) == 1) / 100000)
print ('每小时内5台设备均无故障情况:',sum(np.random.binomial(5, 0.1, 100000) == 0) / 100000)
输出结果:
每小时内5台设备同时故障情况: 1e-05
每小时内4台设备同时故障情况: 0.00044
每小时内3台设备同时故障情况: 0.00841
每小时内2台设备同时故障情况: 0.07306
每小时内1台设备同时故障情况: 0.32525
每小时内5台设备均无故障情况: 0.59139

注意事项:因二项式分布概率参数需满足二项式分布条件,所以概率结果应该是布尔值(ture/false)情况,最简单的场景是抛硬币的情况,其他场景应在该前提下进行应用。

你可能感兴趣的:(python,概率论,开发语言)