嚴(yán)水歌,付珍珍(南通大學(xué)現(xiàn)代教育技術(shù)中心,南通 226000)
基于Mahout的高校學(xué)生食堂就餐窗口推薦算法研究
嚴(yán)水歌,付珍珍
(南通大學(xué)現(xiàn)代教育技術(shù)中心,南通226000)
從2011年開(kāi)始,中國(guó)進(jìn)入大數(shù)據(jù)風(fēng)起云涌的時(shí)代,以Hadoop[1]為代表的家族軟件,占據(jù)了大數(shù)據(jù)處理的廣闊地盤(pán)。開(kāi)源界及廠商,所有數(shù)據(jù)軟件,無(wú)一不向Hadoop靠攏。Hadoop逐步變成了大數(shù)據(jù)開(kāi)發(fā)的標(biāo)準(zhǔn)。在Hadoop原有技術(shù)基礎(chǔ)之上,出現(xiàn)了Hadoop家族產(chǎn)品,常用的項(xiàng)目包括Hadoop,Hive,Pig,HBase,Sqoop,Mahout,Zookeeper,Avro,Ambari,Chukwa等。通過(guò)“大數(shù)據(jù)”概念不斷創(chuàng)新,推出科技進(jìn)步。Mahout是Hadoop家族中與眾不同的一個(gè)成員,是一個(gè)基于Hadoop的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的分布式計(jì)算框架。Mahout為數(shù)據(jù)分析人員解決了大數(shù)據(jù)的門(mén)檻;同時(shí)為算法工程師提供了基礎(chǔ)的算法庫(kù);對(duì)于Hadoop開(kāi)發(fā)人員而言提供了數(shù)據(jù)建模的標(biāo)準(zhǔn);對(duì)于運(yùn)維人員而言,為其打通了和Hadoop的連接渠道。Mahout完整地封裝了“協(xié)同過(guò)濾”算法,并實(shí)現(xiàn)了并行化,提供了非常簡(jiǎn)單的API接口,本文用Mahout來(lái)構(gòu)建推薦系統(tǒng),抽樣統(tǒng)計(jì)我校學(xué)生對(duì)學(xué)校食堂各就餐窗口進(jìn)行評(píng)分,得到一個(gè)數(shù)據(jù)集,采用基于Mahout推薦算法API對(duì)數(shù)據(jù)集進(jìn)行分析,能得到非常高效的結(jié)果。
協(xié)同過(guò)濾推薦算法主要有基于用戶的協(xié)同過(guò)濾,基于item的協(xié)同過(guò)濾以及SlopeOne推薦算法?;谟脩舻膮f(xié)同過(guò)濾,通過(guò)不同用戶對(duì)物品的評(píng)分來(lái)評(píng)測(cè)用戶之間的相似性,基于用戶之間的相似性做出推薦。簡(jiǎn)單來(lái)講就是:給用戶推薦和他興趣相似的其他用戶喜歡的物品。計(jì)算上,就是將一個(gè)用戶對(duì)所有物品的偏好作為一個(gè)向量來(lái)計(jì)算用戶之間的相似度,找到K鄰居后,根據(jù)鄰居的相似度權(quán)重以及他們對(duì)物品的偏好,預(yù)測(cè)當(dāng)前用戶沒(méi)有偏好的未涉及物品,計(jì)算得到一個(gè)排序的物品列表作為推薦?;趇tem的協(xié)同過(guò)濾,通過(guò)用戶對(duì)不同item的評(píng)分來(lái)評(píng)測(cè)item之間的相似性,基于item之間的相似性做出推薦。簡(jiǎn)單來(lái)講就是:給用戶推薦和他之前喜歡的物品相似的物品?;贗temCF的原理和基于UserCF類似,只是在計(jì)算鄰居時(shí)采用物品本身,而不是從用戶的角度,即基于用戶對(duì)物品的偏好找到相似的物品,然后根據(jù)用戶的歷史偏好,推薦相似的物品給他。從計(jì)算的角度看,就是將所有用戶對(duì)某個(gè)物品的偏好作為一個(gè)向量來(lái)計(jì)算物品之間的相似度,得到物品的相似物品后,根據(jù)用戶歷史的偏好預(yù)測(cè)當(dāng)前用戶還沒(méi)有表示偏好的物品,計(jì)算得到一個(gè)排序的物品列表作為推薦?;谖锲返膮f(xié)同過(guò)濾算法可分為三個(gè)步驟,步驟1:建立物品的同現(xiàn)矩陣,按用戶分組,找到每個(gè)用戶所選的物品,單獨(dú)出現(xiàn)計(jì)數(shù)及兩兩一組計(jì)數(shù)。步驟2:建立用戶對(duì)物品的評(píng)分矩陣,按用戶分組,找到每個(gè)用戶所選的物品及評(píng)分。步驟3:矩陣計(jì)算推薦結(jié)果,推薦結(jié)果是同現(xiàn)矩陣和評(píng)分矩陣的乘積,即同現(xiàn)矩陣×評(píng)分矩陣=推薦結(jié)果。SlopeOne是一種簡(jiǎn)單高效的協(xié)同過(guò)濾算法。通過(guò)均差計(jì)算進(jìn)行評(píng)分。其基本思想是采用平均加權(quán)計(jì)算。Slope One的核心優(yōu)勢(shì)是在大規(guī)模的數(shù)據(jù)上,它依然能保證良好的計(jì)算速度和推薦效果。
基于Mahout環(huán)境開(kāi)發(fā),官方建議我們的標(biāo)準(zhǔn)化的程序開(kāi)發(fā)過(guò)程可以參見(jiàn)圖1。
圖1 一個(gè)簡(jiǎn)單的基于用戶推薦的插圖[3]
圖1清晰展現(xiàn)了基于Mahout開(kāi)發(fā)推薦系統(tǒng)的完整流轉(zhuǎn)過(guò)程。從圖中我們可以粗略地看出推薦引擎分為5個(gè)主要部分組成,分別是數(shù)據(jù)模型,相似度算法,近鄰算法,推薦算法以及算法評(píng)分器。Mahout框架里面的接口包c(diǎn)f.taste包實(shí)現(xiàn)了推薦算法引擎,它提供了一套完整的推薦算法工具集,同時(shí)規(guī)范了數(shù)據(jù)結(jié)構(gòu),并標(biāo)準(zhǔn)化了程序開(kāi)發(fā)過(guò)程。根據(jù)Mahout推薦引擎,我們可以創(chuàng)建自己的推薦引擎構(gòu)造器,主要用到的關(guān)鍵API接口列舉如下:recommend(long userID,int howMany),該方法獲得推薦結(jié)果,給指定userID推薦howMany個(gè)Item。推薦算法實(shí)現(xiàn)類主要有GenericUserBasedRecommender,該實(shí)現(xiàn)類是基于用戶的推薦算法的。GenericItemBasedRecommender類是基于物品的推薦算法的。構(gòu)造自己的推薦系統(tǒng),具體步驟可歸結(jié)如下:
①構(gòu)造數(shù)據(jù)模型
②構(gòu)造相似度算法模型,該步驟需要計(jì)算用戶相似度距離,衡量用戶相似度距離可以用歐氏距離相似度 (EuclideanDistanceSimilarity)和對(duì)數(shù)似然相似度(LogLikelihoodSimilarity)。其中歐式距離d可表示如下:
利用歐氏距離d定義的相似度s,s=1/(1+d)。由表達(dá)式可以得知其范圍介于0與1之間,歐氏距離相似度的值越大,說(shuō)明d越小,也就是距離越近,則相似度越大。
③構(gòu)造近鄰算法模型
近鄰算法給相似的用戶進(jìn)行排序,選出前N個(gè)最相似的,作為最終推薦的參考的用戶。近鄰算法分為2種,即 NearestNUserNeighborhood算法[4]和 Threshold UserNeighborhood算法。NearestNUserNeighborhood算法指定最近鄰用戶N的個(gè)數(shù)。例如選出前10最相似的用戶。ThresholdUserNeighborhood算法指定最近鄰用戶的比例。例如選擇前10%最相似的用戶。
④構(gòu)造推薦算法模型
⑤構(gòu)造算法評(píng)估模型
⑥推薦結(jié)果輸出
3.1搭建開(kāi)發(fā)環(huán)境
本次實(shí)驗(yàn)所需要的實(shí)驗(yàn)環(huán)境列舉見(jiàn)表1。
表1 實(shí)驗(yàn)環(huán)境
3.2實(shí)驗(yàn)數(shù)據(jù)說(shuō)明
本次實(shí)驗(yàn)選取我校主校區(qū)學(xué)生對(duì)兩個(gè)學(xué)生食堂各窗口的服務(wù),就餐等各方面進(jìn)行綜合評(píng)分。根據(jù)該調(diào)查,對(duì)實(shí)驗(yàn)數(shù)據(jù)集進(jìn)行以下闡述:第一個(gè)數(shù)據(jù)集以rating2.csv命名,見(jiàn)圖所示。第二個(gè)數(shù)據(jù)集是學(xué)校學(xué)生食堂的窗口組別,見(jiàn)圖2所示。
rating.csv文件是一個(gè)行為數(shù)據(jù)集,該數(shù)據(jù)集有3列數(shù)據(jù),第一列是學(xué)生ID,標(biāo)識(shí)每個(gè)學(xué)生,為了更加清晰表達(dá)含義,選取自增的數(shù)據(jù)來(lái)標(biāo)識(shí)每個(gè)學(xué)生,其中增量選取為1,這種表示方式跟用學(xué)生學(xué)號(hào)標(biāo)識(shí)學(xué)生具有同樣意義。第二列是POS機(jī)ID,該ID標(biāo)識(shí)每個(gè)食堂窗口,第三列是具體某個(gè)學(xué)生對(duì)各個(gè)窗口的評(píng)分。測(cè)試集的記錄數(shù)是4000,代表學(xué)生對(duì)窗口的評(píng)分次數(shù)。統(tǒng)計(jì)的學(xué)生數(shù)為200個(gè),選取100個(gè)窗口進(jìn)行評(píng)分。評(píng)分值用1-10表示。
圖2 實(shí)驗(yàn)數(shù)據(jù)集截圖
圖3 食堂窗口組別截圖
該截圖所列出的記錄是我校主校區(qū)兩個(gè)學(xué)生食堂的窗口組別,每個(gè)食堂的每個(gè)組別下面有若干個(gè)窗口,實(shí)驗(yàn)數(shù)據(jù)集里的每個(gè)窗口號(hào)都在這組別里。也就是說(shuō)數(shù)據(jù)集中的窗口號(hào)與該記錄是多對(duì)一的關(guān)系。
3.3實(shí)驗(yàn)過(guò)程
我們選擇了基于用戶的協(xié)同過(guò)濾(UserCF),基于物品的協(xié)同過(guò)濾ItemCF以及SlopeOne算法共3種推薦算法,本實(shí)驗(yàn)進(jìn)行了7種組合的測(cè)試,主要是針對(duì)相似度算法模型和推薦算法的不同組合,其中基于用戶的協(xié)同過(guò)濾算法有三種組合,采用歐氏距離用戶相似度或?qū)?shù)似然用戶相似度,最近鄰算法以及基于用戶的有評(píng)分和無(wú)評(píng)分的推薦算法組合?;谖锲返膮f(xié)同過(guò)濾算法也有三種組合,其組成部分也采用歐氏距離用戶相似度或?qū)?shù)似然用戶相似度,最近鄰算法以及基于用戶的有評(píng)分和無(wú)評(píng)分的推薦算法組合,詳見(jiàn)表2列舉如下:
表2 推薦算法組合測(cè)試
3.4算法評(píng)估
算法評(píng)判標(biāo)準(zhǔn):召回率(recall)與查準(zhǔn)率[5](precision)。Mahout提供了2個(gè)評(píng)估推薦器的指標(biāo),查準(zhǔn)率和召回率(查全率),這兩個(gè)指標(biāo)是搜索引擎中經(jīng)典的度量方法[6]。結(jié)果集按檢索到的以及未檢索到的,相關(guān)性與不相關(guān)性可以有4種組合,這4種組合用一個(gè)表格展示,請(qǐng)參見(jiàn)表3。
表3 算法評(píng)判標(biāo)準(zhǔn)
表格中A表示檢索到的,而且是相關(guān)的,即結(jié)果集是搜到的也是想要的。B表示未檢索到的,但是相關(guān)的,即結(jié)果集是沒(méi)搜到,然而實(shí)際上想要的。C表示檢索到的,但是不相關(guān)的,即結(jié)果集是搜到的,但是沒(méi)用的。D表示結(jié)果集是未檢索到的,也是不相關(guān)的,即結(jié)果集沒(méi)搜到也沒(méi)用的。查準(zhǔn)率用P表示,P=A/(A+C)。被檢索到的結(jié)果集相關(guān)得越多越好,不相關(guān)的越少越好,這是追求“查準(zhǔn)率”,即A/(A+C)的值越大越好。召回率用R表示,R=A/(A+B)。結(jié)果集被檢索得越多越好,這是追求“查全率”,即A/(A+B),其值越大越好。
3.5實(shí)驗(yàn)結(jié)果
經(jīng)過(guò)7種算法組合的測(cè)試,用查準(zhǔn)率和召回率兩個(gè)指標(biāo)對(duì)7種算法組合進(jìn)行評(píng)估,形成如下結(jié)果集,具體參見(jiàn)表4。
為了得到差異化結(jié)果,我們分別取4個(gè)算法:userEuclidean,itemEuclidean,userEuclideanNoPref,item EuclideanNoPref,也就是采用歐氏距離用戶相似度,基于用戶和物品的推薦算法,并且采用有評(píng)分和無(wú)評(píng)分,對(duì)推薦結(jié)果進(jìn)行比較,形成如下推薦結(jié)果,對(duì)推薦結(jié)果進(jìn)行一個(gè)截圖,見(jiàn)圖所示。
圖4中左列列出的是算法名稱,右列是針對(duì)4種推薦算法形成的實(shí)驗(yàn)結(jié)果,針對(duì)每一種推薦算法,根據(jù)每個(gè)學(xué)生已有的一些評(píng)分,給每一個(gè)學(xué)生推薦三個(gè)窗口。實(shí)驗(yàn)所得到的結(jié)果集是綜合各方面所得到的最佳推薦結(jié)果。
圖4 實(shí)驗(yàn)結(jié)果集截圖
表4 實(shí)驗(yàn)結(jié)果
[1]鄧雄杰.基于Hadoop的推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].華南理工大學(xué),2013
[2]周濤,李華.基于用戶情景的協(xié)同過(guò)濾推薦[J].計(jì)算機(jī)應(yīng)用,2010(04).
[3]S.Owen,R.Anil,T.Dunning,E.Friedman.Mahout in action,2011
[4]M.Deshpande,G.Karypis.Item-based top-n recommendation algorithms.ACM Transactions on Information Systems,2004
[5]李文海,許舒人.基于Hadoop的電子商務(wù)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2014(01).
[6]Shlomo Berkovsky,Tsvi Kuflik,F(xiàn)rancesco Ricci.Mediation of user models for enhanced personalization in recommender systems[J]. User Modeling and User-Adapted Interaction,2008(3).
Mahout;Collaborative Filtering;Recommendation System;Precision;Recall
Research on Dining Windows Recommendation Algorithm for Students in Higher Education Based on Mahout
YAN Shui-ge,F(xiàn)U Zhen-zhen
(Modern Educational Technology Centre,Nantong University,Nantong 226000)
1007-1423(2015)23-0024-05
10.3969/j.issn.1007-1423.2015.23.005
2015-06-09
2015-07-31
討論基于Mahout的推薦系統(tǒng)開(kāi)發(fā)過(guò)程,以我校學(xué)生對(duì)學(xué)校食堂各就餐窗口進(jìn)行評(píng)分為例,通過(guò)建立實(shí)驗(yàn)系統(tǒng),利用Mahout推薦系統(tǒng)引擎提供的API分析實(shí)驗(yàn)數(shù)據(jù)。該實(shí)驗(yàn)樣例完整地闡述創(chuàng)建自己的推薦引擎構(gòu)造器的過(guò)程。本實(shí)驗(yàn)采用常用的協(xié)同過(guò)濾推薦算法,協(xié)同過(guò)濾推薦算法主要包括基于用戶的協(xié)同過(guò)濾,基于物品的協(xié)同過(guò)濾以及Slope-One推薦算法。搭建自己的開(kāi)發(fā)環(huán)境,基于相似度算法模型和推薦算法,使用7種不同組合進(jìn)行對(duì)比實(shí)驗(yàn)。使用查準(zhǔn)率和召回率兩個(gè)指標(biāo)對(duì)7種算法組合進(jìn)行評(píng)估。采用歐氏距離用戶相似度,基于用戶和物品的推薦算法,并且采用有評(píng)分和無(wú)評(píng)分的方法對(duì)推薦結(jié)果進(jìn)行比較,由實(shí)驗(yàn)得知,基于Mahout的推薦系統(tǒng)能快速高效地給學(xué)生推薦相似的就餐窗口。
Mahout;協(xié)同過(guò)濾;推薦系統(tǒng);查準(zhǔn)率;召回率
嚴(yán)水歌,男,碩士,初級(jí)實(shí)驗(yàn)師,研究方向?yàn)閿?shù)據(jù)挖掘
付珍珍,女,碩士,初級(jí)實(shí)驗(yàn)師,研究方向?yàn)閿?shù)據(jù)挖掘
Constructs an experimental system based on the deep discussion on development process of Mahout recommended system and empirical researches on scoring all dining windows by students.Furthermore,conducts a deep analysis on experimental data through API provided by Mahout recommended system engine.This experimental sample completely narrates the process to create its own recommended engine constructor.The commonly-used collaborative filtering recommendation algorithm is adopted by this experiment which includes collaborative filtering of users,collaborative filtering of articles and recommendation algorithm of SlopeOne.Under construction of its own development environment,adopts seven different combinations to conduct contrast experiment based on similarity algorithm model and recommended algorithm.Precision ratio and recall rate are applied to evaluate the seven algorithm combinations.Compares these recommended results through Euclidean distance similarity of users,collaborative filtering of users,collaborative filtering of articles,scoring method and non-scoring method.From the experimental results,it can be concluded that recommended system of Mahout can efficiently and rapidly recommend similar dining windows to students.