首先模擬一些資料出來:假設有這樣一些id是1~5的條目,然後有幾個人對他們看過的條目進行了評分(1~5),那麼我們可能有這樣的一組資料,格式是:
人名:==================
a:b:
c:...
給定兩個人,如何計算他們的相似度,比如,在b和c裡,誰和a的評分最相似?給出一些方法:
1:簡單匹配係數(****** matching coefficient, smc)
smc = 值匹配的屬性個數 / 屬性個數 = (f11 + f00) / (f01 + f10 + f11 + f00),其中
f00 = x取0並且y取0的屬性個數
f11 = x取1並且y取1的屬性個數
...0,1表示該條目是否出現,對此例來說,就是要忽略評分情況,只根據看過與否,得到下面的資料:
a = (1, 1, 0, 1, 1) (因為看過id是1,2,4,5)的條目
b = (1, 1, 1, 1, 0) (因為看過id是1,2,3,4)的條目
c = (0, 1, 0, 1, 1) (因為看過id是2,4,5)的條目
計算a和b的smc係數:
f11 = 3 (兩者同時為1的條目的個數)
f00 = 0 ; f10 = 1 ; f01 = 1
smc(a, b) = (f11 + f00) / (f01 + f10 + f11 + f00) = (3+0) / (3 + 0 + 1 + 1) = 3 / 5 = 0.6
同理:smc(a,c) = (3 + 1) / (3 + 1 + 0 + 1) = 4 / 5 = 0.8
從公式上看,因為分子是f11和f00之和,也就是說,該方法同等地對出現和不出現進行計數,就是說它把出現和不出現看得同等的重要;所以這種方法適合處理條目具有對稱的二元屬性,例如:在乙個僅包含是非題的測驗中發現回答問題相似的學生。
這裡我們還沒有考慮每個人的評分。。。因為。。這個方法叫[簡單]匹配係數。。#_#
2:jaccard係數
j = f11 / (f01 + f10 + f11)
可以看出來,該公式和上面的式子差不多,只是少了f00,也就是說,在使用它的計算分子的過程中,並不關心那些兩者都沒有出現過的資料,只對同時出現的資料感興趣。
仍然以上面為例:
jaccard(a, b)= 3 / (3 + 1 + 1) = 0.6
jaccard(a, c)= 3 / (3 + 0 + 1) = 0.75
由於使用這個計算分子時並不關心大家都沒有讀的條目。所以這個方法適用於含有大量的0屬性,而需要比較關注的是1的屬性(即非對稱二元屬性)的資料。
例如:對乙個商店的商品,1表示被購買,0表示沒有被購買,這樣未被顧客購買的商品數遠大於被其購買的商品數,而可能需要關心的是那些同時被購買的商品。
3:歐幾里得距離
因為打不出求和和開方的符號,用**代替:
d = sqrt(pow(x1-y1, 2) + pow(x2-y2, 2) + ... pow(xn-yn, 2)) 也就是求兩點間的距離公式。
這種方法是比較通用的,不論是否是二元屬性,不論是否是只考慮交集部分,它都能計算出結果:
對上例來說,不論我們只取二元屬性:
a = (1, 1, 0, 1, 1)
b = (1, 1, 1, 1, 0)
還是考慮進每個人的評分:
a= (3, 4, 0, 3, 3)
b= (2, 4, 4, 3, 0)
又或者進一步,我們只計算交集部分:
a和b的交集部分:
a: = (3, 4, 3)
b: = (2, 4, 3)
計算a和c的交集部分:
a: = (4, 3, 3)
c: = (4, 2, 4)
不論哪種情況,用這個方法都能計算出結果,但是我覺得正因為它的這種通用性導致了它並沒有針對性,一些資料的計算可能就有些偏差,比如,如果是下面的這組資料
a = (1, 2, 0, 2, 1)
b = (2, 4, 0, 4, 2)
顯然是存在著線性關係,說明兩者的評分標準其實是很相似的,但是如果用歐式距離來計算就忽略了這種關係。
相似性度量
二元向量的相似性度量 每一維都少的資訊量,主要是0,1等有 or 沒有屬性 dice 2 x y x y 2保證 0,1 維數不一致時,差別大。jaccard x y x y 交疊程度小時,值較低 交疊係數 x y min 互相之間的包含性,1 cosine x y 根號 x y 對於實值 只有co...
相似性度量
一般而言,定義乙個距離函式d x,y 需要滿足以下幾個準則 1.d x,x 0 到自己的距離為0 2.d x,y 0 距離要非負 3.對稱性,d x,y d y,x 如果a到b距離是a,那麼b到a的距離也應該是a 4.三角形法則 兩個之和大於第三邊 d x,k d k,y d x,y 滿足這4個條件...
句子相似性
在nlp任務中,經常會遇到求解相似語句判斷的場景,這就涉及到了句子的相似性判斷。目前常用的兩種方法是基於word level級別和sentence level級別。一 word level的思想是通過對句子進行分詞,分別計算兩個比較句子中所含詞彙的相似度。主要包含兩個核心問題,乙個是詞的相似度計算問...