最小-最大缩放
本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 48 课,共 64 课。
最小-最大缩放让每个特征都能公平地发挥作用:在每一列中,最小值变为 0,最大值变为 1,其余值介于两者之间。
添加一位 40 岁、年收入 80,000 美元的客户,然后对这四位客户的所有数据进行缩放:
通过广播,只需一行代码,就能分别用每列各自的最小值和范围进行缩放:
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 岁的客户:
一个极端值会变成 1,把其余值压缩到接近 0,因此 min-max 适合没有离群值的列。
挑战
中等烘焙师会匹配冲煮方式相似的咖啡。beans 的每一行代表一种咖啡:水温(C)、冲煮时间(s)和咖啡因含量(mg)。程序会读取位置 i 和 j;起始代码中的 distance(a, b) 用于测量两个样本之间的距离。
- 对
beans进行最小-最大缩放。 - 打印
Every column from 0 to 1:,然后打印缩放后的表格,保留 2 位小数。 - 按如下格式打印缩放前后的距离。
对于另外三种咖啡,位置为 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())
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
机器学习统计学中的所有课
自己练习: Python 在线编译器