在推薦系統中,相似度的計算是一個很重要的課題。而相似度的計算方法多種多樣,今天我們來把這些方法比較一下,也為以後做專案留個筆記。其實無論是基於user的cf還是基於item的cf,亦或是基於svd的推薦,相似度計算都是必不可少的一步,只不過cf中計算相似度是一箇中間步驟,而svd中的計算是放在最後面的(例如計算最後的餘弦夾角)。這篇文章我們以item-cf來舉例說明。

共現次數

評價:這是最粗略的一種計算相似度的方法,只需計算待推薦物品與使用者之前所選物品之間的共現次數,這個共現次數是從所有使用者的角度看的。

適用資料:適合使用者有explicit feedback,即使用者對物品有評分情況的資料或者是沒有explicit feedback的user-item的(1,0)矩陣。

餘弦相似度

評價:這是使用最多一種相似度計算方法。如下所示:

N(i)∩N(j)為物品i和j同是出現的情況。當然,這個計算方法頁遊很多變種,例如當我們考慮到使用者活躍度問題的時候,我們會加一個修正項在裡面,這樣我們就突出了非活躍使用者對於物品相似度的影響。

適用資料:多使用在implicit feedback中,不知道使用者對物品的具體評分,只有user-item的(1,0)矩陣。

pearson相關係數

評價:也是比較常用的一種方法,跟餘弦相似度的使用頻度不相上下。皮爾遜相關係數一般用於計算兩個定距變數間聯絡的緊密程度,它的取值在 [-1,+1] 之間。

相關係數

適用資料:多使用在有explicit feedback中,有具體評分的時候。

以上也是我在工程中常使用的方法。像歐幾里得距離、Jaccard 係數等也有很多文獻中提到,被運用於相似度計算中。從演算法的角度來說,沒有什麼最優的相似度計算方法,這還是要根據自己的資料情況來做出選擇。其實根據經驗來看,不同的相似度計算方法對最後結果的影響其實是很小的,所以在選擇的時候可以優先考慮其計算時間,不必太糾結於準確度這些。另外,這裡我沒有提到資料稀疏的問題,其實在推薦中,資料稀疏是一個幾乎必須要面對的問題,而解決這個問題不應該留到相似度計算這一步,所以這裡我將其忽略掉了。