itembase協同過濾的詳細介紹


  ◆版權聲明:本文出自胖喵~的博客,轉載必須注明出處。
  轉載請注明出處:https://www.cnblogs.com/by-dream/p/9016289.html

 

前言


通常我們在網購的時候會遇到這樣的情況,當我們買了一個物品A后,網站上可能會給你推薦一些和A相似的物品。這樣的推薦就是典型的協同過濾算法,今天就來給大家說說協同過濾算法。

 

 

算法概念


協調過濾算法一般有兩種,一種是基於物品的,一種是基於用戶的,基於物品的是itembase,基於用戶的是userbase,簡單來說,基於物品的是當用戶購買了物品A,如果發現A和C的相似度比較高,就給用戶推薦物品C,基於用戶的推薦是如果用戶1和用戶2相似度高,用戶2買了物品A而用戶1沒有買,那么就給用戶1推薦物品A。是不是很好理解。今天我主要說說itembase。

 

 

簡單的推薦


剛才講到itembase是根據物品的相似度來進行推薦,那么怎么計算物品的相似度呢?我們看一個簡單的例子。

下面是一個用戶的觀看電影的行為的數據:

上面的表格反應的是:

用戶1看了電影 A、B;
用戶2看了電影 A、C;
用戶3看了電影  A、B、C;

后面的打分我們可以先忽略,因為得分都是一樣的。
那么對於電影來說,被人看過的統計就是
電影A:1、2、3
電影B:1、3
電影C:2、3

這里我們利用jaccard公式(下方)來計算電影A和B的距離:

那么A和B的 jaccard = (A交B)/(A並B) = [1,3] / [1,2,3] = 2/3

后面依次類我們可以算出A、B、C分別和另外兩個jaccard系數。

這個時候,當一個用戶看了電影B ,而我們要決定給他推薦電影A或者C的時候,我們就能很明顯的看出來B和A之間的jaccard系數更大,固推薦電影A。

 

 

帶用戶打分權重的推薦


上面的流程中,不知道大家有沒有注意到,我們忽略了一步,那就是用戶對這個電影的打分,我們並沒有用上。而現實生活中很有可能會出現這樣的問題:我看了一個電影A和電影F,我對電影A打分特別低,但是電影A和電影B的相似度非常高,而我看電影F之后,我對電影F的打分相當的高,但是電影F和電影E之間的相似度是一般高(低於電影A和B的相似度),而如果我們還是用上面的算法的話,那么推薦給我的就是電影B了,而事實上我可能更想看的是電影E。那么如何解決這個問題呢,我們繼續看。

這里我得用一個復雜的例子來講解一下,假如我們有如下數據源:

首先第一步,我們需要構造一個item的同現矩陣

這里講一下同現矩陣的構造方法:

[A, A] 這個地方的值代表的是 A這部電影一共出現了多少次,我們數數可以看到一共是5次,固這里值為5;

[A, B] 和 [B, A] 的值是相同的,代表的是,A和B同時被一個人觀看的次數,我們可以看到用戶1、2、5同時看過A和B電影,固這個值就是3;

[C, G] 類型這樣的就是說,沒有人同時看過C和G這兩部電影。

構造完同現矩陣后,這時候,我們可以得到每一個人的打分,再構造一個評分矩陣,這里為了演示過程,我以用戶4為例。

首先構造評分矩陣,這里需要注意,沒有看過的電影直接記為0即可,即矩陣為:[5, 0, 3, 4.5, 0, 4, 0]

這里我們將 同現矩陣 * 評分矩陣 得到最終的得分矩陣 :

我們看下我標黑的這一列,最終的數值是 3*5+3*0+3*3+2*5+1*0+1*4+0*0 = 38,這一行代表的是B這個電影推薦給用戶4的得分是38,由於我們知道用戶4沒有看過B、E、G,而B的得分是最高的,因此最后我們給B推薦的時候,就會優先推薦B電影。

由於同現矩陣中的數據代表是電影之間的相互權重,固在最終相乘的時候,權重高並且得分高的最終就能得到高分,這也符合推薦相似的且是用戶愛看的電影。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM