找到具有不同长度的特征向量的相似性度量

时间:2014-02-10 14:17:17

标签: java similarity text-processing

在Java中,我们如何在具有不同长度的两个向量之间找到相似性度量。 考虑一下我们有

V1 = [1, 0, 0, 1, 1]
V1 = [1, 0, 1, 0, 1, 0, 1, 0]

我正在寻找Jaccard Coefficient或Sørensen-Dice系数

以外的相似性度量

1 个答案:

答案 0 :(得分:0)

正如某人已经评论过的,可能的替代方案是 Levenshtein距离,有时也被称为编辑距离

Levenshtein距离是一个函数,它为每对字符串AB分配一个自然数n,表示需要转换的最小操作数{{1}到A。允许的操作是

  1. B
  2. 删除符号
  3. 将符号插入A
  4. 替换A中的符号。
  5. 请注意,编辑距离是对称的(对于将A转换为A的任何操作序列),可以构造转换B的“反转”操作序列到B

    Levenshtein distance上的维基百科文章列出了一些有用的属性。

    最后,作为一个例子,让我们转换你的两个向量:

    A

    我们发现了3个操作序列。如果我们设法证明没有更短的序列,那么我们可以得出结论[10011] // Insert 1 into position 2: [101011] // Insert 0 into position 5: [1010101] // Insert 0 into position 7: [10101010] V1之间的距离是3.嗯,考虑到Levenshtein距离总是至少两个字符串之间的大小差异(想想为什么会这样),然后我们得出结论:

    V2

    希望这有帮助!