欧式距离
核心思想:直接计算“两点之间的直线距离”,适合需要物理空间或数值差异的场景。
1. 地理位置导航
- 例子:地图App计算你和咖啡店的直线距离。
- 如果你在坐标点A(2,3),咖啡店在B(5,7),欧式距离就是两点间的直线距离。
- 适用原因:导航需要真实的物理距离。
2. 图像识别
- 例子:人脸识别中,比较两张人脸图片的像素差异。
- 把图片看作多维向量(比如每个像素是一个维度),计算两张图片的欧式距离,距离越小越相似。
- 适用原因:像素值的直接差异能反映图像内容的接近程度。
3. 聚类分析(如K-means算法)
- 例子:电商将用户按消费金额和购买频率分组。
- 用户A(月消费500元,买3次)和用户B(月消费800元,买5次)的欧式距离越小,消费行为越接近。
- 适用原因:数值的绝对差异直接影响分组结果。
4. 异常检测
- 例子:信用卡交易中,检测异常消费。
- 正常交易的特征向量(金额、地点、时间)形成一个集群,新交易如果距离集群中心过远(欧式距离大),可能是欺诈。
余弦距离
核心思想:比较“方向是否一致”,适合忽略大小、只关注模式的场景。
1. 文本相似度
- 例子:比较两篇文章的相似性。
- 将文章转为词频向量(每个词的出现次数),计算余弦距离。即使文章长度不同(比如一篇长、一篇短),只要关键词比例相似,方向就一致。
- 适用原因:关注内容主题(方向),而非文章长度(向量大小)。
2. 推荐系统
- 例子:视频平台推荐你可能喜欢的电影。
- 用用户评分向量(如A用户对喜剧、科幻片的评分)和电影特征向量计算余弦相似度。方向越接近,推荐越精准。
- 适用原因:关注兴趣方向(比如“喜欢喜剧>动作”),而不是评分绝对值。
3. 自然语言处理(NLP)
- 例子:ChatBot理解用户问题的意图。
- 将用户问题“如何做蛋糕?”和语料库中的句子转为词向量,用余弦距离找到最接近的意图(如“烘焙步骤”)。
- 适用原因:语义相似性由关键词方向决定,而非词频绝对值。
4. 人脸识别(辅助)
- 例子:判断两张人脸是否为同一人。
- 先用神经网络提取人脸特征向量(如128维),再计算余弦相似度。方向越一致,越可能是同一人。
- 适用原因:光照、角度可能影响像素值(欧式距离不准),但特征向量的方向更稳定。
关键对比:什么时候用哪个?
场景特征 | 选欧式距离 | 选余弦距离 |
---|---|---|
关注“实际距离” | ✔️(比如地图导航) | ❌ |
数据量纲差异大(如身高vs体重) | ❌(需先归一化) | ✔️(自动忽略幅度) |
关注“模式相似” | ❌(比如“喜欢甜食”vs“喜欢辣”) | ✔️(方向一致即相似) |
数据稀疏(如文本词频) | ❌(0值多,欧式距离不稳定) | ✔️(只关注非零维度方向) |
举个对比例子
假设你想比较用户对电影的喜好:
- 用欧式距离:用户A评分为[5, 1](喜剧5分,恐怖片1分),用户B评分为[3, 3]。欧式距离较大,但两人可能都喜欢喜剧(只是B更中庸)。
- 用余弦距离:用户A和用户C[10, 2]的方向一致,余弦距离小,说明喜好模式相似(都偏爱喜剧)。
总结:欧式距离是“物理世界的尺子”,余弦距离是“模式方向的量角器”。根据问题本质(要距离还是要方向)选择即可! 😊