在Java中,我们如何在具有不同长度的两个向量之间找到相似性度量。 考虑一下我们有
V1 = [1, 0, 0, 1, 1]
V1 = [1, 0, 1, 0, 1, 0, 1, 0]
我正在寻找Jaccard Coefficient或Sørensen-Dice系数
以外的相似性度量答案 0 :(得分:0)
正如某人已经评论过的,可能的替代方案是 Levenshtein距离,有时也被称为编辑距离。
Levenshtein距离是一个函数,它为每对字符串A
和B
分配一个自然数n
,表示需要转换的最小操作数{{1}到A
。允许的操作是
B
,A
,A
中的符号。请注意,编辑距离是对称的(对于将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
希望这有帮助!