深夜加班回家,你用导航 App 搜最近的地铁站。输入目的地后,App 给出了三组数字:步行距离 800 米、骑行距离 950 米、直线距离 650 米——同一个起点和终点,为什么会有三个“距离”?因为衡量远近的方式不止一种:人可以穿街过巷走直线,自行车必须绕行天桥,而飞机可以直接飞越楼群。K 近邻(KNN)算法也面临同样的处境。它靠“距离”选出 K 个邻居,再让邻居投票决定新样本属于哪类。可“多远才算近”这件事,答案并不唯一——用直线的尺子量,A 是邻居;换街区的尺子量,邻居就换成了 B。这就像相亲时,有人说“我俩性格方向一致”(余弦相似度),有人说“我俩条件差距不大”(欧氏距离),结论自然不同。这篇文章从生活的“测距”场景出发,带你认识 KNN 背后的四把尺子:欧氏距离、曼哈顿距离、余弦相似度、切比雪夫距离,以及如何为你的数据选对那把尺子。

岗位关联

距离度量是 KNN、聚类、向量检索的地基。学好它,你才能根据数据特性选对相似度计算方式,在推荐、风控、搜索等场景中做出不跑偏的模型——这是算法工程师的基本功。

目录
  1. 可视化演示
  2. 距离本质
  3. 欧氏距离
  4. 曼哈顿距离
  5. 余弦相似度
  6. 切比雪夫距离
  7. 度量选择
  8. KNN 决策
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示KNN靠什么量远近的距离度量的核心机制,通过总览/传输/转换/输出四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

KNN靠什么量远近的距离度量:距离度量 距离度量的数学公理与基本性质 欧氏距离的几何直觉与适用场景 核心机制可视化 KNN靠什么量远近的距离度量整体架构与关键组件

距离本质

拿出手机导航,输入目的地,系统会同时给出“直线距离”“驾车距离”“步行距离”。同样两个地点,测量方式不同,数字天差地别。KNN 面临同样的处境:它需要判断“谁离我最近”,可这个“近”字,取决于我们用哪一把尺子。如果把每个样本看作高维空间里的一个点,那么距离度量就是点与点之间的“测距规则”——它决定了算法眼中的世界是横平竖直的棋盘,还是可以斜穿的旷野。

其实,所有常见距离都被一个公式统一了——闵可夫斯基距离。给定两个样本点 x 和 y,各包含 n 个特征值,闵可夫斯基距离定义为:

现实里我们不需要盲目尝试,因为 p 取 1、2、无穷大时,正好对应三把最常用的尺子。就像同一个目的地,导航会先问你出行方式:走路、开车,还是坐地铁?不同方式对应不同路线,KNN 里的 p 值也是如此——它决定了样本之间的距离如何被计算。

d(x,y)=(∑i=1n∣xi−yi∣p)1p\displaystyle d(x,y) = \left(\sum_{i=1}^{n} |x_i - y_i|^p\right)^{\frac{1}{p}}
这个公式像一把“总钥匙”:放进不同的 p 值,就能变出不同的距离尺子。p 控制着差异被放大还是被平均。
  1. 坐标差先看每个特征维度上两个点的差别,用 $|x_i - y_i|$ 表示,绝对值保证非负。
    ∣xi−yi∣|x_i - y_i|
  2. 求和汇总把每个维度上的差异全部加起来,得到“总差异”。
    ∑i=1n∣xi−yi∣\sum_{i=1}^{n} |x_i - y_i|
  3. p 次幂放大把总差异的每一项取 p 次方。p 越大,越大的差异被放大得越夸张。
    ∑i=1n∣xi−yi∣p\sum_{i=1}^{n} |x_i - y_i|^p
  4. 开 p 次方还原最后开 $\frac{1}{p}$ 次方,把结果拉回与坐标一致的单位,得到最终距离。
    (∑i=1n∣xi−yi∣p)1p\left(\sum_{i=1}^{n} |x_i - y_i|^p\right)^{\frac{1}{p}}

欧氏距离

周末你想知道从家到山顶的直线距离,地图的“测距”功能拉出一条虚线,这个数字就是欧氏距离。它是几何课上“两点之间线段最短”的直接产物,也是大多数人最先想到的距离。欧氏距离的直觉来源于日常:在空旷平面上,不走弯路,直奔目的地。但机器学习里的“直线”发生在高维空间——每个特征都是空间中的一个维度,两个点之间的直线距离,就是所有维度差异平方和的平方根。

