Python的random.choices是否存在偏差?实验异常结果咨询
问题根因
你传入random.choices()的采样列表存在元素错误,并非你预期的「等概率返回-4到4之间的整数」:
- 你使用的采样列表为
[-4,-3,-2,1,0,1,2,3,4],共9个元素,缺失了-1,却重复包含了两次1 - 单次采样的期望值计算如下:每个元素被选中的概率为1/9,所有元素求和结果为
(-4)+(-3)+(-2)+1+0+1+2+3+4 = 2,因此单次采样期望为2/9 ≈ 0.222,远不等于0
10000次累加后的总和期望为 10000 * 2/9 ≈ 2222,远大于0,因此几乎不会出现总和小于0的情况,你观测到的100次全大于0的结果完全符合概率预期。
修正方法
如果要实现等概率采样-4到4的全部整数,调整采样列表即可,且采样单个元素直接用random.choice()更简洁,不需要choices()[0]的写法:
import random as r bigger_than_zero=0 smaller_than_zero=0 # 修正后的采样列表,覆盖-4到4所有整数,无重复无缺失 sample_list = [-4,-3,-2,-1,0,1,2,3,4] for k in range(0,100): a=0 for i in range(0,10000): a=a+r.choice(sample_list) if a>0: bigger_than_zero+=1 elif a<0: smaller_than_zero+=1 print(bigger_than_zero) print(smaller_than_zero)
修正后单次采样期望为0,10000次累加的总和会围绕0呈正态分布,最终大于0和小于0的次数会基本接近。
内容的提问来源于stack exchange,提问作者Marco Montevechi
相关产品推荐
相关产品推荐

