广播
本课属于 Coddy Machine Learning 学习旅程的“数据与图表”单元。第 13 课,共 60 课。
当每个特征都接近 0 时,模型的学习效果更好。因此,你要从每一列中减去该列的平均值,NumPy 会将这些平均值复制到每一行:
在代码中,记录了三个人的身高和体重:
data = np.array([[170, 60],
[180, 80],
[160, 70]])
print(data - data.mean(axis=0))这会输出:
[[ 0. -10.]
[ 10. 10.]
[-10. 0.]]这种复制称为广播。现在,表格已居中:每个值都表示它与所在列平均值的差距。
均值的形状为 (2,):(3, 2) 表的每一列对应一个值。其他任何长度都会导致程序报错并停止。
挑战
简单健身应用会在训练前对每个表进行中心化处理。起始代码会对两个表调用 center,分别是 users(3 个特征)和 workouts(2 个特征),并打印结果。目前,center 会原样返回表。
请补全 center,让它从每一列中减去该列的平均值,适用于任意列数。保留下方的代码行,不要修改。
如果有两个用户和两次训练,输出会如下所示:
Centered users:
[[-6. 7. -5.]
[ 6. -7. 5.]]
Column means after centering: [0. 0. 0.]
Centered workouts:
[[-10. -90.]
[ 10. 90.]]
Column means after centering: [0. 0.]亲手试试
import numpy as np
def center(table):
# 返回每列都减去该列平均值的 table
# 在下方编写你的代码
return table
# 每个用户占一行:年龄、静息心率、每天的运动分钟数
users = np.array([[25, 62, 30],
[31, 70, 45],
[40, 58, 20],
[29, 66, 25]])
# 每次锻炼占一行:运动分钟数、消耗的卡路里
workouts = np.array([[30, 240],
[45, 410],
[20, 150],
[60, 520],
[35, 300]])
# 不要修改下面的代码行
print("Centered users:")
print(center(users))
print("Column means after centering:", np.round(center(users).mean(axis=0), 2))
print("Centered workouts:")
print(center(workouts))
print("Column means after centering:", np.round(center(workouts).mean(axis=0), 2))
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
数据与图表中的所有课
自己练习: Python 在线编译器