周顯春 鄧雨 吳世雄 楊宇鑫 王晗



摘 要:為了改善基于個人喜好或營養成分等單一特征的傳統協同過濾算法推薦效果不好、缺乏實時性及使用不方便等問題,將中醫體質、地方口味、營養成分等多種特征相結合,利用基于Spark Streaming的協同過濾算法,設計一款基于 Android 平臺的智能飲食推薦APP。實驗結果表明,改進協同過濾算法能夠大幅改善推薦效果,該APP不僅可為用戶推薦符合身體健康需要,且合乎口味的飲食,而且能夠較好地滿足用戶對實時性與便捷性的要求。
關鍵詞:協同過濾算法;Spark Streaming;特征融合;智能推薦;飲食推薦
DOI:10. 11907/rjdk. 182698
中圖分類號:TP319文獻標識碼: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 引言
近年來,隨著生活節奏的加快、生活壓力的增大,生活中形成的一些不良陋習使很多人身體處于亞健康狀態,尤其是不科學的飲食結構,嚴重威脅著人們身體健康。因此,合理、科學且能充分滿足身體營養需求的美食開始引起人們重視[1-2]。然而,能夠根據每人的個性化身體特征搭配食物的營養師或專家不僅數量有限,而且收費高、效率低。隨著人工智能、大數據及互聯網技術的發展,基于智能算法的美食推薦系統逐漸受到人們歡迎[3]。
國內外學者對飲食推薦進行了大量研究。Zhang等[4]利用信息技術與數學回歸分析方法建立各種營養輸入、輸出反饋的非線性模型,研究不同營養成分對人體身體組織的影響;寇文心[5]根據營養成分及個人身體體質情況,采用加權隨機抽樣算法與多元線性回歸模型設計營養配餐系統,并且建立反饋機制對配餐結構進行修正,使之更加科學;唐南沙[6-7]推出一款基于Android的智能點餐APP,能夠智能推薦多種品種的餐飲;邢磊[8]利用范例推理算法與基于Hadoop 分布式平臺的用戶協同過濾方法,通過Android平臺為糖尿病患者自動推薦飲食。然而,目前對于可將中醫體質、營養成分等特征相結合的智能飲食推薦方法的研究仍然較少。
針對上述問題,本文設計一款基于Android 平臺的智能飲食推薦APP,可根據中醫體質、地方口味、營養成分等多種特征,推薦滿足用戶健康需求,且合乎其口味的飲食。
1 協同過濾算法改進
協同過濾算法自提出以來,在個性化推薦領域得到了廣泛應用。其首先計算用戶間知識水平與興趣等偏好的相似性,然后為相似用戶自動推薦相似信息[9]。協同過濾主要分為基于用戶與基于物品兩種類型[10]。協同過濾算法面臨的兩個最大問題是如何解決評分稀疏性及算法擴展性問題[11]。在海量數據和集中式數據處理環境下,相關問題尤其突出。針對上述問題,研究人員分別提出基于SVD[12-13]與Spark平臺[11,14-15]的協同過濾改進算法。
Spark Streaming是構建在Spark平臺上的一種流式實時計算框架,其編程方式和接口與Spark類似,但處理速度比Spark平臺快,可以達到亞秒級,能夠提高推薦實時性。為了更好地滿足協同過濾算法實時性、可擴展性,以及個性化推薦的需要,本文研究基于Spark Streaming平臺的協同過濾方案,并利用MovieLens 公開數據集對方案推薦的準確性及時效性進行驗證。
1.1 基于Spark Streaming平臺的協同過濾算法實現
基于用戶的協同過濾(User-Based Collaborative Filtering,簡稱為User-Based CF),其偽代碼分為4個步驟:數據處理、相似用戶查找、實時推薦、結果顯示。
(1)__init__(self) ;初始化基本參數和變量
(2)SparkContext()? //讀取物品相似矩陣
(3)StreamingContex()? //初始化Streaming對象
(4)fileStream(). map(). checkpoint()? //設置監聽目錄
(5)reduceByKeyAndWindow(). reduceByKey()? //采用流式窗口技術處理數據
(6)map(),reduceByKey(),groupByKey(),flatMap()? //計算矩陣,完成實時推薦
(7)saveAsTextFiles ()? //保存結果
1.2 實驗與結果分析
1.2.1 實驗平臺搭建
實驗平臺:在虛擬機上安裝ubuntu server 17.10,以及Java 8、Hadoop 2.7、Spark2.3.2,搭建Spark計算集群平臺,具體配置如表1所示[16]。
實驗數據:采用 UCI 公開MovieLens數據集分別進行4組實驗,100K、1M、10M和100MB各自對應10 萬條、100 萬條、1000 萬條、1 億條數據。評分分為1~5等級,數值越大表示使用者對該物品評價越高。
1.2.2 評分預測準確性測試
均方根誤差(RMSE)、平均絕對誤差(MAE)是衡量推薦系統推薦準確度最常用的指標,兩者值越小表示推薦效果越好。
由表2數據可知,相比于傳統協同過濾算法,基于Spark Streaming協同過濾算法的MAE、 RMSE值較小,說明Spark分布架構能夠推高推薦精度。
1.2.3 算法執行時間測試比較
傳統協同過濾算法、基于Spark的協同過濾算法與基于Spark Steaming的協同過濾算法分別針對不同數據集進行對比實驗,結果如圖1所示。
由圖1數據可知,隨著處理數據量的增加,基于Spark Streaming平臺協同過濾算法的時間效率優勢越來越明顯,為實時精準推薦提供了可能。
2 基于改進協同過濾算法的美食推薦APP開發
2.1 關鍵技術
(1)APP Inventor。APP Inventor為APP Inventor Google Lab的一個子計劃,是一款面向非專業人員的Android開發程序工具,讓使用者開發程序類似玩樂高積木一樣簡單、有趣。
(2)Scrapy爬蟲架構。Scrapy是一款基于Python、能夠高速從Web抓取結構化數據的框架,其最大優點是可根據現實場景要求對其基類進行靈活修改,使其更好地滿足用戶需要。
(3)Redis 數據庫。為提高數據爬取、存取速度,該APP采用分布式Redis數據庫,能夠實現高速異步存取,并提高推薦實時性。該數據庫內保存了用戶體質、菜譜、地域口味等信息。
2.2 系統設計
2.2.1 系統需求分析
用戶需求:每天根據不同用戶體質及地方口味,結合營養價值推薦不僅滿足用戶健康需求,且合乎其口味的飲食。
2.2.2 系統整體架構
本系統架構如圖2所示,共分為3個環節:首先從Android客戶端通過Http協議獲取用戶體質、口味等相關信息,通過Json反饋給Android客戶端;其次,利用Scrapy爬蟲框架進行網絡相關食譜的信息獲取;最后,采用基于Spark Streaming平臺的協同過濾算法完成食譜與不同體質、口味的相關性分析并進行推薦。
2.2.3 Android端系統功能設計
客戶端界面主要完成用戶登錄、用戶注冊、菜譜推薦、用戶信息管理等相關功能的可視化設計[17-18],具體功能設計如圖3所示。
3 系統實現
(1)首頁。雙擊APP,啟動程序即可進入首頁。該頁面有上一次推薦的菜譜圖片及名稱,以及美食推薦、美食搜索、個人中心與菜單設置板塊,效果如圖4所示。
(2)推薦菜單頁。推薦算法根據用戶個人體質與口味基本信息推薦適合該用戶的菜單,具體內容包括口味、食效、適合人群,如果用戶感興趣還可通過菜單進入詳情頁,效果如圖5所示。
(3)菜單詳情頁。該頁面內容包括特征、主料、調料及詳細推薦做法,效果如圖6所示。
(4)中醫體質檢測頁。根據中醫體質檢測題目推測用戶體質類型[19-20] ,題目選項分為:沒有、很少、有時、經常、總分,對應分值比重分別為1~5,效果如圖7所示。
4 結語
本文利用基于Spark Streaming平臺的協同過濾算法設計一款智能飲食推薦APP,可根據中醫體質、地方口味、營養成分等多種特征,實時推薦滿足用戶身體健康需求,且合乎其口味的飲食。然而,對各種特征的識別與提取需要花費大量成本,因此與人工智能技術相結合進行智能提取將是未來的研究方向。
參考文獻:
[1] 張秉輝,閆鳳云,張玉芝. 關于青少年飲食行為與健康的思考[J]. 中國藥物經濟學, 2014(12):71-72.
[2] 彭亞紅.? 中小學生營養知識及飲食健康行為的調查與分析[J].? 中國衛生標準管理, 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] 寇文心. 智能營養配餐系統及其核心算法的研究[D]. 北京:北京工業大學,2015.
[6] 陳雪麗. 基于Android的無線點餐系統的設計與實現[D]. 西安:西安電子科技大學, 2015.
[7] 唐南沙. 基于Android的智能點餐系統[D]. 長沙:湖南大學,2017.
[8] 邢磊. 基于改進協同過濾的糖尿病飲食推薦系統[D]. 蘭州: 蘭州大學,2016.
[9] 黃曉斌. 網絡信息過濾原理與應用[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] 王源龍,孫衛真,向勇. 基于Spark的混合協同過濾算法改進與實現[J/OL]. 計算機應用研究,2019(3):1-2[2018-12-30]. http://kns.cnki.net/kcms/detail/51.1196.TP.20180209.1115.058.html.
[12] 方耀寧,郭云飛,丁雪濤,等. 一種基于局部結構的改進奇異值分解推薦算法[J]. 電子與信息學報, 2013, 35(6):1284-1289.
[13] 劉雯. 基于奇異值分解和K-means聚類的電子商務推薦算法研究[D]. 武漢:華中師范大學,2015.
[14] 于娜娜,王中杰. 基于Spark的協同過濾算法的研究[J]. 系統仿真技術,2016,12(1):40-45.
[15] 許智宏,蔣新宇,董永峰,等. 一種基于Spark的改進協同過濾算法研究[J]. 計算機應用與軟件, 2017(5):247-254.
[16] 周顯春,肖衡. Spark框架下聚類模型在網絡流量異常檢測中的應用[J]. 網絡安全技術與應用, 2017(5):62-63.
[17] 李勇. 指尖上的美味——手機里不可或缺的美食APP推薦[J].? 電腦知識與技術:經驗技巧,2017(5):5-15.
[18] 徐怡雯,鮑懿喜. 基于用戶社交特征的美食類APP用戶體驗設計研究[J]. 設計, 2017(1):20-21.
[19] 梁永林,高彩霞,張云展,等. 應用中醫體質量表對大學生三種體質相關性的研究[C]. 國際體質醫學論壇暨中華中醫藥學會中醫體質分會全國中醫體質學術年會,2013.
[20] 漆亞學,梁永林,高彩霞,等. 應用中醫體質量表對大學生兼夾體質情況的研究[J]. 甘肅中醫學院學報,2013,30(2):92-95.
(責任編輯:黃 ?。?/p>