Menu
CoddyTech

方差与标准差

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

.std() 表示与平均值的典型距离。这里我们手动计算了 5 杯浓缩咖啡的标准差:

5 杯浓缩咖啡用点表示,分布在 26 秒处的橙色平均值线周围。灰色线段将每个点与平均值线连接起来,并标注了它们的偏差:-2、+1、-1、+4 和 -2

每个值与均值的差就是偏差。这些偏差相加会抵消为 0,所以先将它们平方,再求平均值,得到方差。

shots = np.array([24, 27, 25, 30, 24])
deviations = shots - shots.mean()
variance = (deviations ** 2).mean()
print(deviations)
print(variance, np.round(np.sqrt(variance), 2))

这会打印:

[-2.  1. -1.  4. -2.]
5.2 2.28

它的平方根,也就是标准差,会把秒的平方还原为秒:2.28。np.var(a) 和 np.std(a) 都能通过一次调用完成计算。

标准差为 0 的特征永远不会变化,因此它无法向模型提供任何信息。

challenge icon

挑战

简单

质量控制会检查机器灌装果汁瓶的容量是否均匀。起始代码会读取 6 个以 ml 为单位的容量,并在 np.std 旁边打印 spread_by_hand(a) 的返回值。请补全该函数,使它返回:

  1. 方差:a 的各个值与均值之差的平方的平均值;
  2. 标准差,即方差的平方根。

容量分别为 1004、996、1011、993、1002 和 998 时:

Variance: 34.56 ml squared
Std: 5.88 ml
Same as np.std: True

亲手试试

import numpy as np

values = []
for i in range(6):
    values.append(int(input()))
volumes = np.array(values)


# 返回数组 a 的方差和标准差
def spread_by_hand(a):
    # 在这里编写代码,然后用这两个值替换 0, 0 并返回
    return 0, 0


# 不要修改下面的代码行
variance, std = spread_by_hand(volumes)
print(f"Variance: {np.round(variance, 2)} ml squared")
print(f"Std: {np.round(std, 2)} ml")
print("Same as np.std:", np.round(std, 2) == np.round(np.std(volumes), 2))
quiz icon自我测试

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

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

自己练习: Python 在线编译器