当数据特征都是连续数值,且量纲一致(比如同为身高厘米、同为体重公斤)时,欧氏距离是默认选项。它的公式如下:

然而,欧氏距离有个致命弱点:它没有“量纲识别”能力。比如用户画像里有“年龄”和“年收入”两个特征,年龄波动的量级是几十,收入可能是几万。计算距离时,收入直接把年龄“淹没”了——年龄这个维度形同虚设。这就像你用一根绳子量两地距离,绳子的刻度如果混入了英尺和米,量出来的数字就失去了意义。因此,使用欧氏距离前,标准化往往是必经之路。

d2(x,y)=∑i=1n(xi−yi)2\displaystyle d_{2}(x,y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2}
平方让大差异被放大,开根号则还原量纲。它对应闵可夫斯基距离中 p=2 的情形,是使用频率最高的距离。
  1. 逐维度求差对每个特征维度计算差值 $x_i - y_i$。
    xi−yix_i - y_i
  2. 平方消负号将差值平方,既消除负号,又放大较大偏差的权重。
    (xi−yi)2(x_i - y_i)^2
  3. 累加所有维度把所有维度的平方和加在一起,形成总平方和。
    ∑i=1n(xi−yi)2\sum_{i=1}^{n} (x_i - y_i)^2
  4. 开根号最后开平方根,让距离的量纲回到原始特征单位。
    ∑i=1n(xi−yi)2\sqrt{\sum_{i=1}^{n} (x_i - y_i)^2}

曼哈顿距离

下雨天你打车去商场,出租车不能飞,只能沿着横平竖直的街道行驶。绕过公园、穿过十字路口,最终里程不是两点的直线,而是东西方向行驶距离与南北方向行驶距离的叠加。这就是曼哈顿距离的直观来源——它源于纽约曼哈顿的方格状街道网络,车辆只能沿街道网格行驶。在机器学习里,它对应闵可夫斯基距离 p=1 的情形:对所有维度上的绝对差直接求和。

当数据包含噪声或异常值时,曼哈顿距离往往比欧氏距离更稳健——因为欧氏距离会平方放大偏差,而曼哈顿距离只做线性求和,单个维度的异常不会过度主导总距离。公式如下:

值得注意的是,在高维稀疏数据(如文本词频向量、用户行为矩阵)中,曼哈顿距离表现更稳定。因为高维空间中,零星几个维度的极端差异会被欧氏距离的平方效应放大,而曼哈顿距离的线性累加更能容忍这种“稀疏噪声”。好比你在一个迷宫城市里送外卖,与其计算“直线穿楼”的距离,不如老老实实按可走的道路累加里程——路线虽迂回,但更贴近真实可达性。这一特性让它在 KNN 处理高维稀疏特征时经常胜过欧氏距离。

d1(x,y)=∑i=1n∣xi−yi∣\displaystyle d_{1}(x,y) = \sum_{i=1}^{n} |x_i - y_i|
它像出租车计价器:每走一段街道就累加一段里程,东西南北的绝对值相加,不拐弯抹角,也不开方还原。
  1. 逐维取绝对值对每个特征求差值并取绝对值 $|x_i - y_i|$,避免正负抵消。
    ∣xi−yi∣|x_i - y_i|
  2. 直接求和把每个维度的绝对值累加,不需要平方也不需要开方。
    ∑i=1n∣xi−yi∣\sum_{i=1}^{n} |x_i - y_i|

余弦相似度

朋友发给你一张照片问:“这家店的方向对吗?”你打开指南针,发现方向基本一致——还没走过去,你就知道应该没错。余弦相似度衡量的正是这种“方向一致性”,而非距离远近。它常用于推荐系统和文本检索:比如两个用户看过完全不同的电影数量,但偏好方向一致(都喜欢悬疑、不爱言情),那他们大概率“臭味相投”。余弦相似度通过计算两个向量的夹角余弦值,衡量方向上的相似程度。

在数学上,给定两个 n 维向量 x 和 y,它们的夹角余弦定义为:

余弦相似度的独特优势,在于它完全忽略向量长度。举个例子:A 用户给电影打了 5 星,B 用户只打 2 星,但如果两人对同一批电影的评分趋势一致(都爱同一类片),他们的余弦相似度依然很高。这在推荐系统中极其宝贵——因为评分尺度因人而异,有人手松使 5 分,有人手紧给 3 分,绝对数值不可比,但方向是一致的。就像指南针只管你朝哪个方向走,不管你走得多快、已经走了多远。

