一、相似度计算方法
相似度算法是计算两个或多个对象之间相似程度的方法,这些对象可以是文本、图像、音频等不同类型的数据。在计算机科学、信息检索、推荐系统、数据挖掘等领域中,相似度算法具有广泛的应用。
二、应用场景
- 搜索引擎:用于文本相似度计算,改善搜索结果的相关性。
- 推荐系统:基于用户行为和兴趣相似度计算,提供个性化推荐。
- 图像识别:比较图像的相似度,用于图像搜索和匹配。
- 音频处理:用于语音识别和声音相似性比较。
三、距离函数
3.1 明可夫斯基(Minkowski)距离
对于任意样本对象
P
=
[
p
1
,
p
2
,
.
.
.
,
p
n
]
P=[p_1,p_2,...,p_n]
P=[p1,p2,...,pn]与
Q
=
[
q
1
,
q
2
,
.
.
.
,
q
n
]
Q=[q_1,q_2,...,q_n]
Q=[q1,q2,...,qn],它们之间的距离定义为
d
(
P
,
Q
)
=
(
∑
i
=
1
n
(
p
i
−
q
i
)
2
)
1
k
d(P, Q) = ({\sum_{i=1}^{n} (p_i - q_i)^2} )^{\frac{1}{k}}
d(P,Q)=(i=1∑n(pi−qi)2)k1
当
k
=
1
k=1
k=1时,即为曼哈顿(Manhattan)距离(L1距离),在某些特定的机器学习场景中,如Lasso回归(L1正则化),曼哈顿距离(或L1范数)被用作正则化项,以促进稀疏解的产生。定义如下:
d
(
P
,
Q
)
=
∑
i
=
1
n
∣
p
i
−
q
i
∣
d(P, Q) = {\sum_{i=1}^{n} |p_i - q_i}|
d(P,Q)=i=1∑n∣pi−qi∣
当
k
=
2
k=2
k=2时,即为欧氏(Euclidean)距离(L2距离), 在聚类算法(如K-means)、分类算法(如K-NN)中,欧氏距离常被用作衡量样本之间相似度的指标。定义如下:
d
(
P
,
Q
)
=
∑
i
=
1
n
(
p
i
−
q
i
)
2
d(P, Q) = \sqrt {\sum_{i=1}^{n} (p_i - q_i)^2}
d(P,Q)=i=1∑n(pi−qi)2
当
k
=
∞
k=\infty
k=∞时,即为切比雪夫(Chebyshev)距离:
d
(
P
,
Q
)
=
max
∣
(
p
i
−
q
i
)
∣
(
1
⩽
i
⩽
n
)
d(P, Q) =\max|(p_i - q_i)| (1⩽i⩽n)
d(P,Q)=max∣(pi−qi)∣(1⩽i⩽n)
3.2 马氏(Mahalanobis)距离
Mahalanobis距离考虑了属性之间的相关性,可以更加准确地衡量多维数据之间的距离。Mahalanobis距离是对Minkowski距离的改进,对于一切线性变换是不变的,克服了Minkowski距离受量纲影响的缺点,也部分地克服了多重相关性。Mahalanobis距离在分类算法中比较常用,但不足在于协方差矩阵难以确定,计算量比较大,不适合大规模数据集。公式如下:
d
=
(
p
−
q
)
T
A
−
1
(
p
−
q
)
d=(p-q)^TA^{-1}(p-q)
d=(p−q)TA−1(p−q)
其中,
A
A
A为
n
×
n
n×n
n×n的协方差矩阵,
A
−
1
A^{−1}
A−1为协方差矩阵的逆。
3.3 汉明(Hamming)距离
汉明距离是指两个等长字符串在对应位置上不同字符(或比特)的数量。简单来说,它表示将一个字符串转换成另一个字符串所需替换的字符数。
d
(
a
,
b
)
=
∑
i
=
1
n
(
a
i
≠
b
i
)
d(a,b)=\sum_{i=1}^{n}(a_i \neq b_i)
d(a,b)=i=1∑n(ai=bi)
其中,
n
n
n是字符串的长度,
a
i
a_i
ai和
b
i
b_i
bi分别表示字符串
a
a
a和
b
b
b中第
i
i
i个位置的字符。如果
a
i
a_i
ai和
b
i
b_i
bi不相等,则求和项为1;否则为0。最终求和的结果即为两个字符串的汉明距离。例如,在特征匹配算法中,可以将图像的特征描述为二进制字符串,并使用汉明距离来衡量不同特征之间的相似度。
四、相似度(系数)
4.1 余弦相似度(Cosine Similarity)
余弦相似度是通过计算两个向量在多维空间中的夹角余弦值来评估它们的相似度。余弦相似度的取值范围是[-1, 1],夹角越小(即余弦值越接近于1),两个向量越相似。
cos
(
θ
)
=
a
⋅
b
∥
a
∥
∥
b
∥
=
∑
i
=
1
n
(
a
i
b
i
)
∑
i
=
1
n
a
i
2
∑
i
=
1
n
b
i
2
\cos(\theta) = \frac{a \cdot b}{\|a\| \|b\|} = \frac{\sum_{i=1}^{n} (a_i b_i)}{\sqrt{\sum_{i=1}^{n} a_i^2} \sqrt{\sum_{i=1}^{n} b_i^2}}
cos(θ)=∥a∥∥b∥a⋅b=∑i=1nai2∑i=1nbi2∑i=1n(aibi)
其中,
a
⋅
b
a⋅b
a⋅b 表示向量
a
a
a和向量
b
b
b的内积,
∣
∣
a
∣
∣
||a||
∣∣a∣∣和
∣
∣
b
∣
∣
||b||
∣∣b∣∣ 分别表示向量
a
a
a和向量
b
b
b的模(长度)
4.2 皮尔逊相关系数(Pearson Correlation Coefficient)
相关系数是对向量做标准差、标准化后的夹角余弦,表示两个向量的线性相关程度。
用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。皮尔逊相关系数具有平移不变性和尺度不变性,计算出了两个向量(维度)的相关性。
C
o
r
r
(
p
,
q
)
=
∑
i
n
(
(
p
i
−
p
ˉ
)
×
(
q
i
−
q
ˉ
)
)
(
∑
i
n
(
p
i
−
p
ˉ
)
2
×
∑
i
n
(
q
i
−
q
ˉ
)
2
)
Corr(p,q)=\frac{\sum_{i}^{n}((p_i-\bar{p})\times(q_i-\bar{q}))}{\sqrt{(\sum_{i}^{n}(p_i-\bar{p})^2\times\sum_{i}^{n}(q_i-\bar{q})^2)}}
Corr(p,q)=(∑in(pi−pˉ)2×∑in(qi−qˉ)2)∑in((pi−pˉ)×(qi−qˉ))
其中,
n
n
n是样本量,
p
i
p_i
pi和
q
i
q_i
qi分别是两个变量的第
i
i
i个特征值,
p
‾
\overline{p}
p和
q
‾
\overline{q}
q分别是
p
p
p和
q
q
q的样本均值。
4.3 杰卡德相似系数(Jaccard Similarity Coefficient)
广义Jaccard系数又称为Tanimoto系数,用
E
J
EJ
EJ表示,广泛用于信息检索和生物学分类中,在二次元性情况下简化为Jaccard系数。
E
J
(
p
,
q
)
=
∑
i
n
p
i
×
q
i
∑
i
n
(
p
i
2
)
∑
i
n
(
q
i
2
)
−
∑
i
n
(
p
i
×
q
i
)
EJ(p,q)=\frac{\sum_{i}^{n}p_i\times q_i}{\sum_{i}^{n}({p_i}^2)\sum_{i}^{n}({q_i}^2)-\sum_{i}^{n}(p_i\times q_i)}
EJ(p,q)=∑in(pi2)∑in(qi2)−∑in(pi×qi)∑inpi×qi
4.4 KL散度
KL散度(Kullback-Leibler Divergence),即相对熵,是衡量两个分布(P、Q)之间的距离,计算出的距离越小越相似。
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
i
l
o
g
p
i
q
i
D_{KL}(p||q)=\sum_{i=1}^{n}p_i log\frac{p_i}{q_i}
DKL(p∣∣q)=i=1∑npilogqipi
表示的就是概率
q
q
q 与概率
p
p
p 之间的差异,很显然,散度越小,说明概率
q
q
q 与概率
p
p
p 之间越接近,那么估计的概率分布于真实的概率分布也就越接近。
4.5 结构相似性指数(Structural Similarity Index, SSIM)
结构相似性指数(Structural Similarity Index, SSIM)是一种用于衡量两幅图像之间相似度的指标。它通过比较图像的亮度、对比度和结构信息来确定两幅图像之间的相似程度。SSIM指数的取值范围是0到1之间,其中:1表示两幅图像完全相同,0表示两幅图像差异极大。
SSIM主要由以下三个方面组成:
- 亮度相似度(Luminance Similarity):反映了两幅图像的亮度信息是否一致。
- 对比度相似度(Contrast Similarity):反映了两幅图像的对比度信息是否一致。
- 结构相似度(Structure Similarity):反映了两幅图像的结构信息是否一致。
SSIM的计算公式为:
SSIM ( x , y ) = ( 2 μ x μ y + c 1 ) ( 2 σ x y + c 2 ) ( μ x 2 + μ y 2 + c 1 ) ( σ x 2 + σ y 2 + c 2 ) \text{SSIM}(x,y) = \frac{(2\mu_x\mu_y + c_1)(2\sigma_{xy} + c_2)}{(\mu_x^2 + \mu_y^2 + c_1)(\sigma_x^2 + \sigma_y^2 + c_2)} SSIM(x,y)=(μx2+μy2+c1)(σx2+σy2+c2)(2μxμy+c1)(2σxy+c2)
其中, x x x 和 y y y 是待比较的两幅图像, μ x \mu_x μx 和 μ y \mu_y μy 分别是 x x x 和 y y y 的均值, σ x \sigma_x σx 和 σ y \sigma_y σy 分别是 x x x 和 y y y 的标准差, σ x y \sigma_{xy} σxy 是 x x x 和 y y y 的协方差。 c 1 c_1 c1 和 c 2 c_2 c2 是两个常数,用于避免分母为0,并调整结构相似度的范围。