Menu
CoddyTech

为什么要缩放特征

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

哪个客户最像新客户?许多模型会测量样本之间的距离:将每个特征的差值平方后相加,再开平方。

一位 25 岁、年收入 52,000 美元的人,与一位 61 岁、年收入 53,000 美元的人:

两个柱形分别表示每个特征对两位客户之间距离的贡献:年龄相差 36 岁,贡献 1,296,小到几乎看不见;收入相差 1,000 美元,贡献 1,000,000,是一根很长的柱形

对于整个表格,axis=1 会计算每一行各元素平方的和,而 .argmin() 会找出最近的一行:

a = np.array([25, 52000])  # 年龄、收入
X = np.array([[61, 53000],   # 这位 61 岁的人
              [26, 55000]])  # 一位收入为 $55,000 的 26 岁的人
dists = np.sqrt(((X - a) ** 2).sum(axis=1))
print(np.round(dists, 2))
print(dists.argmin())

这会打印:

[1000.65 3000.  ]
0

61 岁的人最接近:美元的数值更大,所以 $1,000 比 36 年更重要。不进行缩放时,由最大的单位决定。

本章让每项功能都有机会发声。

challenge icon

挑战

中等

商店会根据洗衣机的价格(美元)、能耗(每年 kWh)和用水量(每次洗涤的升数)进行比较,这些特征名列在 features 中。程序会读取两台洗衣机的位置,分别存入 i 和 j。打印:

  1. Squared gaps: 每项特征的差值平方。
  2. Distance: 四舍五入到小数点后 2 位。
  3. Dominant feature: 平方差值最大的特征名称。

对于另外两台洗衣机:

Squared gaps: [2500 6400    1]
Distance: 94.35
Dominant feature: energy

亲手试试

import numpy as np

features = ["price", "energy", "water"]
# 每行对应一台洗衣机:价格单位为美元,能耗单位为千瓦时/年,用水量单位为升/次洗涤
machines = np.array([[499, 160, 48],
                     [349, 210, 55],
                     [899, 120, 42],
                     [529, 250, 50],
                     [279, 230, 60],
                     [749, 140, 45]])
i = int(input())
j = int(input())

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

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

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

自己练习: Python 在线编译器