許挺娟


摘要:傳統的協同過濾推薦((Collaborative Filtering,CF)算法是目前應用最廣泛的一種推薦算法,但是由于CF存在稀疏性、冷啟動等問題,所以本文提出了基于mahout的CF算法。結果表明,相比較傳統的兩種CF算法,使用基于mahout的CF算法能夠提升推薦時間和推薦精度。
關鍵詞:協同過濾;mahout;推薦算法;Taste引擎
中圖分類號:TP312 文獻標識碼:A 文章編號:1007-9416(2019)06-0133-02
0 引言
目前,由百度、谷歌所推出的推薦引擎已經被廣泛應用,但是推薦引擎是大眾性的,不具有個性化特點。所以推薦系統就由此產生。推薦方法主要包括三種:基于內容的推薦算法、基于模型的推薦和協同過濾推薦。協同過濾方法是上述推薦方法中應用最為廣泛的,但是它還是有很多問題需要解決的。如稀疏性問題(Sparsity)、可擴展性問題(Scalability)等。本文提出了基于Ambari平臺的協同過濾推薦算法?;贛ovieLens數據集的實驗表明,本文算法很好地解決了協同過濾的問題,同時提高了推薦精度及響應時間。
1 相關技術
1.1 Ambari
Ambari是Apache下的一種基于Web的工具,所以他支持Apache下的大多數服務,就本文來說,最重要的是mahout框架,mahout提供了一系列經典的機器學習算法。其中Taste引擎提供了一系列的組件,這樣我們就可以使用Mahout中的Taste幫助構建推薦系統。
1.2 協同過濾算法
協同過濾推薦算法主要分為基于用戶的協同過濾技術(user-cf)和基于項目(item-cf)的協同過濾技術。user-cf在于考慮的是用戶之間的相似性。首先,識別出與目標用戶具有高度相似性的鄰居用戶,然后向用戶推薦鄰居最喜歡的項目。而item-cf是從項目角度出發的,主要通過計算項目之間的相似性。
2 構建基于Ambari的協同過濾的推薦系統
2.1 基于mapReduce的推薦系統的設計
推薦算法的實現分為兩個步驟:
(1)mapReduce包括map函數和reduce函數,首先,將電影原始的數據作為鍵值對發送到中間映射函數;
(2)map以不同的鍵值對接收數據。在map任務接收到產品數據時,發出用戶ID和電影信息,其中用戶ID作為鍵,電影信息作為值。通過split、shuffle過程,每個reducer任務將接收一個用戶已經觀看的所有電影。然后reducer發出每個用戶所帶來的電影列表,從而達到為每一個用戶建立一個推薦列表。
2.2 基于mahout的推薦系統的設計
本文采用基于用戶的推薦算法,推薦系統需要應用Taste中的各個組件來實現,核心代碼:
File file = new File("e://xtj//dataset//ml-10M100K//rating.rat");
DataModel dataModel = new GroupLensDataModel(file);
UserSimilarity similarity = new UserSimilarity(data Model);
UserNeighborhood userNeighborhood = new User Neighborhood(10,similarity,dataModel);
Recommender recommender = new GenericUserBased Recommender(dataModel,userNeighborhood,similarity);
List
System.out.println("推薦");
System.out.println("為ID=5的用戶推薦10部電影");
for(RecommendedItem recommendedItem:recommended ItemList) {
System.out.println(recommendedItem);
}
本文采用基于Ambari框架下的mahout框架來實現,我們在mapReduce和mahout相比較下,證明了mahout加快了推薦的速度和精度。
3 實驗結果
3.1 環境搭建
實驗使用的電腦是小米Air 13.3,windows10系統,處理器為:i7-7500U CPU @2.70GHZ 2.90GHZ,內存為8G,mahout版本為0.9.0。
(1)處理數據集:實驗采用公開的MovieLens1M電影數據集,該數據集有1000萬多條記錄,包含72000名用戶對于10000多部電影的評分。該數據集中含有movies.dat,ratings.dat和tags.dat 3個文件;
(2)然后通過java編寫程序分析ratings.dat中的數據,得出基于用戶的協同過濾比較適合該數據集。
3.2 推薦策略
在本文中,我將采取兩種常用的推薦指標來評價推薦算法的好壞。一種是余弦相似度方法,另一種是平均絕對誤差MAE。其中余弦相似度是空間中兩個向量夾角的余弦值作為衡量兩個個體間(用戶或者項目)差異的大小。余弦值越接近1,就說明夾角越接近0度,也就是兩個向量越相似。
相似度公式為:cos(θ)=? ? ? ? ? ? ? ? ? ? ? ? (1)
通過計算兩個向量之間的夾角來衡量兩個向量的相似度,角度越小說明相似度越高。而MAE的值越小,表明算法的推薦精度越高。這種方法就是衡量推薦與真實的用戶之間的偏差如式(2):
MAE=|yi-ti|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)
其中,yi表示預測值,ti表示真實值。一般來說,平均絕對誤差越小,推薦結果越準確,系統性能就越好。
3.3 實驗結果對比
(1)從上面選取好的數據集中分別選取數據集為1000,5000,10000,20000、40000和60000作為6組實驗數據,分別用余弦相似度和本文的基于mahout的方法進行MAE值比較。實驗證明,數據集越稀疏,MAE值就越大,也就是表明數據越多,MAE值也就越小。也可以看出本文的方法和傳統的余弦相似度的方法來比較,本文的方法更夠提高推薦質量。
(2)接下來分析相同條件下的協同過濾算法的運行時間,我們給出了hadoop和mahout條件下的運行情況。在相同數據集的情況下,基于mahout的CF算法明顯比基于hadoop的CF算法快一些;而且在數據集很大的情況下,基于mahout的CF算法時間更少一些。
4 結語
本文介紹了傳統的推薦算法算法,分析了基于Ambari下的協同過濾算法。實驗表明在大規模數據的情況下,采用基于Ambari的協同過濾推薦模型可以提高推薦的效率和精度。
參考文獻
[1] 何波,潘力.融合內容和改進協同過濾的個性化推薦算法[J].控制工程,2018,25(08):1553-1558.
[2] 姚靜靜.基于協同過濾的電影推薦算法研究與實現[D].北京郵電大學,2018.
[3] 李曉瑜.協同過濾推薦算法綜述[J].商丘師范學院學報,2018,34(09):7-10.
[4] Yejia Zeng,Zehui Qu. Trust-Based Neural Collaborative Filtering[J].Journal of Physics: Conference Series,2019,1229(1).
Research on Collaborative Filtering Recommendation Algorithm Based on Ambari
XU Ting-juan
(Xi'an Polytechnic University, Xi'an Shaanxi? 710048)
Abstract:The traditional Collaborative Filtering (CF) algorithm is one of the most widely used recommendation algorithms at present. However, due to the sparsity and cold start of CF, this paper proposes a CF algorithm based on mahout. The results show that compared with the two traditional CF algorithms, the CF algorithm based on mahout can improve the recommendation time and accuracy.
Key words:Collaborative filtering; mahout; recommendation algorithm; Taste engine