itembase協同過濾的詳細介紹

  ◆版權聲明:本文出自胖喵~的博客,轉載必須註明出處。
  轉載請註明出處:http://www.javashuo.com/article/p-hhsemsyg-gm.htmlhtml

 

前言


一般咱們在網購的時候會遇到這樣的狀況,當咱們買了一個物品A後,網站上可能會給你推薦一些和A類似的物品。這樣的推薦就是典型的協同過濾算法,今天就來給你們說說協同過濾算法。算法

 

 

算法概念網站


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

 

 

簡單的推薦3d


剛纔講到itembase是根據物品的類似度來進行推薦,那麼怎麼計算物品的類似度呢?咱們看一個簡單的例子。htm

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

上面的表格反應的是:get

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

後面的打分咱們能夠先忽略,由於得分都是同樣的。
那麼對於電影來講,被人看過的統計就是
電影A:一、二、3
電影B:一、3
電影C:二、3it

這裏咱們利用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同時被一我的觀看的次數,咱們能夠看到用戶一、二、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電影。

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

相關文章
相關標籤/搜索