基於使用者的協同過濾推薦演算法原理和實現

2022-04-15 11:59:02 字數 3411 閱讀 9291

在推薦系統眾多方法中,基於使用者的協同過濾推薦演算法是最早誕生的,原理也較為簡單。該演算法2023年提出並用於郵件過濾系統,兩年後2023年被 grouplens 用於新聞過濾。一直到2023年,該演算法都是推薦系統領域最著名的演算法。

本文簡單介紹基於使用者的協同過濾演算法思想以及原理,最後基於該演算法實現園友的推薦,即根據你關注的人,為你推薦中其他你有可能感興趣的人。

俗話說「物以類聚、人以群分」,拿看電影這個例子來說,如果你喜歡《蝙蝠俠》、《碟中諜》、《星際穿越》、《源**》等電影,另外有個人也都喜歡這些電影,而且他還喜歡《鋼鐵俠》,則很有可能你也喜歡《鋼鐵俠》這部電影。

所以說,當乙個使用者 a 需要個性化推薦時,可以先找到和他興趣相似的使用者群體 g,然後把 g 喜歡的、並且 a 沒有聽說過的物品推薦給 a,這就是基於使用者的系統過濾演算法。

根據上述基本原理,我們可以將基於使用者的協同過濾推薦演算法拆分為兩個步驟:

1. 找到與目標使用者興趣相似的使用者集合

2. 找到這個集合中使用者喜歡的、並且目標使用者沒有聽說過的物品推薦給目標使用者

通常用 jaccard 公式或者余弦相似度計算兩個使用者之間的相似度。設 n(u) 為使用者 u 喜歡的物品集合,n(v) 為使用者 v 喜歡的物品集合,那麼 u 和 v 的相似度是多少呢:

jaccard 公式:

余弦相似度:

假設目前共有4個使用者: a、b、c、d;共有5個物品:a、b、c、d、e。使用者與物品的關係(使用者喜歡物品)如下圖所示:

如何一下子計算所有使用者之間的相似度呢?為計算方便,通常首先需要建立「物品—使用者」的倒排表,如下圖所示:

然後對於每個物品,喜歡他的使用者,兩兩之間相同物品加1。例如喜歡物品 a 的使用者有 a 和 b,那麼在矩陣中他們兩兩加1。如下圖所示:

計算使用者兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以余弦相似度為例,對上圖進行進一步計算:

到此,計算使用者相似度就大功告成,可以很直觀的找到與目標使用者興趣較相似的使用者。

首先需要從矩陣中找出與目標使用者 u 最相似的 k 個使用者,用集合 s(u, k) 表示,將 s 中使用者喜歡的物品全部提取出來,並去除 u 已經喜歡的物品。對於每個候選物品 i ,使用者 u 對它感興趣的程度用如下公式計算:

其中 rvi 表示使用者 v 對 i 的喜歡程度,在本例中都是為 1,在一些需要使用者給予評分的推薦系統中,則要代入使用者評分。

舉個例子,假設我們要給 a 推薦物品,選取 k = 3 個相似使用者,相似使用者則是:b、c、d,那麼他們喜歡過並且 a 沒有喜歡過的物品有:c、e,那麼分別計算 p(a, c) 和 p(a, e):

在社交網路的推薦中,「物品」其實就是「人」,「喜歡一件物品」變為「關注的人」,這一節用上面的演算法實現給我推薦 10 個園友。

由於只是為我乙個人做使用者推薦,所以沒必要建立乙個龐大的使用者兩兩之間相似度的矩陣了,與我興趣相似的園友只會在這個群體產生:我關注的人的粉絲。除我自己之外,目前我一共關注了23名園友,這23名園友一共有22936個唯一粉絲,我對這22936個使用者逐一計算了相似度,相似度排名前10的使用者及相似度如下:

暱稱關注數量

共同數量

相似度 藍楓葉193854

0.373001923296126

fbi08070333

0.361157559257308

魚非魚33

0.361157559257308

lauce33

0.361157559257308

藍色蝸牛33

0.361157559257308

shanyujin33

0.361157559257308

mr.huang64

0.340502612303499

對世界說你好64

0.340502612303499

strucoder288

0.31524416249564

mr.vangogh43

0.312771621085612

這10名相似使用者一共推薦了25名園友,計算得到興趣度並排序:

排序暱稱

興趣度 1

wolfy

0.373001923296126

2artech

0.340502612303499

3cat chen

0.340502612303499

4wxwinter(冬)

0.340502612303499

5danielwise

0.340502612303499

6一路前行

0.31524416249564

7liam wang

0.31524416249564

8usharei

0.31524416249564

9coderzh

0.31524416249564

10團隊

0.31524416249564

11深藍色右手

0.31524416249564

12kinglee

0.31524416249564

13gnie

0.31524416249564

14riccc

0.31524416249564

15braincol

0.31524416249564

16滴答的雨

0.31524416249564

17dennis gao

0.31524416249564

18劉冬.net

0.31524416249564

19李永京

0.31524416249564

20浪端之渡鳥

0.31524416249564

21李濤

0.31524416249564

22阿不

0.31524416249564

23jk_rush

0.31524416249564

24xiaotie

0.31524416249564

25leepy

0.312771621085612

只需要按需要取相似度排名前10名就可以了,不過看起來整個列表的推薦質量都還不錯!

協同過濾推薦演算法 推薦演算法 基於協同過濾CF

前邊我們已經介紹了推薦演算法裡的基於內容的推薦演算法cb,今天我們來介紹一下基於協同的推薦演算法collaboration filtering cf 協同過濾是乙個利用群體智慧型的乙個演算法,舉乙個簡單的例子,如果放假了你想去北京玩幾天,但是不知道北京都有哪些好玩的,你會怎麼做?你可能會上網查一下的...

推薦演算法之基於使用者的協同過濾

基於使用者的的協同過濾演算法是推薦統統最古老的演算法,簡稱usercf。該演算法的誕生一定程度上標誌著推薦系統的誕生。本文將對usercf演算法原理進行講解,並且基於movielens資料集給出實現 供大家交流學習。找到和目標使用者興趣相似的使用者集合 找到這個集合中使用者喜歡的且目標使用者沒有聽說...

基於協同過濾演算法的推薦

基於協同過濾演算法的推薦 本實驗選用資料為真實電商脫敏資料,僅用於學習,請勿商用 資料探勘的乙個經典案例就是尿布與啤酒的例子。尿布與啤酒看似毫不相關的兩種產品,但是當超市將兩種產品放到相鄰貨架銷售的時候,會大大提高兩者銷量。很多時候看似不相關的兩種產品,卻會存在這某種神秘的隱含關係,獲取這種關係將會...