1. 为什么我们需要距离计算?
在机器学习和深度学习中,距离计算就像是我们衡量两个事物相似程度的尺子。想象一下你在电商平台购物,系统为什么会给你推荐某些商品?背后就是通过计算你和其他用户、或者商品之间的相似度来实现的。
PyTorch提供了多种距离计算方式,每种都有其适用场景。比如:
- 余弦相似度:适合衡量方向相似性,比如文本分类
- 欧式距离:直观的空间距离,常用于聚类算法
- 批量矩阵距离:处理高维数据时的高效方案
我刚开始接触时也犯过迷糊,为什么要有这么多不同的方法?后来在实际项目中才发现,不同的距离度量会直接影响模型效果。比如在推荐系统中,用余弦相似度比欧式距离往往效果更好。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础距离计算实战
2.1 余弦相似度的正确打开方式
余弦相似度衡量的是两个向量在方向上的相似程度,取值范围在[-1,1]之间。在自然语言处理中特别常用。
python复制import torch
import torch.nn as nn
# 创建两个示例向量
user1 = torch.tensor([1.0, 2.0, 3.0])
user2 = torch.tensor([4.0, 5.0, 6.0])
# 初始化余弦相似度计算器
cos_sim = nn.CosineSimilarity(dim=0)
# 计算相似度
similarity = cos_sim(user1, user2)
print(f"余弦相似度: {similarity:.4f}")
这里有几个容易踩的坑:
dim参数要设置正确,对于一维向量设为0- 输入向量不要包含全零,否则会出现除零错误
- 记得处理极端情况,比如完全相同的向量相似度为1
我在实际项目中发现,对向量先做归一化再计算余弦相似度,效果会更稳定:
python复制user1_normalized = user1 / torch.norm(user1, p=2)
user2_normalized = user2 / torch.norm(user2, p=2)
2.2 欧式距离的多种实现方式
欧式距离就是我们常说的"两点之间直线距离"。PyTorch中至少有三种实现方式:
**方法一:使用PairwiseDistan