cos⁡θ=∑i=1nxiyi∑i=1nxi2∑i=1nyi2\displaystyle \cos\theta = \frac{\sum_{i=1}^{n} x_i y_i}{\sqrt{\sum_{i=1}^{n} x_i^2}\sqrt{\sum_{i=1}^{n} y_i^2}}
分子是两向量的内积,分母是两者模长的乘积。余弦值越接近 1,方向越一致;越接近 -1,方向越相反。余弦相似度不等于距离,若要用在 KNN 里,通常取“1 - 余弦值”作为余弦距离。
  1. 内积对应维度乘积求和,衡量两个向量在方向上的“共鸣”强度。
    ∑i=1nxiyi\sum_{i=1}^{n} x_i y_i
  2. 向量模长分别计算两个向量的长度,即各分量平方和再开根号。
    ∑i=1nxi2,∑i=1nyi2\sqrt{\sum_{i=1}^{n} x_i^2},\quad \sqrt{\sum_{i=1}^{n} y_i^2}
  3. 归一化比值用内积除以两个模长的乘积,消除向量长度差异,留下夹角信息。
    ∑xiyi∑xi2∑yi2\frac{\sum x_i y_i}{\sqrt{\sum x_i^2}\sqrt{\sum y_i^2}}

切比雪夫距离

国际象棋中的国王,每一步可以横走、竖走、斜走一格。从棋盘角落到对角角落,它最少需要几步?答案是棋盘边长——不是对角线长度。因为国王斜走一步能同时改变横纵坐标,所以只需要走两个方向差中较大的那一个。这就是切比雪夫距离,它定义的是“每一步同时向所有维度移动一格”时的最短步数,对应闵可夫斯基距离中 p 趋于无穷大的情况。

切比雪夫距离的公式非常简洁——只取所有维度中最大的坐标差:

切比雪夫距离的典型场景包括棋盘游戏 AI、仓库机器人路径规划、无人机在网格空域中的调度等。在这些场景中,移动体可以同时向多个方向运动(或检查多个维度),重要判断标准是“最费时的那个方向”。回到 KNN:如果数据的每个维度都被认为是同等重要且可以同步变化的,比如判断两台设备的配置是否相近时最关心“最落后那个部件差多少”,切比雪夫距离就非常合适。它像班主任给学生排同桌:不看总分平均,只看“最偏科那一门差了多少分”。

d∞(x,y)=max⁡i∣xi−yi∣\displaystyle d_{\infty}(x,y) = \max_{i} |x_i - y_i|
它像个只看短板的管理者:不关心整体差异,只盯着“最离谱的那个维度”定输赢。就像棋盘上国王要走多少步,取决于纵向差几格、横向差几格,谁大听谁的。
  1. 逐维求绝对差同样先算每个维度的差值和绝对值。
    ∣xi−yi∣|x_i - y_i|
  2. 取最大值用 max 运算挑选所有维度中的最大差值,其余维度都忽略。
    max⁡i∣xi−yi∣\max_{i} |x_i - y_i|

度量选择

去菜市场买菜,摊主用斤、超市用克、朋友说千克。如果直接比较三家的价格数字,什么结论都得不出来——必须先换算成同一单位。特征空间也一样,每个特征的真实含义和单位各不相同,直接算距离等于拿“1 元人民币”和“1 日元”比面值大小。因此,选距离前的第一步永远是统一度量衡:先标准化,再测距。标准化的方法很多,最常见的是 Z-score 标准化,公式如下:

标准化之后,怎么选尺子?这取决于数据类型和业务目标。如果特征是连续稠密的数值(身高、房价),用欧氏距离;如果特征高维稀疏、含噪声(文本向量、点击行为),用曼哈顿距离更稳健;如果任务更关心“方向”而非“大小”(用户偏好、语义相似度),用余弦相似度;如果运动可以多方向同时进行、只看最极端维度(棋盘、物流调度),用切比雪夫距离。更进一步,你还可以自定义加权距离——给重要特征分配更大的权重。加权欧氏距离的一般形式是:

选尺子的本质,是把你对业务的理解编码进算法里。就像一个老练的出租车司机知道早晚高峰该走哪条路——他并不是拿一把尺子走天下,而是根据时段、路况、天气临时拼出最适合的路线。做机器学习也是这样:没有绝对“最好”的距离度量,只有对当前数据和业务目标“最合适”的距离度量。理解了这一点,你才算掌握了距离度量的灵魂。

