推薦算法之基于用戶的協同過濾算法
協同過濾是推薦算法中最基本的算法,主要分為基于用戶的協同過濾算法和基于物品的協同過濾算法。
這篇文章主要介紹基于用戶的協同過濾算法,簡單來說,要給用戶u作推薦,那么只要找出那些和u之前的行為類似的用戶,即和u比較像的用戶,把他們的行為推薦給用戶u即可。所以基于用戶的系統過濾算法包括兩個步驟:1)找到和目標用戶興趣相似的用戶集合 2)找到這個集合中的用戶喜歡的,且目標用戶沒有聽說過的物品推薦給目標用戶。
第一步的關鍵點在于計算用戶之間的相似度,相似度一般通過Jaccard公式或者余弦相似度即可求得,及計算共有行為所占的比重(具體式子google就行,csdn插入公式不方便。。。),所以目前而言,計算用戶相似度的復雜度是O(N*N), N為用戶數量,在用戶數比較大的網站中不實用,比如亞馬遜用戶數量肯定N>100000,那么這樣的復雜度是不可接受的。
第一步時間復雜度的改進方法:因為很多用戶間其實相似度是為0的,如果看成是一個N*N的矩陣的話,肯定是個稀疏矩陣,那么我們其實沒有必要浪費計算量在這些0上。我們可以建立物品到用戶的倒查表,及可以根據物品找到所有對該物品有過行為的用戶,然后遍歷各物品,對一個物品然后找到對該物品有過行為的用戶,然后計算這些用戶間的行為相似度(共有行為+1,同時計算這些用戶的行為數),最后計算兩用戶間的公有行為占各自行為的比重。
第一步計算相似度的改進方法:舉個例子:如果兩人都買過《新華辭典》,并不能說明這兩人想像,因為這本書基本上人人都會買,而如果這兩人都買過《機器學習》,那么我們可以肯定,這兩人在這方面有相同的興趣愛好,也就是說,越是對冷門物品有同樣的行為,就越說明用戶的相似性,即在計算用戶相似性的時候,需要降低熱門物品的影響(通過計算流行度來實現,然后用1/N(i)來計算公共行為比重,N(i)表示流行度,這樣,流行度高的物品所占比重就比較低)
第二步則比較簡單,選出K個和用戶u最相似的用戶,把他們喜歡過的物品并且用戶u沒有喜歡過的物品推薦給u即可。這里面K的選擇非常重要。K越大,推薦的結果就越熱門,流行度就越高,同時覆蓋率越低,因為基本推薦的都是流行的物品
本文作者 wangyuquanliuli
- 目前還沒評論,等你發揮!