基於使用者的協同過濾推薦演算法原理和實現
在推薦系統眾多方法中,基於使用者的協同過濾推薦演算法是最早誕生的,原理也較為簡單。該演算法1992年提出並用於郵件過濾系統,兩年後1994年被 GroupLens 用於新聞過濾。一直到2000年,該演算法都是推薦系統領域最著名的演算法。
本文簡單介紹基於使用者的協同過濾演算法思想以及原理,最後基於該演算法實現園友的推薦,即根據你關注的人,為你推薦部落格園中其他你有可能感興趣的人。
基本思想
俗話說“物以類聚、人以群分”,拿看電影這個例子來說,如果你喜歡《蝙蝠俠》、《碟中諜》、《星際穿越》、《原始碼》等電影,另外有個人也都喜歡這些電影,而且他還喜歡《鋼鐵俠》,則很有可能你也喜歡《鋼鐵俠》這部電影。
所以說,當一個使用者 A 需要個性化推薦時,可以先找到和他興趣相似的使用者群體 G,然後把 G 喜歡的、並且 A 沒有聽說過的物品推薦給 A,這就是基於使用者的系統過濾演算法。
原理
根據上述基本原理,我們可以將基於使用者的協同過濾推薦演算法拆分為兩個步驟:
1. 找到與目標使用者興趣相似的使用者集合
2. 找到這個集合中使用者喜歡的、並且目標使用者沒有聽說過的物品推薦給目標使用者
1. 發現興趣相似的使用者
通常用 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。如下圖所示:
計算使用者兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以餘弦相似度為例,對上圖進行進一步計算:
到此,計算使用者相似度就大功告成,可以很直觀的找到與目標使用者興趣較相似的使用者。
2. 推薦物品
首先需要從矩陣中找出與目標使用者 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):
看樣子使用者 A 對 c 和 e 的喜歡程度可能是一樣的,在真實的推薦系統中,只要按得分排序,取前幾個物品就可以了。
園友推薦
在社交網路的推薦中,“物品”其實就是“人”,“喜歡一件物品”變為“關注的人”,這一節用上面的演算法實現給我推薦 10 個園友。
1. 計算 10 名與我興趣最相似的園友
由於只是為我一個人做使用者推薦,所以沒必要建立一個龐大的使用者兩兩之間相似度的矩陣了,與我興趣相似的園友只會在這個群體產生:我關注的人的粉絲。除我自己之外,目前我一共關注了23名園友,這23名園友一共有22936個唯一粉絲,我對這22936個使用者逐一計算了相似度,相似度排名前10的使用者及相似度如下:
暱稱 | 關注數量 | 共同數量 | 相似度 |
---|---|---|---|
藍楓葉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 |
2. 計算對推薦園友的興趣度
這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名就可以了,不過看起來整個列表的推薦質量都還不錯!
參考
項亮:《推薦系統實踐》
相關推薦
基於使用者的協同過濾推薦演算法原理和實現
在推薦系統眾多方法中,基於使用者的協同過濾推薦演算法是最早誕生的,原理也較為簡單。該演算法1992年提出並用於郵件過濾系統,兩年後1994年被 GroupLens 用於新聞過濾。一直到2000年,該演算法都是推薦系統領域最著名的演算法。 本文簡單介紹基於使用者的協同
基於使用者的協同過濾和基於物品的協同過濾推薦演算法圖解
在協同過濾中,有兩種主流方法:基於使用者的協同過濾,和基於物品的協同過濾。具體怎麼來闡述他們的原理呢,看個圖大家就明白了 基於使用者的 CF 的基本思想相當簡單,基於使用者對物品的偏好找到相鄰鄰居使用者,然後將鄰居使用者喜歡的推薦給當前使用者。計算上,就是將一個使用者對所有物品
推薦演算法概述:基於內容的推薦演算法、協同過濾推薦演算法和基於知識的推薦演算法
所謂推薦演算法就是利用使用者的一些行為,通過一些數學演算法,推測出使用者可能喜歡的東西。推薦演算法主要分為兩種 1. 基於內容的推薦 基於內容的資訊推薦方法的理論依據主要來自於資訊檢索和
基於譜聚類SM演算法的協同過濾推薦演算法研究——清華師兄畢業論文學習
一、個性化推薦演算法 1.相似度的比較 兩個商品或者商品之間相似的的計算方法,量化屬性為非數值型資料的商品或者使用者之間的接近程度。通常我們計算使用者或者專案間相似度的主要方法有餘弦相似度(Cosime Similarity)、Jaccard係數和pearson相關(pearson Corr
使用Python的Pandas庫實現基於使用者的協同過濾推薦演算法
本文在下文的程式碼基礎上修改而來: 環境 版本 Python 3.5.5 Pandas 0.22.0 import pandas as pd df = None def dataSet2Matrix(
基於使用者(user-based)的協同過濾推薦演算法的初步理解以及程式碼實現
總論 協同過濾是目前最經典的推薦演算法。 分而理之,協同,指通過線上資料找到使用者可能喜歡的物品;過濾,濾掉一些不值得推薦的資料。 協同過濾推薦分為三種類型。第一種是基於使用者(user-based)的協同過濾,第二種是基於專案(ite
基於社交網路的使用者與基於物品的協同過濾推薦演算法-java
完整工程+資料來源:https://github.com/scnuxiaotao/recom_sysimport java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.Fil
協同過濾推薦演算法詳解
一、什麼是協同過濾? 協同過濾是利用集體智慧的一個典型方法。要理解什麼是協同過濾 (Collaborative Filtering, 簡稱 CF),首先想一個簡單的問題,如果你現在想看個電影,但你不知道具體看哪部,你會怎麼做?大部分的人會問問周圍的朋友,看看最近有什麼好看的電影推薦,而我們一般更傾向於從
協同過濾推薦演算法的優化(稀疏矩陣的處理)
簡單的協同過濾演算法流程如下 (1)、計算其他使用者和你的相似度,可以使用反差表忽略一部分使用者 (2)、根據相似度的高低找出K個與你最相似的鄰居 (3)、在這些鄰居喜歡的物品中,根據鄰居與你的遠近程度算出每一件物品的推薦度 (4)、根據每一件物品的推薦度高低給你推薦物品。
協同過濾推薦演算法之Slope One的介紹
Slope One 之一 : 簡單高效的協同過濾演算法(轉)( 原文地址:http://blog.sina.com.cn/s/blog_4d9a06000100am1d.html 現在做的一個專案中需要用到推薦演算法, 在網上查了一下. Beyo
推薦系統的常用演算法原理和實現
推薦系統的出現 推薦系統的任務就是解決,當用戶無法準確描述自己的需求時,搜尋引擎的篩選效果不佳的問題。聯絡使用者和資訊,一方面幫助使用者發現對自己有價值的資訊,另一方面讓資訊能夠展現在對他感興趣的人群中,從而實現資訊提供商與使用者的雙贏。 推薦演算法介紹
機器學習演算法(推薦演算法)—協同過濾推薦演算法(2)
一、基於協同過濾的推薦系統 協同過濾(Collaborative Filtering)的推薦系統的原理是通過將使用者和其他使用者的資料進行比對來實現推薦的。比對的具體方法就是通過計算兩個使用者
mahout推薦演算法——協同過濾推薦演算法(java程式碼實現)
什麼是協同過濾 協同過濾是利用集體智慧的一個典型方法。要理解什麼是協同過濾 (Collaborative Filtering, 簡稱 CF),首先想一個簡單的問題,如果你現在想看個電影,但你不知道具體看哪部,你會怎麼做?大部分的人會問問周圍的朋友,看看最近有什麼好看的電影推
協同過濾推薦演算法-----向量之間的相似度
Collaborative Filtering Recommendation 度量向量之間的相似度方法很多了,你可以用距離(各種距離)的倒數,向量夾角,Pearson相關係數等。 皮爾森相關係數計算公式如下: ρX,Y=cov(X,Y)σxσy=E((X−μx)
超級詳細的協同過濾推薦系統+完整Python實現及結果
協同過濾推薦系統在我們的日常生活之中無處不在,例如,在電子商城購物,系統會根據使用者的記錄或者其他的 資訊來推薦相應的產品給客戶,是一種智慧的生活方式。之所以交協同過濾,是因為在實現過濾推薦的時候是根據 其他人的行為來做預測的,基於相似使用者的喜好來實現使用者的喜好預測。
waeshall演算法原理和實現
## 傳遞閉包Warshall方法簡要介紹 >① 在集合X上的二元關係R的傳遞閉包是包含R的X上的最小的傳遞關係。R的傳遞閉包在數字影象處理的影象和視覺基礎、圖的連通性描述等方面都是基本概念。一般用B表示定義在具有n個元素的集合X上關係R的n×n二值矩陣,則傳遞閉包的矩陣B+可如下計算: B+ = B +
基於Spark MLlib平臺和基於模型的協同過濾演算法的電影推薦系統(一) 協同過濾演算法概述&&基於模型的協同過濾的演算法思想(演算法模型和結構待補充)
本文暫時分為三部分: (一)基於Spark MLlib平臺和基於模型的協同過濾演算法的電影推薦系統(一) → 協同過濾演算法概述&&基於模型的協同過濾的演算法思想 (二)基於Spark MLlib平臺和基於模型的協同過濾演算法的電影推薦
Mahout系列之推薦演算法-基於物品協同過濾實踐
上文已經說明了使用者的協同過濾,這篇也來談談基於物品的協同過濾。 2.基於物品的協同過濾 類似的,也很容易做出一個簡單的基於物品的過濾方法。 1. 單機基本演算法實踐 public static void ItemBased() {try {//DataModel mo
Mahout系列之推薦演算法-基於使用者協同過濾
Mahout的一大特色就是包含了推薦演算法,裡面包括了多種常見的演算法,下面我們來分析分析。 針對基於使用者行為資料的推薦演算法一般稱為協同過濾演算法。協同過濾演算法有基於領域(neighborhood-based)的方法,隱語義模型(latent factor model
機器學習算法原理解析——協同過濾推薦
3.6 新用戶 準確率 用戶偏好 tab tag 相同 pty cin 1. CF協同過濾推薦算法原理及應用 1.1 概述 什麽是協同過濾(Collaborative Filtering,簡稱CF)? 首先想一個簡單的問題,如果你現在想看個電影,但你不知道具體看哪部,