周顯春 鄧雨 吳世雄 楊宇鑫 王晗
摘 要:為了改善基于個人喜好或營養(yǎng)成分等單一特征的傳統(tǒng)協(xié)同過濾算法推薦效果不好、缺乏實時性及使用不方便等問題,將中醫(yī)體質(zhì)、地方口味、營養(yǎng)成分等多種特征相結(jié)合,利用基于Spark Streaming的協(xié)同過濾算法,設(shè)計一款基于 Android 平臺的智能飲食推薦APP。實驗結(jié)果表明,改進(jìn)協(xié)同過濾算法能夠大幅改善推薦效果,該APP不僅可為用戶推薦符合身體健康需要,且合乎口味的飲食,而且能夠較好地滿足用戶對實時性與便捷性的要求。
關(guān)鍵詞:協(xié)同過濾算法;Spark Streaming;特征融合;智能推薦;飲食推薦
DOI:10. 11907/rjdk. 182698
中圖分類號:TP319文獻(xiàn)標(biāo)識碼:A文章編號:1672-7800(2019)002-0088-03
Abstract:In order to improve the recommendation effect of traditional collaborative filtering algorithms based on individual preferences or nutritional components, lack of real-time performance and inconvenience in use, a collaborative filtering algorithm based on SparkStreaming platform is used to realize online real-time recommendation according to the characteristics of traditional diet, traditional Chinese medicine constitution and nutritional components. On this basis, a smart diet recommendation APP based on Android platform is designed. Practice has proved that the improved algorithm based on Android can greatly improve the recommendation efficiency and provide convenience. This APP can not only recommend a healthy and tasty diet for users, but also meet the real-time and convenient requirements of users.
Key Words:collaborative filtering algorithm;Spark Streaming;feature fusion;Intelligent recommendation;food recommendation
0 引言
近年來,隨著生活節(jié)奏的加快、生活壓力的增大,生活中形成的一些不良陋習(xí)使很多人身體處于亞健康狀態(tài),尤其是不科學(xué)的飲食結(jié)構(gòu),嚴(yán)重威脅著人們身體健康。因此,合理、科學(xué)且能充分滿足身體營養(yǎng)需求的美食開始引起人們重視[1-2]。然而,能夠根據(jù)每人的個性化身體特征搭配食物的營養(yǎng)師或?qū)<也粌H數(shù)量有限,而且收費(fèi)高、效率低。隨著人工智能、大數(shù)據(jù)及互聯(lián)網(wǎng)技術(shù)的發(fā)展,基于智能算法的美食推薦系統(tǒng)逐漸受到人們歡迎[3]。
國內(nèi)外學(xué)者對飲食推薦進(jìn)行了大量研究。Zhang等[4]利用信息技術(shù)與數(shù)學(xué)回歸分析方法建立各種營養(yǎng)輸入、輸出反饋的非線性模型,研究不同營養(yǎng)成分對人體身體組織的影響;寇文心[5]根據(jù)營養(yǎng)成分及個人身體體質(zhì)情況,采用加權(quán)隨機(jī)抽樣算法與多元線性回歸模型設(shè)計營養(yǎng)配餐系統(tǒng),并且建立反饋機(jī)制對配餐結(jié)構(gòu)進(jìn)行修正,使之更加科學(xué);唐南沙[6-7]推出一款基于Android的智能點(diǎn)餐APP,能夠智能推薦多種品種的餐飲;邢磊[8]利用范例推理算法與基于Hadoop 分布式平臺的用戶協(xié)同過濾方法,通過Android平臺為糖尿病患者自動推薦飲食。然而,目前對于可將中醫(yī)體質(zhì)、營養(yǎng)成分等特征相結(jié)合的智能飲食推薦方法的研究仍然較少。
針對上述問題,本文設(shè)計一款基于Android 平臺的智能飲食推薦APP,可根據(jù)中醫(yī)體質(zhì)、地方口味、營養(yǎng)成分等多種特征,推薦滿足用戶健康需求,且合乎其口味的飲食。
1 協(xié)同過濾算法改進(jìn)
協(xié)同過濾算法自提出以來,在個性化推薦領(lǐng)域得到了廣泛應(yīng)用。其首先計算用戶間知識水平與興趣等偏好的相似性,然后為相似用戶自動推薦相似信息[9]。協(xié)同過濾主要分為基于用戶與基于物品兩種類型[10]。協(xié)同過濾算法面臨的兩個最大問題是如何解決評分稀疏性及算法擴(kuò)展性問題[11]。在海量數(shù)據(jù)和集中式數(shù)據(jù)處理環(huán)境下,相關(guān)問題尤其突出。針對上述問題,研究人員分別提出基于SVD[12-13]與Spark平臺[11,14-15]的協(xié)同過濾改進(jìn)算法。
Spark Streaming是構(gòu)建在Spark平臺上的一種流式實時計算框架,其編程方式和接口與Spark類似,但處理速度比Spark平臺快,可以達(dá)到亞秒級,能夠提高推薦實時性。為了更好地滿足協(xié)同過濾算法實時性、可擴(kuò)展性,以及個性化推薦的需要,本文研究基于Spark Streaming平臺的協(xié)同過濾方案,并利用MovieLens 公開數(shù)據(jù)集對方案推薦的準(zhǔn)確性及時效性進(jìn)行驗證。
1.1 基于Spark Streaming平臺的協(xié)同過濾算法實現(xiàn)
基于用戶的協(xié)同過濾(User-Based Collaborative Filtering,簡稱為User-Based CF),其偽代碼分為4個步驟:數(shù)據(jù)處理、相似用戶查找、實時推薦、結(jié)果顯示。
(1)__init__(self) ;初始化基本參數(shù)和變量
(2)SparkContext()? //讀取物品相似矩陣
(3)StreamingContex()? //初始化Streaming對象
(4)fileStream(). map(). checkpoint()? //設(shè)置監(jiān)聽目錄
(5)reduceByKeyAndWindow(). reduceByKey()? //采用流式窗口技術(shù)處理數(shù)據(jù)
(6)map(),reduceByKey(),groupByKey(),flatMap()? //計算矩陣,完成實時推薦
(7)saveAsTextFiles ()? //保存結(jié)果
1.2 實驗與結(jié)果分析
1.2.1 實驗平臺搭建
實驗平臺:在虛擬機(jī)上安裝ubuntu server 17.10,以及Java 8、Hadoop 2.7、Spark2.3.2,搭建Spark計算集群平臺,具體配置如表1所示[16]。
實驗數(shù)據(jù):采用 UCI 公開MovieLens數(shù)據(jù)集分別進(jìn)行4組實驗,100K、1M、10M和100MB各自對應(yīng)10 萬條、100 萬條、1000 萬條、1 億條數(shù)據(jù)。評分分為1~5等級,數(shù)值越大表示使用者對該物品評價越高。
1.2.2 評分預(yù)測準(zhǔn)確性測試
均方根誤差(RMSE)、平均絕對誤差(MAE)是衡量推薦系統(tǒng)推薦準(zhǔn)確度最常用的指標(biāo),兩者值越小表示推薦效果越好。
由表2數(shù)據(jù)可知,相比于傳統(tǒng)協(xié)同過濾算法,基于Spark Streaming協(xié)同過濾算法的MAE、 RMSE值較小,說明Spark分布架構(gòu)能夠推高推薦精度。
1.2.3 算法執(zhí)行時間測試比較
傳統(tǒng)協(xié)同過濾算法、基于Spark的協(xié)同過濾算法與基于Spark Steaming的協(xié)同過濾算法分別針對不同數(shù)據(jù)集進(jìn)行對比實驗,結(jié)果如圖1所示。
由圖1數(shù)據(jù)可知,隨著處理數(shù)據(jù)量的增加,基于Spark Streaming平臺協(xié)同過濾算法的時間效率優(yōu)勢越來越明顯,為實時精準(zhǔn)推薦提供了可能。
2 基于改進(jìn)協(xié)同過濾算法的美食推薦APP開發(fā)
2.1 關(guān)鍵技術(shù)
(1)APP Inventor。APP Inventor為APP Inventor Google Lab的一個子計劃,是一款面向非專業(yè)人員的Android開發(fā)程序工具,讓使用者開發(fā)程序類似玩樂高積木一樣簡單、有趣。
(2)Scrapy爬蟲架構(gòu)。Scrapy是一款基于Python、能夠高速從Web抓取結(jié)構(gòu)化數(shù)據(jù)的框架,其最大優(yōu)點(diǎn)是可根據(jù)現(xiàn)實場景要求對其基類進(jìn)行靈活修改,使其更好地滿足用戶需要。
(3)Redis 數(shù)據(jù)庫。為提高數(shù)據(jù)爬取、存取速度,該APP采用分布式Redis數(shù)據(jù)庫,能夠?qū)崿F(xiàn)高速異步存取,并提高推薦實時性。該數(shù)據(jù)庫內(nèi)保存了用戶體質(zhì)、菜譜、地域口味等信息。
2.2 系統(tǒng)設(shè)計
2.2.1 系統(tǒng)需求分析
用戶需求:每天根據(jù)不同用戶體質(zhì)及地方口味,結(jié)合營養(yǎng)價值推薦不僅滿足用戶健康需求,且合乎其口味的飲食。
2.2.2 系統(tǒng)整體架構(gòu)
本系統(tǒng)架構(gòu)如圖2所示,共分為3個環(huán)節(jié):首先從Android客戶端通過Http協(xié)議獲取用戶體質(zhì)、口味等相關(guān)信息,通過Json反饋給Android客戶端;其次,利用Scrapy爬蟲框架進(jìn)行網(wǎng)絡(luò)相關(guān)食譜的信息獲取;最后,采用基于Spark Streaming平臺的協(xié)同過濾算法完成食譜與不同體質(zhì)、口味的相關(guān)性分析并進(jìn)行推薦。
2.2.3 Android端系統(tǒng)功能設(shè)計
客戶端界面主要完成用戶登錄、用戶注冊、菜譜推薦、用戶信息管理等相關(guān)功能的可視化設(shè)計[17-18],具體功能設(shè)計如圖3所示。
3 系統(tǒng)實現(xiàn)
(1)首頁。雙擊APP,啟動程序即可進(jìn)入首頁。該頁面有上一次推薦的菜譜圖片及名稱,以及美食推薦、美食搜索、個人中心與菜單設(shè)置板塊,效果如圖4所示。
(2)推薦菜單頁。推薦算法根據(jù)用戶個人體質(zhì)與口味基本信息推薦適合該用戶的菜單,具體內(nèi)容包括口味、食效、適合人群,如果用戶感興趣還可通過菜單進(jìn)入詳情頁,效果如圖5所示。
(3)菜單詳情頁。該頁面內(nèi)容包括特征、主料、調(diào)料及詳細(xì)推薦做法,效果如圖6所示。
(4)中醫(yī)體質(zhì)檢測頁。根據(jù)中醫(yī)體質(zhì)檢測題目推測用戶體質(zhì)類型[19-20] ,題目選項分為:沒有、很少、有時、經(jīng)常、總分,對應(yīng)分值比重分別為1~5,效果如圖7所示。
4 結(jié)語
本文利用基于Spark Streaming平臺的協(xié)同過濾算法設(shè)計一款智能飲食推薦APP,可根據(jù)中醫(yī)體質(zhì)、地方口味、營養(yǎng)成分等多種特征,實時推薦滿足用戶身體健康需求,且合乎其口味的飲食。然而,對各種特征的識別與提取需要花費(fèi)大量成本,因此與人工智能技術(shù)相結(jié)合進(jìn)行智能提取將是未來的研究方向。
參考文獻(xiàn):
[1] 張秉輝,閆鳳云,張玉芝. 關(guān)于青少年飲食行為與健康的思考[J]. 中國藥物經(jīng)濟(jì)學(xué), 2014(12):71-72.
[2] 彭亞紅.? 中小學(xué)生營養(yǎng)知識及飲食健康行為的調(diào)查與分析[J].? 中國衛(wèi)生標(biāo)準(zhǔn)管理, 2015(19):6-7.
[3] SCHAFER J B, KONSTAN J A, RIEDL J. E-Commerce recommendation applications[J]. Data Mining & Knowledge Discovery, 2001, 5:115-153.
[4] ZHANG Z,VEDENOV D,WETZSTEIN M. Can the U.S. ethanol industry compete in the alternative fuels market[J]. Agricultural Economics,2007,37(1):105-112.
[5] 寇文心. 智能營養(yǎng)配餐系統(tǒng)及其核心算法的研究[D]. 北京:北京工業(yè)大學(xué),2015.
[6] 陳雪麗. 基于Android的無線點(diǎn)餐系統(tǒng)的設(shè)計與實現(xiàn)[D]. 西安:西安電子科技大學(xué), 2015.
[7] 唐南沙. 基于Android的智能點(diǎn)餐系統(tǒng)[D]. 長沙:湖南大學(xué),2017.
[8] 邢磊. 基于改進(jìn)協(xié)同過濾的糖尿病飲食推薦系統(tǒng)[D]. 蘭州: 蘭州大學(xué),2016.
[9] 黃曉斌. 網(wǎng)絡(luò)信息過濾原理與應(yīng)用[M]. 北京:北京圖書館出版社,2005.
[10] DESHPANDE M,KARYPIS G. Item-based top-N recommendation algorithms[J]. ACM Transactions on Information Systems,2004,22(1):143-177.
[11] 王源龍,孫衛(wèi)真,向勇. 基于Spark的混合協(xié)同過濾算法改進(jìn)與實現(xiàn)[J/OL]. 計算機(jī)應(yīng)用研究,2019(3):1-2[2018-12-30]. http://kns.cnki.net/kcms/detail/51.1196.TP.20180209.1115.058.html.
[12] 方耀寧,郭云飛,丁雪濤,等. 一種基于局部結(jié)構(gòu)的改進(jìn)奇異值分解推薦算法[J]. 電子與信息學(xué)報, 2013, 35(6):1284-1289.
[13] 劉雯. 基于奇異值分解和K-means聚類的電子商務(wù)推薦算法研究[D]. 武漢:華中師范大學(xué),2015.
[14] 于娜娜,王中杰. 基于Spark的協(xié)同過濾算法的研究[J]. 系統(tǒng)仿真技術(shù),2016,12(1):40-45.
[15] 許智宏,蔣新宇,董永峰,等. 一種基于Spark的改進(jìn)協(xié)同過濾算法研究[J]. 計算機(jī)應(yīng)用與軟件, 2017(5):247-254.
[16] 周顯春,肖衡. Spark框架下聚類模型在網(wǎng)絡(luò)流量異常檢測中的應(yīng)用[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用, 2017(5):62-63.
[17] 李勇. 指尖上的美味——手機(jī)里不可或缺的美食APP推薦[J].? 電腦知識與技術(shù):經(jīng)驗技巧,2017(5):5-15.
[18] 徐怡雯,鮑懿喜. 基于用戶社交特征的美食類APP用戶體驗設(shè)計研究[J]. 設(shè)計, 2017(1):20-21.
[19] 梁永林,高彩霞,張云展,等. 應(yīng)用中醫(yī)體質(zhì)量表對大學(xué)生三種體質(zhì)相關(guān)性的研究[C]. 國際體質(zhì)醫(yī)學(xué)論壇暨中華中醫(yī)藥學(xué)會中醫(yī)體質(zhì)分會全國中醫(yī)體質(zhì)學(xué)術(shù)年會,2013.
[20] 漆亞學(xué),梁永林,高彩霞,等. 應(yīng)用中醫(yī)體質(zhì)量表對大學(xué)生兼夾體質(zhì)情況的研究[J]. 甘肅中醫(yī)學(xué)院學(xué)報,2013,30(2):92-95.
(責(zé)任編輯:黃 ?。?/p>