餘弦相似度和歐幾里得距離

1.餘弦相似度

同過兩個向量的夾角的餘弦值來判斷兩個向量的相似度。
餘弦值取值[-1,1],越接近1,兩向量夾角越小,越相似。
圖片.png
二維公式:
圖片.png
n維公式:
圖片.png

存在的問題[1]

餘弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感
比如用戶對內容評分,5分制。A和B兩個用戶對兩個商品的評分分別爲A:(1,2)和B:(4,5)。我們分別用兩種方法計算相似度。使用餘弦相似度得出的結果是0.98,看起來兩者極爲相似,但從評分上看X似乎不喜歡這兩個東西,而Y比較喜歡。造成這個現象的原因就在於,餘弦相似度沒法衡量每個維數值的差異,對數值的不敏感導致了結果的誤差。

需要修正這種不合理性,就出現了調整餘弦相似度,即所有維度上的數值都減去一個均值。
比如A和B對兩部電影評分的均值分別是(1+4)/2=2.5,(2+5)/2=3.5。那麼調整後爲A和B的評分分別是:(-1.5,-1.5)和(1.5,2.5),再用餘弦相似度計算,得到-0.98,相似度爲負值,顯然更加符合現實。
修正的餘弦相似度可以說就是對餘弦相似度進行歸一化處理的算法,公式如下:
圖片.png

2.歐幾里得距離

通過兩個點(向量)的歐式空間距離來判斷相似度
圖片.png
標準化歐式距離公式:
圖片.png

python實現

餘弦相似度使用scipy.spatial.distance.cosine(u,v)
需要注意的是這裏公式有所變動:
圖片.png
這樣取值就在[0,2]。
歐式距離scipy.spatial.distance.euclidean(u,v)

Reference:
[1] 相似度計算之餘弦相似度
[2] 相似度計算之歐幾里得距離

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