方差与标准差
本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 3 课,共 64 课。
.std() 表示与平均值的典型距离。这里我们手动计算了 5 杯浓缩咖啡的标准差:
每个值与均值的差就是偏差。这些偏差相加会抵消为 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 的特征永远不会变化,因此它无法向模型提供任何信息。
挑战
简单质量控制会检查机器灌装果汁瓶的容量是否均匀。起始代码会读取 6 个以 ml 为单位的容量,并在 np.std 旁边打印 spread_by_hand(a) 的返回值。请补全该函数,使它返回:
- 方差:
a的各个值与均值之差的平方的平均值; - 标准差,即方差的平方根。
容量分别为 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))
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
机器学习统计学中的所有课
自己练习: Python 在线编译器