Menu
CoddyTech

抽样分布

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 21 课,共 64 课。

视频时长呈右偏分布:大多数只有几分钟,少数长达两小时。然而,抽取 1000 组样本,每组包含 40 场视频的平均时长,却呈钟形分布:

同一张图表上的两个直方图。灰色的单场视频时长集中在接近 0 分钟的位置,长尾延伸至 120 分钟。40 场视频的平均时长形成一个较窄的蓝色钟形分布,中心在总体平均值 30 分钟附近

许多样本均值的直方图就是抽样分布。每个样本中有足够多的值时,即使数据是偏斜的,直方图也会呈钟形,并以总体均值为中心:

means = sample_means(sessions, 40, 1000)  # 你在 Sample Means Vary 中编写的函数
ax.hist(means, bins=12)

这就是中心极限定理。它让平均值变得可预测:模型在测试集上的平均误差也大致服从正态分布。

challenge icon

挑战

中等

云盘中 files 里的 6000 个文件大小(单位:MB)呈右偏分布:文档很多,视频很少。程序会读取样本大小;起始代码中有 sample_means 和两张图表。

  1. 获取 500 个该大小的样本均值。
  2. 依次输出文件大小的均值减中位数,以及样本均值的均值减中位数(保留 2 位小数)。
  3. 用 axs[0] 绘制文件大小的直方图,用 axs[1] 绘制样本均值的直方图,设置 bins=12,然后显示图表。

换一个云盘,样本大小设为 60:

Files: mean - median = 25.28 MB
Sample means: mean - median = 0.55 MB

两张并排的直方图。所有文件:第一根柱子很高,右侧有一条细长的尾部。样本均值:呈对称的钟形

然后 Coddy 会分别报告每张图表的结果。差值接近 0,说明偏斜消失了。

亲手试试

import numpy as np
import matplotlib.pyplot as plt

size = int(input())

# 不要修改下面的代码:存储盘中每个文件的大小,单位为 MB
rng = np.random.default_rng(21)
files = np.round(rng.random(6000) ** 4 * 300 + 5, 2)


# 你在 Sample Means Vary 中编写的函数:计算 count 个样本的均值
def sample_means(data, size, count):
    means = []
    for i in range(count):
        sample = rng.choice(data, size=size, replace=False)
        means.append(sample.mean())
    return np.array(means)


fig, axs = plt.subplots(1, 2)
axs[0].set_title("All Files")
axs[0].set_xlabel("File size (MB)")
axs[1].set_title("Sample Means")
axs[1].set_xlabel("Mean file size (MB)")

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

机器学习统计学中的所有课

自己练习: Python 在线编译器