### 余弦相似度(Cosine Similarity)
余弦相似度是一种常用的向量相似性度量方法,其核心思想是通过计算两个向量之间的夹角余弦值来衡量它们的相似性。余弦相似度的值范围在 [-1, 1] 之间,其中 1 表示两个向量方向完全相同,-1 表示方向完全相反,0 表示两者没有相关性。公式如下:
$$
\text{Cosine Similarity}(A, B) = \frac{A \cdot B}{\|A\| \|B\|} = \frac{\sum_{i=1}^{n} A_i \cdot B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \cdot \sqrt{\sum_{i=1}^{n} B_i^2}}
$$
余弦相似度特别适用于高维稀疏数据,例如文本数据的向量化表示(如TF-IDF)或推荐系统中的用户-物品评分向量 [^1]。
### 修正余弦相似度(Adjusted Cosine Similarity)
修正余弦相似度是对余弦相似度的改进,主要应用于推荐系统中,用于解决用户评分偏置问题。它通过减去每个维度的均值来对数据进行中心化处理,从而更准确地反映用户之间的相似性。其公式如下:
$$
s(A, B) = \frac{\sum_{i \in I}(R_{A,i} - \bar{R_i})(R_{B,i} - \bar{R_i})}{\sqrt{\sum_{i \in I}(R_{A,i} - \bar{R_i})^2} \cdot \sqrt{\sum_{i \in I}(R_{B,i} - \bar{R_i})^2}}
$$
其中 $ R_{A,i} $ 表示用户 A 对物品 i 的评分,$ \bar{R_i} $ 表示物品 i 的平均评分。这种方法在协同过滤推荐系统中被广泛使用 [^2]。
### 欧氏距离(Euclidean Distance)
欧氏距离衡量两个向量之间的直线距离,适用于低维空间中的相似性计算。其公式如下:
$$
\text{Euclidean Distance}(A, B) = \sqrt{\sum_{i=1}^{n} (A_i - B_i)^2}
$$
欧氏距离对数值的绝对差异敏感,因此在某些场景下可能不如余弦相似度稳定 [^1]。
### 曼哈顿距离(Manhattan Distance)
曼哈顿距离是另一种距离度量方式,其计算方式是各维度差值的绝对值之和:
$$
\text{Manhattan Distance}(A, B) = \sum_{i=1}^{n} |A_i - B_i|
$$
该方法在某些稀疏数据场景下表现良好,例如城市街区路径计算 。
### 点积(Dot Product)
点积是两个向量对应元素相乘后求和的结果:
$$
\text{Dot Product}(A, B) = \sum_{i=1}^{n} A_i \cdot B_i
$$
点积的大小不仅与向量夹角有关,还与向量长度相关,因此在某些场景下需要归一化处理 。
### 皮尔逊相关系数(Pearson Correlation Coefficient)
皮尔逊相关系数衡量两个变量之间的线性相关性,其值范围在 [-1, 1] 之间。1 表示完全正相关,-1 表示完全负相关,0 表示无线性相关性。其公式如下:
$$
r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \cdot \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2}}
$$
皮尔逊相关系数在推荐系统和统计分析中广泛使用 [^2]。
### Jaccard 相似度(Jaccard Similarity)
Jaccard 相似度用于衡量两个集合之间的相似性,定义为交集大小与并集大小的比值:
$$
\text{Jaccard Similarity}(A, B) = \frac{|A \cap B|}{|A \cup B|}
$$
该方法在文本相似性、图像匹配等任务中表现良好,尤其适合处理二值特征 。
### 马氏距离(Mahalanobis Distance)
马氏距离是一种考虑数据协方差矩阵的距离度量方法,能够处理不同维度之间的相关性问题:
$$
D_M(x, y) = \sqrt{(x - y)^T S^{-1} (x - y)}
$$
其中 $ S $ 是协方差矩阵。马氏距离在异常检测和聚类分析中具有优势 。
### KL 散度与 JS 散度(Kullback-Leibler Divergence & Jensen-Shannon Divergence)
KL 散度用于衡量两个概率分布之间的差异性,其公式如下:
$$
D_{KL}(P \| Q) = \sum_{i} P(i) \log \frac{P(i)}{Q(i)}
$$
JS 散度是 KL 散度的对称化版本,具有更好的数值稳定性:
$$
D_{JS}(P \| Q) = \frac{1}{2} D_{KL}(P \| M) + \frac{1}{2} D_{KL}(Q \| M)
$$
其中 $ M = \frac{1}{2}(P + Q) $。KL 和 JS 散度广泛应用于信息论和生成模型中 。
### 示例代码:余弦相似度计算
```python
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# 定义两个向量
A = np.array([3, 4])
B = np.array([1, 2])
# 计算余弦相似度
similarity = cosine_similarity([A], [B])
print("余弦相似度为:", similarity[0][0])
```
### 示例代码:欧氏距离计算
```python
import numpy as np
# 定义两个向量
A = np.array([3, 4])
B = np.array([1, 2])
# 计算欧氏距离
distance = np.linalg.norm(A - B)
print("欧氏距离为:", distance)
```
### 示例代码:皮尔逊相关系数计算
```python
from scipy.stats import pearsonr
# 定义两个变量
X = [1, 2, 3, 4, 5]
Y = [2, 4, 6, 8, 10]
# 计算皮尔逊相关系数
corr, _ = pearsonr(X, Y)
print("皮尔逊相关系数为:", corr)
```
---
###