Menu
CoddyTech

会不会只是偶然?

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

五位使用无衬线字体的读者比五位使用有衬线字体的读者快了 6.6 秒。如果字体没有产生任何影响,那么任何阅读时间都可能属于任一组。打乱顺序,模拟一下:

十个阅读时间,五个有衬线字体组的时间用蓝色表示,五个无衬线字体组的时间用橙色表示。一条标注为 rng.permutation(pooled) 的箭头指向相同的十个值,只是顺序被打乱了;这些值被分成一个模拟的有衬线字体组,平均值为 48.4,以及一个模拟的无衬线字体组,平均值为 49.8:随机产生的差距为 +1.4 秒

rng.permutation(a) 会返回一个打乱顺序的副本。重复 1000 次,并保留每个模拟出的差值:

serif = np.array([52, 47, 58, 50, 55])
sans = np.array([45, 49, 41, 50, 44])
pooled = np.concatenate([serif, sans])
rng = np.random.default_rng(4)
diffs = []
for i in range(1000):
    shuffled = rng.permutation(pooled)
    diffs.append(shuffled[5:].mean() - shuffled[:5].mean())

1000 个打乱后差值的直方图,范围从 -7.8 秒到 7.8 秒,数据集中在 0 附近,红线表示真实差值 -6.6,靠近左边缘

机会差异会集中在 0 附近;真实差异则接近边缘。这是一种置换检验。

在你相信一个模型优于另一个模型之前,先检查随机打乱是否很少会产生这么大的差距。

challenge icon

挑战

中等

狗通过两种方式学会坐下:clicker 和 treats 分别记录每只狗的训练次数。初始代码会创建 rng 和 shuffles。

  1. 计算实际差值:treats 的平均值减去 clicker 的平均值。
  2. 先合并 clicker,再合并 treats;打乱 shuffles 次,在 len(clicker) 处拆分,并始终按相同顺序计算每个模拟差值;不要进行其他随机抽取。
  3. 以 2 位小数打印实际差值、第一次模拟差值、最小值和最大值。

对于其他狗:

Real difference: 3.0
First shuffle: -1.0
Smallest shuffled: -3.33
Largest shuffled: 3.67

亲手试试

import numpy as np

# 每只狗学会 "sit" 所需的训练次数
clicker = np.array([9, 12, 8, 11, 10, 7, 13])
treats = np.array([14, 11, 15, 12, 16, 13])
# 不要修改下面的代码行
rng = np.random.default_rng(12)
shuffles = 1000

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

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

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

自己练习: Python 在线编译器