如何求兩個序列的相似度

2021-08-05 21:54:52 字數 1199 閱讀 3125

衡量兩個序列的相似度,可以用馬氏距離,歐氏距離等距離公式來度量。

但對兩個字串,比如kittensitting的相似度是多少?

如果是兩個等長字串,也可以用one-hot對每個字母編碼,然後用馬氏、歐式距離也可以計算。但對不等長的兩個字串,怎麼計算相似度呢?

更一般的說法,如何計算兩個不等長陣列的相似度呢?

萊文斯坦距離就用是來解決這個問題的。先看它的公式:

其中ab是兩個陣列(字串),i/j是陣列下標。萊文斯坦距離的含義,是求將a變成b(或將b變成a),所需要做的最少次數的變換。

舉個例子,字串」kitten」與」sitting」的萊文斯坦距離是3, 應為將乙個字串變為另乙個字串,最小需要做三次變換:

萊文斯坦距離的python模組在這裡它同時支援python2和python3。

(1)安裝levenshtein模組

pip install python-levenshtein
(2)計算兩個字串的相似度

import levenshtein

s1 = 'kitten'

s2 = 'sitting'

ratio = levenshtein.ratio(s1, s2)

dist = levenshtein.distance(s1, s2)

print('ratio=, dist='.format(ratio, dist))

# ratio=0.6153846153846154, dist=3

(3)計算兩個字串list的相似度

import levenshtein

a = ['1','2','3','4','5']

b = ['2','3','4']

levenshtein.seqratio(a, b)# 0.75

我在github這裡(給出了完整示例**。

求A和B兩個特徵向量的余弦相似度

現有兩個特徵向量a和b,分別表示為 a x1,x2,x3 b y1,y2,y3 則求a和b向量的余弦相似度。a x1 y1 x2 y2 x3 y3 b sqrt x1 2 x2 2 x3 2 sqrt表示求平方根 c sqrt y1 2 y2 2 y3 2 cos a,b a bc 同理當a個b擴到...

對比兩個檔案相似度 余弦演算法

檔案a1 包含字元bi 的個數bin1,檔案a2 包含的字元bi 的個數bin2 利用余弦演算法 相似度 b1n1 b1n2 b2n1 b2n2 bin1 bin2 math.sqrt b1n1 2 b2n1 2 bin1 2 math.sqrt b1n2 2 b2n2 2 bin2 2 math....

pytorch計算兩個特徵的余弦相似度

首先,我們要記住一點,兩個特徵的余弦相似度計算出來的範圍是 1,1 其實,對於兩個特徵,它們的余弦相似度就是兩個特徵在經過l2歸一化之後的矩陣內積。如下 import torch import torch.nn.functional as f 假設feature1為n c w h,feature2也...