林澤聰+王玉山+甘嘉穎+柯懿倍
(廣東外語外貿大學 信息學院, 廣州 510006)
[摘 要] 保持個人的膳食結構合理是保證個人健康的關鍵因素之一。因此一款個性化的推薦系統顯得非常必要。為此研究、設計了一個個性化食材推薦系統,該系統采用基于用戶的協同過濾算法,針對用戶的飲食習慣進行推薦。
[關鍵詞] 協同過濾算法;推薦系統;飲食推薦
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2017. 07. 071
[中圖分類號] TP311 [文獻標識碼] A [文章編號] 1673 - 0194(2017)07- 0150- 03
1 引 言
1.1 項目背景
人們獲取信息的互聯網“信息過載”問題越來越嚴重。不得不花大量時間閱讀和分析這些信息。為此個性化推薦系統應運而生,它是對用戶的歷史數據進行挖掘,建立用戶關于興趣的數學模型,并預測用戶將來的行為和喜好、給用戶推薦可能需要的服務。
美食與健康是現代社會的熱點問題之一,能隨時找出自己需要的食材是用戶的需求之一。
1.2 個性化推薦發展國內外現狀
個性化推薦系統1990年代被提出。準確,高效的推薦算法不僅給用戶提供較好的個性化服務,還可以找到用戶潛在的消費傾向。但大多數關注的是音樂 [1 ]、微博 [2 ]等應用。針對食材的個性化推薦的研究相對較少。EuiHH 在文獻[3 ]中提出了一個基于特征的個性化推薦算法、能根據歷史數據向用戶推薦商品。Reid A在文獻 [4 ]中對基于信任的推薦系統進行了研究。
2 協同過濾推薦算法概述
協同過濾推薦算法分為兩類:基于用戶的協同過濾算法和基于物品的協同過濾算法。還有基于模型的協同過濾,包括Aspect Model,pLSA,LDA,聚類,SVD,Matrix Factorization等,這種方法訓練過程比較長,但是訓練完成后,推薦過程比較快。本文將采用協同過濾技術,與飲食數據相結合,設計并實現一種食材推薦算法。
3 根據飲食習慣的食材推薦
收集用戶的歷史飲食數據,通過協同過濾算法篩選出用戶最喜歡或偏好的幾種食材進行推薦。這里采用基于用戶的協同過濾算法。該算法是通過用戶的歷史數據發現用戶對商品喜歡的內容,并對這些喜好進行度量和打分。根據不同用戶對相同商品或內容的態度和偏好程度計算用戶之間的關系。在有相同喜好的用戶間進行商品推薦。將該算法分為3個步驟。
第一步,收集所有用戶的歷史飲食數據。用戶在不同時間段想吃的食材不同,因此我們可以規定數據收集的時間段,收集5個用戶一個月的飲食數據,統計如表1所示。
第二步,計算用戶距離。方法有歐幾里得距離和皮爾遜相關系數等。皮爾遜相關系數計算雖然復雜,但對于評分數據不規范或由于用戶使用頻率較少,次數相差過大時,能夠給出更好的結果。采用皮爾遜相關系數公式(見公式1)。該計算結果是一個在-1和1之間的系數。該系數數值越大,兩個用戶的相關性就越高。系數為負時,表明用戶間無相關。
通過計算5個用戶對五種食材的使用次數的相關度系數,可以看到,用戶A&B,C&D,C&E和D&E之間相似度較高,如表1所示。
第三步,選取k個近鄰,加權并篩選和推薦。
假設我們需要對用戶C推薦食材,先對相似度進行排序,發現用戶C和D與E的相似度最高?;蛘哒f這三個用戶是一個群體,擁有相同的偏好。因此可以給C推薦D和E食用過的食材。提取用戶D與E食用過的所有食材次數,并用皮爾遜相似度系數進行加權計算,得到一個推薦系數表如表3所示。
用戶可能不會每天都記錄自己的飲食情況、導致每日的推薦結果都相同。為了得到推薦結果的多樣性,采用輪盤賭選擇法。把計算得到的結果用餅狀圖表示(見圖1),要做的就是旋轉這個輪子,直到輪盤停止,看指針停止在哪一塊上,就選中哪個食材。
假設要推薦3種食材,就將輪盤旋轉三次。每次選中的食材存表后從輪盤中剔除,為了健康把與該次選中相克的食材剔除,把選中食材相生的食材加權提高,提升被選中的概率,重新生成輪盤。
4 系統測試
設計了一款應用軟件,已在360軟件、百度軟件、應用寶等應用市場上架。采集到了近百名用戶在30天內的飲食數據情況。將前20天作為數據集,后10天作為驗證集。這里測試根據習慣推薦的準確度,以用戶Missyezzy的午餐情況為例,首先統計百名用戶20天的飲食數據情況得到數據如表4所示。由于數據量的原因,表4中只列舉出部分用戶的若干個食材。
接下來計算皮爾遜相似度,這里只列舉與用戶Missyezzy相關的若干個用戶的系數,如表5所示。
我們將k值設為3,提取出與Missyezzy最相近的三個用戶,并把該三個用戶食用過的所有食材進行加權計算,得到表如表6所示。
接下來采用輪盤法,從中隨機選取3種食材,并進行10次重復生成,以模擬后10天的飲食情況,如表7所示。
通過統計Missyezzy用戶后10天的實際飲食數據,和推薦得到的10天的飲食數據,生成兩個n維向量,通過比較兩個的余弦相似性來判斷推薦系統的好壞。在這里以Missyezzy為例得到兩個向量,一個是實際飲食數據得到的向量,一個是上表得到的向量,如表8所示。
在評估推薦結果的準確性上,采用余弦相似度,又稱余弦相似性。是通過計算兩個向量的夾角余弦值來評估他們的相似度。余弦值的范圍在[-1,1]之間,值越趨近于1,代表兩個向量的方向越趨近于0,他們的方向更加一致。相應的相似度也越高。公式如下:
將上述算法重復若干次以去除偶然性,然后統計了十名用戶的余弦相似度的平均值得到表9,推薦結果的準確度達80%。
本文根據用戶歷史飲食數據,采用基于用戶的協同過濾算法,找出與用戶有相似愛好的用戶數據、生成推薦食材。采用輪盤推薦法,使推薦系統推薦準確、多樣。采用余弦相似度對本系統做出了驗證。該系統仍有不足之處,如數據量較大時,算法的效率較低、尋找相似用戶時容易陷入局部尋找等。
主要參考文獻
[1]Lee SK,Cho YH,Kim SH. Collaborative Filtering with Ordinal Scale-Based Implicit Ratings for Mobile Music Recommendations[J]. Information Sciences, 2010,180(11):2142-2155.
[2]Chiu PH,Kao GYM,Lo CC. Personalized Blog Content Recomender System for Mobile Phone Users[J]. Intl Journal of Human- Computer Studies,2010,68(8):496-507.
[3]Han E H S,Karypis G. Feature-Based Recommendation System[C]∥Proceedings of the 14th ACM International Conference on Information and Knowledge Management,2005:446-452.
[4]Andersen R,Borgs C,Chayes J T, et al. Trust-Based Recommendation Systems: an Axionmatic Approach[C]∥Proceedings of the 17th International Conference on WWW.ACM,2008:199-208.
[收稿日期]2017-03-09
[基金項目]2016年廣東團省委和科技廳項目(pdjh2016b0168)。