Menu
CoddyTech

样本均值会变化

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

一组包含 30 个包裹的样本,可以估算出它们的平均重量。再抽取一组,就会得到另一个估算值。这里有 40 组样本:

40 个点,每个点代表一组包含 30 个包裹的样本,分布在约 7.2 到 8.8 kg 之间,围绕一条表示所有包裹真实平均重量 8.05 kg 的虚线

要收集这些均值,请在循环中重复抽样,将每个均值追加到列表中,然后将列表转换为数组:

means = []
for i in range(5):
    sample = rng.choice(parcels, size=30, replace=False)
    means.append(sample.mean())
means = np.array(means)
print(np.round(means, 2))

这会打印:

[7.98 8.05 8.12 8.19 8.76]

样本均值本身是随机的,means.std()衡量它的波动程度。模型的测试分数就是这样一种均值:换一组测试数据,分数就会有所变化。

challenge icon

挑战

中等

园丁每周都会从苗圃的 1800 株竹子中随机抽取一个样本进行测量。样本均值每周可能会有多大变化?

完成 sample_means(data, size, count):从 data 中抽取 count 个样本,每个样本包含 size 个值,同一个样本中不重复抽取任何值,并追加每个样本的均值。起始代码的最后几行会调用这个函数并打印报告。

对于另一家苗圃,以及大小为 10 的样本:

200 means of 10 plants: 105.25 to 137.13 cm
Spread of the means (std): 5.27 cm

亲手试试

import numpy as np

size = int(input())

# 不要修改下面的代码行:每株竹子的高度,单位为 cm
rng = np.random.default_rng(20)
heights = np.round(rng.normal(95, 15, size=1800), 1)


def sample_means(data, size, count):
    means = []
    # 在下面编写代码:抽取 count 个样本,每个样本包含 size 个值,并保存每个样本的平均值

    return np.array(means)


# 不要修改下面的代码行
means = sample_means(heights, size, 200)
print(f"200 means of {size} plants: {np.round(means.min(), 2)} to {np.round(means.max(), 2)} cm")
print(f"Spread of the means (std): {np.round(means.std(), 2)} cm")
quiz icon自我测试

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

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

自己练习: Python 在线编译器