代码是否可正确估计样本均值大于epsilon的经验概率?
代码能否正确估计目标经验概率?
你的代码完全不能正确估计Prob(|样本均值|>epsilon)的经验值,核心问题是逻辑完全偏离需求,具体问题如下:
- 外层循环遍历N次毫无意义:你的需求是针对固定样本量N=100做M次重复实验,不需要循环N次
- 概率计算逻辑错误:你最终计算的是M个样本均值的平均值,而不是M次实验中
|样本均值|>epsilon的次数占比,这和目标经验概率的定义完全不符 - 输出图像的意义错误:原图像是一条接近0.5的直线,这是因为Uniform[0,1]分布的期望是0.5,每次外层循环后M个样本均值的均值都趋近于0.5,和你要估计的概率没有任何关系
修正后的代码
要正确估计目标经验概率,代码逻辑应该是:做M次重复实验,每次生成N个样本并计算均值,统计其中满足|均值|>epsilon的次数,最终用次数占M的比例作为经验概率。如果需要可视化经验概率随实验次数的变化,可以记录累计的经验概率:
import numpy as np import matplotlib.pyplot as plt np.random.seed(10001) N = 100 M = 30 ep = 0.01 # 存储每次实验的判断结果(1表示满足|均值|>ep,0表示不满足) results = np.zeros(M) for j in range(M): x = np.random.random_sample(N) sample_mean = np.mean(x) results[j] = 1 if abs(sample_mean) > ep else 0 # 计算最终的经验概率 empirical_prob = np.mean(results) print(f"经验概率 Prob(|样本均值|>0.01) = {empirical_prob}") # 可视化累计经验概率随实验次数的变化 cumulative_prob = np.cumsum(results) / (np.arange(M) + 1) plt.plot(np.arange(1, M+1), cumulative_prob) plt.xlabel("实验次数") plt.ylabel("累计经验概率") plt.title(f"Prob(|样本均值|>{ep}) 的累计经验概率变化") plt.show()
补充说明
因为Uniform[0,1]的样本均值范围是(0,1),而epsilon=0.01,|样本均值|>0.01等价于样本均值>0.01(样本均值不可能为负),而样本均值的期望是0.5,几乎所有实验的样本均值都会远大于0.01,所以最终的经验概率会非常接近1。
内容的提问来源于stack exchange,提问作者oliver
相关产品推荐
相关产品推荐

