UserCF,基于用户的协同过滤算法
轉載自? ?UserCF,基于用戶的協同過濾算法
UserCF:User? Collaboration? ?Filter,基于用戶的協同過濾
算法核心思想:在一個在線推薦系統中,當用戶A需要個性化推薦時,可以先找到和他有相似興趣的其它用戶,然后把那些用戶喜歡的、而用戶A沒有聽說過的物品推薦給A,這種方法稱為基于用戶的協同過濾算法。
==>可以看出,這個算法主要包括兩步:
一、找到和目標用戶興趣相似的用戶集合——計算兩個用戶的興趣相似度
二、找到這個集合中的用戶喜歡的,且目標用戶沒有聽說過的物品推薦給目標用戶——找出物品推薦
下面分別來看如何實現這兩步:
一、計算兩個用戶的興趣相似度:
給定用戶u和用戶v,令N(u)表示用戶u感興趣的物品集合,N(v)表示用戶v感興趣的物品集合,那么可以通過Jaccard公式或者通過余弦相似度公式計算:
...Jaccard公式
...余弦相似度公式
舉例:下圖表示用戶A對物品{a,b,d}有過行為,用戶B對物品{a,c}有過行為
利用余弦相似度計算可得:
用戶A和用戶B的興趣相似度為:
同理,
但是,需要注意的是,這種方法的時間復雜度是O(U^2),因為我們需要計算每一對用戶之間的相似度,事實上,很多用戶相互之間并沒有對同樣的物品產生過行為,所以很多時候當分子為0的時候沒有必要再去計算分母,所以這里可以優化:即首先計算出|N(u) 并 N(v)| != 0 的用戶對(u,v),然后對這種情況計算分母以得到兩個用戶的相似度。
針對此優化,需要2步:
(1)建立物品到用戶的倒查表T,表示該物品被哪些用戶產生過行為;
(2)根據倒查表T,建立用戶相似度矩陣W:在T中,對于每一個物品i,設其對應的用戶為j,k,在W中,更新相應的元素值,w[j][k]=w[j][k]+1,w[k][j]=w[k][j]+1,以此類推,掃描完倒查表T中的所有物品后,就可以得到最終的用戶相似度矩陣W,這里的W是余弦相似度中的分子部分,然后將W除以分母可以得到最終的用戶興趣相似度。
得到用戶相似度后,就可以進行第二步了。
二、給用戶推薦和他興趣最相似的K個用戶喜歡的物品。
公式如下:
其中,p(u,i)表示用戶u對物品i的感興趣程度,S(u,k)表示和用戶u興趣最接近的K個用戶,N(i)表示對物品i有過行為的用戶集合,Wuv表示用戶u和用戶v的興趣相似度,Rvi表示用戶v對物品i的興趣(這里簡化,所有的Rvi都等于1)。
根據UserCF算法,可以算出,用戶A對物品c、e的興趣是:
以上就是UserCF最簡單的實現方法。
我們還可以在此基礎上進行改進,改進思想是:兩個用戶對冷門物品采取過同樣的行為更能說明他們興趣的相似度。
比如,兩個用戶都買過《新華詞典》并不能說明兩個人的興趣相似,而如果兩個人都買過《數據挖掘導論》則可以認為他們的興趣相似。
==>公式如下:
可以看到,如果一個物品被大多數人有過行為,則這樣的信息參考價值不大,權重變小。
以上內容參考自《推薦系統實踐》
總結
以上是生活随笔為你收集整理的UserCF,基于用户的协同过滤算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度发布国内首个AI互动式搜索!搜索体验
- 下一篇: ItemCF,基于物品的协同过滤算法