杰卡德距离的替代方案

Alternatives to Jaccard Distance

为了计算两组单词之间的距离,我使用的是 jaccard 距离:

JaccardDistance(A, B) = 1 - JaccardIndex(A, B) = 1 - (|A ∩ B| / |A ∪ B|) 

现在想知道,return值在[0, 1]之间是否还有其他类似的距离度量?

其中 0 表示两个集合包含完全相同的元素,而 1 表示完全不同的元素。两组可能大小不同,单词顺序不重要

两组(更一般地说,多组)之间最常见的距离度量是余弦距离(即角度 ) 在多集的向量表示之间。

现在让我们看看如何将多集表示为向量。

第一步是将每个集合的成员表示为一个包,例如

X = {a, b, a, c} ==> (a:2) (b:1) (c:1) Y = {d, b, a, d} ==> (a:1) (b:1) (d:2)

每个集合因此表示为所有成员的并集的成员权重的稀疏向量。比如上例中的全集成员为{a,b,c,d},d和c在X和Y中的隐含权重为0。

使用这种便于存储为散列图的稀疏表示,您可以计算余弦距离,即两个向量的余弦相似度的 arccos(反余弦)。

对于两个向量xy,余弦相似度计算为\sum_i x_i.y_i/ (|x||y|),即x的内积y 除以 xy.

的长度乘积

在我们的示例中,分子计算为 2x1(成员 a 在 X 和 Y 中的权重的乘积)+ 1x1 + 1x0 + 2x0 = 3。

x的长度为sqrt(2x2+1x1+1x1)=sqrt(6),容易看出y[的长度=47=] 也是 sqrt(6).

因此余弦距离 = 3/(sqrt(6)*sqrt(6)) = 1/2,或者换句话说,向量之间的 角度 是 60 度.

注意:更常见的是省略arccos运算,直接使用余弦相似度作为多集(表示为向量)之间的相似度(反距离)度量。