大数定律
本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 14 课,共 64 课。
抛 10 次硬币,出现 8 次正面并不奇怪。继续抛,正面所占的比例会慢慢接近 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 个样本上就很难了。
挑战
中等某个麦片品牌会在 20% 的盒子里藏一个玩具。程序会读取打开的盒子数量;入门代码会填充 toys(有玩具时为 True),并为图表添加标签。
- 计算玩具所占比例的累计变化。
- 分别在打开 10 个盒子后和全部打开后打印比例,保留 3 位小数。
- 以盒子编号为横轴绘制比例,从 1 开始;在 0.2 处添加一条黑色点线(
":"),并显示图表。
对于另外 80 个盒子:
After 10 boxes: 0.1
After 80 boxes: 0.212并绘制这张图表。然后 Coddy 会描述你的图表。
亲手试试
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")
# 在下面编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
机器学习统计学中的所有课
自己练习: Python 在线编译器