Menu
CoddyTech

最小-最大缩放

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

最小-最大缩放让每个特征都能公平地发挥作用:在每一列中,最小值变为 0,最大值变为 1,其余值介于两者之间。

添加一位 40 岁、年收入 80,000 美元的客户,然后对这四位客户的所有数据进行缩放:

四位客户的年龄和收入以表格形式呈现,接着是一个箭头,然后是缩放后的同一张表格:每列中的最小值变为 0.00,最大值变为 1.00,颜色最深,其余值介于两者之间

通过广播,只需一行代码,就能分别用每列各自的最小值和范围进行缩放:

X = np.array([[25, 52000],
              [61, 53000],
              [26, 55000],
              [40, 80000]])
lows = X.min(axis=0)
highs = X.max(axis=0)
scaled = (X - lows) / (highs - lows)

现在年龄也会计入计算。客户 0 的最近邻不再是 61 岁的客户:

缩放后的客户以点的形式分布在 0 到 1 的正方形中,并从客户 0 向外画线:26 岁的客户最近,距离为 0.11;61 岁的客户距离为 1.00;年收入 80,000 美元的客户距离为 1.08

一个极端值会变成 1,把其余值压缩到接近 0,因此 min-max 适合没有离群值的列。

challenge icon

挑战

中等

烘焙师会匹配冲煮方式相似的咖啡。beans 的每一行代表一种咖啡:水温(C)、冲煮时间(s)和咖啡因含量(mg)。程序会读取位置 i 和 j;起始代码中的 distance(a, b) 用于测量两个样本之间的距离。

  1. 对 beans 进行最小-最大缩放。
  2. 打印 Every column from 0 to 1:,然后打印缩放后的表格,保留 2 位小数。
  3. 按如下格式打印缩放前后的距离。

对于另外三种咖啡,位置为 0 和 1:

Every column from 0 to 1:
[[1.   1.   0.67]
 [0.5  0.5  0.  ]
 [0.   0.   1.  ]]
Coffees 0 and 1: 63.28 apart before scaling, 0.97 after

亲手试试

import numpy as np


# 返回两个样本之间的距离(来自 Why Scale Features)
def distance(a, b):
    return np.sqrt(((a - b) ** 2).sum())


# 每行代表一种咖啡:水温以 C 为单位,冲泡时间以秒为单位,咖啡因含量以 mg 为单位
beans = np.array([[88, 120, 60],
                  [96, 300, 30],
                  [86, 90, 70],
                  [94, 240, 120],
                  [90, 180, 90],
                  [84, 60, 50]])
i = int(input())
j = int(input())

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

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

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

自己练习: Python 在线编译器