Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        6年前关闭。
                                                                                            
                
        
在Java中,如何找到具有不同长度的两个向量之间的相似性度量。
考虑我们有

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


我正在寻找Jaccard系数或Sørensen–Dice系数以外的相似性度量

最佳答案

正如有人已经评论过的那样,可能的替代方法是Levenshtein距离,有时也称为编辑距离。

Levenshtein距离是一个为每对字符串AB分配自然数n的函数,该自然数表示将A转换为B所需的最小操作数。允许的操作是


A删除符号,
A中插入一个符号,
替换A中的符号。


注意,编辑距离是对称的(对于将A转换为B的任何操作序列),可以构造将“ B”转换为A的“反转”操作序列。

Levenshtein distance上的Wikipedia文章列出了一些有用的属性。

最后,作为一个示例,让我们变换两个向量:

[10011]
// Insert 1 into position 2:
[101011]
// Insert 0 into position 5:
[1010101]
// Insert 0 into position 7:
[10101010]


我们找到了3个操作的序列。如果我们设法证明没有更短的序列,那么我们可以得出结论,V1V2之间的距离为3。那么,考虑到Levenshtein距离始终至少是两个字符串之间的大小差(考虑一下为什么),那么我们得出结论:

levenshtein_distance(V1,V2) == 3 // returns true!


希望这可以帮助!

关于java - 查找具有不同长度的特征向量的相似性度量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21679586/

10-09 00:28