我在尝试理解自助法和装袋法(自助法聚合),因此我进行了若干实验。我从Kaggle加载了一个样本数据集,并尝试使用自助法方法:
X = pd.read_csv("dataset.csv")true_median = np.median(X["Impressions"])B = 500 errors = [] variances = [] for b in range(1, B): sample_medians = [np.median(X.sample(len(X), replace=True)["Impressions"]) for i in range(b)] error = np.mean(sample_medians) - true_median variances.append(np.std(sample_medians) ** 2) errors.append(error)
然后我可视化了errors
和variances
:
fig, ax1 = plt.subplots()color = 'tab:red'ax1.set_xlabel('自助法样本数 (B)')ax1.set_ylabel('自助法估计误差', color=color)ax1.plot(errors, color=color, alpha=0.7)ax1.tick_params(axis='y', labelcolor=color)ax2 = ax1.twinx()color = 'tab:blue'ax2.set_ylabel('自助法估计方差', color=color)ax2.plot(variances, color=color, alpha=0.7)ax2.tick_params(axis='y', labelcolor=color)fig.tight_layout()plt.title("自助法误差、方差与自助法迭代次数的关系")plt.show()
可以看到,随着B
的增加,误差和方差都在减少。我在寻找某种数学上的解释 – 有没有办法推导或证明为什么自助法估计的方差会在B增加时减少?
回答:
我想你看到的是中心极限定理的作用。循环开始时,从总体中重抽取的样本数量较少,中间值的平均值(你称之为误差)并不能很好地代表真实总体中位数。随着你生成更多样本,中间值的平均值渐进地趋向于真实中位数。当趋向于真实均值时,从这个分布中抽取的样本不足以产生较大的方差,方差也随之达到收敛。
这解释清楚了吗?如果没有,请详细说明你在绘图时期望看到什么,我们可以讨论如何实现这一点。