說在前面
本文是作者的一篇學習筆記,簡單介紹了下基于用戶的協同過濾推薦算法,后續應該還會有實踐的內容。希望能有這方面的大神或同道能一起交流、學習。
基本思想
基于用戶的協同過濾算法是通過用戶的歷史行為數據發現用戶對商品或內容的喜歡(如商品購買,收藏,內容評論或分享),并對這些喜好進行度量和打分。根據不同用戶對相同商品或內容的態度和偏好程度計算用戶之間的關系。在有相同喜好的用戶間進行商品推薦。簡單的說就是如果A,B兩個用戶都購買了x、y、z三本圖書,并且給出了5星的好評。那么A和B就屬于同一類用戶。可以將A看過的圖書w也推薦給用戶B。
所以,協同過濾算法主要分為兩個步驟:
1、尋找相似的用戶集合;
2、尋找集合中用戶喜歡的且目標用戶沒有的進行推薦。
具體實現
一、尋找用戶間的相似度
1、Jaccard公式
Jaccard系數主要用于計算符號度量或布爾值度量的個體間的相似度,因為個體的特征屬性都是由符號度量或者布爾值標識,因此無法衡量差異具體值的大小,只能獲得“是否相同”這個結果,所以Jaccard系數只關心個體間共同具有的特征是否一致這個問題。如果比較X與Y的Jaccard相似系數,只比較xn和yn中相同的個數。
2、皮爾遜相關系數
皮爾遜相關系統是比歐幾里德距離更加復雜的可以判斷人們興趣相似度的一種方法。它在數據不是很規范時,會傾向于給出更好的結果。
假定有兩個變量X、Y,那么兩變量間的皮爾遜相關系數可通過以下公式計算:
- 公式一:
- 公式二:
- 公式三:
- 公式四:
上述四個公式等價,其中E是數學期望,cov表示協方差,N表示變量取值的個數。
3、歐幾里德距離
假定兩個用戶X、Y,均為n維向量,表示用戶對n個商品的評分,那么X與Y的歐幾里德距離就是:
數值越小則代表相似度越高,但是對于不同的n,計算出來的距離不便于控制,所以需要進行如下轉換:
使得結果分布在(0,1]上,數值越大,相似度越高。
4、余弦距離
余弦距離,也稱為余弦相似度,是用向量空間中兩個向量余弦值作為衡量兩個個體間差異大小的度量值。
與前面的歐幾里德距離相似,用戶X、Y為兩個n維向量,套用余弦公式,其余弦距離表示為:
即兩個向量夾角的余弦值。但是相比歐式距離,余弦距離更加注意兩個向量在方向上的相對差異,而不是在空間上的絕對距離,具體可以借助下圖來感受兩者間的區別:
二、推薦物品
在選取上述方法中的一種得到各個用戶之間相似度后,針對目標用戶u,我們選出最相似的k個用戶,用集合S(u,k)表示,將S中所有用戶喜歡的物品提取出來并去除目標用戶u已經喜歡的物品。然后對余下的物品進行評分與相似度加權,得到的結果進行排序。最后由排序結果對目標用戶u進行推薦。其中,對于每個可能推薦的物品i,用戶u對其的感興趣的程度可以用如下公式計算:
rvi表示用戶v對i的喜歡程度,即對i的評分,wuv表示用戶u和v之間的相似度。
總結
以上只是簡單的介紹了基于用戶協同過濾算法的思想與原理,當然這是建立在擁有一定用戶數據積累的基礎上的,這里不考慮冷啟動的問題。