薦系統無處不在
比如:
購買成功后:購買了該商品的其他用戶購買了以下商品
搜索成功后:您可能感興趣的以下商品
主頁或廣告:您可能感興趣的以下商品
如下圖,用戶A購買物品AC;用戶B購買物品ABC;當用戶C購買物品A后,根據數據分析發現,購買物品A的用戶大多數購買了物品C,所以提醒用戶C”購買了該商品的其他用戶購買了以下商品:物品C”。 下面我們就模擬實現這個功能
這里有一堆數據,記錄的是用戶購物記錄;要求用戶推薦和他之前喜歡的物品相似的物品。
item_id,user_id,action,vtime i161,u2625,click,2014/9/18 15:03 i161,u2626,click,2014/9/23 22:40 i161,u2627,click,2014/9/25 19:09 i161,u2628,click,2014/9/28 21:35 i161,u2629,click,2014/9/27 16:33 i161,u2630,click,2014/9/5 18:45 i161,u2631,click,2014/9/29 16:57 i161,u2632,click,2014/9/24 21:58 i161,u2633,click,2014/9/25 22:41 i161,u2634,click,2014/9/16 13:30 i161,u2635,click,2014/9/20 9:23 i161,u2636,click,2014/9/21 1:00 i161,u2637,click,2014/9/24 22:51 i161,u2638,click,2014/9/27 22:40
解決思路:
將數據拆分 用戶對物品的喜愛度得分矩陣 與 物品的同現矩陣 如下圖,矩陣相乘得到的就是推薦商品
101…107指商品分數 U3指用戶評分
R指矩陣乘積,如 40=2*(5+3+4+4+2+2+1)
R最高的代表推薦商品
需要五次mapReduce處理數據
第一次mapReduce做的事情?去重復數據;
第二次mapReduce做的事情?
按用戶分組,計算所有物品出現的組合列表,得到用戶對物品的喜愛度得分矩陣
u13 i160:1,
u14 i25:1,i223:1,
u16 i252:1,
u21 i266:1,
u24 i64:1,i218:1,i185:1,
u26 i276:1,i201:1,i348:1,i321:1,i136:1,
第三次mapReduce做的事情?
對物品組合列表進行計數,建立物品的同現矩陣
i100:i100 3
i100:i105 1
i100:i106 1
i100:i109 1
i100:i114 1
i100:i124 1
第四次mapReduce做的事情?
把同現矩陣和得分矩陣相乘
u13 i100,3
u13 i100,2
u13 i105,1
u14 i100,3
u14 i105,1
第五次mapReduce做的事情?
把相乘之后的矩陣相加獲得結果矩陣
u13 i100,5
u13 i105,1
u14 i100,3
u14 i105,1
代碼實現如下:
網址: https://github.com/hzcjd8/hadoop