Menu
CoddyTech

样本越大,噪声越少

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

样本越大,估计越准确,但准确多少呢?这里有 1000 个由 25 个购物篮计算得出的均值,以及 1000 个由 100 个购物篮计算得出的均值:

两个购物篮中每件商品的样本均值分布都呈钟形,且中心都接近 30。25 个购物篮的均值用灰色表示,分布范围约为 20 到 40;100 个购物篮的均值用蓝色表示,钟形分布的宽度只有一半

sample_means 测量每种情况的离散程度。标准误差 std / np.sqrt(n) 无需模拟即可预测这一数值:

for n in [25, 100]:
    spread = sample_means(baskets, n, 1000).std()
    print(n, np.round(spread, 2), np.round(baskets.std() / np.sqrt(n), 2))

这会打印:

25 3.43 3.45
100 1.72 1.72

数据量增加到 4 倍,噪声减半:这就是平方根的作用。模型在 400 个示例上测试时,分数的精确度是在 100 个示例上测试时的 2 倍。

challenge icon

挑战

中等

bags 保存着一家磨坊 5000 袋面粉的重量,单位为克。质检人员每小时称量一个样本;程序会读取可接受的标准误差。

  1. 找出标准误差 bags.std() / np.sqrt(n) 不超过该值的最小 n:从 1 开始,如果误差过大,就加 1。
  2. 检查结果:使用 sample_means 得到 300 个样本均值,并计算它们的标准差。
  3. 按下面的格式打印,保留 2 位小数。

对于另一家磨坊,输入 2.5:

Bags to weigh: 24
Standard error: 2.46 g
Simulated spread: 2.37 g

亲手试试

import numpy as np

target = float(input())

# 不要修改下面的代码:每袋面粉的重量,单位为克
rng = np.random.default_rng(22)
bags = np.round(rng.normal(500, 8, size=5000), 1)


# 你在 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)


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

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

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

自己练习: Python 在线编译器