Jaccard距離和海明距離

Jaccard(傑卡德)相似度

Jaccard相似度常用於計算兩個文本的字面相似度。將文本分爲詞的序列。兩個文本中一樣的詞彙集合的個數爲A,所有詞彙構成的集合爲B。最終用A除以B得到的結果就是Jaccard相似度。

用一個例子來說明:

		今天天氣很好==>今天/天氣/很好
		今天天氣不好==>今天/天氣/不好

所有詞彙的集合:
word_set = {今天,天氣,很好,不好}
兩個句子中相同的詞彙集合:
same_set = {今天,天氣}
Jaccard_similarity=len(same_set)len(word_set)=24=0.5Jaccard\_similarity=\frac{len(same\_set)}{len(word\_set)}=\frac{2}{4}=0.5

把這個問題抽象出來可以給出Jaccard相似度的定義:

	給定兩個集合A,B,Jaccard係數(相似度)定義爲A與B交集大小與並集大小的比值,公式如下:

J(A,B)=ABAB=ABA+BABJ(A,B)=\frac{|A\cap B|}{|A\cup B|}=\frac{|A\cap B|}{|A| + |B| - |A\cap B|}

	Jaccard值越大說明相似度越高。

Jaccard距離用於描述不相似的程度:d(A,B)=1J(A,B)d(A,B)=1-J(A,B)

如何度量兩個向量之間的Jaccard相似度?

前提條件就是:這兩個向量的維度一定要相等,否則對於相似性的度量既沒有意義,也不好度量。

Jaccard針對二值向量可進行相似性度量。

假設擁有兩個向量vec1vec_1vec2vec_2

  1. 其中對應位置均爲0的個數記作M00M_{00}
  2. 其中vec1vec_1中爲0vec2vec_2中爲1的個數記作M01M_{01}
  3. 其中vec1vec_1中爲1vec2vec_2中爲0的個數記作M10M_{10}
  4. 其中對應位置均爲1的個數記作M11M_{11}

如果M00M_{00}M11M_{11}相差不大,則兩個向量的Jaccard相似度爲:
J(vec1,vec2)=M00+M11M00+M01+M10+M11J(vec_1, vec_2)=\frac{M_{00}+M_{11}}{M_{00}+M_{01}+M_{10}+M_{11}}

如果M00>>M11M_{00}>>M_{11}或者爲0時代表的含義並無實際意義,則兩個向量的Jaccard相似度爲:
J(vec1,vec2)=M11M01+M10+M11J(vec_1, vec_2)=\frac{M_{11}}{M_{01}+M_{10}+M_{11}}

特點

Jaccard相似性與餘弦相似度的關鍵區別在於:Jaccard針對重複性的元素不敏感,也就是一個詞彙出現100次在Jaccard的相似性度量中與出現1次的結果一樣。而餘弦相似度有較大的區別。

海明距離

海明距離也是用於度量兩個向量之間的差異程度。同時也是SimHash的御用距離度量方法。

統計兩個向量中不一樣元素的個數的和,其實就是JaccardJaccardM01+M10M_{01}+M_{10}的結果。
同時也可以計算兩個向量異或之後的元素1的個數之和。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章