1

我正在處理基於項目的CF上,該CF使用調整後的餘弦相似度。我最近添加了一個規則的餘弦相似度,並得到完全不同的結果。現在我的問題是哪個更適合考慮我的數據?調整後的餘弦相似度與常規餘弦相似度之間的選擇

這是用戶,項目一個可能的方案和評級

  User 1 | User 2 | User 3 | User 4 | User 5 
Item 1 | 5 | 1 | 1 | 5 | 5 
Item 2 | 5 | 1 | 2 | 4 | 5 
Item 3 | 1 | 5 | 4 | 2 | 3 

考慮這個數據,你會得出結論:項目1和項目2相對「類似」。這裏有不同的相似係數的結果:

項目1和項目之間的相似度2
Adjusted cosine similarity = 0.865
Regular cosine similarity = 0.987
我四捨五入他們關閉了這個例子

你可以看到這是基本相同,但是當您嘗試計算項目2和項目3(它們完全不相似)之間的相似性時,會導致完全不同的結果:

項目2 a第二項3
Adjusted cosine similarity = -0.955
Regular cosine similarity = 0.656
我四捨五入他們關閉了這個例子

其中哪些是 '好'?我認爲使用調整後的餘弦相似度效果更好,因爲它將用戶的平均評分考慮在內,但爲什麼正則餘弦相似度會導致這些「不同」項目的正數?我是否應該避免在一般情況下使用正則餘弦相似度,或者僅限於某些情況下使用?

任何幫助,將不勝感激!

回答

1

爲什麼正規的餘弦相似性會導致這些「不同」項目的正數?

正如您在本例中已經提到,Adjusted Cosine Similarity反映比Regular Cosine Similarity在某些情況下更好的差異。

Regular Cosine Similarity由定義反映的方向差異,但不是位置。

enter image description here

dist(A,B)是A和B之間的Euclidean Distance很明顯,如果任何載體在其自身的方向上延伸的餘弦相似性將保持不變。

讓我們假設用戶給0到5兩個電影的分數。

from scipy import spatial 
import numpy as np 
a = np.array([2.0,1.0]) 
b = np.array([5.0,3.0]) 
1 - spatial.distance.cosine(a,b) 
#---------------------- 
# 0.99705448550158149 
#---------------------- 
c = np.array([5.0,4.0]) 
1 - spatial.distance.cosine(c,b) 
#---------------------- 
# 0.99099243041032326 
#---------------------- 

enter image description here

我們不僅要會說用戶bc有類似的口味,並a是他們很大的不同。但規則的餘弦相似性告訴我們一個錯誤的故事。

讓我們計算Adjusted Cosine Similarity,第一負的x均值和y

mean_ab = sum(sum(a,b))/4 
# mean_ab : 3.5 
# adjusted vectors : [-1.5, -2.5] , [1.5, -0.5] 
1 - spatial.distance.cosine(a - mean_ab, b - mean_ab) 
#---------------------- 
# -0.21693045781865616 
#---------------------- 
mean_cb = sum(sum(c,b))/4 
# mean_cb : 6.5 
# adjusted vectors : [-1.5, -3.5] , [-1.5, -2.5] 
1 - spatial.distance.cosine(c - mean_cb, b - mean_cb) 
#---------------------- 
# 0.99083016804429891 
#---------------------- 

很清晰的看到調整是有意義的。

我是否應該避免在一般情況下使用正則餘弦相似度,或者僅限於某些場景?

當您發現有問題時,請使用合適的問題。

我仍然認爲規則餘弦相似性在我們想要向量的尺度上較不敏感的場景中很有用。例如,如果分數[2,1]被認爲與[4,2]或[8,4]非常相似,那麼常規就會做得很好。