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)情况,最简单的场景是抛硬币的情况,其他场景应在该前提下进行应用。