zi=xi−μiσi\displaystyle z_i = \frac{x_i - \mu_i}{\sigma_i}
这相当于在标准化之后,再人为地放大或缩小某些维度的重要性。它像面试官给候选人打分时,对不同项目乘以不同系数——学历权重高,颜值权重低,最后加总成综合分。
  1. 特征权重为每个维度设定权重 $w_i$,体现业务先验知识。
    wiw_i
  2. 加权平方差对每个维度的平方差乘以对应权重。
    wi(xi−yi)2w_i (x_i - y_i)^2
  3. 汇聚结果求和后开根号,得到加权后的距离值。
    ∑i=1nwi(xi−yi)2\sqrt{\sum_{i=1}^{n} w_i (x_i - y_i)^2}

KNN 决策

小区业主群里发起投票:“新搬来的住户最像哪栋楼的人?”大家不看档案,只看这位邻居最常来往的 K 个人,然后让这 K 个人投票定归属。这就是 KNN 的本质:找最近,靠投票。选出 K 个邻居之后,KNN 让它们各自亮出标签,票数最多的类别胜出。对于回归任务,则取 K 个邻居标签的平均值。投票的过程可以用多数投票公式表示:

K 值的选择会显著影响结果。K 太小,模型只看最近的几个样本,容易被单个噪声点带偏(过拟合);K 太大,远处的样本也参与投票,类别边界被严重抹平(欠拟合)。实践中一般用交叉验证挑 K,比如 K=5 或 K=7 是常见起点。此外,还可以让更近的邻居拥有更大的投票权重——比如权重取 $\frac{1}{d^2}$,距离越近权重越高。这就好比业主投票时,同一栋楼的邻居每人投 3 票,隔壁栋的每人投 1 票——离得越近,越了解真相。

y^(x)=arg⁡max⁡c∑i∈Nk(x)I(yi=c)\displaystyle \hat{y}(x) = \arg\max_{c} \sum_{i \in N_k(x)} \mathbb{I}(y_i = c)
这个公式表达的是:统计 K 个邻居中每个类别的出现次数,谁出现的次数多,就预测样本属于谁。$N_k(x)$ 是 x 的 K 个最近邻居集合,$\mathbb{I}$ 是指示函数(条件成立取 1,否则取 0)。
  1. 找邻居集合用距离度量找出离新样本最近的第 K 个邻居,记为 $N_k(x)$。
    Nk(x)=距离 x 最近的 K 个样本N_k(x) = \text{距离 x 最近的 } K \text{ 个样本}
  2. 统计类别票数对每个类别 c,数一数 K 个邻居中有多少属于这个类别。
    ∑i∈Nk(x)I(yi=c)\sum_{i \in N_k(x)} \mathbb{I}(y_i = c)
  3. 选票数最多者用 argmax 取出票数最多的类别作为预测结果。
    y^(x)=arg⁡max⁡c∑i∈Nk(x)I(yi=c)\hat{y}(x) = \arg\max_{c} \sum_{i \in N_k(x)} \mathbb{I}(y_i = c)

AI 应用场景

电商推荐系统的“品味相近”召回

阶段:推荐召回

解决的问题:传统协同过滤只能基于用户共同购买的商品找相似,遇到新用户或新品时无历史数据可用。AI 将用户和商品编码成向量,用余弦相似度衡量“品味方向”是否一致。

具体案例:某电商平台的猜你喜欢功能,把用户点击序列和商品属性编码为 128 维向量,用余弦相似度从百万商品中召回 Top 50 候选,再交给排序模型精排。用户 A 虽然只买了 3 件商品,但方向与某类“重度用户”高度一致,系统依然能准确推断其偏好。

大模型知识库的语义检索

阶段:RAG 检索

解决的问题:企业知识库问答中,用户问题与文档片段并非字面匹配,而是语义匹配。AI 把问题和文档切成向量片,用余弦相似度寻找“方向最接近”的片段,再交给大模型生成答案。

具体案例:某银行业务助手接入 RAG 后,将上百份产品手册向量化,用户问“怎么开通手机银行”,系统先用余弦相似度检索出最相关的操作指南片段,再生成步骤清晰的答复,准确率比纯关键词搜索提升约 40%。

交易风控中的 KNN 反欺诈

阶段:监督学习(分类)

解决的问题:欺诈交易往往是“少数派”,难以用规则穷举。KNN 直接找历史中与当前交易最相似的 K 笔,看它们是否多为欺诈,对高维稀疏的支付特征尤其适合用曼哈顿距离,避免单个字段异常主导判断。

