核心步骤
a. 特征表示 将现实世界中的对象转化为计算机可以处理的数学对象(通常是向量或集合)。

- 示例1(用户画像):用户A =
[年龄: 25, 对科技的喜爱度: 9, 对文艺的喜爱度: 3]-> 向量[25, 9, 3] - 示例2(文本):将句子“我爱人工智能”通过词袋模型或词向量模型转化为一个高维向量。
- 示例3(物品):电影《星际穿越》 =
[科幻: 0.9, 爱情: 0.1, 冒险: 0.8, 诺兰导演: 1]
b. 选择度量方法 根据数据的类型(连续值、二进制、集合、序列)和业务需求,选择合适的相似度/距离度量公式。
c. 计算与解释 应用公式进行计算,得到一个数值,这个数值的大小直接或间接地反映了相似度(数值越大越相似,或距离越小越相似)。
主要度量方法(原理与公式)
根据数据类型,主要分为以下几类:
A. 针对数值型向量(最常见)
假设有两个n维向量 A = [a₁, a₂, ..., aₙ] 和 B = [b₁, b₂, ..., bₙ]。
-
欧几里得距离
- 原理:两点在空间中的直线距离,最直观的“距离”概念。
- 公式:
d = √(Σ(aᵢ - bᵢ)²) - 特点:各维度贡献平等,受量纲影响大。距离越小越相似。
- 适用:空间坐标、物理测量等。
-
曼哈顿距离
- 原理:在网格状道路(如曼哈顿街区)上行走的距离,是各维度绝对差之和。
- 公式:
d = Σ|aᵢ - bᵢ| - 特点:对异常值不如欧氏距离敏感。
- 适用:城市交通规划、某些稀疏特征计算。
-
余弦相似度
- 原理:衡量两个向量在方向上的差异,而忽略其长度(模),关注的是角度。
- 公式:
cos(θ) = (A·B) / (||A|| * ||B||),A·B是点积,||A||是模长。 - 范围:[-1, 1],通常为[0, 1],值越大越相似。
- 适用:文本分析(TF-IDF向量)、推荐系统,非常适合高维稀疏向量,因为长度不重要,方向(特征的比例)才重要。
-
皮尔逊相关系数
- 原理:衡量两个变量之间的线性相关程度,本质上是将两个向量各自减去均值后,再计算它们的余弦相似度。
- 公式:
r = Σ[(aᵢ - ā)(bᵢ - b̄)] / √[Σ(aᵢ - ā)² * Σ(bᵢ - b̄)²] - 范围:[-1, 1]。值越大,线性正相关性越强。
- 适用:评价用户的评分偏好(消除用户打分严格/宽松的偏差)。
B. 针对集合或二进制向量
假设有两个集合 X 和 Y。
-
Jaccard 相似系数
- 原理:衡量两个集合的相似度,即交集大小与并集大小的比值。
- 公式:
J = |X ∩ Y| / |X ∪ Y| - 范围:[0, 1]。值越大越相似。
- 适用:计算用户兴趣集合(如购买的商品ID集合)、文档的单词集合、社交网络的好友集合。
-
汉明距离
- 原理:两个等长字符串(或二进制向量)对应位置不同字符的个数。
- 示例:
“10101”和“00110”的汉明距离是 3(第1、4、5位不同)。 - 适用:信息编码、纠错、简单的分类对比。
C. 针对序列(如字符串、DNA序列)
- 编辑距离
- 原理:将一个字符串转换成另一个字符串所需的最少单字符编辑操作次数(插入、删除、替换)。
- 算法:通常用动态规划求解(Levenshtein距离)。
- 适用:拼写检查、DNA序列比对、自然语言处理中的模糊匹配。
关键考量与选择原则
选择哪种方法,取决于:
-
数据的尺度与分布:
- 问题:如果特征量纲不同(如年龄[0-100]和收入[0-100000]),欧氏距离会被收入主导。
- 解决:必须进行数据标准化(如Z-score标准化、最大最小值归一化),使各维度具有可比性。
-
数据的稀疏性:
- 对于高维稀疏向量(如用户-物品矩阵、TF-IDF矩阵),余弦相似度通常是首选,因为它忽略0值,只关注共现的特征。
-
语义重点:
- 关注绝对差异(如价格差):用欧氏距离。
- 关注相对模式/趋势(如用户品味的相似):用余弦相似度或皮尔逊相关系数。
- 关注是否拥有共同项(如购物车商品):用Jaccard相似度。
-
计算效率:
- 在高维场景下,某些距离计算成本高,工业界常采用局部敏感哈希 等近似算法来加速海量数据的相似度搜索。
实际应用示例
- 推荐系统:
- 用户协同过滤:计算用户之间的相似度(常用皮尔逊相关系数,消除打分偏差)。
- 物品协同过滤:计算物品之间的相似度(常用余弦相似度,基于被喜欢/购买的用户向量)。
- 搜索引擎/文本分类:
- 将文档表示为TF-IDF向量或词嵌入向量,用余弦相似度计算查询与文档、或文档与文档之间的相似度。
- 图像检索:
- 使用深度网络提取图像的特征向量,然后用欧氏距离或余弦相似度在特征空间中找到最相似的图片。
- 聚类分析:
K-Means等聚类算法的核心就是不断计算数据点到中心点的距离(常用欧氏距离)。
相似度计算的原理是 “量化 -> 度量”,其核心挑战和艺术在于:
- 如何更好地将现实对象转化为有意义的特征向量(特征工程、嵌入学习)。
- 根据数据和任务目标,选择或设计最合适的度量方法。
理解不同度量方法的数学本质和适用场景,是正确应用相似度计算的关键。