均匀分布样本均值估计量MSE计算的作业疑问与代码问题咨询
问题核心错误点
- 对估计量MSE的定义理解错误
估计量的MSE指的是估计值与真实总体均值的差值的平方的期望,你当前代码计算的是样本点与样本均值差值平方的平均,也就是样本方差的均值,和题目要求的估计量MSE完全无关。 - 抽样类型不符合题目要求
题目明确要求是连续均匀分布,你用的np.random.randint是离散整数均匀分布,抽样范围也不对(randint的high参数是开区间,你传b=5的话最多只能抽到4)。 - 对「平均偏差作为MSE估计值」的理解偏差
这里的平均是对10万次重复实验的平方误差取平均,不是对单次样本的误差取平均,正确逻辑是:- 先计算均匀分布的真实总体均值
real_mean = (a + b)/2 - 每次抽样后计算当前的样本均值估计值
- 计算本次估计的平方误差:
(估计值 - real_mean) ** 2 - 重复10万次后,把所有平方误差取平均,就是最终的MSE估计值
- 先计算均匀分布的真实总体均值
理论值验证
U(a,b)均匀分布的总体方差为 σ² = (b-a)²/12,样本均值是无偏估计,因此其MSE等于样本均值的方差 σ²/n,代入a=1、b=5、n=10的话,理论值为 (4²/12)/10 ≈ 0.1333,和样例输出的0.1343接近,符合模拟误差范围。
修正后代码
import numpy as np def Sample_Mean_MSE(a, b): real_mean = (a + b) / 2 n_experiments = 100000 sample_size = 10 squared_errors = [] for _ in range(n_experiments): # 连续均匀抽样 sample = np.random.uniform(low=a, high=b, size=sample_size) # 计算样本均值估计值 est_mean = sample.mean() # 记录本次平方误差 squared_errors.append((est_mean - real_mean) ** 2) # 所有平方误差的均值就是MSE估计值 return np.mean(squared_errors) print(Sample_Mean_MSE(1, 5))
如果需要更高运行效率,可以用向量化操作替代循环:
def Sample_Mean_MSE(a, b): real_mean = (a + b) / 2 samples = np.random.uniform(a, b, size=(100000, 10)) est_means = samples.mean(axis=1) return np.mean((est_means - real_mean) ** 2)
内容的提问来源于stack exchange,提问作者Linh Việt
相关产品推荐
相关产品推荐

