快速答案
本答案页包含 Python 最近邻分类器 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。
答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。
最近邻分类器如何预测?
答案: 让最近的训练样本投票
为什么: k-NN 查看最近的带标签点,并组合它们的标签。
为什么计算距离前要缩放特征?
答案: 大单位会主导距离
为什么: 以千为单位的特征会压倒个位数特征。
邻居标签平票时应该怎么办?
答案: 使用有文档的确定规则
为什么: 例如选择距离最近的平票邻居,能让预测可复现。
运行结果是什么?
def distance(a, b):
return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5
points = [((1, 1), "a"), ((4, 4), "b"), ((1, 2), "a")]
target = (1, 1.5)
ranked = sorted(points, key=lambda item: distance(target, item[0]))
print([label for _, label in ranked])答案: ['a', 'a', 'b']
为什么: 离目标最近的两个点标签为 a,较远的点为 b。
补全欧氏距离的指数。
def distance(a, b):
return sum((x - y) ** 2 for x, y in zip(a, b)) ** ____
print(distance((1, 1), (4, 5)))答案: 0.5
为什么: 把平方和取 0.5 次方就是开平方。
补全排序时使用的距离函数。
def distance(a, b):
return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5
points = [((1, 1), "a"), ((4, 4), "b")]
target = (1, 1.5)
ranked = sorted(points, key=lambda item: ____(target, item[0]))
print(ranked[0][1])答案: distance
为什么: key 函数用目标点与每个训练点比较。
补全返回最常见标签的 Counter 方法。
from collections import Counter
labels = ["a", "a", "b"]
winner = Counter(labels).____(1)[0][0]
print(winner)答案: most_common
为什么: most_common(1) 返回最常见标签及其计数组成的列表。
补全距离循环中的配对函数。
a = (1, 2)
b = (4, 6)
print(sum((x - y) ** 2 for x, y in ____(a, b)))答案: zip
为什么: zip 生成两个点中对应位置的坐标。
这段程序打印出什么?
def distance(a, b):
return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5
print(distance((1, 1), (4, 5)))答案: 5.0
为什么: 坐标差为 3 和 4,所以距离是 5.0。
代码的输出结果是什么?
def distance(a, b):
return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5
points = [((2, 2), "a"), ((5, 5), "b")]
target = (4.5, 4.5)
ranked = sorted(points, key=lambda item: distance(target, item[0]))
print(ranked[0][1])答案: b
为什么: 点 (5, 5) 离目标更近,所以打印它的标签 b。
屏幕上会显示什么?
from collections import Counter
labels = ["a", "a", "b"]
print(Counter(labels).most_common(1)[0][0])答案: a
为什么: 标签 a 出现两次,因此赢得多数投票。
这段代码会输出什么?
def distance(a, b):
return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5
print(round(distance((30, 30000), (31, 30000)), 1), round(distance((30, 30000), (30, 31000)), 1))答案: 1.0 1000.0
为什么: 原始单位下的距离是 1.0 和 1000.0,说明为什么需要缩放。
先试一遍题目
打开 Python 最近邻分类器 练习页,用即时反馈回答同样的 12 道题。