杰卡德距离的替代方案
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(反余弦)。
对于两个向量x,y,余弦相似度计算为\sum_i x_i.y_i/ (|x||y|),即x和的内积y 除以 x 和 y.
的长度乘积
在我们的示例中,分子计算为 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运算,直接使用余弦相似度作为多集(表示为向量)之间的相似度(反距离)度量。
为了计算两组单词之间的距离,我使用的是 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(反余弦)。
对于两个向量x,y,余弦相似度计算为\sum_i x_i.y_i/ (|x||y|),即x和的内积y 除以 x 和 y.
的长度乘积在我们的示例中,分子计算为 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运算,直接使用余弦相似度作为多集(表示为向量)之间的相似度(反距离)度量。