【机器学习|学习笔记】机器学习中的距离度量详解(KNN & K-Means 背后核心)
·
【机器学习|学习笔记】机器学习中的距离度量详解(KNN & K-Means 背后核心)
【机器学习|学习笔记】机器学习中的距离度量详解(KNN & K-Means 背后核心)
文章目录
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/148514108
✅ 一、背景:为什么“距离”如此重要?
- 在 KNN / K-means / DBSCAN / 向量检索 等众多机器学习方法中,“样本之间的距离”是判断相似性/聚类归属的基础。选择合适的距离函数将直接影响算法效果。
📐 二、常用的距离计算方式及数学公式
1️⃣ 欧式距离(Euclidean Distance) – 默认最常用
- 公式:

- 含义:两点之间的“直线距离”
- 特点:连续空间中,最符合“直觉几何”
👉 KNN、K-means 默认距离
2️⃣ 曼哈顿距离(Manhattan Distance / L1 距离)
- 公式:

- 含义:城市街区中的“网格走法”
- 特点:比欧式更“保守”,对异常值更稳定
3️⃣ 闵可夫斯基距离(Minkowski Distance)
- 欧式与曼哈顿是该距离的特例:

- 当 p = 2 p=2 p=2:欧式距离
- 当 p = 1 p=1 p=1:曼哈顿距离
from scipy.spatial.distance import minkowski
# 示例:p=1 是曼哈顿,p=2 是欧式
minkowski([1, 2, 3], [4, 5, 6], p=1) # 曼哈顿
minkowski([1, 2, 3], [4, 5, 6], p=2) # 欧式
4️⃣ 余弦距离(Cosine Distance)
- 公式:

- 关注的是角度相似度,与“方向”相关
- 常用于文本/图像嵌入空间(向量大小不重要)
5️⃣ 马氏距离(Mahalanobis Distance)

- 考虑特征间协方差,能处理有相关性特征
- 适用于特征尺度差异大/不独立的情况
📊 三、Python 示例:KNN 中换用不同距离度量
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
X, y = make_classification(n_samples=500, n_features=4, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y)
# 使用不同距离度量
models = {
"Euclidean (默认)": KNeighborsClassifier(n_neighbors=5, metric='euclidean'),
"Manhattan": KNeighborsClassifier(n_neighbors=5, metric='manhattan'),
"Cosine": KNeighborsClassifier(n_neighbors=5, metric='cosine'),
}
for name, clf in models.items():
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
acc = clf.score(X_test, y_test)
print(f"{name} 准确率: {acc:.4f}")
🤔 四、为什么 KNN 和 K-means 默认不用曼哈顿距离?
| 原因 | 解释 |
|---|---|
| 📏 欧式更贴近“最短路径” | 对连续空间中的样本差异表达更自然 |
| 📐 欧式距离支持几何推导 | K-means 聚类中心用的是“均值”,自然搭配 L2 |
| 🧮 曼哈顿更新不一致 | 曼哈顿距离不适合用“均值”表示中心点(几何中心不唯一) |
| ⚠ 曼哈顿对异常值更稳健 | 但它不能反映空间的“几何意义”,尤其在高维场景 |
🧠 五、如何选择距离度量?
| 场景 | 推荐距离 |
|---|---|
| 连续特征、空间几何关系 | 欧式距离 |
| 文本向量、BERT、embedding | 余弦距离 |
| 特征之间差异大或异常值多 | 曼哈顿或马氏距离 |
| 特征相关性明显 | 马氏距离 |
🧮 六、距离度量与机器学习发展的联系
| 发展阶段 | 距离度量使用 |
|---|---|
| 早期算法(KNN/K-means) | 默认欧式/曼哈顿 |
| 大数据阶段 | 加权欧式、稀疏距离、距离学习 |
| 深度学习 + 向量化 | 余弦相似度、向量检索距离 |
| 大模型检索(RAG) | 嵌入 → cosine / faiss 中 L2/cosine 高效搜索 |
✅ 七、总结对比表:距离函数一览
| 距离 | 是否考虑方向 | 是否考虑缩放 | 优势 | 劣势 |
|---|---|---|---|---|
| 欧式距离 | ❌ | ❌ | 直观、快速 | 受尺度影响大 |
| 曼哈顿距离 | ❌ | ❌ | 对异常值稳定 | 不适合均值建模 |
| 余弦距离 | ✅ | ✅ | 适合高维嵌入 | 不反映绝对差异 |
| 马氏距离 | ❌ | ✅ | 可处理相关特征 | 要求协方差可逆 |
| 闵可夫斯基 | ❌ | 可调 | 泛化能力强 | 需调参 p p p |
更多推荐
所有评论(0)