标准化
本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 49 课,共 64 课。
当每个特征都以 0 为中心、标准差为 1 时,许多模型的学习效果最好。标准化就是这样做的:每个值都会转换为它所在列中的 z 分数。
5 个南瓜,重量单位为 kg,宽度单位为 cm:
广播机制会一次性标准化所有列:
pumpkins = np.array([[30, 60],
[8, 30],
[22, 55],
[40, 65],
[15, 40]])
z = (pumpkins - pumpkins.mean(axis=0)) / pumpkins.std(axis=0)
print(np.round(z.mean(axis=0), 2))
print(np.round(z.std(axis=0), 2))这会打印:
[0. 0.]
[1. 1.]检查前先进行舍入:未舍入时,平均值为 0 可能会显示为 2.22044605e-17,这是微小的舍入误差。
与 min-max 不同,这里没有固定范围:大多数值都在 -2 到 2 之间。
挑战
中等一个奶牛场发现了几头不寻常的奶牛。cows 的每一行代表一头奶牛:features 中列出它的产奶量(每天多少升)、体重(kg)和年龄(年)。程序会读取奶牛的位置 k。
- 完成
standardize(X)。检查代码行随后会输出[0. 0. 0.]和[1. 1. 1.]。 - 找出奶牛
k的 z 分数中与 0 相差最远的一个,不考虑正负号,并按下面的格式输出,保留 2 位小数。
对于另一家农场的奶牛:
Column means: [0. 0. 0.]
Column stds: [1. 1. 1.]
Cow 2 stands out by weight: 1.76 std above the herd亲手试试
import numpy as np
features = ["milk", "weight", "age"]
# 每头奶牛占一行:产奶量以升/天为单位,体重以 kg 为单位,年龄以岁为单位
cows = np.array([[28, 610, 6],
[22, 540, 3],
[35, 680, 6],
[31, 590, 9],
[19, 650, 4],
[26, 520, 2],
[30, 600, 7]])
k = int(input())
# 返回每列都经过标准化的 X:均值为 0,标准差为 1
def standardize(X):
# 将下面这行替换为标准化代码
return X
# 不要修改下面三行:它们会检查你的函数
z = standardize(cows)
print("Column means:", np.round(z.mean(axis=0), 2))
print("Column stds:", np.round(z.std(axis=0), 2))
# 在下方编写代码:奶牛 k 有什么特别之处?
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
机器学习统计学中的所有课
自己练习: Python 在线编译器