
基于用戶的協(xié)同過濾推薦算法原理和實現(xiàn)
在推薦系統(tǒng)眾多方法中,基于用戶的協(xié)同過濾推薦算法是最早誕生的,原理也較為簡單。該算法1992年提出并用于郵件過濾系統(tǒng),兩年后1994年被 GroupLens 用于新聞過濾。一直到2000年,該算法都是推薦系統(tǒng)領(lǐng)域最著名的算法。
本文簡單介紹基于用戶的協(xié)同過濾算法思想以及原理,最后基于該算法實現(xiàn)園友的推薦,即根據(jù)你關(guān)注的人,為你推薦博客園中其他你有可能感興趣的人。
基本思想
俗話說“物以類聚、人以群分”,拿看電影這個例子來說,如果你喜歡《蝙蝠俠》、《碟中諜》、《星際穿越》、《源代碼》等電影,另外有個人也都喜歡這些電影,而且他還喜歡《鋼鐵俠》,則很有可能你也喜歡《鋼鐵俠》這部電影。
所以說,當一個用戶 A 需要個性化推薦時,可以先找到和他興趣相似的用戶群體 G,然后把 G 喜歡的、并且 A 沒有聽說過的物品推薦給 A,這就是基于用戶的系統(tǒng)過濾算法。
原理
根據(jù)上述基本原理,我們可以將基于用戶的協(xié)同過濾推薦算法拆分為兩個步驟:
1. 找到與目標用戶興趣相似的用戶集合
2. 找到這個集合中用戶喜歡的、并且目標用戶沒有聽說過的物品推薦給目標用戶
1. 發(fā)現(xiàn)興趣相似的用戶
通常用 Jaccard 公式或者余弦相似度計算兩個用戶之間的相似度。設(shè) N(u) 為用戶 u 喜歡的物品集合,N(v) 為用戶 v 喜歡的物品集合,那么 u 和 v 的相似度是多少呢:
Jaccard 公式:
余弦相似度:
假設(shè)目前共有4個用戶: A、B、C、D;共有5個物品:a、b、c、d、e。用戶與物品的關(guān)系(用戶喜歡物品)如下圖所示:
如何一下子計算所有用戶之間的相似度呢?為計算方便,通常首先需要建立“物品—用戶”的倒排表,如下圖所示:
然后對于每個物品,喜歡他的用戶,兩兩之間相同物品加1。例如喜歡物品 a 的用戶有 A 和 B,那么在矩陣中他們兩兩加1。如下圖所示:
計算用戶兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以余弦相似度為例,對上圖進行進一步計算:
到此,計算用戶相似度就大功告成,可以很直觀的找到與目標用戶興趣較相似的用戶。
2. 推薦物品
首先需要從矩陣中找出與目標用戶 u 最相似的 K 個用戶,用集合 S(u, K) 表示,將 S 中用戶喜歡的物品全部提取出來,并去除 u 已經(jīng)喜歡的物品。對于每個候選物品 i ,用戶 u 對它感興趣的程度用如下公式計算:
其中 rvi 表示用戶 v 對 i 的喜歡程度,在本例中都是為 1,在一些需要用戶給予評分的推薦系統(tǒng)中,則要代入用戶評分。
舉個例子,假設(shè)我們要給 A 推薦物品,選取 K = 3 個相似用戶,相似用戶則是:B、C、D,那么他們喜歡過并且 A 沒有喜歡過的物品有:c、e,那么分別計算 p(A, c) 和 p(A, e):
看樣子用戶 A 對 c 和 e 的喜歡程度可能是一樣的,在真實的推薦系統(tǒng)中,只要按得分排序,取前幾個物品就可以了。
園友推薦
在社交網(wǎng)絡(luò)的推薦中,“物品”其實就是“人”,“喜歡一件物品”變?yōu)椤瓣P(guān)注的人”,這一節(jié)用上面的算法實現(xiàn)給我推薦 10 個園友。
1. 計算 10 名與我興趣最相似的園友
由于只是為我一個人做用戶推薦,所以沒必要建立一個龐大的用戶兩兩之間相似度的矩陣了,與我興趣相似的園友只會在這個群體產(chǎn)生:我關(guān)注的人的粉絲。除我自己之外,目前我一共關(guān)注了23名園友,這23名園友一共有22936個唯一粉絲,我對這22936個用戶逐一計算了相似度,相似度排名前10的用戶及相似度如下:
昵稱 | 關(guān)注數(shù)量 | 共同數(shù)量 | 相似度 |
---|---|---|---|
藍楓葉1938 | 5 | 4 | 0.373001923296126 |
FBI080703 | 3 | 3 | 0.361157559257308 |
魚非魚 | 3 | 3 | 0.361157559257308 |
Lauce | 3 | 3 | 0.361157559257308 |
藍色蝸牛 | 3 | 3 | 0.361157559257308 |
shanyujin | 3 | 3 | 0.361157559257308 |
Mr.Huang | 6 | 4 | 0.340502612303499 |
對世界說你好 | 6 | 4 | 0.340502612303499 |
strucoder | 28 | 8 | 0.31524416249564 |
Mr.Vangogh | 4 | 3 | 0.312771621085612 |
這10名相似用戶一共推薦了25名園友,計算得到興趣度并排序:
排序 | 昵稱 | 興趣度 |
---|---|---|
1 | wolfy | 0.373001923296126 |
2 | Artech | 0.340502612303499 |
3 | Cat Chen | 0.340502612303499 |
4 | WXWinter(冬) | 0.340502612303499 |
5 | DanielWise | 0.340502612303499 |
6 | 一路前行 | 0.31524416249564 |
7 | Liam Wang | 0.31524416249564 |
8 | usharei | 0.31524416249564 |
9 | CoderZh | 0.31524416249564 |
10 | 博客園團隊 | 0.31524416249564 |
11 | 深藍色右手 | 0.31524416249564 |
12 | Kinglee | 0.31524416249564 |
13 | Gnie | 0.31524416249564 |
14 | riccc | 0.31524416249564 |
15 | Braincol | 0.31524416249564 |
16 | 滴答的雨 | 0.31524416249564 |
17 | Dennis Gao | 0.31524416249564 |
18 | 劉冬.NET | 0.31524416249564 |
19 | 李永京 | 0.31524416249564 |
20 | 浪端之渡鳥 | 0.31524416249564 |
21 | 李濤 | 0.31524416249564 |
22 | 阿不 | 0.31524416249564 |
23 | JK_Rush | 0.31524416249564 |
24 | xiaotie | 0.31524416249564 |
25 | Leepy | 0.312771621085612 |
只需要按需要取相似度排名前10名就可以了,不過看起來整個列表的推薦質(zhì)量都還不錯!
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03