Javaでは、長さが異なる2つのベクトル間の類似度をどのように見つけることができますか。私たちが持っていると考えてください
V1 = [1, 0, 0, 1, 1]
V1 = [1, 0, 1, 0, 1, 0, 1, 0]
Jaccard係数またはSørensen–Dice係数以外の類似度を探しています
誰かがすでにコメントしているように、可能な代替案は、編集距離とも呼ばれるレーベンシュタイン距離です。
レーベンシュタイン距離は、文字列のすべてのペアA
とB
、n
に変換A
する必要のある操作の最小数を表す自然数に割り当てる関数B
です。許可される操作は次のとおりです。
A
。A
。A
ます。編集距離は、(変換がする操作のシーケンスのように対称であることに注意A
するB
ことは、変換操作の「反転」配列構築することが可能である)B
にしますA
。
レーベンシュタイン距離に関するウィキペディアの記事には、いくつかの便利なプロパティがリストされています。
最後に、例として、2つのベクトルを変換してみましょう。
[10011]
// Insert 1 into position 2:
[101011]
// Insert 0 into position 5:
[1010101]
// Insert 0 into position 7:
[10101010]
3つの操作のシーケンスが見つかりました。より短いシーケンスがないことを証明できれば、V1
との間の距離V2
は3であると結論付けることができます。レーベンシュタイン距離は常に少なくとも2つの文字列間のサイズの違いであることを考えると(その理由を考えてください) 、それから私達は私達の結論を持っています:
levenshtein_distance(V1,V2) == 3 // returns true!
お役に立てれば!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加