具体案例:某支付公司在交易链路中部署 KNN 风控模型:每笔交易提取设备、IP、金额、频次等特征并标准化,用曼哈顿距离检索历史相似交易,若 K=5 中 4 笔是欺诈,则触发二次验证。上线后误报率比规则引擎降低 27%。

Python 演示

python31 行
import numpy as npfrom collections import Counter def euclidean(a, b):    return np.sqrt(np.sum((a - b) ** 2)) def manhattan(a, b):    return np.sum(np.abs(a - b)) def chebyshev(a, b):    return np.max(np.abs(a - b)) def cosine_distance(a, b):    cos = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b) + 1e-9)    return 1 - cos def knn_predict(X_train, y_train, x_test, k=3, dist_fn=euclidean):    distances = [(dist_fn(x_train, x_test), y) for x_train, y in zip(X_train, y_train)]    distances.sort(key=lambda t: t[0])    top = [label for _, label in distances[:k]]    return Counter(top).most_common(1)[0][0] if __name__ == "__main__":    X = np.array([[1, 2], [2, 3], [3, 3], [6, 5], [7, 6], [8, 7]])    y = np.array([0, 0, 0, 1, 1, 1])    x_new = np.array([4.5, 4.5])     print("欧氏距离预测:", knn_predict(X, y, x_new, k=3, dist_fn=euclidean))    print("曼哈顿距离预测:", knn_predict(X, y, x_new, k=3, dist_fn=manhattan))    print("切比雪夫距离预测:", knn_predict(X, y, x_new, k=3, dist_fn=chebyshev))    print("余弦距离预测:", knn_predict(X, y, x_new, k=3, dist_fn=cosine_distance))
目的:在同一个二维小样本集上,分别用欧氏、曼哈顿、切比雪夫、余弦距离跑 KNN 分类,直观对比不同距离度量如何改变预测结果。
  1. def euclidean(a, b):欧氏距离:平方差求和再开根号,最常用的直线距离。
  2. def manhattan(a, b):曼哈顿距离:绝对值求和,对异常值更稳健。
  3. def chebyshev(a, b):切比雪夫距离:取最大差值,像国王走法。
  4. def cosine_distance(a, b):余弦距离:1 减去余弦相似度,关注方向而非长度。
  5. distances = [(dist_fn(x_train, x_test), y) for x_train, y in zip(X_train, y_train)]用传入的距离函数计算训练集每个样本与新样本的距离,并捆绑标签。
  6. distances.sort(key=lambda t: t[0])按距离从小到大排序,找出最近的邻居。
  7. Counter(top).most_common(1)[0][0]对 K 个邻居的标签投票,返回票数最多的类别。

常见误区

误区距离不就是测量远近吗?欧氏、曼哈顿、切比雪夫,结果应该大差不差,选一个顺眼的就行。

正解不同度量在高维空间中差异极大。同样是点 (0,0) 到 (3,4):欧氏距离 5,曼哈顿距离 7,切比雪夫距离 4。维度越高,差异越被放大。在 KNN 中,选错距离会导致邻居集合完全不同,分类结果自然天差地别。

为何常见:人的直觉停留在二维平面,各距离在低维差别不大;但真实数据动辄几十上百维,差异被急剧放大。

误区数据是现成的,直接喂给距离公式不就好了?标准化多此一举。

正解如果特征是“年龄”和“收入”,收入数值远大于年龄,欧氏距离几乎完全被收入决定,年龄维度形同虚设。标准化能把各特征拉到同一尺度,让每个维度公平参与距离计算。

为何常见:教科书例子常用同单位数据,让人误以为原始特征可以直接比较;真实业务里跨量纲才是常态。

误区余弦相似度不是也叫“相似度”吗?数值越大越相似,那直接拿它排序邻居就行。

正解相似度与距离是互补关系:相似度 = 1 时距离为 0,相似度 = -1 时距离最大。若把相似度直接当距离,排序结果恰好相反——最相似的样本会被当成最远的邻居,KNN 会完全崩溃。正确做法是取 1 - 相似度 作为距离。

为何常见:名字中“相似度”三个字容易让人默认“值越大越近”,忽略了方向性问题。

误区人多力量大,邻居多一些投票更靠谱,K=50 一定比 K=5 好。

正解K 太大会让距离很远的样本也参与投票,类别边界被彻底抹平,模型欠拟合;K 太小则容易受单点噪声影响,过拟合。K 应通过交叉验证选择,并在业务中综合考虑类别分布。

