Menu
CoddyTech

大数定律

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

抛 10 次硬币,出现 8 次正面并不奇怪。继续抛,正面所占的比例会慢慢接近 0.5:

一张显示抛掷 300 次硬币时正面所占比例的折线图:前几次抛掷时,比例在 0.3 到 1 之间波动,随后逐渐贴近概率为 0.5 的红色虚线

每个点都需要截至目前的占比。np.cumsum 会给出累计总和,再除以截至目前的投掷次数:

heads = np.array([True, False, True, True])
print(np.cumsum(heads))
print(np.round(np.cumsum(heads) / np.arange(1, 5), 2))

这会输出:

[1 1 2 3]
[1.   0.5  0.67 0.75]

ax.axhline(y) 会在图表上横向绘制参考线:

ax.plot(np.arange(1, 301), share)
ax.axhline(0.5, color="red", linestyle="--")

这就是大数定律:尝试次数越多,结果就越接近概率。模型在 20 个样本上得分很高,可能只是运气好;但在 2000 个样本上就很难了。

challenge icon

挑战

中等

某个麦片品牌会在 20% 的盒子里藏一个玩具。程序会读取打开的盒子数量;入门代码会填充 toys(有玩具时为 True),并为图表添加标签。

  1. 计算玩具所占比例的累计变化。
  2. 分别在打开 10 个盒子后和全部打开后打印比例,保留 3 位小数。
  3. 以盒子编号为横轴绘制比例,从 1 开始;在 0.2 处添加一条黑色点线(":"),并显示图表。

对于另外 80 个盒子:

After 10 boxes: 0.1
After 80 boxes: 0.212

并绘制这张图表。然后 Coddy 会描述你的图表。

标题为麦片盒里的玩具的图表:80 个盒子中玩具所占比例的累计变化,前 8 个盒子为 0,之后上下波动,最终稳定在 0.2 附近的黑色点线处

亲手试试

import numpy as np
import matplotlib.pyplot as plt

boxes = int(input())

# 不要修改下面的代码行
rng = np.random.default_rng(25)
toys = rng.random(boxes) < 0.2

fig, ax = plt.subplots()
ax.set_title("Toys in Cereal Boxes")
ax.set_xlabel("Boxes opened")
ax.set_ylabel("Share with a toy")

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

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

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

自己练习: Python 在线编译器