1. 程式人生 > >MapReduce計算ItemCF-2

MapReduce計算ItemCF-2

推薦系統的基本架構:

實時推薦和離線推薦

注:以下所有資料之間都是以 \t 隔開的,部落格裡顯示效果不好

資料集:

1 101 5 1 102 3 1 103 3 2 101 2 2 102 3 2 103 5 2 104 2 3 101 2 3 104 4 3 105 5 3 107 5 4 101 5 4 103 3 4 104 4 4 106 4 5 101 4 5 102 3 5 103 2 5 104 4 5 105 3 5 106 4 6 102 4 6 103 2 6 105 3 6 107 4

思路:

1.第一個mapreduce:構建使用者評分矩陣

輸出結果:

1 103:3 101:5 102:3  2 101:2 102:3 103:5 104:2  3 107:5 101:2 104:4 105:5  4 103:3 106:4 104:4 101:5  5 101:4 102:3 103:2 104:4 105:3 106:4  6 102:4 103:2 105:3 107:4 

2.第二個mapreduce:構建同現矩陣

輸出結果:

101:101 5 101:102 3 101:103 4 101:104 4 101:105 2 101:106 2 101:107 1 102:101 3 102:102 4 102:103 4 102:104 2 102:105 2 102:106 1 102:107 1 103:101 4 103:102 4 103:103 5 103:104 3 103:105 2 103:106 2 103:107 1 104:101 4 104:102 2 104:103 3 104:104 4 104:105 2 104:106 2 104:107 1 105:101 2 105:102 2 105:103 2 105:104 2 105:105 3 105:106 1 105:107 2 106:101 2 106:102 1 106:103 2 106:104 2 106:105 1 106:106 2 107:101 1 107:102 1 107:103 1 107:104 1 107:105 2 107:107 2

3.第三個mapreduce:推薦結果=同現矩陣*評分矩陣

使用者u對物品j的喜愛程度=u對物品i的評分*j、i的相似度,累加求和。

如使用者1對物品103的喜愛程度:

R=4*5+4*3+5*3+3*0+2*0+2*0+1*0=47

輸出結果:

6 10130 1 101 46 已購買 5 101 67 已購買 3 101 41 已購買 2 101 47 已購買 4 101 61 已購買 6 102 34 已購買 1 102 39 已購買 5 102 50 已購買 3 102 29 2 102 42 已購買 4 102 39 6 103 36 已購買 1 103 47 已購買 5 103 64 已購買 3 103 35 2 103 51 已購買 4 103 55 已購買 6 104 24 1 104 35 5 104 58 已購買 3 104 39 已購買 2 104 37 已購買 4 104 53 已購買 6 105 29 已購買 1 105 22 5 105 39 已購買 3 105 37 已購買 2 105 24 4 105 28 6 106 11 1 106 19 5 106 34 已購買 3 106 17 2 106 21 4 106 32 已購買 6 107 20 已購買 1 107 11 5 107 19 3 107 26 已購買 2 107 12 4 107 12

4.將推薦結果排序

通過自定義輸入型別,按照使用者id升序,分數降序排列

輸出結果:

1 103 47 已購買 1 101 46 已購買 1 102 39 已購買 1 104 35 1 105 22 1 106 19 1 107 11 2 103 51 已購買 2 101 47 已購買 2 102 42 已購買 2 104 37 已購買 2 105 24 2 106 21 2 107 12 3 101 41 已購買 3 104 39 已購買 3 105 37 已購買 3 103 35 3 102 29 3 107 26 已購買 3 106 17 4 101 61 已購買 4 103 55 已購買 4 104 53 已購買 4 102 39 4 106 32 已購買 4 105 28 4 107 12 5 101 67 已購買 5 103 64 已購買 5 104 58 已購買 5 102 50 已購買 5 105 39 已購買 5 106 34 已購買 5 107 19 6 103 36 已購買 6 102 34 已購買 6 101 30 6 105 29 已購買 6 104 24 6 107 20 已購買 6 106 11

推薦結果:

1 50 140234 已購買 1 181 128318 已購買 1 174 125385 已購買 1 100 122214 已購買 1 56 115947 已購買 1 98 115241 已購買 1 172 113888 已購買 1 204 112054 已購買 1 1 111923 已購買 1 121 111208 已購買 1 79 105862 已購買 1 210 105778 已購買 1 69 104589 已購買 1 7 102883 已購買 1 168 102712 已購買 1 127 102084 已購買 1 173 101127 已購買 1 195 100192 已購買 1 423 98904 1 96 97488 已購買 1 117 97396 已購買 1 222 96448 已購買 1 258 96068 已購買 1 216 95675 已購買 1 183 94841 已購買 1 22 94821 已購買 1 176 94718 已購買 1 405 94107 1 202 93679 已購買 1 89 93550 已購買 1 234 92128 已購買 1 237 91652 已購買 1 64 90863 已購買 1 28 90754 已購買 1 82 90236 已購買 1 191 89935 已購買 1 151 89691 已購買 1 294 88793 1 318 88684 1 238 87646 已購買 1 186 87575 已購買 1 196 87403已購買 1 12 87106 已購買 1 288 86960 1 97 86856 已購買 1 135 86485 已購買 1 228 85377 已購買 1 144 84186 已購買 1 153 84004 已購買 1 70 83390 已購買 1 132 82411 已購買 1 357 82045 1 568 81287 1 286 81110 1 11 80633 已購買 1 25 80246 已購買 1 161 79930 已購買 1 655 79140  1 265 78983 已購買 1 4 77723 已購買 1 182 77580 已購買 1 143 77255 已購買 1 118 77070 已購買 1 95 76855 已購買 1 385 76753 。。。。。。(省略,太多了)

測試這個資料共用時342363 毫秒,程式大約跑了6分鐘。。

對比上一篇的資料,對比使用者1,推薦10條

mapreduce計算結果:

1 423 98904 1 405 94107 1 294 88793 1 318 88684 1 288 86960 1 357 82045 1 568 81287 1 286 81110 1 655 79140 1 385 76753

上一篇計算結果:

取前k個:

取所有:

相似度大約在60%~70%,上篇的程式精確到了小數位,而這裡全是整數,所以可能有差別。

不過mapreduce計算更為準確!