衡量兩個序列的相似度,可以用馬氏距離,歐氏距離等距離公式來度量。
但對兩個字串,比如kitten
與sitting
的相似度是多少?
如果是兩個等長字串,也可以用one-hot對每個字母編碼,然後用馬氏、歐式距離也可以計算。但對不等長的兩個字串,怎麼計算相似度呢?
更一般的說法,如何計算兩個不等長陣列的相似度呢?
萊文斯坦距離就用是來解決這個問題的。先看它的公式:
其中a
,b
是兩個陣列(字串),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也...