1. 程式人生 > >白話總結《餘弦相似度vs歐式距離&缺陷》

白話總結《餘弦相似度vs歐式距離&缺陷》

之前相似度計算很模糊,趁著休息總結一下,以便使用時更針對業務需要。

餘弦相似度

公式中p和q是兩個向量。

餘弦相似度需要對兩個向量的長度做歸一化,然後度量兩個向量的方向,與向量的長度無關。也就是說,兩個向量只要方向一致,無論長度、程度如何,都視作“相似”。即“餘弦相似度對具體數值的絕對值大小不敏感

這會產生一個問題,如果A使用者對兩個商品打分是1,2,B是4,5。由於餘弦相似度只關注方向的差異,忽略具體數值的大小,故他們兩個的餘弦相似度達到0.98,這和實際的情況不符,使用者A明顯不喜歡這兩個商品。即,傳統的餘弦相似度對行為矩陣判別比較好,但是對打分矩陣經常有不好的效果。

可以使用:

調整的餘弦相似度(Adjusted Cosine Similarity)。調整的方法很簡單,就是先計算向量每個維度上的均值,然後每個向量在各個維度上都減去均值後,再計算餘弦相似度。

前面這個小例子,用調整的餘弦相似度計算得到的相似度是 -0.1,呈現出兩個使用者口味相反,

和直覺相符。

歐式距離:

只關注具體數值特徵的絕對差異,從個體向量不同維度的數值大小中體現差異。如使用使用者行為指標分析使用者價值的相似度或差異。

舉個例子:

歌手大賽,三個評委給三個歌手打分,第一個評委的打分(10,8,9), 第二個評委的打分(4,2,3),第三個評委的打分(8,10,9),如果採用餘弦相似度來看每個評委的差異,雖然每個評委對同一個選手的評分不一樣,但第一、第二兩個評委對這三位歌手實力的排序是一樣的,只是第二個評委對滿分有更高的評判標準,說明第一、第二個評委對音樂的品味上是一致的。

因此,如果只考慮相對大小的排序,那麼用餘弦相似度來看,第一、第二個評委為一類人,第三個評委為另外一類。

如果採用歐氏距離, 第一和第三個評委的歐氏距離更近,就分成一類人了,但其實不太合理,因為他們對於三位選手的排名都是完全顛倒的。

如果考慮具體數值的大小,那麼第二個評委打分都很低,其實反應的是對三個歌手都不喜歡,那麼就要用修正的餘弦相似度。

故:具體的業務場景具體分析。