为何常见:直觉上“样本越多统计越可靠”,但 KNN 的前提是“局部相似”——K 过大恰恰破坏了局部性。

面试题

Q1. 欧氏距离对应闵可夫斯基距离中 p 取何值?

单选题 · easy

  • A.p = 1
  • B.p = 2← 正确答案
  • C.p = 3
  • D.p → ∞

答案:B。欧氏距离是平方差求和再开根号,对应 p=2。p=1 是曼哈顿距离,p→∞ 是切比雪夫距离,p=3 不特殊。

Q2. 曼哈顿距离的直观含义是?

单选题 · easy

  • A.两点之间的直线距离
  • B.向量夹角的余弦值
  • C.沿坐标轴走的路程总和← 正确答案
  • D.坐标差中的最大值

答案:C。曼哈顿距离像出租车沿方格街道行驶,横纵坐标差绝对值之和。直线是欧氏,夹角是余弦,最大值是切比雪夫。

Q3. 推荐系统中用余弦相似度的核心优势是?

单选题 · mid

  • A.计算比欧氏距离快数倍
  • B.对长度不敏感只看方向← 正确答案
  • C.完全不受维度数目影响
  • D.能自动处理缺失特征

答案:B。余弦相似度只关注向量夹角,用户评分尺度不同(有人手松有人手紧)不影响方向判断,因此比欧氏距离更适合评分数据。

Q4. 下列哪些场景适合使用曼哈顿距离?

多选题 · mid

  • A.城市街区导航← 正确答案
  • B.稀疏高维特征← 正确答案
  • C.含异常值数据← 正确答案
  • D.欧氏直线距离

答案:ABC。曼哈顿距离对应横平竖直的移动方式,对单个维度异常不敏感(线性累加而非平方放大),适合稀疏高维和含噪声数据。需要严格直线距离时应选欧氏。

Q5. 切比雪夫距离等于?

单选题 · mid

  • A.坐标差平方和再开根号
  • B.坐标差绝对值依次求和
  • C.坐标差绝对值中的最大值← 正确答案
  • D.向量夹角余弦值大小

答案:C。切比雪夫距离只取所有维度坐标差绝对值的最大值,像国际象棋国王走一步能同时横纵移动,步数等于“最大坐标差”。

Q6. 使用欧氏距离前为什么要做标准化?

多选题 · mid

  • A.让所有特征量纲统一← 正确答案
  • B.防止大数值特征主导← 正确答案
  • C.大幅加快训练速度
  • D.强制特征正态分布

答案:AB。标准化将各特征变为均值 0、标准差 1,消除量纲差异,确保大数值特征不会淹没小数值特征。它不保证正态分布,也不直接加速训练。

Q7. 余弦相似度与距离的正确换算关系是?

单选题 · hard

  • A.值域[-1,1],相关系数
  • B.值域[-1,1],距离为1-相似度← 正确答案
  • C.值域[0,1],距离与相似度同向
  • D.值域无限,需归一化后使用

答案:B。余弦相似度值域为 [-1,1],越接近 1 方向越一致。要在 KNN 中当作距离使用,必须取 1 减去相似度,让距离与相似度反向变化。

Q8. 点 A(0,0) 到 B(3,4) 的欧氏、曼哈顿、切比雪夫距离分别是?

单选题 · mid

  • A.5,7,4← 正确答案
  • B.7,5,3
  • C.5,4,7
  • D.4,5,7

答案:A。欧氏 √(9+16)=5,曼哈顿 |3|+|4|=7,切比雪夫 max(3,4)=4。用具体数字记住三把尺子的差异。

Q9. KNN 中 K 值过大会导致?

单选题 · hard

  • A.算法运行速度变快
  • B.模型欠拟合,边界平滑← 正确答案
  • C.距离计算自动失效
  • D.分类结果必然正确

答案:B。K 太大把远处样本也纳入投票,局部信息被稀释,决策边界过度平滑,导致欠拟合。K 太小则易受噪声影响导致过拟合。

Q10. 关于闵可夫斯基距离,下列说法正确的是?

多选题 · extreme

  • A.p=1 时是曼哈顿距离← 正确答案
  • B.p=2 时是欧氏距离← 正确答案
  • C.p无穷时趋近切比雪夫← 正确答案
  • D.p必须取整数才有效

答案:ABC。闵可夫斯基距离是统一框架,p=1/2/∞ 分别对应曼哈顿、欧氏、切比雪夫。p 可为任意正实数,不一定取整数,D 错误。