基于hadoop的推薦算法-mahout版 - - ITeye技術網站 http://blackproof.iteye.com/blog/2110877
求項目相似矩陣是基于項目的協同過濾算法的核心
公式有很多種,核心是物品i和物品j相關用戶的交集與并集的商
基于hadoop的推薦算法,講其中mahout實現的基于項目的推薦算法
分為4步:
1.獲得人-物 用戶矩陣
輸入為所有人對物品的評價或關聯
map端輸出key為人,value為物品+傾好度
reeduce端輸出key為人,vallue為多個物品+傾好度
2.獲得物-物 項目矩陣
輸入為“用戶矩陣”,講每一行人-物數據中的物品做笛卡爾積,生產成物-物的關聯
map端輸出為key為物,value為關聯度
reduce端輸出key為物,value為多個物的關聯度
(可以根據各種規則生成項目相似度矩陣表,此處算法帶過)
修改:
求項目相似矩陣是基于項目的協同過濾算法的核心
公式有很多種,核心是物品i和物品j相關用戶的交集與并集的商
mahout使用的公式是1.dot(i,j) = sum(Pi(u)Pi(u))
2.norms(i) = sum(Pi(u)^2)
3.simi(i,j) = 1/(1+(norms(i)-2dot(i,j)+noorm(i))^1/2)
mahout的實現方法是
第一個job,用物品-人的矩陣,求得norms,即物品的用戶平方和,輸出是物-norms
第二個job,Map:用人-物的矩陣,求Pi(u)Pi(u),即相同用戶的物品的評價的乘機,輸出物-多個對端物品的Pi(u)Pi(u)
Reduce:用物-多個對端物品的Pi(u)*Pi(u)和物-norms,求得物品的相似矩陣(因為這個時候可以匯總所有和這個物品相關的物品的dot)
第三個job,補全物品的相似矩陣
3.獲得用戶-項目相似矩陣
輸入為人-物 用戶矩陣 和 物-物 項目矩陣
Map端輸出key為物,value為類VectorOrPrefWritable,是包含物與人的傾好度,或是物與物的相似度
reduce端輸出key為物,value為類VectorAndPrefWritable,是匯總當個物品到所有人的傾好度和到所有物品的相似度
4.獲得用戶推薦矩陣
輸入為VectorAndPrefWritable
Map端輸出為key:人,value:物+系數(map端根據單個物品貢獻的系數生成推薦系數,也就是人到物品A的傾好度*物品A到其他物品的相似度)
reduce端輸出為key:人,,value:推薦項目+系數(reduce端使用自定公式,匯總所有單物品貢獻的四叔,求人到其他項目的傾好度,取topn作為當前用戶的推薦項目)
再在這里貼幾個mahout推薦算法分析的帖子:
http://eric-gcm.iteye.com/blog/1817822
http://eric-gcm.iteye.com/blog/1818033
http://eric-gcm.iteye.com/blog/1820060
以下是mahout代碼: